خواندن ، نوشتن و "ریاضیات" - به ما گفته می شود که سه گانه افراد دارای حداقل تحصیلات است. اما چرا این سه مورد ، بر سایر مهارتهای مفید زندگی ، مانند پزشکی اولیه ، منطق یا امور مالی ، تمرکز دارند؟ این آزمایش فکری در پروژه ای از سری کتاب ها برای معرفی علوم رایانه به نوزادان به اوج خود رسید ، اما در مورد آن بعداً بیشتر توضیح داده شد. قبل از ظهور چاپخانه ، خواندن لزوماً یک شرط تحصیلکرده در غرب نبود. لفاظی شفاهی ، دانستن زبان لاتین و مطالعات کتاب مقدس نشانه های یک جنتلمن بود. در بیشتر تمدن های بشری ، حتی افراد با سواد نیز به ندرت می نویسند. نوشتن ترکیب در هاروارد تا سال 1873 در واکنش به فرهنگ نامه نویسی که با حمل و نقل سریع (به عنوان مثال پونی اکسپرس) تحریک می شد ، لازم نبود. آموزش گسترده ریاضی در واکنش به انقلاب صنعتی رشد کرد - تولید انبوه نیاز به نیروی کار با مهارت های اولیه ریاضی دارد. همچنین ، مبادا فراموش کنیم که تحصیلات متوسطه تا همین اواخر برای زنان یا اقلیتها در ایالات متحده ضروری تلقی نمی شد (و در برخی جهات ، به اندازه کافی در نظر گرفته نشده بود).
از آنجا که تاریخ تأکید آموزشی را انعطاف پذیر نشان داده است ، اگر بخواهیم از ابتدا برنامه درسی برای دوران مدرن طراحی کنیم؟ شامل چه مواردی می شویم؟ آیا نیاز به آموزش حساب داریم - یعنی توانایی جمع ، تفریق ، ضرب و تقسیم اعداد؟ این کار مکانیکی به مدت 50 سال در اختیار ماشین حساب ها بوده است. قابلیت های محاسبه پیشرفته تر مدتهاست که بیشتر با برنامه نویسی رایانه مشترک است تا حساب. در مورد خواندن ، خوانندگان صفحه نمایش چند دهه قدمت دارند. حتی متن روی کاغذ قابل اسکن و بازخوانی است - در صورت تمایل با لهجه انگلیسی. مطمئناً ما باید نوشتن را آموزش دهیم ، درست است؟ شاید ، اما کاملاً در توان رایانه های مدرن است که دیکته های شفاهی را تصحیح کنند ، غلط های املایی را تصحیح کنند و پیشنهادات مناسب برای ترکیب را ارائه دهند. برنامه هایی مانند Siri نشان می دهند که می توانید سیستم های کامپیوتری ، از جمله ارسال پیام های متنی را بدون نوشتن کنترل کنید.
من به طور جدی پیشنهاد نمی کنم که از خواندن ، نوشتن یا حساب صرف نظر کنیم. اما من به طور جدی پیشنهاد می کنم که همه ما مفاهیم اولیه دستگاه هایی را که به طور منطقی می توانند جایگزین سه R شوند درک کنیم. در آینده هیچ تردیدی ندارم که سواد کامپیوتری از الزامات طبقه تحصیل کرده خواهد بود. من نه تنها معتقدم که ما باید انتقال را از هم اکنون آغاز کنیم ، بلکه بیشتر پیش می روم و می گویم که این آموزش باید از بدو تولد آغاز شود. مطالعات منطق کامپیوتر رایج ترین انتقادات به دو صورت انجام شده است: "همه بچه ها نیازی به دانستن رایانه ندارند" و "شاید بداند ، اما شما خیلی جوان هستید". اینها نکات منطقی برای بیان است ، بنابراین پاسخهای من در اینجا است.
رایانه ها ابزارهایی مانند قلم ، کاغذ و چاپخانه هستند. چه با ماشین تحریر یا لوح سفالی بنویسید ، عمل ترکیب یک فرایند ذهنی است. همین قوانین در مورد رایانه ها نیز صدق می کند. این که آیا از VCR ، ساعت هوشمند یا لپ تاپ خود استفاده می کنید ، از رایانه استفاده می کنید.رایانه ها (درامرول لطفا ...) ماشین های محاسباتی هستند. آنها حتی نیازی به لوازم الکترونیکی ندارند و در واقع اولین ماشین های محاسباتی قبل از کشف الکترون ساخته شده اند.
رایانه های آینده ممکن است فوتونی یا شیمیایی یا کوانتومی باشند. اما یک چیز رایانه ها از بین رفته است. ما به جمعیتی نیاز داریم که درک اولیه ای از نحوه عملکرد ماشین هایی که در حال خوردن جهان هستند داشته باشند. اگر نه ، کسانی که آنها را درک می کنند ممکن است استاد تکنوکرات بقیه شوند.
با فرض اینکه کامپیوترها حتی ارزش یادگیری دارند ، چرا اینقدر جوان شروع می شود؟
آیا نوزادان قادر به درک منطق رایانه هستند؟ خوب ، نه و بله. نه ، به مفهوم بکارگیری منطق پیچیده بولی یا درک در سطح دانشگاهی. بله ، به این معنا که مغز نوزادان دستگاه های تطبیق الگو هستند و معرفی آنها به مجموعه ای از الگوهای ساده به شکل گیری ذهن آنها در آینده کمک می کند. این بیش از تفکر آرزوی والدین مشتاق است که باعث ایجاد کتاب های کودک پر از حروف ABC و 123 می شود. این نمادها سنگ بنای خواندن/نوشتن و ریاضیات هستند. مطمئناً نوزادان نمی توانند آنچه را که می بینند بلافاصله به کار ببرند ، اما درک را در مسیر آسان تر می کند. این هدف منطق بولین برای نوزادان است: آشنایی با اصطلاحات نوزادان و درک نحوه استفاده از آنها ، به عنوان مثال ، عملیات بول و AND ، OR ، و NOT. شمارش در دودویی برای کودکان نوپا و عملکردهای Tykes از این مفهوم برای کودکان بزرگتر پیروی می کند.
منطق بولی برای نوزادان ، کتابی پارچه ایبا این باور که سواد رایانه ای باید با سواد و ریاضیات سنتی همتراز باشد ، برای شروع از هر نقطه ای غیر از آغاز ، بی اعتنا خواهیم بود. کودکانی که وارد مدرسه ابتدایی می شوند معمولاً در معرض ضرب المثل زیادی با کلمات و اعداد قرار می گیرند. آنها باید مقدمه ای مشابه منطق کامپیوترها داشته باشند. نوزادان برای من تا حدودی خودخواهانه ترین معنا را داشتند ، زیرا من به تازگی با یک فرزند (و به زودی یک ثانیه) پدر شده ام. من به او و پیشرفت او اهمیت می دهم و به عنوان یک دانشمند کامپیوتر می توانم خودم این مفاهیم را به او بیاموزم. چگونه انجامش بدهیم. با این حال ، اکثر بزرگسالان در صنعت کامپیوتر نیستند. ما به مکانیزمی نیاز داریم که به خوبی به بزرگسالان آموزش دهد تا به نوبه خود به فرزندان خود آموزش دهد. بنابراین جنبه دیگر پروژه شامل آموزش این مفاهیم اولیه رایانه (منطق بولی ، باینری و توابع) به بزرگسالان غیر متخصص است.
علوم کامپیوتر برای بزرگسالانحتی اگر این اولین پروژه موفق نباشد ، من متقاعد شده ام که در نسل آینده کودکان باید در یک سطح اساسی از نحوه عملکرد این ماشین های محاسباتی. مارک آندرسن یکبار گفت ،
امیدواریم بتوانیم جمعیت را افزایش دهیماز گروه اول.
بینایی رایانه می تواند انقلابی در جهان ایجاد کند. تا کنون ، بینایی رایانه ای به انسان کمک کرده است تا مشکلات زیادی را حل کند ، مانند کاهش ترافیک و نظارت بر سلامت محیط.
تصاویر یک راکون جذاب ، لنی ، با حاشیه نویسی جعبه. (تصویر Roboflow.)از لحاظ تاریخی ، برای انجام بینایی کامپیوتری ، به یک پیش زمینه فنی واقعا قوی نیاز داشتید. پس از خواندن این پست ، باید درک خوبی از بینایی کامپیوتر بدون پیش زمینه فنی قوی داشته باشید و باید مراحل لازم برای حل مشکل بینایی رایانه را بدانید.
وقتی می خواهید از یک لیوان آب یک نوشیدنی بخورید ، چندین موارد مرتبط با بینایی اتفاق می افتد:
بینایی کامپیوتر یک چیز مشابه است ... اما برای رایانه ها!
مشکلات بینایی کامپیوتر در چند سطل مختلف قرار می گیرد. این مهم است زیرا مشکلات مختلف با روش های مختلف حل می شوند.
شش نوع مشکل بینایی رایانه وجود دارد که چهار مورد از آنها در تصویر بالا نشان داده شده است.
اگر می خواهید رایانه شما به شما در حل مشکلات مربوط به داده ها کمک کند ، معمولاً یک سری مراحل را دنبال می کنید. همین امر در مورد مشکلات بینایی رایانه صادق است ، مگر اینکه مراحل کمی متفاوت به نظر برسند.
یک فرآیند هفت مرحله ای برای حل مشکلات بینایی رایانه. (تصویر Roboflow.)ما هر یک از این مراحل را طی می کنیم ، با این هدف که در پایان فرآیند مراحل مورد نیاز برای حل مشکل بینایی کامپیوتر و همچنین یک مشکل خوب را بدانید. نمای کلی رایانه.
اگر هدف شما این است که رایانه خود را بشناسید تا بفهمد سگ ها چگونه به نظر می رسند ، پس کامپیوتر به شما نیاز دارد که به او بگویید کدام پیکسل ها مربوط به یک سگ است! اینجاست که تصویر خود را برچسب گذاری یا حاشیه نویسی می کنید. در زیر تصویری از مجموعه داده مادون قرمز حرارتی است که به طور فعال در حال حاشیه نویسی است. یک جعبه محدود کننده در اطراف فرد کشیده شده و یک جعبه محدود کننده جداگانه در اطراف سگ کشیده شده است. این کار توسط یک انسان انجام می شود. (از آنجا که این تصویر دارای بیش از یک شیء است و از کادرهای محدود کننده استفاده می کند ، می دانیم که این تصویر برای یک کار تشخیص شی استفاده می شود!) این کادرهای محدود کننده از طریق ابزاری به نام Microsoft VoTT یا ابزار برچسب گذاری ویژوال شی اضافه می شوند. < /p> حاشیه نویسی تصویر با Microsoft VoTT ؛ ما یک آغازگر در مورد نحوه استفاده از VoTT نوشتیم. (تصویر Roboflow.)
این تنها ابزار نیست - شما می توانید از ابزارهای دیگر مانند CVAT (Computer Vision Annotation Tool) ، برنامه وب Roboflow یا خود API بارگذاری ما استفاده کنید.
هنگامی که داده ها را جمع آوری کردید و ابزار خود را برای برچسب گذاری انتخاب کردید ، شروع به برچسب زدن می کنید! شما باید سعی کنید تا آنجا که می توانید تصاویر را برچسب گذاری کنید. اگر تعداد تصاویر شما بیش از آن چیزی است که می توانید برچسب گذاری کنید ، در اینجا چند استراتژی یادگیری فعال برای برچسب زدن موثرتر تصاویر آمده است.
همچنین می توانید کاری به نام افزایش تصویر انجام دهید. این کمی متفاوت است - این فقط بر تصاویری که شما برای آموزش مدل خود استفاده می کنید (نحوه مشاهده کامپیوتر را آموزش دهید) تأثیر می گذارد. در یک جمله ، بزرگنمایی تصویر تغییرات کوچکی در تصاویر شما ایجاد می کند به طوری که حجم نمونه شما (تعداد تصاویر) افزایش می یابد و به احتمال زیاد تصاویر شما منعکس کننده شرایط دنیای واقعی هستند. به عنوان مثال ، می توانید جهت تصویر خود را به طور تصادفی تغییر دهید. بگویید با تلفن خود از یک کامیون عکس می گیرید. اگر رایانه آن تصویر دقیق را ببیند ، ممکن است کامیون را تشخیص دهد. اگر رایانه تصویری مشابه از یک کامیون را مشاهده کرد که با دست کسی چند درجه چرخانده شده است ، ممکن است رایانه تشخیص کامیون را دشوارتر کند. افزودن مراحل تقویت ، حجم نمونه شما را با ایجاد کپی از تصاویر اصلی و سپس کمی مزاحمت برای آنها افزایش می دهد تا مدل شما دیدگاه های دیگری را نیز ببیند.
روشهای مختلفی وجود دارد که ما می توانیم میزان رایانه ما را به خوبی تشخیص دهیم.
مدلهای مختلفی وجود دارد که می توانند برای مشکلات تصویر استفاده شود ، اما رایج ترین (و معمولاً بهترین عملکرد!) شبکه عصبی پیچشی است. اگر از یک شبکه عصبی متغیر استفاده می کنید ، بدانید که بسیاری از قضاوت ها در معماری مدل وارد شده اند که بر قدرت دیدن رایانه شما تأثیر می گذارد! خوشبختانه برای ما ، تعداد زیادی معماری مدل از پیش تعیین شده وجود دارد که برای مشکلات مختلف بینایی رایانه بسیار خوب عمل می کند.
ممکن است بخواهید مدل خود را در برنامه ای قرار دهید ، بنابراین رایانه شما می تواند پیش بینی ها را در زمان واقعی مستقیماً از تلفن شما ایجاد کند! ممکن است بخواهید به برنامه ای در رایانه خود ، یا به AWS ، یا چیزی داخلی در تیم خود بپردازید. ما قبلاً به طور مفصل در مورد یکی از روشهای استقرار مدل بینایی رایانه در اینجا نوشتیم. اگر حداقل کمی با Python و API ها آشنا هستید ، این مستندات در مورد استنباط در بینایی رایانه می تواند مفید باشد!
صرف نظر از مراحل بعدی شما ، کار انجام نمی شود اینجا کاملاً تمام نمی شود! کاملاً مستند است که مدلهایی که به خوبی روی تصاویری که به آن می دهید کار می کنند ، ممکن است با گذشت زمان بدتر کار کنند. (ما برخی از تحقیقات گوگل در مورد این مشکل عملکرد مدل را مطالعه کردیم و نکات مهم ما را شرح دادیم.) با این حال ، ما امیدواریم که شما به این نتیجه رسیده اید که به هدفی که در ابتدای این پست نوشتیم رسیده اید:
از اینکه تا اینجا با ما همراه بودید متشکریم! هرگونه سوال یا منابع اضافی که در نظرات دارید به ما اطلاع دهید - و اگر چیزی در ارتباط با بینایی رایانه ایجاد می کنید ، خوشحال می شویم ببینیم شما چه کار می کنید!
در ابتدا در https: //blog.roboflow منتشر شده است .com در 23 نوامبر 2020.
یکی از بزرگترین نقایص دانش که ما در بین مهندسان خودآموخته و فارغ التحصیلان bootcamp مشاهده می کنیم ، در زمینه معماری کامپیوتر است. در حالی که اکثر مهندسان می دانند که باید الگوریتم ها و ساختار داده ها را بیاموزند ، بسیاری از شنیدن اینکه درک چیزی در حد معماری رایانه می تواند بسیار ارزشمند باشد شگفت زده می شوند.
خوشبختانه بسیاری از موارد عالی وجود دارد. منابعی برای یادگیری در مورد کام آرش وجود دارد و با کمی فداکاری و راهنمایی می توانید مقدار زیادی از آنچه را که دانستن ارزشمند است به خودتان آموزش دهید. امیدوارم این مقاله شما را در مسیر درست آغاز کند.
ممکن است بدون درک سخت افزاری که در نهایت کد شخص بر روی آن اجرا می شود ، یک توسعه دهنده وب موفق باشید. متأسفانه ، غفلت از معماری رایانه ، نوع مهندسی را که یک مهندس می تواند انجام دهد ، به سه دلیل محدود می کند: به به سادگی لایه های غیرمستقیم کمتری وجود دارد که در غیر این صورت نادیده گرفتن توسعه دهنده از سخت افزار را بهانه می کند.
ثانیاً ، نوشتن نرم افزار سریع بدون درک نحوه دسترسی به داده ها و اجرای کد غیرممکن است. این امر به ویژه در حال حاضر اهمیت دارد که دسترسی به حافظه اصلی صدها برابر کندتر از اجرای یک دستورالعمل است ... بی توجهی به سلسله مراتب حافظه به احتمال زیاد علت مشکلات عملکرد است ، همانطور که مایک اکتون در صحبت cppcon خود به طور قانع کننده استدلال کرد.
ثالثاً ، همه چکیده های بین سخت افزار و زبانهای سطح بالا نشتی دارند. بسیاری از مفاهیم در برنامه نویسی سطح بالا از آنالوگهای برنامه نویسی سطح پایین نشأت می گیرد که به نوبه خود مفاهیم سطح پایین را نیز به راحتی حل می کند. هیچکدام از این انتزاعات پاک نیستند. اکثر آنها به عنوان راحتی ایجاد شده اند ، نه پارادایم های کاملاً جدیدی که به برنامه نویسان اجازه می دهد در مورد موارد زیر فکر نکنند. این درست است که آیا برنامه نویسان سطح بالا آن را درک کرده اند یا نه ، بنابراین نادیده گرفتن مبانی می تواند هم گران باشد و هم تعجب آور. هنگامی که ما در مورد "یک عدد صحیح" ، یا متغیر "تخصیص" صحبت می کنیم ، یا از طریق مرجع یا مقدار عبور می کنیم ، یا یک مقدار را روی "پشته" قرار می دهیم ، اینها مفاهیمی هستند که دارای میراث و مفاهیم سخت افزاری هستند. مهندسانی که این مبانی را بیشتر درک می کنند ، کار بهتری نسبت به کسانی که نمی دانند ، انجام می دهند.
در اینجا فرض می کنیم که انگیزه شما برای یادگیری معماری کامپیوتر این است که یک مهندس نرم افزار م effectiveثرتر شوید. به اگر هدف شما مهندس کامپیوتر شدن است (یعنی حل مشکلات با طراحی سخت افزار) ، این راهنما کافی نخواهد بود ، و ما اکیداً توصیه می کنیم که یک مسیر معمول مهندسی کامپیوتر را دنبال کنید.
اگر از پیشنهادات ما پیروی کنید. ، شما در نهایت باید به همان سطح از معماری کامپیوتر فارغ التحصیل از یک برنامه CS برتر در مقطع کارشناسی برسید. این امر نه تنها شما را به عنوان یک مهندس نرم افزار سطح بالا م effectiveثرتر می کند ، بلکه در صورت تمایل به مهندسی نرم افزارهای سطح پایین تر نیز مجهز می شوید.
هر رایانه دوره یا منبع معماری اهداف متفاوتی خواهد داشت. از دیدگاه ما ، اطمینان از این مطالب به این معنی است که می توانید به این س questionsالات به طور کامل پاسخ دهید:
اگر سادگی یک دوره آموزشی خوب را ترجیح می دهید ، ما 61C "ایده های عالی در معماری رایانه" برکلی را توصیه می کنیم. این دوره بین مدلهای ساده شده مورد نیاز برای شروع به فکر کردن در مورد معماری کامپیوتر و برخی از پیچیدگی های واقعی معماری مدرن ، تعادل مناسبی برقرار می کند.
یادداشت ها و آزمایشگاه های سخنرانی به صورت آنلاین در دسترس هستند ، و سخنرانی های گذشته در YouTube هستند. به متن همراه پیشنهادی سازمان و طراحی رایانه ای پترسون و هنسی است که هم عالی است و هم معمولاً مورد استفاده قرار می گیرد. همه مطالب عالی است ؛ هیچ سخنرانی ای وجود ندارد که ما پیشنهاد کنیم آن را کنار بگذارید. سیستم های محاسباتی ، که با نام "Nand2Tetris" نیز شناخته می شود ، کتابی بلندپروازانه است که سعی می کند درک منسجمی از نحوه عملکرد همه چیز در رایانه از منطق بولی تا برنامه های کوچک به شما ارائه دهد. هر فصل شامل ساختن قطعه کوچکی از سیستم کلی ، از نوشتن دروازه های منطقی ابتدایی در HDL ، از طریق CPU و اسمبلر ، تا برنامه ای به اندازه بازی Tetris است.
این نیمه اول این کتاب و همه پروژه ها به صورت رایگان از وب سایت Nand2Tetris موجود است. همچنین به عنوان یک دوره Coursera همراه با ویدئوهای موجود در دسترس است.
توصیه ما این است که شش فصل اول کتاب را بخوانید و پروژه ها را (تا شامل مونتاژ کننده و شامل) کامل کنید. انجام این کار درک شما را از رابطه بین معماری ماشین و نرم افزاری که بر روی آن کار می کند ، تقویت می کند.
به نظر ما نیمه دوم کتاب به اندازه کتاب اول قانع کننده نیست. حتی در نیمه اول ، Nand2Tetris با مبادله عمق به انسجام خود می رسد. به طور خاص ، دو مفهوم بسیار مهم در معماری رایانه ای مدرن خط لوله و سلسله مراتب حافظه هستند ، اما هر دو بیشتر در متن وجود ندارند. پیشنهاد می کنیم به جای ادامه فرایند مونتاژ به 61 درجه روی بیاورید.
برای کسانی که 61C را بسیار آسان می دانند یا مایلند در برخی از محتواها عمیق تر بکشند ، CS 162 را پیشنهاد می کنیم ، یک پیشرفته تر. دوره معماری کامپیوتر نیز در برکلی. CS 162 همچنین بردارها و پردازنده های گرافیکی را عمیق تر پوشش می دهد ، بنابراین توصیه می کنیم اگر در زمینه توسعه بسیار امیدوار کننده هستید ، از طریق آن سخنرانی ها کار کنید.
برای کسانی که خواهان یک راهپیمایی ملایم تر و معمولی تر تا معماری رایانه هستند ، یکی از کتابهایی که معمولاً توصیه می شود "کد چارلز پتزولد" است. ما فکر می کنیم خوب است. ما فقط آن را پیشنهاد می کنیم اگر به دنبال برخی از آنها هستیدخواندن سبک تر یا احساس می کنید به زمان نیاز دارید تا بتوانید با ایده مطالعه کام کام آشنا شوید. Nand2Tetris بسیار قابل دسترسی است بنابراین ما عموماً پیشنهاد می کنیم که مستقیماً به آنجا بروید.
در انتهای دیگر طیف ، مقاله دان لوئو در CPU ها از دهه 80 چه جدید است و اولریش درپرر آنچه هر برنامه نویس باید درباره حافظه بداند هر دو شگفت انگیز هستند هر دوی آنها مفاهیم فوق را تصور می کنند ، اما به طور کلی قابل دسترسی هستند و درک شما از معماری رایانه را از دو منظر متفاوت اما متمرکز بر تمرین کنندگان پیش می برند.
در نهایت ، ما یک مسیر مونتاژ MIPS را به exerciseism.io اضافه کرده ایم. برای سهولت تمرین نوشتن مجمع برای مردم. انجام این کار یک راه ارزشمند برای کشف رابط سخت افزار/نرم افزار است و یادگیری مجموعه MIPS به طور خاص یک یا دو هفته از محتوای 61C را تشکیل می دهد.
به غواصی عمیق تر علاقه دارید؟ بردفیلد هر 2-3 ماه یک دوره معماری کامپیوتر و رابط سخت افزار/نرم افزار را اجرا می کند.