به خود علوم کامپیوتر را آموزش دهید

ساخت وبلاگ

توجه: این راهنما در ماه مه 2020 به طور گسترده به روز شد. برای نسخه قبلی ، به اینجا مراجعه کنید.

اگر یک مهندس خودآموز یا درجه Bootcamp هستید ، خودتان را مدیون یادگیری علوم کامپیوتر هستید. خوشبختانه ، شما می توانید بدون سرمایه گذاری سالها و ثروت کمی در یک برنامه درجه ، به خود آموزش CS در سطح جهانی بدهید.

منابع زیادی در آنجا وجود دارد ، اما برخی از آنها بهتر از سایرین هستند. شما نیازی به لیست "200+ دوره آنلاین رایگان" ندارید. شما به این س questions الات نیاز دارید:

  • کدام موضوعات را باید یاد بگیرید و چرا؟
  • بهترین سری سخنرانی های کتاب یا ویدیویی برای هر موضوع چیست؟

این راهنما تلاش ما برای پاسخ قطعی به این سؤالات است.

با تشکر از داوطلبان زیر برای ترجمه ها:

  • (چینی) توسط وو ژنگکه (پرتغال) توسط Clemens Schrage (روسی) توسط Ilja Moisejevs و Stepan Rakitin (ویتنامی) توسط Dat Hoang (اسپانیایی) توسط جیمز آرچولد (کره ای) توسط Minjeong Kim (ژاپنی) توسط رالفف آلو (Turkish) توسط Tolga TolgaBarış Pınar (فارسی) توسط Faran Taghavi (ایتالیایی) توسط Fabio Cicerchia (فرانسوی) توسط Aurore Amrit (اندونزیایی) توسط Ananda Umamil (عربی) توسط Ounissi Zakaria (Ukranian) توسط Oleksandr Babieiev

با استفاده از کتاب درسی پیشنهادی یا سری سخنرانی های ویدیویی ، هر 9 موضوع زیر را تقریباً در دستور ارائه شده مطالعه کنید ، اما در حالت ایده آل هر دو. هدف از 100-200 ساعت مطالعه هر موضوع ، سپس در طول حرفه خود مجدداً مورد علاقه های خود قرار دهید.

موضوعچرا مطالعه می کنیم؟کتابفیلم های
برنامه نويسيکسی نباشید که "هرگز کاملاً درک نکرده است" چیزی مانند بازگشت.ساختار و تفسیر برنامه های رایانه ایبرکلی CS 61A برایان هاروی
معماری کامپیوتراگر یک مدل ذهنی محکم از نحوه عملکرد یک کامپیوتر ندارید ، تمام انتزاع های سطح بالاتر شما شکننده خواهند بود.سیستم های رایانه ای: دیدگاه یک برنامه نویسبرکلی CS 61c
الگوریتم ها و ساختار داده هااگر نمی دانید چگونه از ساختارهای داده همه جا مانند پشته ها ، صف ها ، درختان و نمودارها استفاده کنید ، قادر به حل مشکلات چالش برانگیز نخواهید بود.کتابچه راهنمای طراحی الگوریتمسخنرانی های استیون اسکینا
ریاضی برای CSCS اساساً یک شاخه فراری از ریاضیات کاربردی است ، بنابراین یادگیری ریاضی یک مزیت رقابتی به شما می دهد.ریاضیات برای علوم کامپیوترMIT 6. 042J تام لایتون
سیستم های عاملبیشتر کدی که می نویسید توسط یک سیستم عامل اجرا می شود ، بنابراین باید بدانید که چگونه این افراد در تعامل هستند.سیستم عامل ها: سه قطعه آسانبرکلی CS 162
شبکه رایانهاینترنت یک معامله بزرگ بود: درک کنید که چگونه برای باز کردن پتانسیل کامل خود کار می کند.شبکه های کامپیوتری: رویکردی از بالا به پاییناستانفورد CS 144
پایگاه های دادهداده ها در قلب مهم ترین برنامه ها قرار دارند، اما تعداد کمی از آنها می دانند که سیستم های پایگاه داده واقعا چگونه کار می کنند.خواندن در سیستم های پایگاه دادهJoe Hellerstein’s Berkeley CS 186
زبان ها و کامپایلرهااگر درک کنید که زبان ها و کامپایلرها چگونه کار می کنند، کد بهتری می نویسید و زبان های جدید را راحت تر یاد می گیرید.مترجمان کاردستیدوره آموزشی الکس آیکن در edX
سیستم های توزیع شدهاین روزها اکثر سیستم ها سیستم های توزیع شده هستند.طراحی برنامه های کاربردی داده فشرده توسط مارتین کلپمنMIT 6. 824

هنوز خیلی زیاده؟

اگر ایده خودآموزی 9 مبحث در طول چندین سال بسیار زیاد به نظر می رسد، پیشنهاد می کنیم فقط بر روی دو کتاب تمرکز کنید: سیستم های کامپیوتری: دیدگاه برنامه نویس و طراحی برنامه های کاربردی داده فشرده. در تجربه ما، این دو کتاب بازده فوق‌العاده بالایی در زمان سرمایه‌گذاری شده ارائه می‌کنند، به ویژه برای مهندسان خودآموخته و فارغ‌التحصیلان بوت‌کمپ که بر روی برنامه‌های کاربردی شبکه‌ای کار می‌کنند. آنها همچنین ممکن است به عنوان یک "داروی دروازه" برای سایر موضوعات و منابع ذکر شده در بالا عمل کنند.

چرا علم کامپیوتر یاد بگیریم؟

دو نوع مهندس نرم‌افزار وجود دارد: کسانی که علم کامپیوتر را به‌خوبی می‌فهمند تا کارهای چالش‌برانگیز و خلاقانه انجام دهند، و آن‌هایی که به دلیل آشنایی با چند ابزار سطح بالا، از پس آن بر می‌آیند.

هر دوی آنها خود را مهندس نرم افزار می نامند و هر دو تمایل دارند در ابتدای کار خود حقوق های مشابهی دریافت کنند. اما مهندسان نوع 1 در طول زمان به سمت کارهای رضایت بخش تر و با دستمزد بهتر پیشرفت می کنند، خواه این کار تجاری ارزشمند باشد یا پروژه های منبع باز، رهبری فنی یا مشارکت های فردی با کیفیت بالا.

مهندسان نوع 1 راه هایی برای یادگیری عمیق علوم کامپیوتر پیدا می کنند، چه از طریق روش های معمولی و چه با یادگیری بی وقفه در طول حرفه خود. مهندسان نوع 2 معمولاً در سطح می مانند و ابزارها و فن آوری های خاص را به جای پایه های اساسی خود یاد می گیرند و فقط زمانی مهارت های جدید را بدست می آورند که باد مد فنی تغییر کند.

در حال حاضر ، تعداد افرادی که وارد صنعت می شوند به سرعت در حال افزایش است ، در حالی که تعداد درجه های CS نسبتاً ایستا است. این بیش از حد مهندسین نوع 2 شروع به کاهش فرصت های شغلی خود کرده و آنها را از کارآزمایی بیشتر صنعت دور نگه می دارند. این که آیا شما در تلاش برای تبدیل شدن به یک مهندس نوع 1 هستید یا به دنبال امنیت شغلی بیشتر هستید ، یادگیری علوم کامپیوتر تنها مسیر قابل اعتماد است.

راهنماهای موضوع

برنامه نويسي

بیشتر برنامه های کارشناسی CS با "معرفی" برای برنامه نویسی رایانه شروع می شوند. بهترین نسخه های این دوره ها نه تنها به تازه کار ، بلکه برای کسانی که مفاهیم مفید و مدل های برنامه نویسی را از دست داده اند ، در حالی که ابتدا یاد می گیرند کدگذاری می کنند ، تهیه می کنند.

توصیه استاندارد ما برای این محتوا ساختار کلاسیک و تفسیر برنامه های رایانه ای است که به صورت آنلاین و به صورت رایگان به عنوان یک کتاب و به عنوان مجموعه ای از سخنرانی های ویدیویی MIT در دسترس است. در حالی که این سخنرانی ها عالی هستند ، پیشنهاد ویدیوی ما در واقع سخنرانی های SICP برایان هاروی (برای دوره 61A در برکلی) است. اینها نسبت به سخنرانی های MIT در دانشجویان جدید تصفیه شده و بهتر مورد هدف قرار می گیرند.

توصیه می کنیم حداقل در سه فصل اول SICP و انجام تمرینات کار کنید. برای تمرین بیشتر ، از طریق مجموعه ای از مشکلات برنامه نویسی کوچک مانند مواردی که در مورد تمرین هستند ، کار کنید.

از آنجا که این راهنما برای اولین بار در سال 2016 منتشر شد ، یکی از متداول ترین سؤالات پرسیده شده این است که آیا ما اکنون می خواهیم ضبط های مربوط به تکرار اخیر 61A را که توسط جان دنرو آموزش داده شده است ، و/یا برنامه های آهنگسازی کتاب مربوطه ، که "در آن است ، توصیه کنیم. سنت Sicp "اما از پایتون استفاده می کند. ما فکر می کنیم منابع Denero نیز عالی است ، و برخی از دانشجویان ممکن است آنها را ترجیح دهند ، اما ما هنوز هم سخنرانی های SICP ، SCHEME و برایان هاروی را به عنوان اولین مجموعه منابع امتحان می کنیم.

چرا؟از آنجا که SICP در توانایی خود - حداقل بالقوه - منحصر به فرد است تا اعتقادات اساسی خود را در مورد رایانه ها و برنامه نویسی تغییر دهد. همه این را تجربه نخواهند کرد. برخی از کتاب متنفر هستند ، برخی دیگر از چند صفحه اول عبور نمی کنند. اما پاداش بالقوه باعث می شود که ارزش آن را داشته باشد.

اگر از SICP لذت نمی برید ، برنامه های آهنگسازی را امتحان کنید. اگر هنوز مناسب نیست ، سعی کنید چگونه برنامه ها را طراحی کنید. اگر به نظر نمی رسد که هیچکدام از اینها تلاش شما را پاداش دهند ، شاید این نشانه این باشد که شما باید مدتی روی موضوعات دیگر تمرکز کنید و در یک یا دو سال دیگر نظم و انضباط برنامه نویسی را دوباره بررسی کنید.

سرانجام ، نکته ای از شفاف سازی: این راهنما برای کسانی که کاملاً برای برنامه نویسی جدید هستند ، طراحی نشده است. ما فرض می کنیم که شما یک برنامه نویس صالح و بدون پیش زمینه در علوم کامپیوتر هستید و به دنبال پر کردن برخی از شکاف های دانش هستید. این واقعیت که ما بخشی از "برنامه نویسی" را درج کرده ایم ، صرفاً یادآوری این است که ممکن است چیزهای بیشتری برای یادگیری وجود داشته باشد. برای کسانی که قبلاً هرگز کدگذاری نکرده اند ، اما دوست دارند ، شما ممکن است راهنمایی مانند این را ترجیح دهید.

Structure and Interpretation of Computer Programs

معماری کامپیوتر

معماری رایانه - بعضی اوقات به نام "سیستم های رایانه ای" یا "سازمان رایانه" - اولین نگاه مهم به محاسبات زیر سطح نرم افزار است. در تجربه ما ، این مورد غفلت ترین منطقه در بین مهندسان نرم افزار خودآموز است.

کتاب مقدماتی مورد علاقه ما سیستم های رایانه ای است: دیدگاه یک برنامه نویس و یک دوره معمولی معماری رایانه ای با استفاده از این کتاب بیشتر فصل های 1-6 را پوشش می دهد.

ما عاشق CS هستیم: برنامه ای برای رویکرد عملی و برنامه نویس گرا. در حالی که بیشتر از آنچه در کتاب پوشش داده شده است ، بیشتر برای معماری رایانه وجود دارد ، این یک نقطه شروع عالی برای کسانی است که دوست دارند سیستم های رایانه ای را در درجه اول درک کنند تا بتوانند نرم افزارهای سریعتر ، کارآمدتر و قابل اطمینان تر بنویسند.

برای کسانی که می خواهند هم یک مقدمه مهربان را برای موضوع و تعادل نگرانی های سخت افزار و نرم افزار ترجیح دهند ، ما عناصر سیستم های محاسباتی را که به عنوان "NAND2Tetris" شناخته می شوند ، پیشنهاد می کنیم. این یک کتاب بلندپرواز است که سعی در درک منسجم از نحوه کار همه چیز در رایانه دارد. هر فصل شامل ساختن یک قطعه کوچک از سیستم کلی ، از نوشتن دروازه های منطق ابتدایی در HDL ، از طریق CPU و اسمبلر ، تمام راه به یک برنامه به اندازه یک بازی تتریس است.

توصیه می کنیم از طریق شش فصل اول کتاب و تکمیل پروژه های مرتبط بخوانید. این درک شما از رابطه بین معماری دستگاه و نرم افزاری که روی آن کار می کند ، توسعه می یابد.

نیمه اول کتاب (و کلیه پروژه های آن) به صورت رایگان از وب سایت NAND2Tetris در دسترس است. همچنین به عنوان یک دوره Coursera با فیلم های همراه در دسترس است.

Nand2Tetris در جستجوی سادگی و انسجام ، عمق را معامله می کند. به طور خاص ، دو مفهوم بسیار مهم در معماری رایانه مدرن ، سلسله مراتب لوله کشی و حافظه هستند ، اما هر دو بیشتر از متن وجود ندارند.

هنگامی که با محتوای Nand2Tetris احساس راحتی می کنید ، پیشنهاد می کنیم به CS: APP برگردید ، یا سازمان و طراحی رایانه ای پترسون و هنسی را در نظر بگیرید ، یک متن عالی و در حال حاضر کلاسیک. هر بخش از کتاب ضروری نیست. ما پیشنهاد می کنیم دوره CS61C برکلی را "ایده های عالی در معماری رایانه" برای خوانش های خاص دنبال کنید. یادداشت های سخنرانی و آزمایشگاه ها بصورت آنلاین در دسترس هستند و سخنرانی های گذشته در بایگانی اینترنت است.

Computer Systems: A Programmer

الگوریتم ها و ساختار داده ها

ما با ده ها سال از خرد مشترک موافق هستیم که آشنایی با الگوریتم های مشترک و ساختار داده ها یکی از قدرتمندترین جنبه های آموزش علوم کامپیوتر است. این مکان همچنین یک مکان عالی برای آموزش توانایی های کلی حل مسئله است که در هر زمینه دیگری از مطالعه پرداخت می شود.

صدها کتاب در دسترس است ، اما مورد علاقه ما کتابچه راهنمای طراحی الگوریتم توسط استیون اسکینا است. او به وضوح عاشق حل مسئله الگوریتمی است و به طور معمول موفق می شود اشتیاق مشابهی را در بین دانش آموزان و خوانندگان خود تقویت کند. به نظر ما ، این دو متن متداول (CLR و Sedgewick) تمایل دارند که برای کسانی که در درجه اول یادگیری این مواد را می آموزند ، برای کمک به حل مسئله عملی ، کمی اثبات سنگین باشد.

برای کسانی که سخنرانی های ویدیویی را ترجیح می دهند ، Skiena سخاوتمندانه آنلاین خود را ارائه می دهد. ما همچنین واقعاً دوره تیم Roughgarden را دوست داریم ، که در Coursera و جاهای دیگر موجود است. این که آیا شما سبک سخنرانی Skiena یا Roughgarden را ترجیح می دهید ، ترجیح شخصی خواهد بود. در واقع ، ده ها گزینه خوب وجود دارد ، بنابراین اگر اتفاق می افتد دیگری را پیدا کنید که دوست دارید ، ما شما را تشویق می کنیم تا به آن بچسبید!

برای تمرین ، رویکرد مورد نظر ما این است که دانش آموزان بتوانند مشکلات موجود در Leetcode را حل کنند. اینها تمایل به مشکلات جالب در مورد راه حل ها و بحث های همراه مناسب دارند. آنها همچنین به شما کمک می کنند تا پیشرفت در برابر سؤالاتی را که معمولاً در مصاحبه های فنی در شرکت های نرم افزاری رقابتی تر استفاده می شود ، آزمایش کنید. ما پیشنهاد می کنیم حدود 100 مشکل LeetCode تصادفی را به عنوان بخشی از مطالعات خود حل کنید.

سرانجام ، ما اکیداً توصیه می کنیم که چگونه آن را به عنوان یک راهنمای عالی و منحصر به فرد برای حل مسئله عمومی حل کنیم. این به همان اندازه برای علوم کامپیوتر کاربرد دارد.

The Algorithm Design Manual How to Solve It

من فقط یک روش دارم که به طور گسترده توصیه می کنم - قبل از نوشتن فکر می شود.

ریاضیات برای علوم کامپیوتر

از بعضی جهات ، علوم کامپیوتر شاخه ای از ریاضیات کاربردی است. در حالی که بسیاری از مهندسان نرم افزار سعی می کنند و درجات مختلفی را موفق می کنند - در این امر نادیده می گیرند ، ما شما را تشویق می کنیم تا با مطالعه مستقیم آن را در آغوش بگیرید. انجام این کار با موفقیت یک مزیت رقابتی عظیم را نسبت به کسانی که نمی کنند به شما می دهد.

مهمترین حوزه ریاضی برای CS به طور گسترده ای "ریاضیات گسسته" نامیده می شود ، جایی که "گسسته" بر خلاف "مداوم" است و به راحتی مجموعه ای از موضوعات جالب ریاضی کاربردی در خارج از حساب است. با توجه به تعریف مبهم ، تلاش برای پوشاندن کل وسعت "ریاضیات گسسته" معنی دار نیست. یک هدف واقع بینانه تر ، ایجاد درک کار از منطق ، ترکیبی و احتمال ، تئوری مجموعه ، تئوری نمودار و کمی از تئوری شماره است که رمزنگاری را آگاه می کند. جبر خطی با توجه به اهمیت آن در گرافیک رایانه و یادگیری ماشین ، یک منطقه مطالعه ارزشمند است.

نقطه شروع پیشنهادی ما برای ریاضیات گسسته مجموعه یادداشت های سخنرانی László Lovász است. پروفسور لوواس کار خوبی را برای ساخت محتوا و شهودی انجام داد ، بنابراین این به عنوان یک نقطه شروع بهتر از متون رسمی تر عمل می کند.

برای یک درمان پیشرفته تر ، ما ریاضیات را برای علوم کامپیوتر پیشنهاد می کنیم ، یادداشت های سخنرانی به طول کتاب برای دوره MIT با همین نام. سخنرانی های ویدیویی این دوره نیز آزادانه در دسترس است و سخنرانی های ویدیویی پیشنهادی ما برای ریاضی گسسته است.

برای جبر خطی ، ما پیشنهاد می کنیم با جوهر سریال های ویدیویی جبر خطی شروع کنید و به دنبال آن کتاب و سخنرانی های کتاب گیلبرت استرانگ.

اگر مردم اعتقاد نداشته باشند که ریاضیات ساده است ، فقط به این دلیل است که آنها نمی دانند زندگی پیچیده چقدر است.

سیستم های عامل

مفاهیم سیستم عامل (کتاب "دایناسور") و سیستم عامل های مدرن کتابهای "کلاسیک" در مورد سیستم عامل ها هستند. هر دو به دلیل عدم وضوح و عدم دوست داشتن دانش آموزان عمومی ، انتقاداتی را به خود جلب کرده اند.

سیستم عامل ها: سه قطعه آسان جایگزین مناسبی است که بصورت آنلاین و بصورت آنلاین در دسترس است. ما به خصوص ساختار و خوانایی کتاب را دوست داریم و احساس می کنیم که تمرینات ارزشمند است.

پس از OSTEP ، ما شما را تشویق می کنیم تا تصمیمات طراحی سیستم عامل های خاص را از طریق کتابهای سبک "داخلی" مانند تفسیر شیر در مورد یونیکس ، طراحی و اجرای سیستم عامل FreeBSD و داخلی Mac OS X کشف کنید. برای لینوکس ، ما پیشنهاد می کنیم که هسته فوق العاده لینوکس لینوکس رابرت لاو را توسعه دهید.

یک راه عالی برای تحکیم درک خود از سیستم های عامل ، خواندن کد یک هسته کوچک و افزودن ویژگی ها است. یک انتخاب XV6 ، پورت UNIX V6 به ANSI C و X86 است که برای یک دوره در MIT نگهداری می شود. OSTEP دارای ضمیمه ای از آزمایشگاه های بالقوه XV6 پر از ایده های عالی برای پروژه های بالقوه است.

Operating Systems: Three Easy Pieces

شبکه رایانه

با توجه به اینکه بسیاری از مهندسی نرم افزار در سرورهای وب و مشتری ها قرار دارد ، یکی از مناطق با ارزش و ارزشمند علوم رایانه ، شبکه های رایانه ای است. دانشجویان خودآموز ما که به روش متدکینگ در شبکه مطالعه می کنند ، می دانند که در نهایت اصطلاحات ، مفاهیم و پروتکل هایی را که سالها در آن احاطه شده اند درک می کنند.

کتاب مورد علاقه ما در مورد موضوع شبکه رایانه ای است: یک رویکرد از بالا به پایین. پروژه ها و تمرینات کوچک در کتاب به خوبی ارزش انجام آن را دارند ، و ما به خصوص "آزمایشگاه های Wireshark" را که آنها سخاوتمندانه بصورت آنلاین ارائه داده اند ، دوست داریم.

برای کسانی که سخنرانی های ویدیویی را ترجیح می دهند ، ما پیشنهاد می کنیم معرفی استنفورد در دوره شبکه رایانه ای که قبلاً از طریق پلت فرم MOOC استنفورد Lagunita در دسترس است ، اما متأسفانه اکنون فقط به عنوان لیست های پخش غیر رسمی در YouTube در دسترس است.

شما نمی توانید به توپ کریستال نگاه کنید و آینده را ببینید. آنچه اینترنت در آینده خواهد بود همان چیزی است که جامعه آن را می سازد.

Computer Networking: A Top-Down Approach

دیتابیس

کار بیشتر در مورد سیستم های پایگاه داده نسبت به بیشتر موضوعات دیگر کار می کند. این یک زمینه تحصیلی نسبتاً جدید (به عنوان مثال پست 1970) با مشوق های تجاری قوی برای ایده ها برای ماندن در پشت درهای بسته است. علاوه بر این ، بسیاری از نویسندگان بالقوه عالی کتاب درسی ترجیح داده اند به جای آن شرکت کنند یا شرکت ها را راه اندازی کنند.

با توجه به این شرایط ، ما خود انتخاب کنندگان را ترغیب می کنیم که به طور کلی از کتابهای درسی جلوگیری کنند و از ضبط های CS 186 ، دوره پایگاه داده های جو هلرشتاین در برکلی ، و پیشرفت به خواندن مقالات را شروع کنند.

یکی از مقاله هایی که به ویژه برای دانشجویان جدید ذکر می شود ، "معماری یک سیستم بانک اطلاعاتی" است که به طور منحصر به فرد نمای سطح بالایی از نحوه عملکرد سیستم های مدیریت پایگاه داده رابطه ای (RDBMS) را ارائه می دهد. این به عنوان یک اسکلت مفید برای مطالعه بیشتر خدمت می کند.

قرائت در سیستم های پایگاه داده ، که به عنوان پایگاه داده "کتاب قرمز" شناخته می شود ، مجموعه ای از مقالات است که توسط پیتر بیلیس ، جو هلرشتاین و مایکل استونبراکر تهیه و ویرایش شده است. برای کسانی که فراتر از سطح محتوای CS 186 پیشرفت کرده اند ، کتاب قرمز باید توقف بعدی شما باشد.

اگر از استفاده از یک کتاب درسی مقدماتی مطلوب هستید ، ما سیستم های مدیریت پایگاه داده توسط Ramakrishnan و Gehrke را پیشنهاد می کنیم. برای دانش آموزان پیشرفته تر ، پردازش معاملات کلاسیک جیم گری: مفاهیم و تکنیک ها ارزشمند است ، اما ما استفاده از این را به عنوان اولین منبع تشویق نمی کنیم.

سرانجام ، مدل سازی داده ها یک جنبه مورد غفلت و ضعیف از کار با پایگاه داده ها است. کتاب پیشنهادی ما در مورد موضوع ، داده و واقعیت است: یک دیدگاه بی انتها در مورد درک و مدیریت اطلاعات در دنیای نادرست ما.

Readings in Database Systems Data and Reality

زبانها و کامپایلرها

بیشتر برنامه نویسان زبان ها را یاد می گیرند ، در حالی که بیشتر دانشمندان رایانه در مورد زبانها می آموزند. این امر به دانشمند رایانه مزیت متمایز نسبت به برنامه نویس ، حتی در حوزه برنامه نویسی می دهد! دانش آنها تعمیم می یابد ؛آنها قادر به درک عملکرد یک زبان جدید عمیق تر و سریع تر از کسانی هستند که صرفاً زبانهای خاص را آموخته اند.

متن مقدماتی پیشنهادی ما ، مترجمان عالی صنایع دستی توسط Bob Nystrom است که به صورت آنلاین به صورت آنلاین در دسترس است. این به خوبی سازمان یافته ، بسیار سرگرم کننده و مناسب برای کسانی است که هدف اصلی آنها صرفاً درک بهتر زبان ها و ابزارهای زبانی آنهاست. ما پیشنهاد می کنیم که وقت خود را برای کار در کل کار کنید ، تلاش کنید هر کدام از "چالش ها" علاقه شما را حفظ کند.

یک توصیه سنتی تر کامپایلرها است: اصول ، تکنیک ها و ابزارها ، که معمولاً "کتاب اژدها" خوانده می شود. متأسفانه ، این برای خودآموزی طراحی نشده است ، بلکه برای مربیان می تواند 1-2 ترم را برای دوره های خود انتخاب کند.

اگر تصمیم دارید از کتاب اژدها استفاده کنید ، تقریباً ضروری است که موضوعات را به صورت ایده آل با کمک یک مربی انتخاب کنید. در حقیقت ، روش پیشنهادی ما برای استفاده از کتاب اژدها ، در صورت انتخاب ، به عنوان یک مرجع تکمیلی برای یک سری سخنرانی های ویدیویی است. مورد توصیه ما الکس آیکن ، در EDX است.

Compilers: Principles, Techniques & Tools

یک برنامه نویس دیگ بخار نباشید. در عوض ، ابزارهایی را برای کاربران و سایر برنامه نویسان بسازید. یادداشت تاریخی صنایع نساجی و فولاد را در نظر بگیرید: آیا می خواهید ماشین و ابزار بسازید یا می خواهید آن دستگاه ها را کار کنید؟

- Ras Bodik در ابتدای دوره کامپایلر خود

سیستم های توزیع شده

با افزایش تعداد رایانه ها ، آنها نیز گسترش یافته اند. در حالی که مشاغل قبلاً اصلی های بزرگتر و بزرگتر را خریداری می کردند ، در حال حاضر حتی برنامه های بسیار کوچک برای اجرای چندین دستگاه نیز معمولی است. سیستم های توزیع شده مطالعه چگونگی استدلال در مورد تجارت در انجام این کار است.

کتاب پیشنهادی ما برای خودآموزی مارتین کلپپمن طراحی برنامه های فشرده داده است. DDIA به مراتب بهتر از یک کتاب درسی سنتی ، کتابی بسیار خواندنی است که برای پزشکان طراحی شده است ، که به نوعی از قربانی کردن عمق یا سخت گیری جلوگیری می کند.

برای کسانی که به دنبال متن سنتی تر هستند ، یا کسی را که به صورت آنلاین در دسترس باشد ترجیح می دهد ، ما پیشنهاد می کنیم سیستم های توزیع شده Maarten Van Steen و Andrew Tanenbaum ، نسخه سوم.

برای کسانی که فیلم را ترجیح می دهند ، یک دوره عالی با فیلم های موجود در اینترنت 6. 824 MIT است ، یک دوره فارغ التحصیل که توسط رابرت موریس با خواندن موجود در اینجا تدریس می شود.

مهم نیست که انتخاب کتاب درسی یا سایر منابع ثانویه ، مطالعه سیستم های توزیع شده کاملاً مقالات خواندن را الزامی می کند. یک لیست خوب در اینجا وجود دارد ، و ما حضور در مقالات محلی شما را که عاشق فصل هستیم بسیار تشویق می کنیم.

Designing Data-Intensive Applications

سوالات متداول

مخاطب هدف این راهنما کیست؟

ما در نظر داریم که شما یک مهندس نرم افزار خودآموز ، دانش آموز دبیرستانی Bootcamp یا دانش آموز دبیرستانی زودرس یا یک دانش آموز کالج هستید که به دنبال تکمیل آموزش رسمی خود با برخی از مطالعه خود هستید. این سؤال که چه موقع باید به این سفر بپردازیم ، کاملاً شخصی است ، اما بیشتر مردم تمایل دارند قبل از غواصی بیش از حد در تئوری CS ، از داشتن برخی از تجربه های حرفه ای بهره مند شوند. به عنوان مثال ، ما متوجه می شویم که اگر آنها قبلاً با پایگاه داده ها به صورت حرفه ای کار کرده اند ، یا در مورد شبکه رایانه ای در صورت کار در یک پروژه وب یا دو مورد ، دانش آموزان عاشق یادگیری در مورد سیستم های پایگاه داده هستند.

در مورد AI/Graphics/Pet-Topic-X چیست؟

ما سعی کرده ایم لیست خود را به مباحث علوم کامپیوتر محدود کنیم که احساس می کنیم هر مهندس نرم افزار تمرین ، صرف نظر از تخصص یا صنعت ، اما با تمرکز روی سیستم ها ، باید آن را بشناسد. در تجربه ما ، اینها بالاترین مباحث ROI برای اکثریت قریب به اتفاق مهندسان خودآموز و درجه های بوت کامپ خواهند بود و پایه و اساس محکمی برای مطالعه بیشتر فراهم می کنند. پس از آن ، شما در انتخاب کتاب های درسی یا مقاله و یادگیری مفاهیم اصلی بدون راهنمایی های زیاد در موقعیت بسیار بهتری قرار خواهید گرفت. در اینجا نقاط شروع پیشنهادی ما برای یک زن و شوهر از "انتخاب های مشترک" مشترک است:

  • برای هوش مصنوعی: آیا با تماشای فیلم ها و تکمیل پروژه های عالی PACMAN ، مقدمه برکلی در دوره هوش مصنوعی را انجام دهید. به عنوان یک کتاب درسی ، از هوش مصنوعی راسل و نورویگ استفاده کنید: یک رویکرد مدرن.
  • برای یادگیری ماشین: آیا دوره Coursera اندرو نگ. صبور باشید و مطمئن شوید که قبل از مسابقه به موضوعات جدید و براق مانند یادگیری عمیق ، اصول را درک کرده اید.
  • برای گرافیک رایانه: از طریق مواد CS 184 برکلی کار کنید و از گرافیک رایانه استفاده کنید: اصول و تمرین به عنوان یک کتاب درسی.

توالی پیشنهادی چقدر سخت است؟

در واقع ، همه این افراد مقدار قابل توجهی از همپوشانی دارند و به صورت چرخه ای به یکدیگر مراجعه می کنند. به عنوان مثال رابطه بین ریاضیات گسسته و الگوریتم ها را در نظر بگیرید: یادگیری ریاضی در ابتدا به شما کمک می کند تا الگوریتم های خود را در عمق بیشتر تجزیه و تحلیل و درک کنید ، اما یادگیری الگوریتم ها ابتدا انگیزه و زمینه ای برای ریاضیات گسسته فراهم می کند. در حالت ایده آل ، شما در طول حرفه خود بارها و بارها مجدداً مورد بررسی قرار می دهید.

به همین ترتیب ، توالی پیشنهادی ما بیشتر برای کمک به شما در شروع کار وجود دارد ... اگر دلیل قانع کننده ای برای ترجیح یک دنباله متفاوت دارید ، پس به دنبال آن بروید. به نظر ما مهمترین "پیش نیازها" عبارتند از: معماری رایانه قبل از سیستم های عامل یا پایگاه داده ها و سیستم های شبکه و عامل قبل از توزیع سیستم.

چگونه این مقایسه با جامعه منبع باز یا برنامه های درسی FreecodeCamp است؟

هنگامی که این راهنما برای اولین بار در سال 2016 نوشته شد ، راهنمای OSS موضوعات زیادی داشت ، منابع فرومایه را برای بسیاری از آنها پیشنهاد می کرد و هیچگونه دلیل و راهنمایی ای در مورد دلیل یا اینکه چه جنبه هایی از دوره های خاص ارزشمند است ، ارائه نمی دهد. ما سعی کردیم لیست دوره های خود را به مواردی که شما واقعاً باید آن را به عنوان مهندس نرم افزار بدانید ، صرف نظر از تخصص خود ، محدود کنیم و به شما کمک کنیم تا درک کنید که چرا هر دوره گنجانده شده است. در سالهای بعد ، راهنمای OSS بهبود یافته است ، اما ما هنوز فکر می کنیم که این یک مسیر واضح تر و منسجم تر را فراهم می کند.

FreecodeCamp بیشتر روی برنامه نویسی متمرکز است ، نه علوم کامپیوتر. برای اینکه چرا ممکن است بخواهید علوم کامپیوتر را یاد بگیرید ، به بالا مراجعه کنید. اگر در برنامه نویسی تازه کار هستید ، پیشنهاد می کنیم اولویت بندی آن را داشته باشید و در یک یا دو سال به این راهنما برگردید.

در مورد زبان X چطور؟

یادگیری یک زبان برنامه نویسی خاص برای یادگیری در مورد حوزه علوم کامپیوتر در یک صفحه کاملاً متفاوت است - یادگیری یک زبان بسیار ساده تر و بسیار با ارزش است. اگر از قبل چند زبان را می شناسید ، ما اکیداً پیشنهاد می کنیم که به سادگی از راهنمای خود و دستیابی به زبان مناسب در شکاف ها پیروی کنید ، یا پس از آن آن را ترک کنید. اگر برنامه نویسی را به خوبی آموخته اید (مانند از طریق ساختار و تفسیر برنامه های رایانه ای) ، و به خصوص اگر کامپایلر را آموخته اید ، باید برای یادگیری ملزومات یک زبان جدید ، بیش از یک آخر هفته را برای شما ببرد ، پس از آن می توانید یاد بگیریددرباره کتابخانه ها/ابزار/اکوسیستم در کار.

در مورد فناوری مرسوم ، مد روز X؟

هیچ فناوری واحدی به اندازه کافی مهم نیست که یادگیری استفاده از آن باید بخش اصلی آموزش شما باشد. از طرف دیگر ، بسیار عالی است که شما از یادگیری آن چیز هیجان زده اید. ترفند این است که از فناوری خاص تا حوزه یا مفهوم اساسی کار کنید و قبل از دیدن اینکه چگونه فناوری مرسوم ، مد روز شما در تصویر بزرگتر قرار می گیرد ، عمیقاً یاد بگیرید.

چرا هنوز SICP را توصیه می کنید؟

ببین ، فقط آن را امتحان کنبرخی از افراد ذهن Sicp را می وزد ، مشخصه ای که توسط تعداد کمی از کتاب های دیگر به اشتراک گذاشته شده است. اگر آن را دوست ندارید ، همیشه می توانید چیز دیگری را امتحان کنید و شاید بعداً به SICP برگردید.

چرا هنوز کتاب اژدها را توصیه می کنید؟

کتاب اژدها هنوز کامل ترین منبع واحد برای کامپایلرها است. این رپ بد می شود ، به طور معمول برای تأکید بیش از حد موضوعات خاص که این روزها برای تفصیل در این روزها ، مانند تجزیه ، کمتر مد روز هستند. نکته این است که ، این کتاب هرگز قرار نبود که برای پوشش پوشش مورد مطالعه قرار گیرد ، فقط برای تهیه مطالب کافی برای یک مربی برای گذراندن یک دوره. به همین ترتیب ، یک خودآموز می تواند ماجراجویی خود را از طریق کتاب انتخاب کند ، یا بهتر از این پیشنهادهایی را که اساتید دوره های عمومی در طرح های دوره خود ارائه داده اند ، دنبال کنید.

چگونه می توانم کتابهای درسی را ارزان تهیه کنم؟

بسیاری از کتابهای درسی که پیشنهاد می کنیم به لطف سخاوت نویسندگان آنها به صورت آنلاین بصورت آنلاین در دسترس هستند. برای کسانی که نیستند ، پیشنهاد می کنیم نسخه های استفاده شده از نسخه های قدیمی را خریداری کنید. به عنوان یک قاعده کلی ، اگر بیش از چند نسخه از یک کتاب درسی وجود داشته باشد ، کاملاً محتمل است که نسخه قدیمی کاملاً کافی باشد. مطمئناً بعید است که جدیدترین نسخه 10 برابر بهتر از نسخه قدیمی تر باشد ، حتی اگر این تفاوت قیمت باشد!

چه کسی این را ساخته است؟

این راهنما در ابتدا توسط Oz Nova و Myles Bye نوشته شده است ، با به روزرسانی های 2020 توسط OZ. این مبتنی بر تجربه ما در آموزش علوم کامپیوتر بنیادی به بیش از 1000 مهندس عمدتاً خودآموز و درجه های بوت کامپ در تنظیمات گروهی کوچک در سانفرانسیسکو و Live Online است. از همه دانش آموزان ما برای ادامه بازخورد شما در مورد منابع خودآگاهی تشکر می کنم.

ما بسیار اطمینان داریم که با توجه به وقت و انگیزه کافی ، می توانید به خودتان همه چیز را آموزش دهید. اما اگر یک برنامه فشرده ، ساختار یافته و مربیگری را ترجیح می دهید ، ممکن است به علوم کامپیوتر ما علاقه مند باشید. ما پیشنهاد نمی کنیم مدرک کارشناسی ارشد را دنبال کنید.

برای به روزرسانی این راهنما و اخبار و منابع عمومی علوم کامپیوتر ، ممکن است دوست داشته باشید به لیست پستی برادفیلد بپیوندید: < SPAN> این راهنما در ابتدا توسط Oz Nova و Myles Bye نوشته شده است ، با به روزرسانی های 2020 توسط OZ. این مبتنی بر تجربه ما در آموزش علوم کامپیوتر بنیادی به بیش از 1000 مهندس عمدتاً خودآموز و درجه های بوت کامپ در تنظیمات گروهی کوچک در سانفرانسیسکو و Live Online است. از همه دانش آموزان ما برای ادامه بازخورد شما در مورد منابع خودآگاهی تشکر می کنم.

سیگنال های تجاری...
ما را در سایت سیگنال های تجاری دنبال می کنید

برچسب : نویسنده : محسن رضایی بازدید : 59 تاريخ : دوشنبه 29 اسفند 1401 ساعت: 22:13