Чи справді CS50 — найкращий онлайн-курс для початківців
Ви відкрили цю статтю, і тепер ми в незручному становищі: я бажаю, щоб усі дочитали її до кінця, але частина з вас вважає, що CS50 — це перехвалена, поверхнева дурниця; а інша частина з якоїсь причини цього не розуміє.
Жартую.
Усі мають право на власну думку. Навіть на таку, що CS50 найліпший курс для розробників-початківців. Головне, щоб ця думка не завадила вам дочитати статтю до кінця, інакше як вам зрозуміти, що вона не вірна.
Усім мої вітання, з вами Сергій, і це перший не хвалебний огляд «CS50: Вступ до комп’ютерних наук» від Гарвардського університету.
Що ж таке CS50
Перш за все, я маю попередити, що «CS50» — це назва версії курсу для кампуса. А в цій статті мова йде про CS50x MOOC (Massive Open Online Course). Але заради простоти, я буду користуватись назвою «CS50». Отже...
Якщо не заглиблюватись у деталі — один з найкращих початкових курсів до комп’ютерних наук. Початок свій бере у Гарварді, а зараз викладається ще у декількох університетах, а також доступний для проходження онлайн на різних платформах.
Як викладають CS50
Для тих, хто не навчається в кампусі, курс доступний у вигляді медіатеки відеолекцій та добірки практичних завдань.
Викладає професор Девід Дж. Малан — доволі харизматичний дядько і гарний спеціаліст, де-факто обличчя курсу; а ще він з якихось причин ненавидить друковані телефонні довідники та намагається їх знищити.
Схема навчання доволі проста. Спочатку дивитесь лекцію, де Девід за допомогою слайдів, живого кодінгу та інтерактивів зі студентами пояснює щось зі світу комп’ютерних наук та прикладного програмування. Потім ще можна переглянути додатки: відносно короткі відео, де вже асистенти Девіда надають поглиблену інформацію до лекційного матеріалу. Потім ви виконуєте практичні завдання та відправляєте їх на перевірку платформі, проходите декілька кіл пекла в боротьбі з відверто тормознутим автоматичним тестуванням, з рештою виконуєте усі вимоги до усіх завдань і переходите до наступної лекції. Наприкінці курсу вас очікує написання проєкту з максимально розпливчастими вимогами, який ви можете виконувати двох або втрьох з одногрупниками.
Якщо ви виконали певну кількість практичних завдань, здали фінальний проєкт та маєте близько $250 (кажуть, останнє не обов’язково), то можете отримати цифровий сертифікат з вашим ім’ям. Сертифікат має близьку до нуля практичну користь, але про це трохи далі.
Стислий зміст курсу
Кому дуже цікаво, програма курсу легко гуглиться. Я ж не буду вкотре робити копіпаст, а просто скажу, що на цьому курсі ви дізнаєтеся наступне:
- Комп’ютерні науки вивчають дані та методи взаємодії з ними.
- Комп’ютери (або точніше — їхні процесори) оперують машинним кодом, і не розуміють нічого, окрім цього коду.
- Для кожної окремої архітектури процесора існує набір зрозумілих команд машинного коду.
- Комп’ютерна програма — це послідовність інструкцій, які має виконати комп’ютер.
- Високорівневі мови програмування дозволяють створювати програми, абстрагуючись від машинного коду, а перетворення вихідного коду відбувається за допомогою спеціальних програм: компіляторів або інтерпретаторів.
- Кожна мова програмування визначає свій синтаксис — правила написання програм цією мовою.
- Усі мови програмування мають реалізацію найпоширеніших типів даних, їх структур, та надають змогу реалізувати відсутні структури самостійно (у більшості випадків).
- Усі мови програмування мають можливість виконувати (або не виконувати) окремі блоки коду, або виконувати їх повторно (циклічно) залежно від умови.
- Також мови програмування надають можливість виокремити окремі блоки коду у функції — окремі програмні сутності, які можуть бути використані повторно у різних місцях програми.
- Дані зберігаються в пам’яті, та залежно від свого типу займають певну кількість комірок.
- Алгоритм — це визначена послідовність операцій та умов до їх виконання, а також вхідні та вихідні дані, які використовуються та генеруються цією послідовністю.
- Програмування засновано на структурах даних та алгоритмах.
- Найпоширеніші завдання вже мають реалізацію певною (або частіше декількома) мовою програмування; такі рішення збираються у функціональні бібліотеки або просунуті конструктори для використання в певному домені (фреймворки).
І... щойно я доволі точно переказав зміст усього курсу та заощадив вам час на його проходження.
Звісно, моя версія не така цікава та захоплююча.
Чи буде цього курсу достатньо? Залежить від мети, яку ви поставили перед собою. Якщо ваш намір — пройти лікнеп з комп’ютерних наук, то так. Якщо щось інше, то ні.
До суті
Отже, CS50 — це початковий курс для вивчення комп’ютерних наук. Його мають пройти усі, хто бажає отримати CS ступінь в Гарварді, а також можуть пройти інші студенти для «розширення кругозору». Декілька слів про те, як працює комп’ютерна пам’ять, як оперують даними, які мови програмування є. Така собі оглядова розповідь довжиною в десяток тижнів про те, що взагалі можна робити за допомогою цього програмування, і як приблизно це можна робити.
Хто не вірить, просто гляньте на перелік мов, яких торкається цей курс:
- Scratch (не те щоб мова, а конструктор для дітлахів, але най буде...)
- C
- Python
- SQL
- JavaScript
- HTML
- CSS
Така солянка дозволяє з висока подивитись на підходи та реалізацію одних і тих самих операцій у різних мовах, та виокремити загальні шаблони до розв’язку певних завдань. А іноді окрема мова просто більше підходить для демонстрації конкретного процесу.
Ніхто ж насправді не вірив, що тут когось навчать програмувати 3+ мовами?
Чи складний цей курс
Дуже багато студентів зазначають, що вступний курс має мало спільного з прогулянкою парком. І це доволі звичайно для курсів, де одна з умов полягає у тому, що левову частку інформації ви маєте знайти та засвоїти самостійно. Простими словами: на лекції скажуть, що 2 + 2 дорівнює 4, а у якості домашки загадають розв’язати диференціальне рівняння. І це є чи не основною причиною того, що студенти кидають курс. І так, відсоток дроп-аута тут просто пробиває стелю. Лише близько 5% студентів подолали виконання усіх практичних завдань.
Мова про студентів, які навчались саме за онлайн-версією курсу. Серед студентів кампуса статистика геть інша, і вже майже усі змогли успішно впоратись. Але цим людям спочатку треба було потрапити в Гарвард.
Особисто я не помітив у цих завданнях нічого складного. Для мене було куди складніше тримати концентрацію під час перевірки тестами, бо вже за пару годин я як німецький хлопчик починав кричати на монітор.
Проте цілком можливо, мої складні відносини з чек-ранером — це виняток. Я не помітив, щоб студенти масово скаржились на процесор перевірок; але я також не скажу, що такі скарги взагалі відсутні, і час від часу вони випливають то тут, то там.
Так, цей курс надає виклик початківцю, але він не містить неможливих завдань. Зрештою, 5% онлайн користувачів та студенти кампуса регулярно їх виконують.
Чи це справді найкращий курс від Гарварда
Подекуди ще кажуть «найкращий курс з програмування для початківців від Гарварда». І чомусь завжди далі починають розповідати про різних людей з IT-тусовки, які заходили прочитати лекцію, про викладача, про рейтинг Гарварда. І завжди дуже скупо про те, чому цей курс навчає, і яку користь надає.
І я можу таке зрозуміти, бо якщо порівняти зміст курсу з навмання обраною мапою розвитку спеціаліста, то стає помітно, що програма курсу закриває малесеньку крапочку на безмежному полотні. І це вимагає доволі високої залученості протягом тривалого часу.
Як на мене, буде не дуже доречно порівнювати вступ до комп’ютерних наук з прикладним програмуванням. CS50 — це дійсно гарний курс, але він ніколи не мав на меті зробити когось програмістом. Ба більше, навіть викладачі курсу сходяться на думці, що вступного курсу буде недостатньо для опанування професії. Іншими словами — це лише перші кроки на довгому шляху навчання.
З цієї ж причини я ніколи не зможу назвати CS50 «ліпшим курсом», бо його ефективність як самостійної навчальної програми (якою він ніколи не був і не мав цього меті!) буде десь на рівні плінтуса. Дуже високі вимоги — і не дуже визначні результати.
Трохи критики, яка швидше стосується тутешніх моїх колег — адептів CS50, — ніж курсу самого по собі, який, я нагадаю, дійсно гарний у своїй ніші.
Що стосується згадування Гарварда — то це банальна маніпуляція. Я не кажу, що цей факт треба замовчувати; я кажу, що характеристика «від Гарварда» явно не перше, що бажаєш побачити серед інших до навчального курсу. З цієї точки зору ліпше буде пройти MIT6.00, який на відміну від CS50 все ж надає практичні навички в конкретній мові, і цілком може розглядатись як самостійний (хоча так само ніколи не мав цього на меті). А в згаданих рейтингах вишів MIT крутить Гарвард по-всякому вже протягом 10 років, якщо це комусь цікаво.
І зрештою, чому б просто не вступити до Гарварда? Так, це складно, але щороку сотні абітурієнтів це роблять.
Чому хтось взагалі може радити цей курс
А чому б ні? Курс дійсно непоганий. Та й Девід гарно його розповідає.
Хоча заради справедливості маю зауважити, що Девід з якоюсь механічною завзятістю розповідає одне і те ж саме, однаковими словами та з однаковою інтонацію і діями, де б він не опинився: в аудиторії, на інтерв’ю, в проморолику, будь-де. І так вже років з 10. А тому під час праці над цією статтею я знаходився у перманентному стані «це ж було вже».
Однак навряд хтось буде так само по декілька разів передивлятись усі відео з ним, тому припускаю, що це була моя особиста проблема. Зрештою, не згадаю, щоб хтось ще на це скаржився.
І повертаючись до питання у підзаголовку, якщо бажаєте на чистоту, то я не маю відповіді. Хтось просто не любить комерційні IT-курси як явище, і тому спамить CS50 на кожному куті. Для когось порадити CS50 як перший курс — це просто ввічливий спосіб сказати: «Відчепись, я не маю часу займатись твоїми проблемами». А хтось дійсно вірить, що цей курс несе якусь користь початківцям. І це тільки те, що спадає мені на думку одразу; мотивація може бути дуже різною.
Справді, розібратись з потребами людини, виявити її слабкі та сильні сторони, врахувати побажання, підібрати щось серед усього різномаїття IT-спеціальностей та сформувати якусь мапу розвитку — це (та інше) вимагає дуже багато часу та зусиль. Повірте, рахунок іде на дні, і посиденьками за кавою тут не обмежитись. А тому проста відповідь у стилі «А пройди CS50» цілком доречна, і не містить стільки сарказму, як «Навчись програмувати». І тому я не маю жодного морального права когось у такій пораді звинувачувати.
Звинувачувати — ні, а от спитати — ви угораєте? — можу. Тому, щоб двічі не вставати, моя версія рубрики...
Критикуєш — пропонуй!
Щоб не відволікатись від першочергової теми й не перетворювати цю статтю на нескінченний список того, які ресурси вам доступні, я просто сфокусуюсь на тих аргументах на користь CS50, які зустрічались мені найчастіше.
- CS50 фокусується на мові програмування C, яка основна та взагалі найліпша.
Вирази «Бути програмістом» та «Знати C» дійсно були тотожні... десь так у
- CS50 не вчить конкретній мові програмування, а надає натомість базові основні основи™ для подальшого занурення у конкретну мову програмування.
Я ще не бачив жодної документації до мови програмування, яка б починалась не з опису доступних базових типів даних та операції. Чому б не почати одразу з цікавої вам мови? Лезо Оккама в дії.
- Вивчення CS50 спростить подальше вивчення програмування.
Вважаю це дійсно так. Зрештою будь-яка підготовка ліпша, ніж ніякої. Проте витратити 100 або більше годин зараз, щоб можливо(!) заощадити собі пару годин потім — це доволі сумнівний розмін.
- Практичні завдання CS50 дозволяють опанувати базові навички.
Платформи на кшталт LeetCode або Codewars мають тисячі завдань, які вже класифіковані за складністю, мовою програмування та доменом.
- CS50 розглядає базові алгоритми.
Книга «Грокаємо алгоритми» (до речі, доступна в українському перекладі) робить те саме (і навіть більше), написана мовою, яку зрозуміє п’ятикласник, та читається від корки до корки за пару тижнів по вечорах. А за час, відведений під CS50, навіть мій кіт упорається.
- CS50 має гарну візуалізацію алгоритмів.
Візуалізація від університету Сан-Франциско: інтерактивна, можна налаштувати вхідні параметри та швидкість виконання, а також пройти алгоритмом крок за кроком в обох напрямах.
- CS50 — це складний курс, який надає виклик!
Існують «Cracking the Coding Interview» за авторством Гейл Макдауел та вже згадані тут LeetCode, Codewars та інші. Всі вони мають задачки, які з наскоку не розв’яжуть розробники з 10+ роками досвіду. Але, як на мене, «складність» — така собі метрика для навчального курсу.
- CS50 навчить алгоритмічного мислення та закарбує гарний підхід до побудови застосунків.
Я б тут посперечався. Але якщо «алгоритмічне мислення™» ще якось можна притягнути, то от про гарний підхід до побудови — це вже занадто.
По-перше, абстракціям та побудові програм навчає CS51, і повноваження CS50 сюди не розповсюджуються. Тобто курс від самого свого задуму не має виконувати цю задачу.
По-друге, в нашому Всесвіті існують вже згадана «Грокаємо алгоритми» та «чиста» серія від дядька Боба.
І найважливіше: розуміння патернів та вміння їх застосовувати приходять з досвідом. І, мабуть, жоден курс цьому не навчить. Хто не вірить, просто запитайте когось зі знайомих програмістів: чи доводилось їм робити огляд шматка коду від графомана, який напхав туди усі патерни, про які вчора дізнався.
- По завершенні CS50 надається сертифікат.
Рекрутера більше цікавить ваш стек та попередній досвід. А так у нас навіть на дипломи профільних вишів не завжди дивляться.
Сертифікат про проходження CS50 можна розцінювати лише (!) як підтвердження власного вміння ставити ціль та досягати її. А також як підтвердження того, що у вас ДУЖЕ багато вільного часу.
- ... диплом від Гарварда!
Не займайтесь самообманом. Це сертифікат (!) про проходження курсу. І він має практичну цінність тільки як додаток до відповідного диплому (наприклад, CS degree, отримана в Гарварді). В будь-якому іншому випадку його цінність та ж сама, що у моєї «відмінно» з лінійної алгебри за перший курс.
Іншими словами, отримати диплом Гарварда можна тільки навчаючись у Гарварді.
- Це безкоштовний курс, а IT-школи тягнуть гроші за оманливі обіцянки.
Чесність окремих IT-шкіл — це предмет для іншої статті. В контексті поточної най їх обіцянки лишаються на їх совісті.
З практичної точки зору CS50 вимагає стільки ж часу, а подекуди більш як середній курс від середньої IT-школи. А обсяг розглянутого матеріалу буде з величезною перевагою на користь IT-школи.
І треба зауважити, що CS50 безплатний. Безкоштовний — це доволі суб’єктивна характеристика; наприклад, я не можу надати таку чомусь, що потребує 100 годин часу.
Час — це чи не єдиний невідновлюваний ресурс, яким володіє людина; і його менше з кожною секундою. Заплатити курсам «Рога та Копита» та заощадити собі години навчання може бути набагато дієвішою стратегією. Зрештою, гроші можна заробити, а години життя — неможливо.
І щоб мене не звинуватили у грі на користь IT-шкіл, я чітко та гучно скажу: «Усі наведені вище альтернативи або геть не потребують додаткових фінансових вливань, або ж потребують їх у мінімальному обсязі. А про IT-школи я вперше згадав в цій секції лише декілька абзаців вище».
Замість висновку
Я намагався надати справедливу оцінку, і ні в якому разі не бажав зробити її зневажливою. CS50 дійсно гарний курс від престижного університету. Він дозволяє отримати деякі фундаментальні знання та має задум, що ви продовжите своє навчання далі. Однак для людей, які бажають отримати практичні навички в програмуванні, саме академічність CS50 може стати перешкодою, яка відіб’є це бажання взагалі. Бо CS50 не має на меті надати вам практичні навички тут і зараз.
CS50 не можна порівнювати зі «сфокусованими» курсами (комерційними чи ні), бо з таким самим результатом можна порівнювати ворону та письмовий стіл. Такі курси знаходяться в різних категоріях, і фактично не конкурують проміж собою, якби хто те порівняння не бажав притягнути.
Порівняння буде більш доречним для спеціалізованих версій CS50, таких як CS50W чи CS50AI. Хоча і в цьому випадку воно буде притягнуте за вуха.
За тим я резюмую, що CS50 ідеально підійде, якщо для вас справедливо одне чи декілька з наступних тверджень:
- Ви плануєте здобути ступінь магістра комп’ютерних наук в Гарварді.
- Вам загалом неважливо, що саме та як вивчати.
- Ви просто полюбляєте дізнаватись щось нове.
- Ви маєте необмежені ресурси — час для вас не проблема, а отримання конкретних результатів через рік-два-три цілком приємне.
- Ви вже розробник, проте відчуваєте брак фундаментальних знань, а читати документацію вам забороняє релігія.
- Ви не плануєте будувати кар’єру, пов’язану з IT, але серед ваших знайомих багато програмістів, і ви б бажали розуміти про що вони балакають своєю місячною мовою.
- Ви працюєте над статтею про CS50.
І коли я казав про «адептів CS50», я не мав на увазі тих, хто каже: «Норм курс». Я казав про авторів сотень хвалебних відео та рецензій, які приписують цьому курсу хіба не магічні властивості, яких його автори ніколи в навчальну програму не закладали.
Перш за все треба тверезо оцінювати власні побажання та відповідність їм певного навчального матеріалу. І якщо те, що пропонує CS50, відповідає очікуванням, то цей курс — чудовий вибір.
На тому побажаю успіхів та буду з вами прощатись.
Посилання
- Going over the cliff: MOOC dropout behavior at chapter transition
- This was CS50x
- CS50: Computer Science Courses and Programs from Harvard
- CS50: Introduction to Computer Science
- CS50 — найкращий безкоштовний онлайн-курс з програмування для початківців від Гарварду
- Чому я займаюсь популяризацією CS50
- Як записатися на курс CS50 та безкоштовно здобути сертифікат
- CS50: відгуки про курси та пошук напарників для спільного навчання
- Що надихнуло мене почати вивчати CS50
- Що робити, коли застряг у вивченні CS50
- Мої відкриття на курсі CS50
34 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів