Обсуждаем один из возможных планов самообразования в Computer Science за 1.5 года со ссылками на онлайн-курсы и другие образовательные сайты.
При составлении этого плана мы отталкивались от предложенного Siraj Raval пятимесячного интенсива, но постарались подойти более реалистично к срокам прохождения курсов из расчета 8-10 часов в неделю. При большем или меньшем временном ресурсе умножайте приведенные длительности на соответствующий коэффициент.
Любой план субъективен, поэтому задачей этой публикации было не составление идеального плана самообразования в Computer Science, а создание конкретного примера одного из возможных направлений с достаточным числом ссылок на образовательные ресурсы, изучив которые вы будете способны воплотить новые идеи на практике. Очевидно, что независимо от наших рекомендаций вы можете корректировать время и направление развития обучения. Мы постарались учесть разносторонний опыт, накопленный за время существования proglib.io, и там, где это было уместно, дополнили тематические блоки ссылками на наши публикации.
Если вы намерены предварительно продумать курс под себя еще более детализировано, изучите различные соображения по самообразованию на примере американских университетов и ресурса Teach Yourself Computer Science (перевод). Если у вас есть возможность отводить занятиям большее время (по 18-22 часов в неделю), рекомендуем обратить внимание на план Open Source Society University.
Наверняка вы хотите, чтобы самообразование проходило эффективно и с максимальной пользой. Некоторые из читателей, начинающих знакомство с IT, не знают, с чего начать, или, имея некоторые соображения на этот счет, хотели бы узнать, как попасть в IT после 30. Возможно, вы стремитесь скорее стать Junior-разработчиком и начать зарабатывать на программировании. Перед тем, как изложить сам план, рассмотрим некоторые предварительные соображения относительно самообразования в Computer Science, справедливые для различных категорий учеников.
Предварительные соображения
Учитывайте, что обучение – это не зубрежка, а погружение в материал, решение практических задач и интервальные повторения. Чтобы избежать типичных ошибок, изучите советы для обучающихся программированию и как/что читать по программированию. Чтобы эффективно использовать свободное время, в дополнение к приведенным ниже курсам вы можете тренироваться в мобильных приложениях. Если вам по душе игровая форма обучения, обратите внимание на подборку соответствующих ресурсов и статью о 27 сайтах с задачками для оттачивания навыков программирования.
При просмотре видеолекций для экономии времени ускоряйте их в 1.25-2 раза, в особенности в тех местах, где происходит обзор концепций и повторение материала предыдущих занятий. Несмотря на легкость изложения, концентрация новых знаний в этих частях минимальна и рассчитана на то, чтобы освежить знания с учетом больших интервалов между лекциями при традиционном обучении. Если вы проходите урок за уроком, соответствующие нейронные связи будут поддерживаться за счет применения старых знаний в новых уроках. Подход ускорения видео требует некоторой привычки, но позволяет больше времени уделять действительно сложным моментам.
При чтении сопроводительных материалов ведите краткий конспект, дополняя его после каждой смысловой части. Пройдя какую-то из концепций, например, определенный алгоритм, полезно детально объяснить его реальному или воображаемому собеседнику. Это та составляющая, которой обычно сильно не хватает относительно самообразования в Computer Science и не только – фидбэка. Будет отлично, если вы можете найти заинтересованного партнера по занятиям – это не только повысит качество проверки тестовых работ, но также добавит в обучение соревновательный аспект и повысит мотивацию прохождения очередного курса.
По тем же причинам при нескольких вариантах реализации практической части выбирайте курсы с мгновенной обратной связью – те, в которых проверка результата происходит без задержки, например, непосредственно в консоли или по приложенным ответам. Если параллельно с планом вы хотите получать дополнительные знания из книг, иметь что-то вроде «списка книг на лето», в этом поможет подборка десяти лучших книг по Computer Science.
Обязательно пользуйтесь системами контроля версий, такими как GitHub и Gist, чтобы не тратить время на решение однотипных задач и реализовывать попутно с обучением различные проекты, приходящие на ум в процессе прохождения курсов. Тогда профиль GitHub можно будет использовать как портфолио при устройстве на работу.
Учебный план самообразования в Computer Science
Предлагаемый план самообразования в Computer Science разбит на три семестра, в среднем по 26 недель каждый. Первый семестр является фундаментом, в котором закладываются математико-алгоритмические основы компьютерных технологий и получаются представления о программировании.
Второй семестр посвящен различным аспектам, в которых полученные в первом семестре понятия реализуются через различные виды взаимодействий между компьютерами или между компьютерами и пользователями: базы данных, компьютерные сети, мобильные приложения и обработка текстов.
Третий семестр является наиболее субъективной частью этого плана, так как анализ данных и компьютерное зрение часто выносятся за пределы Computer Science. Однако с практической точки зрения владение этими технологиями в рамках Computer Science существенно расширяет навыки специалиста относительно решения современных задач анализа данных. В этом завершающем семестре также рассматриваются распределенные системы и практики разработки.
- Первый семестр – математика, алгоритмы и структуры
- Гарвардский CS50 (4 недели)
- Основы Python (4 недели)
- Математика для Computer Science (8 недель)
- Структуры данных (6 недель)
- Алгоритмы (8 недель)
- Второй семестр – интерфейсы взаимодействия
- Базы данных (3 недели)
- Компьютерные сети (6 недель)
- Веб (5 недель)
- Обработка текстов на естественном языке (4 недели)
- Мобильные приложения (5 недель)
- Третий семестр – анализ и управление данными
- Машинное обучение (10 недель)
- Компьютерное зрение (6 недель)
- Распределенные системы (5 недель)
- Практики разработки (4 недели)
1. Первый семестр – математика, алгоритмы и структуры
1.1. Гарвардский обзорный курс CS50 (4 недели)
Чтобы получить общее представление о Computer Science, пройдите курс CS50 Гарвардского университета. В качестве основного языка программирования используется язык С, что хорошо дополнит ваш инструментарий, так как в приведенном плане в этой же роли выступает высокоуровневый язык Python. Этот курс позволит увидеть картину в целом, и, если вы не уверены в выборе, понять, нужно ли вам заниматься Computer Science.
1.2. Основы Python (4 недели)
Язык Python – интерпретируемый объектно-ориентированный язык с динамической типизацией. Этот высокоуровневый язык позволяет быстро освоить основные концепции программирования и начать делать что-то практическое. Automate the Boring Stuff with Python Альберта Свейгарта – один из лучших учебников по Python с задачами, направленными на облегчение ежедневной рутины. Книгу в вышеуказанном темпе можно пройти за 4 недели, читая и делая задания одной главы в день. Либо можно ориентироваться на объем книги: 600 страниц это соответственно 150 страниц в неделю или 20-25 страниц в день.
Если вам больше нравятся интерактивные занятия, обратите внимание на один из перечисленных здесь курсов.
1.3. Математика для Computer Science (8 недель)
В освоении вопросов математической индукции, теории чисел, теории графов и прочих математических основ самообразования в Computer Science поможет соответствующий курс MIT, состоящий из 25 лекций и 12 контрольных работ. Полный конспект курса состоит из 557 страниц, соответственно в среднем нужно проходить около 10 страниц в день и решать 1-2 контрольные в неделю.
1.4. Структуры данных (6 недель)
Чтобы разбираться в связных списках, очередях, множествах, хэш-таблицах, бинарных деревьях и других структурах данных, пройдите курс университета Сан Диего, в создании которого принял участие Михал Левин, читающий в Школе анализа данных курс «Алгоритмы и структуры данных поиска».
1.5. Алгоритмы (8 недель)
Одним из лучших курсов по алгоритмам является курс MIT 6.006, состоящий из 8 разделов: 24 лекций и 7 подборок задач. Соответственно каждой теме можно уделить одну неделю. В качестве вспомогательно курса по алгоритмам и структурам данных на русском языке вы можете воспользоваться этим видеокурсом. Кроме того, мы подготовили соответствующую подборки книг, веб-сайтов, онлайн-курсов и видеоматериалов.
Когда будете разбираться в алгоритмах, помните о ресурсах с визуализацией – не только сортировок, но и других алгоритмов. На последней неделе проверьте полученные знания, ответив на вопросы по алгоритмам с собеседований в различных компаниях.
2. Второй семестр – интерфейсы взаимодействия
2.1. Базы данных (3 недели)
Для обучения работе с базами данных пройдите курс Мичиганского университета Using Databases with Python. В качестве базы данных в курсе используется SQLite3. Отточить свои навыки в написании SQL-запросов можно при помощи нескольких сайтов. Если вам потребуется проработать этот вопрос подробнее, воспользуйтесь нашей подборкой материалов для изучения баз данных и SQL.
2.2. Компьютерные сети (6 недель)
Шестинедельный курс от Google, входящий в специализацию Google IT Support Professional Certificate научит вас разбираться в TCP/IP, DNS, DHCP и прочих вещах, на которых строятся компьютерные сети. Если потребуются дополнительные разъяснения на русском, мы подготовили обзор на соответствующий курс.
2.3. Веб-программирование (5 недель)
Гарвардский курс CS50’s Web Programming with Python and JavaScript состоит из 10 лекций и является расширенным подмодулем первого курса (с другим лектором) описываемого плана, рассматривающим основные технологии современного веб-программирования. В течение каждой недели проходите по 2 лекции, отводя по два-три дня под изучение соответствующих технологий.
Язык JavaScript уже шестой год поряд остается самым популярным языком программирования по опросам StackOverflow. Если вы посчитаете, что с JavaScript вы хотите разобраться подробнее, пройдите курс freeCodeCamp или, если хочется разнообразия, посмотрите эту подборку видео.
Лучший способ научиться веб-программированию это создать свой проект. Поэтому параллельно с прохождением указанного курса создайте ресурс, в котором вы будете реализовать возможности рассматриваемых технологий. Множество идей проектов собрано в подборке Just Build Websites.
2.4. Обработка текстов на естественном языке (4 недели)
Одним из интерфейсов взаимодействия человека с миров является язык, на котором человек говорит. Для приобретения навыков в обработке строковых объектов и файлов, написанных на естественном языке, пройдите четырехнедельный курс Мичиганского университета Applied Text Mining in Python.
По этой теме на нашем сайте есть также статья с подборкой дополнительных материалов: онлайн-курсов, библиотек, блогов и книг.
2.5. Мобильные приложения (5 недель)
Для того, чтобы окунуться в разработку мобильных приложений, лучший старт это курс, в котором параллельно объяснениям создается первое приложение (такие курсы есть и для iOS, и для Android).
Если вас увлекла эта сфера и перед вами встал вопрос, стоит ли становиться разработчиком мобильных приложений, прочитайте эту статью.
3. Третий семестр – анализ и управление данными
3.1. Машинное обучение (10 недель)
Один из вариантов разобраться в главных особенностях машинного обучения – пройти десятинедельный курс Python for Data Science. Еще один вариант, который мы рассматривали ранее – план от новичка до профи в машинном обучении за 3 месяца, требующий соответственно 12 недель.
При прохождении любого из вариантов вам помогут ссылки на ресурсы по Machine Learning и подборка материалов по машинному обучению. При проработке конкретных идей и поиске истоков алгоритмов машинного обучения важно знать, как правильно искать и читать научные статьи. Чтобы не забывать основную терминологию этого объемного блока, добавьте в закладки страницу со шпаргалками по машинному обучению.
3.2. Компьютерное зрение (6 недель)
Вводный курс Georgia Tech представляет собой введение в компьютерное зрение, включая основы формирования изображений, обнаружение и сопоставление образов, отслеживание движения и т. д.
3.3. Распределенные системы (5 недель)
Распределенные системы – область с быстро меняющимся инструментарием, поэтому наиболее правильно в этом разделе рекомендовать книгу, рассматривающую фундаментальные особенности этой области. Одна из лучших книг по тематике распределенных систем, не теряющая своей актуальности для самообразования в Computer Science – Распределенные системы. Принципы и парадигмы Таненбаума и ван Стеена. Это довольно объемный труд, требующий чтения порядка 15-20 страниц в день и продумывания вопросов в конце каждой из глав.
3.4. Практики разработки (4 недели)
Курс Миннесотского университета объясняет как происходит совместная работа команды разработчиков, какие процессы и методологии ими используются для создания законченного программного продукта.
После прохождения плана
Наконец, по завершении или во время прохождения приведенного плана самообразования в Computer Science, могут возникнуть вопросы о том, какие еще есть сайты для самообучения и что нужно делать для совершенствования своих навыков. Подпишитесь на подкасты и Youtube-каналы. Если вас увлечет теоретическая сторона Computer Science, просмотрите этот список книг.
Если вы проходили этот план, чтобы найти работу в сфере Computer Science, посмотрите наши советы по написанию резюме и статьи о том, как должно выглядеть резюме, как успешно пройти любое техническое собеседование и протестируйте полученные знания из разных областей Computer Science на подборке задач, предлагаемых на собеседованиях.