CS50 - это вводный курс Гарварда по информатике. Этот курс не просто предназначен для онлайн-обучения, это фактический курс, который преподается студентам Гарварда. Все лекции снимаются в Гарварде и выкладываются в Интернет вместе с заданиями, обучающими видео и всеми вспомогательными примечаниями (примечания и задания, ссылки на которые приведены ниже, если вы хотите взглянуть на них). Ваши задания оцениваются, поэтому вы придерживаетесь того же стандарта, что и фактические студенты Гарварда. Все это невероятно доступно совершенно бесплатно.

Курс начинается с самых основ, объясняя двоичный код и использует визуальный язык программирования, основанный на блоках Scratch, прежде чем перейти к C. Сложность очень быстро возрастает, с подробным обсуждением того, как компьютер обрабатывает код, как информация хранятся в памяти и какие структуры данных. Затем он переходит к HTML, Javascript и Python. К концу вы уже запускаете веб-сервер и получаете данные из API.

Как человек, изучавший программирование на онлайн-курсах, я всегда задавался вопросом, не упускаю ли я чего-то, не изучая те теоретические модули, которые изучают студенты университета. Несмотря на то, что этот курс был всего лишь вводным, он помог мне лучше понять, что компьютер делает с кодом, который я пишу, и устранить некоторые из моих сомнений в себе.

Кому следует пройти этот курс?

Курс был разработан с учетом ряда способностей. Задания обычно состоят из двух частей: «менее комфортно» и «более комфортно», и вы можете выбрать, за что брать. До начала курса я уже был на среднем уровне навыков программирования, поэтому выбрал «более удобные» задания. Я все еще находил задания на C довольно сложными.

Подходит ли он для новичков?

Все очень хорошо объясняется на лекциях, есть отличные заметки и дополнительные короткие видео, которые более подробно объясняют конкретные темы. Поскольку этот курс очень популярен, есть также множество других ресурсов, таких как subreddit и специальный сайт stackoverflow. Таким образом, несмотря на сложность, курс будет управляемым, если вы потратите время.

Однако, если вы только только только начинаете, я бы не рекомендовал это. Этот курс подразумевает большую рабочую нагрузку, вероятно, около 200 часов, если вы новичок (подробнее о рабочей нагрузке ниже). Подобные усилия отвратят многих людей, прежде чем они дойдут до конца.

Такие курсы, как этот или этот по веб-разработке, научат программированию и помогут вам создавать крутые вещи намного быстрее, что поможет вам обрести уверенность. Я уверен, что каждый на каком-то этапе этого курса почувствует себя идиотом, поэтому важно сохранять уверенность в себе, чтобы идти дальше. Если до этого вы мало что сделали, вам будет легко уйти, думая, что кодирование просто не для вас, что почти наверняка неверно.

Это из Гарварда ... Тебе нужно быть супер умным?

Нет, совсем нет. Как упоминалось ранее, курс ориентирован на разные уровни опыта. Единственное, чего ожидают от студентов, - это количество часов, которое студенты будут проводить вне лекций. Задания, «psets», могут занять до 20 часов, поэтому было бы сложно управлять в режиме реального времени при выполнении других модулей университетского курса. Однако, поскольку это онлайн-курс, вы можете делать все в своем собственном темпе.

Содержание курса

Курс разбит на недели, в которых он будет преподаваться в Гарварде. Однако, делая это онлайн, вы можете выполнять столько, сколько хотите, каждую неделю.

  • Неделя 0: двоичный код, что такое алгоритм, Scratch. Заметки, pset0.
  • Неделя 1: компиляция, введение в C (операторы if, циклы for и while, функции, типы данных), библиотеки. Заметки, pset1.
  • Неделя 2: алгоритмы поиска и сортировки, нотация большой буквы O (время для выполнения алгоритмов). Заметки, pset2.
  • Неделя 3: указатели, выделение памяти, шестнадцатеричные Notes, pset3.
  • Неделя 4: структуры, связанные списки, хеш-таблицы, деревья, попытки, рекурсия. Заметки, pset4.
  • Неделя 5: HTML, CSS, Javascript, TCP / IP. Заметки, pset5.
  • Неделя 6: Python. Заметки, pset6 (повтор предыдущих pset в python).
  • Неделя 7: Запуск сервера веб-сайта, шаблоны Flask, Jinja. Заметки, pset7.
  • Неделя 8: файлы cookie и сеансы веб-сайтов, SQL и базы данных. Заметки, pset8.
  • Неделя 9: Никаких лекций и психотерапевтов.
  • Неделя 10: Обзор предыдущих лекций. Доступны семинарские лекции по различным технологиям для выработки идей для финальных проектов. Окончательная спецификация проекта.

Нагрузка

Вы можете рассчитывать потратить от 10 до 20 часов на выполнение каждой лекции и каждой лекции. Опрос собственных студентов Гарварда показывает, что они в среднем составляют около 10 часов на одно задание. Вдобавок ко всему, лекции длятся около 2 часов в неделю плюс последний проект, который нужно завершить в конце. Поэтому разумно ожидать, что весь курс займет от 100 до 200 часов, в зависимости от начального уровня ваших навыков.

Мой личный опыт

Мне очень понравились первые недели курса, с первой по четвертую, когда вы работаете на C.Просматривать такие вещи, как указатели, связанные списки и другие структуры данных на самом деле, было увлекательно, и это именно то, о чем я хотел узнать в этот курс. После 4-й недели были представлены темы, с которыми я был более знаком (HTML, Python, Javascript и т. Д.), Поэтому в последующие недели я узнал меньше. Тем не менее, они мне все еще нравились.

Если вы хотите сравнить свой код с тем, что я представил, чтобы увидеть мой подход, вот ссылка на Github. Вероятно, они далеки от лучших решений, но я считаю, что изучение подходов других к той же проблеме является полезным способом обучения.

Затраченное время

В целом курс занял 133 часа за 19 недель. Из этого времени я потратил 73 часа в течение 7 недель на лекции и выполнение заданий, а затем 60 часов в течение 12 недель на заключительный проект.

Примечание: на 9-й неделе не было лекций или pset, а на 10-й неделе потребовалось гораздо больше времени, чем на последний проект.

Финальный проект - Геймификация фондового рынка

У меня был список технологий, с которыми я хотел получить опыт: контейнеры Docker, использование AWS в целом, MongoDB, запуск сервера и использование API. Так что мне пришла в голову идея создать систему pset8, которая предполагала получение котировок на фондовом рынке и использование сервера Flask, и сделать из этого игру, которую я мог бы запустить в контейнере и развернуть на AWS. Для создания сетевой игры я использовал библиотеку Javascript Phaser 3 (которая тоже была для меня в новинку).

Вероятно, это было слишком много нового для одного проекта, и мне показалось, что поначалу это было действительно сложно. После того, как я прошел почти всю CS50 менее чем за 2 месяца, один только этот проект занял у меня почти 3 месяца!

Я рад, что я остался с ней, потому что игра работает! Вы играете космонавта, который должен прыгать вверх по логотипам компаний, внесенных в список акций Nasdaq 100. Логотипы перемещаются вместе с реальными данными фондового рынка, полученными из API IEX.

Вот ссылка на Github для кода. Он работает на сервере Flask, который я поместил в контейнер под управлением Alpine Linux. Затем я использовал ECS (Elastic Container Service) на AWS, чтобы разместить этот контейнер и сделать его доступным в Интернете. Рекорды хранятся в кластере MongoDB Atlas.

Использование ECS на AWS оказалось дорогостоящим; около 30 долларов в месяц даже с моим крохотным объемом трафика. Поэтому позже я перешел на бесплатный уровень на Heroku.

Заключение

Если вы занимались программированием и хотите глубже понять, как работают компьютеры и какой код, который вы пишете, на самом деле заставляет компьютер делать, это отличное место для начала. Этот курс заслуживает похвалы. Я многому у него научился, и мне это очень понравилось!