Skip to content

Latest commit

 

History

History
281 lines (165 loc) · 54 KB

TeachYourselfCS-UK.md

File metadata and controls

281 lines (165 loc) · 54 KB

Навчи себе комп'ютерних наук

Note

This document is a Ukrainian translation of TeachYourselfCS, written by Oz Nova and Myles Byrne.

Якщо ти - розробник-самоучка або випускник буткемпу, то просто зобов'язаний навчитись комп'ютерних наук. На щастя, зараз можна здобути освіту рівня найкращих університетів, не витрачаючи роки та цілий статок на навчання 💸.

Існує надзвичайно багато ресурсів, проте деякі з них є кращими за інші. Тобі не потрібен черговий список, на кшталт "200+ безкоштовних онлайн курсів". Натомість тобі потрібні відповіді на ці запитання:

  • Які дисципліни тобі варто вивчати (і навіщо)?
  • Яка книга або серія відеолекцій найкраще підходить для вивчення кожної з них?

Цей посібник - наша спроба дати остаточні відповіді.

Стисло

Вивчай ці дев'ять дисциплін у зазначеному порядку, користуючись запропонованою книгою або серією відеолекцій (а краще всім разом). Постав мету в 100-200 годин на вивчення кожної теми, та, якщо потрібно, повертайся до них у міру розвитку своєї кар'єри 🚀.

Предмет Навіщо вивчати? Найкраща книга Найкращі відео
Програмування Аби не бути людиною, яка "не зовсім розуміє" щось, на кшталт рекурсії. Structure and Interpretation of Computer Programs Brian Harvey's Berkeley CS 61A
Архітектура комп'ютера Якщо ти не маєш ґрунтовної ментальної моделі того, як насправді працює комп'ютер, то всі твої високорівневі абстракції будуть крихкими. Computer Systems: A Programmer's Perspective Berkeley CS 61C
Алгоритми та структури даних Якщо ти не вмієш використовувати хоча б найбільш розповсюджені структури даних, на зразок стеків, черг, дерев та графіків, то не зможеш ефективно розв'язувати складні завдання. The Algorithm Design Manual Steven Skiena's lectures
Математика для CS За своєю суттю, CS - лише одна з галузей прикладної математики. Вочевидь, її знання надасть тобі значну конкурентну перевагу. Mathematics for Computer Science Tom Leighton's MIT 6.042J
Операційні системи Більшість коду, який ти пишеш, виконується операційною системою, тож потрібно знати, як ці речі взаємодіють між собою. Operating Systems: Three Easy Pieces Berkeley CS 162
Комп'ютерні мережі Інтернет абсолютно скрізь: дізнайся, як він працює, аби повною мірою використовувати його потенціал. Computer Networking: A Top-Down Approach Stanford CS 144
Бази даних Дані лежать в основі більшості сучасних програм, проте лише одиниці розуміють, як насправді працюють системи баз даних. Readings in Database Systems Joe Hellerstein's Berkeley CS 186
Мови та компілятори Якщо ти розумієш, як працюють мови програмування та компілятори, то зможеш писати кращий код і навчатися нових мов набагато легше. Crafting Interpreters Alex Aiken's course on edX
Розподілені системи В наші дні переважна більшість систем - розподілені системи. Designing Data-Intensive Applications MIT 6.824

Все ще забагато?

Якщо ідея самостійного вивчення 9 тем протягом кількох років видається нездоланною, ми пропонуємо зосередитися лише на двох книгах: Computer Systems: A Programmer's Perspective і Designing Data-Intensive Applications. З нашого досвіду, вони цілком і повністю вартують витраченого на них часу, особливо для самоучок і випускників буткемів, що наразі працюють з мережевими програмами. Вони також можуть бути відправною точкою для того, щоб краще розуміти інші з перелічених вище тем та ресурсів.

Навіщо вивчати комп'ютерні науки?

Глобальною системою SMS щоденно надсилається близько 20 мільярдів повідомлень. Зараз через WhatsApp надсилається близько 42 мільярдів. З 57 інженерами у штаті. pic.twitter.com/zZrtSIzhlR

— Бенедікт Еванс (@BenedictEvans) 2 лютого 2016

Є 2 типи розробників ПЗ: ті, хто розуміють комп'ютерні науки достатньо добре, щоб виконувати складну роботу та впроваджувати інноваційні рішення, і ті, хто просто обходиться кількома інструментами високого рівня, через відсутність поглиблених знань.

Усі вони називають себе розробниками та отримують приблизно однакові зарплати на початкових етапах. Проте, з часом, перший тип прогресує у бік більш повноцінної та високооплачуваної роботи, хай то буде цінна комерція чи проривні проєкти з відкритим кодом, менеджмент чи високоякісні індивідуальні внески.

Розробники першого типу отримують поглиблені знання в царині комп'ютерних наук, послуговуючись традиційними методами або невпинно навчаючись протягом своєї кар'єри. Другий тип програмістів лишається на поверхні, вивчаючи конкретні інструменти та технології, а не теорію, на якій вони засновані. Представники цього типу підхоплюють нові навички лише тоді, коли вітри технологічної моди змінюють свій напрямок.

На цей час все більше людей іде в IT-індустрію, тоді як кількість дипломованих спеціалістів з комп'ютерних наук залишається приблизно однаковою. Таким чином, надлишок людей "другого типу" призводить до скорочення їхніх можливостей працевлаштування та утримування їх від більш повноцінної роботи в галузі. Не важливо, чи прагнеш ти стати розробником першого типу, чи просто хочеш мати більший попит для роботодавців і почувати себе впевненіше, бо вивчення комп'ютерних наук – це єдиний надійний шлях.

Тематичні посібники

Програмування

Більшість бакалаврських програм з комп'ютерних наук починається із "введення" у програмування. Найкращі з цих курсів підійдуть не лише для початківців, але й для тих, хто пропустив фундаментальні концепції та моделі програмування, коли вперше навчався писати код.

Зазвичай ми рекомендуємо працю, що вже встигла стати класичною - Structure and Interpretation of Computer Programs (скор. SICP). Вона доступна цілком безкоштовно (англійською) як у вигляді електронної книги, так і у вигляді курсу онлайн-лекцій від MIT. Хоча ці лекції чудові, замість них ми пропонуємо лекції Браяна Гарві для курсу 61A університету Берклі. На нашу думку, вони більш досконалі та краще орієнтовані на новачків.

Ми рекомендуємо опрацювати хоча б три перших розділи книги Structure and Interpretation of Computer Programs та виконати вправи до них. Як додаткову практику, розв'яжіть невеличкі завдання на exercism.

Оскільки цей посібник було вперше опубліковано у 2016-му році, нас часто запитують, чи рекомендуємо ми нову версію курсу 61A від Джона ДеНеро та/або відповідну їй книгу Composing Programs, що "пішла стопами SICP", проте використовує Python. Ми вважаємо, що ресурси від ДеНеро також чудові, і деяким студентам вони сподобаються навіть більше, проте ми наполегливо радимо почати з SICP, Scheme та курсу Браяна Гарві.

Чому? Бо SICP є унікальною у своїй здатності - принаймні потенційно - змінити твої фундаментальні переконання про комп'ютери та програмування. Звісно, вона підійде не всім. Дехто зненавидить книгу, інші не підуть далі за перші сторінки. Але ця книга має великий потенціал і варта того, щоб спробувати її прочитати.

Якщо Structure and Interpretation of Computer Programs все ж не подобається, спробуй Composing Programs. Якщо ця книга все одно не підходить, спробуй How to Design Programs. Якщо жодна з них не влаштовує, то це, ймовірно, означає, що тобі слід зосередитись на інших темах, а до дисципліни програмування повернутися через рік-другий.

І наостанок, мусимо уточнити: цей посібник НЕ розрахований на цілковитих новачків. Він націлений радше на компетентних програмістів, що не мають попереднього досвіду в комп'ютерних науках, проте радо шукають можливості заповнити якісь прогалини у знаннях. Той факт, що ми включили розділ "програмування" до нашого посібника, є лише нагадуванням про те, що завжди є куди рости. Якщо ти ніколи раніше не програмував, але дуже хотів би, то можеш спробувати посібник типу цього.

Архітектура комп'ютера

Апаратне забезпечення – це платформа.

— Майк Актон, Engine Director в Insomniac Games (переглянь його виступ на CppCon)

Архітектура комп'ютера (також відома, як "комп'ютерні системи" або "організація комп'ютера") - це важлива тема, за допомогою якої ти можеш дізнатись, які обчислення ховаються за програмним забезпеченням. З нашого досвіду, саме цією сферою найбільше нехтують розробники-самоучки.

Наш улюблений підручник для початківців - Computer Systems: A Programmer's Perspective. Який-небудь типовий вступний курс з архітектури комп'ютера, заснований на цій книзі, охопив би більшу частину розділів 1-6.

Ми любимо цю книгу за практичний підхід, орієнтований на програмістів. Попри те, що архітектура комп'ютера містить набагато більше за те, що описано в книзі, вона слугує чудовою відправною точкою для тих, хто хоче зрозуміти комп'ютерні системи насамперед для того, щоб писати швидше, ефективніше та надійніше програмне забезпечення.

Для тих, хто воліє навчатися повільніше, проте охоплювати як апаратне, так і програмне забезпечення, ми рекомендуємо книгу The Elements of Computing Systems. Вона також відома як "Nand2Tetris". Ця книга дає вичерпні знання на тему того, як працює комп'ютер. Кожен розділ націлений на те, щоб спроєктувати одну з частин великої системи - гри в Тетрис, від написання найпростішої логіки в HDL до роботи із центральним процесором та асемблером.

Ми рекомендуємо прочитати перші шість розділів книги та завершити відповідні проєкти. Це розвине твоє розуміння зв'язку між архітектурою машини та програмним забезпеченням, яке на ній працює.

Перша половина книги (і всі її проєкти) доступні безкоштовно на вебсайті Nand2Tetris. Він також доступний у відеоформаті, як курс на Coursera.

Намагаючись бути простішим і зрозумілішим, Nand2Tetris, на жаль, поступається глибиною. Зокрема, в цій книзі не охоплено два дуже важливих поняття в сучасних комп'ютерних архітектурах – конвеєрність та ієрархія пам'яті. Візьми це до уваги.

Як тільки ти розберешся з Nand2Tetris, ми рекомендуємо повернутись до книги Computer Systems: A Programmer's Perspective або спробувати почитати чудову книгу, що вже стала класичною - Computer Organization and Design Паттерсона і Геннессі. Але слід зауважити, що ця книга дуже докладна, і не кожен її розділ вартує твоєї уваги; ми пропонуємо ознайомитися з курсом CS61C "Great Ideas in Computer Architecture" університету Берклі для вивчення якихось окремих тем. Конспекти лекцій та лабораторні роботи доступні онлайн, а минулі версії лекцій можна знайти в інтернет-архіві.

Алгоритми та структури даних

У мене є лише один метод, який я наполегливо рекомендую — він називається "подумай, перш ніж писати".

— Річард Геммінг

Ми погоджуємось із загальноприйнятою думкою про те, що знання типових алгоритмів та структур даних є одним із найважливіших аспектів інформатичної освіти. Це також є чудовим місцем для тренування загальних навичок розв'язання проблем, які можна застосувати до будь-якої іншої галузі навчання.

Існують сотні книг по алгоритмах, але наша улюблена - The Algorithm Design Manual Стівена Скієни. Автор вочевидь полюбляє розв'язувати важкі алгоритмічні задачі, через що, зазвичай, йому вдається прищепити такий же ентузіазм своїм студентам і читачам. На нашу думку, два більш часто пропоновані тексти (Introduction to Algorithms Кормена та Algorithms Седжвіка) надто вже сильно наголошують на теоретичних доводах, а тому не дуже підходять для тих, чия мета – навчитися розв'язувати проблеми на практиці.

Для учнів, які надають перевагу відеолекціям, Стівен Скієна також має свій відеокурс, опублікований на YouTube. Нам також дуже подобається курс Тіма Рафґардена, доступний на Coursera, або деінде ще. Тобі може сподобатись лекційний стиль Скієни чи Рафґардена, а може й ні - все залежить від твоїх особистих уподобань. Насправді існує кільканадцять хороших альтернатив, тож якщо ти знайдеш іншу, яка тобі до вподоби, радимо дотримуватися її!

Для практики, ми радимо розв'язувати завдання на Leetcode. Зазвичай там трапляються цікаві проблеми, що супроводжуються прикладами рішень та їх обговореннями. Вони також допоможуть перевірити ваш прогрес у питаннях, які часто використовуються під час технічних співбесід у більш конкурентоспроможних компаніях, що займаються програмним забезпеченням. Ми пропонуємо розв'язати близько сотні випадкових завдань протягом навчання.

І зрештою, ми наполегливо радимо How to Solve It у якості чудового й унікального посібника із розв'язання загальних проблем; він підійде, як для практики CS, так і математики.

Математика для комп'ютерних наук

Якщо люди не вірять, що математика проста, це лише тому, що вони не усвідомлюють, наскільки складним є життя.

— Джон фон Нойман

У певному сенсі комп'ютерні науки — це відгалуження прикладної математики. Хоча багато розробників програмного забезпечення намагаються ігнорувати цей факт, певною мірою досягаючи успіху, ми заохочуємо тебе поставитись до нього серйозно. Вивчення математики надасть тобі величезну конкурентну перевагу над тими, хто цього не робить.

Найбільш релевантну галузь математики для комп'ютерних наук зазвичай називають "дискретною математикою", де "дискретне" є протилежністю "безперервного". Дискретна математика - це, по суті, набір цікавих прикладних тем поза математичним аналізом. Зважаючи на розпливчасте визначення, немає сенсу намагатися охопити всю широту "дискретної математики". Більш реалістична мета - зміцнити розуміння логіки, комбінаторики та ймовірності, теорії множин (сетів), теорії графів і трохи теорії чисел, яка широко використовується у криптографії. Також варто звернути увагу на лінійну алгебру, враховуючи її важливість у комп'ютерній графіці та машинному навчанні.

Почати вивчення дискретної математики ми пропонуємо з конспекту лекцій Ласло Ловаса. Професор Ловас добре попрацював, зробивши зміст доступним та інтуїтивно зрозумілим, тому, на нашу думку, ця праця краща за більшість формальних текстів.

Більш просунутим читачам ми рекомендуємо книгу Mathematics for Computer Science, яка фактично є конспектом лекцій для однойменного курсу MIT. Відеолекції курсу також є у вільному доступі, і ми рекомендуємо саме їх для вивчення дискретної математики.

Вивчення алгебри ми пропонуємо почати з відеосерії Essence of linear algebra, потім перейти до книги та відеолекцій Гілберта Стренга.

Операційні системи

Operating System Concepts (так звана "книга з динозаврами") та Modern Operating Systems є "класичними" книгами про операційні системи. Проте слід зауважити, що обидві викликали шквал критики, через свою заплутаність та "недружність" до студентів.

Operating Systems: Three Easy Pieces (скор. OSTEP) - хороша альтернатива, яка є у вільному доступі англійською мовою. Особливо нам подобається структура книги й те, як легко вона читається. Ми вважаємо, що вправи в ній також варті уваги.

Після OSTEP ми радимо вивчити будову окремої ОС, використовуючи підручники типу "Архітектура {назва ОС}", таких як Lion's commentary on Unix, The Design and Implementation of the FreeBSD Operating System або Mac OS X Internals. Для вивчення Linux ми пропонуємо звернути увагу на фантастичну книгу Роберта Лава Linux Kernel Development.

Чудовий спосіб закріпити розуміння операційних систем — почитати код невеличкого ядра та додати туди новий функціонал. Одним із доволі цікавих варіантів є xv6, що являє собою порт Unix V6 на ANSI C й архітектуру x86. Ця ОС підтримується для курсу в MIT. Зрештою, в OSTEP є розділ із лабораторними роботами для xv6, сповнений корисних ідей для потенційних проєктів.

Комп'ютерні мережі

Ти не можеш подивитись в кришталеву кулю і побачити майбутнє. Інтернет у майбутньому стане таким, яким його зробить суспільство.

— Боб Кан

Враховуючи, що велика частина розробки програмного забезпечення припадає на вебсервери та клієнти, однією з найбільш цінних галузей інформатики є комп'ютерні мережі. Наші студенти-самоучки, які методично вивчають нетворкінг, з'ясовують, що терміни, концепції та протоколи, котрі оточували їх роками, нарешті становляться зрозумілими.

Наш улюблений підручник на цю тему - Computer Networking: A Top-Down Approach. Книга містить невеличкі проєкти та вправи, серед яких нам особливо подобаються "Лаборатоні роботи з Wireshark", котрі автори щедро розмістили в Інтернеті.

Для тих, хто надає перевагу відеолекціям, ми пропонуємо курс Стенфордського університету Introduction to Computer Networking, який раніше був доступний на платформі Стенфордського MOOC "Lagunita", але тепер, на жаль, лише у вигляді неофіційних плейлистів на YouTube.

Бази даних

Зазвичай, самостійному вивченню систем баз даних потрібно приділяти більше уваги, ніж іншим темам.

Це відносно молодий напрямок (з'явився після 1970-х років), про який компаніям здебільшого комерційно невигідно розповсюджувати матеріали для навчання у вільному доступі. Крім того, багато потенційно чудових авторів, які могли б написати відповідні підручники, надали перевагу роботі у великих компаніях або заснуванню власних.

Отже, ми радимо тим, хто вивчає цю галузь самостійно, уникати підручників та почати із записів курсу CS 186 Джо Геллерштайна для університету Берклі, і поступово переходити до читання статей на цю тему.

Одна із таких статей, яку особливо варто згадати для початківців - "Architecture of a Database System". Вона надасть вам високорівневе (загальне) уявлення про те, як працюють реляційні системи керування базами даних (РСКБД/RDBMS). Ця праця стане корисною основою для подальшого навчання.

Readings in Database Systems, більш відома як "червона книга" - це колекція статей, зібрана та відредагована Пітером Бейлісом, Джо Геллерштайном та Майклом Стоунбрейкером. Для тих, хто вже засвоїв курс CS 186, "червона книга" має стати наступним кроком.

Якщо ти налаштований на використання ознайомлювального підручника, ми пропонуємо розглянути Database Management Systems Рамакрішнана та Герке. Студентам більш просунутого рівня варто звернути увагу на класичну книгу Джима Ґрея Transaction Processing: Concepts and Techniques. Але ми не радимо використовувати її, як перший ресурс.

Наприкінці хочеться згадати моделювання даних, бо це саме той аспект роботи з базами даних, вивченням якого зазвичай нехтують. Рекомендований нами підручник за цією темою — Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World.

Мови та компілятори

Не будь шаблонним програмістом. Натомість створюй інструменти для користувачів та інших програмістів. Згадай історію текстильної та металургійної промисловості: ти хочеш створювати машини та інструменти або керувати ними?

— Рас Бодік на початку свого курсу про компілятори

Більшість програмістів вивчають безпосередньо мови програмування, тоді як більшість комп'ютерників, вивчають те, як вони влаштовані. Це дає явну перевагу перед програмістами навіть у сфері програмування! Знання комп'ютерників узагальнені. Це означає, що вони здатні зрозуміти, як працює нова технологія, набагато глибше та швидше за тих, хто просто вивчав певні мови.

Спочатку ми радимо почитати Crafting Interpreters Боба Ністрома. Текст добре організований, його надзвичайно цікаво читати, і він добре підходить для тих, чия головна мета – краще розуміти, як працюють мови та інструменти, що вони використовують. Ми рекомендуємо опрацювати весь матеріал і спробувати вирішити якісь завдання (челенджі/challenges), щоб підтримати інтерес.

Більш традиційною рекомендацією є Compilers: Principles, Techniques & Tools, яку часто називають "книгою з драконом". На жаль, ця книга розрахована не для самостійного навчання, а для викладачів, щоб обрати теми для своїх курсів на 1-2 семестри.

Якщо ти все ж вирішиш використовувати "книгу з драконом", то дуже важливо правильно підібрати теми, в ідеалі за допомогою наставника. Також, ми радимо спробувати використовувати цю книгу, як довідник до певної серії відеолекцій. Наприклад, до лекцій Алекса Айкена на edX.

Розподілені системи

Разом зі збільшенням кількості комп'ютерів, вони стрімко почали поширюватися. Якщо раніше бізнеси скуповували все потужніші процесори, то тепер, як правило, навіть найменші програми працюють на кількох машинах. Розподілені системи – наука про те, як це можна організувати.

Для самостійного вивчення ми радимо книгу Мартіна Клеппманна Designing Data-Intensive Applications. На відміну від традиційних підручників для програмістів-практиків, цю книгу легко читати, але від того вона не стає менш глибокою чи точною.

Для тих, хто віддає перевагу більш класичним працям або просто шукає онлайн-підручники у вільному доступі, ми радимо Distributed Systems, 3rd Edition Мартена ван Стіна та Ендрю Таненбаума. Ця книга розповсюджується безкоштовно англійською мовою.

Для тих, хто віддає перевагу відеолекціям, ми рекомендуємо чудовий курс 6.824 от MIT, який викладає Роберт Морріс. Додаткові матеріали доступні тут.

Незалежно від вибору підручника чи будь-яких інших другорядних ресурсів, вивчення розподілених систем абсолютно точно вимагає читання статей. Гарний перелік можна знайти тут. Окрім цього ми наполегливо радимо відвідати ресурс Papers We Love.

ЧаПи (часті питання)

Яка цільова аудиторія цього посібника?

Ми розраховуємо на те, що цим посібником будуть користуватися розробники-самоучки, випускники буткемпу, студенти коледжу, які бажають доповнити формальну освіту, і просто звичайні учні старшої школи, які захоплюються програмуванням. Питання про те, з якого етапу починати навчання, є суто індивідуальним, але більшість людей, як правило, краще засвоює теорію CS, маючи певний професійний досвід. Наприклад, ми помітили, що студенти полюбляють вивчати системи баз даних, якщо вже працювали з ними професійно, або комп'ютерні мережі, якщо займались розробкою певного вебпроєкту.

А як щодо AI/графіки/якоїсь-іншої-теми?

Ми намагалися обмежити наш список лише фундаментальними темами, які, на нашу думку, повинен знати кожен розробник-практик, незалежно від спеціальності чи галузі. З нашого досвіду, вивчення тем, зібраних тут, принесе максимальну користь переважній більшості розробників-самоучок, а також створить міцну основу для подальшого навчання. Згодом вам буде набагато легше самостійно визначитись із вибором відповідних підручників. Ось рекомендовані нами "відправні точки" для кількох популярних "факультативів":

Наскільки важливим є порядок проходження курсів?

Насправді-то, усі ці предмети значною мірою перетинаються і посилаються один на одного. Візьмемо, наприклад, взаємозв'язок дискретної математики та алгоритмів: спочатку вивчення математики допоможе глибше проаналізувати й краще зрозуміти алгоритми, тоді як вивчення алгоритмів дасть мотивацію, щоб надалі розбиратися в дискретній математиці. В ідеалі краще неодноразово повертатися до кожної з цих тем протягом своєї кар'єри.

Таким чином, запропонована послідовність повинна допомогти тобі просто почати… якщо ти маєш вагому причину, аби навчатися в іншій послідовності - спробуй. Найважливішими "передумовами/пріоритетами", на нашу думку, є: вивчення архітектури комп'ютера перед операційними системами або базами даних, а також вивчення мережі та операційних систем перед розподіленими системами.

Чим цей посібник відрізняється від програми Open Source Society та freeCodeCamp?

Коли цей посібник було вперше написано у 2016 році, у посібнику OSS було забагато тем, до більшості з яких пропонувалися неповноцінні ресурси. До того ж посібник не містив обґрунтування того, які аспекти окремих курсів потрібно вивчати, та чому саме вони варті уваги. Ми прагнули обмежити список тільки тими ресурсами, які дійсно повинен знати кожен розробник ПЗ, незалежно від його спеціалізації. Окрім того, ми намагалися обґрунтувати наш вибір і дати розуміння, навіщо потрібний кожен із наведених вище ресурсів. У наступні роки посібник OSS було удосконалено, проте ми все ще вважаємо, що наш посібник пропонує більш зрозумілий і повноцінний шлях.

freeCodeCamp, в свою чергу, здебільшого зосереджений на програмуванні, а не на комп'ютерних науках. Пояснення, навіщо тобі потрібно вивчати саме комп'ютерні науки, можна знайти вище. Проте, якщо ти тільки починаєш програмувати, ми радимо спочатку пройти freeCodeCamp, а потім, через рік-два, повернутися до нашого посібника.

А як щодо мови X?

Вивчення конкретної мови програмування знаходиться на зовсім іншій площині, ніж дослідження галузі комп'ютерних наук — вивчення мови набагато легше та, вочевидь, менш значуще. Якщо ти вже знаєш пару мов, ми радимо просто слідувати нашому посібнику, а нові мови вивчати в проміжках між вивченням зазначених тем або взагалі відкласти їх на потім. Якщо добре знаєш програмування (наприклад, прочитавши Structure and Interpretation of Computer Programs) і, особливо, якщо ти вже ознайомився із компіляторами, то на вивчення основ нової мови знадобиться не більше кількох днів, а бібліотеки, інструменти й екосистему можна буде засвоїти в процесі роботи.

А як щодо новомодної технології X?

Жодна з цих технологій не важлива настільки, щоб її можна було взяти за основу твоєї освіти. З іншого боку, чудово, що тобі подобається навчатися чомусь новому. Хитрість тут полягає в тому, щоб повернутися до "джерел" та концепцій, на яких ґрунтується технологія, аби мати змогу використовувати її повною мірою.

Чому ви досі рекомендуєте Structure and Interpretation of Computer Programs?

Слухай, просто спробуй. Деякі люди вважають, що від SICP вибухають мізки - характеристика, яка притаманна не такій вже й великій кількості інших книг. Якщо SICP не сподобається, завжди можна спробувати щось інше і, можливо, повернутися до неї пізніше.

Чому ви досі рекомендуєте "книгу з драконом"?

Наразі, т.з. "книга з драконом" залишається єдиним вичерпним ресурсом з компіляторів. Вона має погану репутацію здебільшого через те, що занадто сильно наголошує на таких не дуже актуальних та модних у наш час темах, як, наприклад, парсинг. Річ у тім, що книга ніколи не була призначена для вивчення від краю до краю. Натомість вона має надати достатньо матеріалу для викладача, аби той міг скласти курс на її основі. Подібним чином, той, хто навчається самостійно, може підбирати необхідні теми власноруч, або, що навіть краще, слідувати пропозиціям досвідчених викладачів. Просто візьми за основу їх курси, що є у вільному доступі.

Як отримати якісні підручники, не витративши на них всі свої заощадження?

Багато запропонованих нами підручників можна знайти онлайн у вільному доступі (англійською), завдяки щедрості їхніх авторів. Якщо книга не доступна безкоштовно, ми радимо купувати потримані екземпляри. Зазвичай книги перевидаються по кілька разів, і старіші версії теж цілком підійдуть. Вірогідність того, що нова версія в 10 разів краща за попередні, надзвичайно мала, хоч вона зазвичай набагато дорожча.

Хто створив цей посібник?

Першу версію цього посібнику створили Оз Нова і Майлс Бірн, із подальшим оновленням від Оза у 2020 році. Посібник заснований на нашому досвіді викладання комп'ютерних наук для понад 1000 розробників, переважно самоучок, і випускників буткемпів у невеликих офлайн-групах у Сан-Франциско та в режимі онлайн. Дякуємо всім нашим студентам за постійні відгуки про ресурси для самонавчання.

Ми цілком упевнені, що маючи достатньо часу та мотивації, ти можеш навчитися всього, що описано вище. Але якщо ти віддаєш перевагу інтенсивній, структурованій програмі під керівництвом викладача, тебе ймовірно може зацікавити наш інтенсив з комп'ютерних наук. Ми НЕ рекомендуємо здобувати ступінь магістра.

Щоб слідкувати за оновленнями цього посібника, а також новинами та ресурсами в галузі комп'ютерних наук, можна приєднатися до списку розсилки на сторінці TeachYourselfCS.com.