Pull to refresh

Обучение на курсе CS50x

Reading time 4 min
Views 61K
Добрый день.

Прежде чем записаться на курс Harvard CS50x я сначала пролистал поиск, выискивая отзывы о нём. С удивлением обнаружил, что результатов не так уж и много. Надеюсь эта краткая информация поможет другим страждущим понять, надо ли им это.

Итак, что же нам говорит сайт edX об этом курсе:
CS50x is Harvard College's introduction to the intellectual enterprises of computer science and the art of programming for majors and non-majors alike, with or without prior programming experience. Topics include abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web development. Problem sets inspired by real-world domains of biology, cryptography, finance, forensics, and gaming. As of Fall 2012, the on-campus version of CS50x is Harvard's largest course.

В переводе на русский это значит следующее: на курс можно записаться всем желающим, даже если у вас за спиной 3 класса церковно-приходской школы. В процессе изучения будут использованы C, PHP, JS, SQL, CSS и HTML. В отличие от курса MIT 6.00X, где требуется High School algebra, при поступлении на CS50x никаких требований к математике не выдвигается, что порадовало, так как с высшим образованием у меня отношения не сложились.

Пара слов о преподавателе курса, Дэвиде Малане


Поскольку, как уже писал выше, в институт я ходил 3 раза в жизни, записавшись на курс я ожидал что курс будет вести потрёпаный жизнью мужчина с залысиной, который будет долго объяснять оператор printf(), а потом сразу — как построить матрицу третьего порядка. Как бы не так. Дэвид — достаточно молодой лектор, при этом энергии с которой он ведёт курс хватит чтобы зарядить севший ноутбук. В качестве примера — прямо на первой лекции он показал разницу между линейным и логарифмическим временем выполнения функции, сначала посчитав 10 студентов по головам, сказав, «нет, это скучно», а потом попросил студентов в зале встать, разбиться на пары, и садиться каждому второму называя соседу своё число, пока не остался один с итоговой суммой всех студентов в аудитории. Я достаточно сумбурно объяснил, поэтому на 17 минуте видео можно увидеть, как это выглядело. Ну и алгоритм поиска носков прямо в аудитории, конечно, тоже заставил посмеяться.

Аналогичным образом ведутся остальные лекции. Скучно? Нет. Интересно? Да!

Типичная неделя в CS50


Обычно неделя состоит из 4 частей:
1. Видеолекция. Она разбита на 2 части (понедельник и среда, как её ведут в Гарварде), но нам она достаётся в рамках одной недели. Каждую лекцию можно скачать в 4-х разрешениях(вплоть до 1080p), есть субтитры на английском и русском(машинный перевод из google translate). Так же для каждой лекции выложены использующиеся исходники, слайды, и дополнительные файлы.
2. Problem Set (так же называемый p-set). Это и есть наше задание на неделю. Оно делится на 2 части — Standard edition и Hacker edition. Standard edition вы должны решить в обязательном порядке, и отправить на сервер cs50 для получения оценки. Hacker edition решается для собственного удовольствия, и отправлять его не надо.
3. Sections. Это видеозапись из комнаты, где собираются студенты чтобы понять какие-то тонкости, или, если у них возникли проблемы, помощники Дэвида объясняют алгоритм решения проблемы.
4. Shorts. Короткие видеоролики объясняющие одну конкретную тему. Например, что такое массивы, как работает шифр Цезаря, пузырьковая сортировка, и т.д. При возникновении проблем с алгоритмами советую смотреть именно эту часть.

P-sets


Поскольку курс начался только в октябре, в эфир выпущено всего 4 недели, хотя остальные есть на торрентах, и их можно спокойно скачать. Однако задания будут доступны только в момент выкладывания видео на сайте edX.
Ниже я напишу какие задания вы решите своими собственными головой и руками:

Неделя 0 (Темы — биты, двоичное исчисление, ASCII, алгоритмы, бинарные выражения, условия, циклы, переменные):
  • SE: Написать приложение с помощью Scratch
  • HE: То же самое, но с помощью BYOB
(Честно говоря, это задание самое нелепое, т.к. Scratch и BYOB сильно ограничены в функционале, и ничего хорошего из этого не выходит).

Неделя 1 (Темы — C, исходный код, компиляторы, объектный код, функции, комментарии, стандартный вывод, арифметические операции, переменные, типы, приведение типов, библиотеки, условия, циклы):
  • SE: Написать Hello World.
    Написать конвертацию температуры из градусов по Цельсию в градусы по Фаренгейту
    Написать программу, которая строит лесенку марио с выравниванием по правой части
    Написать минимальное количество монет, с помощью которых можно дать сдачу (69 центов — это 25+25+10+5+1+1+1+1 = 8 монет)
  • HE: Подсчёт контрольной суммы пластиковых карт.(проверил на своих картах — работает, блин!)
    Лесенка из Марио, но в обе стороны


Неделя 2 (Темы — функции, глобальные переменные, параметры, возвращаемые значения, стэк, массивы, строки, аргументы командной строки, криптография):
  • SE: Реализовать шифр Цезаря
    Реализовать шифр Виженера
  • HE: Написать взломщик DES-паролей (по словарю и перебором)


Неделя 3 (Темы — линейный поиск, бинарный поиск, пузырьковая сортировка, сортировка выбором, сортировка слиянием, асимптотическая нотация):
  • SE: Доделать реализацию игры «Балда», которую ленивые CS50-вцы не доделали до конца. А именно, отображение символов на экране, поиск слова в словаре, переворачивание матрицы букв на 90 градусов
  • HE: то же что и SE, но дополнительно надо реализовать подсказки, и подсчёт очков ведётся на основе «стоимости» букв


Неделя 4 (Темы — рекурсия, отладка, ввод/вывод в файлы, структуры, указатели, выделение памяти, «куча»(heap)):
  • Заданий нет


Остальное


Текущий курс идёт с 15 октября по 15 апреля. Всего будет 8 pset'ов, 2 экзамена, и 1 проект, который вы должны будете сделать самостоятельно, или с кем-нибудь вместе. Записаться на курс нужно прямо сейчас можно в любое время, главное выполнить все задания до 15 апреля. В среднем на одну неделю уходит от 4 до 12 часов, включая просмотр видео. Конечно, если вы, как и я, не любите пользоваться gdb, и вместо этого используете printf() — время может значительно вырасти.

В общем, я думаю это отличный курс, если вы хотите подтянуть фундаментальные знания в программировании и алгоритмах, у вас есть свободное время чтобы потратить его с пользой, или вам хочется повесить перед монитором диплом с логотипом Гарварда. Всем заинтересовавшимся советую посмотреть по ссылке, и зарегистрироваться. Не пожалеете, обещаю.
Tags:
Hubs:
+10
Comments 26
Comments Comments 26

Articles