Каждый день появляются новые программы, онлайн и офлайн-курсы. Самая сложная задача — выбрать один продукт из широкого ассортимента. «Цех» просит читателей поделиться своим опытом прохождения различных курсов и программ, чтобы мы могли учиться лучшему у лучших. Полученные отзывы, которые будут соответствовать всем необходимым требованиям, мы опубликуем. Сегодня своим опытом обучения делится Арсений Сотский.
Я хочу рассказать не про курс, а про целую специализацию «Структуры и алгоритмы данных» (Data structures and algorithms) на Coursera. Она состоит из шести курсов, выпущенных совместно с Калифорнийским университетом Сан-Диего и московской Высшей школой экономики.
Наука об алгоритмах — это наука о том, как программисту написать программу так, чтобы она решала поставленную задачу, и при этом работала секунду вместо получаса или, если речь идет о больших данных, — пару часов вместо недели. Каждый из этих шести курсов вполне самодостаточен, и при должном уровне знаний студент может пройти любой отдельно. Кроме, пожалуй, последнего, который представляет из себя практический проект.
Первые два курса (6+6 недель) рассказывают о базовых алгоритмах и структурах данных, следующие три (6+4+5 недель) более специализированные: в них разбирают алгоритмы на графах, строках и продвинутые алгоритмы. Проект, на реализацию которого отводится 3 недели, посвящен расшифровке генома: создатели курса предлагают пройти путь ученых, которые недавно занимались этим вопросом. Получается, весь учебный процесс занимает 30 недель — внушительный срок. Если у вас нет такого количества свободного времени, остановитесь на первых 2-3 курсах, это тоже будет полезно.
Я закончил эту специализацию в мае этого года, под конец 4 курса обучения в университете. Это было нелегко, особенно в условиях жесткого дедлайна — специализацию нужно было завершить полностью до начала июня. Советую разумно распределять время: например, поочередно проходить курсы в течение учебного года.
Цель моего обучения была простая — получить хорошую и уверенную базу во владении алгоритмами и структурами данных, чтобы применять полученные знания в программировании. Кстати, перед началом курса необходимо обладать начальными навыками в этой области — оценка за курс складывается из решенных задач (программы можно писать почти на любом известном вам языке программирования) и небольших тестов. Все обучение проходит онлайн: каждую неделю нужно смотреть видеолекции (суммарно полтора-два часа) и решать задачи по теме недели. Отправлять варианты решений задач можно сколько угодно — система проверяет ваш код на тестах автоматически и говорит, прошла ли программа все тесты, или что-то пошло не так и код надо исправить. Также во время учебы можно было задавать вопросы на форуме — отвечали как студенты, так и сами составители.
В разработке программы специализации принимал участие целый профессиональный коллектив преподавателей. Они четко, подробно и понятно объясняют все новые понятия, алгоритмы и их имплементацию, а все слайды лекций доступны для скачивания. Что мне особенно понравилось: перед объяснением алгоритма приводили практическую задачу, в решении которой он может помочь. В результате алгоритм из непонятно для чего нужной теоретической ерунды сразу превращается в практический инструмент. Например, перед рассказом про обход графа лектор сказал пару слов про построение кратчайшего маршрута в картах на нашем смартфоне — там, в частности, и применяется этот алгоритм.
Специализация оказалась для меня новой, интересной и полезной — алгоритмы будут спрашивать на любом собеседовании для программистов, да и в работе они нужны (а если не они, то метод мышления, который развивается при их изучении). Я советую ее всем, кому интересно программирование и кто хочет разобраться в алгоритмах, их применении и структурах данных.