Как из обычного кодера стать крутым разработчиком? Изучаем Computer Science
Computer Science — зачем учить?
Дисциплины Сomputer Science
Программирование является основой и базовой дисциплиной компьютерных наук, большинство студентов начинают изучение курса CS именно с него. Самые лучшие курсы программирования в рамках CS будут полезны далеко не только новичкам, но и опытным кодерам, которые могли пропустить те или иные концепции и модели программирования, когда учились этому впервые.
Лучшая книга: “Структура и интерпретация компьютерных программ” (Structure and Interpretation of Computer Programs). Авторы: Джеральд Сассман (Gerald Sussman) и Хэл Абельсон (Hal Abelson).
А на JavaRush, кстати говоря, всем желающим доступен для изучения легендарный гарвардский курс “CS50. Основы программирования”, полностью переведенный на русский.
Алгоритмы и структуры данных
Знание наиболее распространенных алгоритмов и структур данных помогает решать разного рода задачи, а это очень важно в любой из областей компьютерных наук, включая, конечно, и разработку программного обеспечения.
Лучшая книга: The Algorithm Design Manual. Автор: Стивен Скьена (Steven Skiena).
Знание компьютерной архитектуры, то есть понимание того, как на самом деле работает компьютер, является еще одной важной частичкой пазла, без которой попытки построения программных конструкций и моделей часто оказываются неудачными.
Лучшая книга: “Архитектура компьютера и проектирование компьютерных систем” (Computer Organization and Design). Авторы: Дэвид Паттерсон (David Patterson) и Джон Хеннеси (John Hennessy).
Практически весь код, написанный программистом, будет выполняться операционной системой, поэтому знание принципов работы ОС также является важным элементом.
Лучшая книга: “Введение в операционные системы” (Operating Systems: Three Easy Pieces). Авторы: Андреа Арпачи-Дюссо (Andrea Arpaci-Dusseau) и Ремзи Арпачи-Дюссо (Remzi Arpaci-Dusseau).
Мало что в современном ИТ может обойтись без использования Интернета, поэтому ИТ-специалистам важно понимать, как Всемирная сеть работает, чтобы использовать ее потенциал по полной.
Лучшая книга: Computer Networking: A Top-Down Approach. Авторы: Джеймс Куросе (James Kurose), Кит Росс ( Keith Ross).
Математика для computer science
Поскольку компьютерные науки, по сути, являются ответвлением прикладной математики, знание этого предмета тоже будет очень полезным практически в любой профессии, связанной с программированием. А также даст вам конкурентное преимущество перед теми, кто этой дисциплиной не владеет.
Лучшая книга: Mathematics for Computer Science. Авторы: Альберт Р. Мейер (Albert R. Meyer), Эрик Леман (Eric Lehman) и Фрэнк Томсон Лейтон (Frank Thomson Leighton).
Базы данных — относительно новая область компьютерных наук, и экспертов в ней по-прежнему не так уж много. Данные — еще один ключевой элемент CS, потому что они лежат в основе большинства значимых программ, но мало кто понимает, как на самом деле работают системы баз данных.
Лучшая книга: Readings in Database Systems. Авторы: Джозеф М. Хеллерштейн (Joseph M. Hellerstein) и Майкл Стоунбрейкер (Michael Stonebraker).
Лучшая видеолекция: Joe Hellerstein’s Berkeley CS 186
Языки и компиляторы
Понимание того, как технически работают языки программирования и компиляторы, позволяет совершенствовать свой код и навыки программирования. А также облегчает изучение новых ЯП, что тоже критически важно для любого разработчика в долгосрочной перспективе.
Лучшая книга: “Компиляторы: принципы, технологии и инструменты” (Compilers: Principles, Techniques and Tools). Авторы: Альфред Ахо (Alfred Aho), Моника С. Лам (Monica S. Lam), Рави Сети (Ravi Sethi), Джеффри Ульман (Jeffrey Ullman).
Лучшая видеолекция: Alex Aiken’s course on Lagunita
В наши дни, большинство систем являются распределенными. Компьютеры и программы становятся все более комплексными, и знание распределенных систем окажется полезным для обеспечения правильной и бесперебойной работы вашего софта.
Лучшая книга: Distributed Systems, 3rd Edition. Авторы: Мартен ван Стин (Maarten van Steen) и Эндрю С. Таненбаум (Andrew S. Tanenbaum).
Советы для изучения Computer Science
Развивайте практические навыки в дисциплинах CS
Одно из преимущества CS, как и других ИТ курсов, состоит в том, что полученные только что теоретические навыки можно сразу же применить на практике. Не забывайте об этом, и чередуйте теорию с практикой, чтобы добиться наилучших результатов.
Компьютерные науки — это достаточно сложный предмет, изучение которого мало кому дается легко, особенно поначалу. Именно поэтому, начиная изучать дисциплины CS, нужно не поддаваться прокрастинации — не откладывайте на потом освоение теории, решение задач и практику, так как из-за этого обучение не только может сильно затянуться, но и, скорее всего, окажется не таким эффективным.
Не ограничивайтесь одним курсом
Не ждите, что сможете получить все необходимые знания по предмету из одного курса, как бы хорош он ни был. Лучше всегда обращаться как минимум к нескольким источникам информации, чтобы добиться более широкого понимания предмета.
Звучит слегка банально, но эффективно обучаться, как и делать многие другие вещи в жизни, лучше всего в составе группы единомышленников. Найти себе компанию для совместного изучения CS будет полезным по ряду причин. Это поможет учиться более эффективно, вместе решать задачи и проблемы, сравнивать с другими свой прогресс в обучении и навыки применения новых знаний.
Учитесь писать слова, а не только код
Еще один распространенный совет от многих экспертов, для тех программистов, которые изучают CS для улучшения своих навыков и повышения профессионального уровня: учиться писать (а не кодить), то есть складывать слова в предложения и составлять из предложений тексты. Этот навык достаточно важен для любого разработчика, а его отсутствие будет мешать прогрессировать не только в изучении компьютерных наук, но и в других аспектах программирования как профессии.
Computer Science | что читать/смотреть
Приветствую, давно хотел написать пост об изучения Computer Science, рассмотреть пару тем, рассказать об интересных уч.материалах. К тому же здесь превалируют русскоязычные уч. материалы, что достаточно редкая история(но об английском будет пару слов, без него, к сожалению, никуда).
Легендарный Гарвардский ввод в cs. Лектор обладает каким то запредельным скиллом интересно подавать сложный материал, и сам материал выше всяких похвал. На данный момент, именно этот ввод мне видится лучшим вариантом для старта.
1.3. Missing Semester
Есть куча инструментов, которые предположительно должен знать студент после изучения Computer Science, обычно это оставляют для самостоятельного изучения, тут же наоборот решили сакцентировать на них внимание(и сэкономить кучу времени студентам).
Я не лингвист, поэтому рассуждений на тему почему так, выдать не могу. Но точно могу сказать, что для многих становится настоящим открытием то, насколько простой английский используют в тех же лекциях по тех.специальностям. Если получается смотреть какие-нибудь ситкомчики(условных “Друзей”) в оригинале, то и лекции условного MIT по алгоритмам тоже потяните(к тому же, у лекций могут быть конспекты, субтитры, да даже контекст повествования).
Знание языка, даже на каком-нибудь Intermediate, уже огромное преимущество, и если есть возможность каким-то образом подтянуть язык, то это однозначно стоит сделать.
Не буду расписывать каждый, уже кучу всего про них написал, как и про подбор правильных уч.материалов, все есть в посте.
Нет особого смысла расписывать книги по Си, в любой подборке будет фигурировать тот же Прата, мимо основных пройти невозможно, вместо этого расскажу о куда более интересном и малоизвестном материале.
К сожалению, сам курс без ассемблера, но он все же очень хорош. Cложный, глубокий, про современный подход к разработке(это прям редкость). Тут главное не торопиться, и постепенно, вникая во все(это оч. важно), двигаться по курсу.
2.3. А оно точно вам нужно?
Этот вопрос стоит задавать перед изучением любого топика/темы cs. И уж точно, перед комплексным изучением всего предмета. Да, вроде как лишних знаний не бывает, но вот что бывает, так это зря потраченное время(в случае с cs, очень и очень большое).
Почему я вообще поднял этот вопрос? Если кратко, ища разные материалы на тему cs, очень уж часто я видел крайне спорные утверждения из разряда: “каждый программист должен знать”. И если подобное утверждение выходит далеко за пределы основ, то я советую очень и очень осторожно к нему относиться.
2.4. Изучение от практики
Даже без подборок и прочего, туториалы с ними легко гуглятся. Например, запрос “Lisp interpreter python” и первый же результат:
http://norvig.com/lispy.html (How to Write a (Lisp) Interpreter (in Python)) статья Питера Норвига, где буквально за 90 строк он пишет и объясняет очень простой интерпретатор Lisp
Это отличный вариант для старта. А что потом? Ну например, есть продолжении этой статьи с улучшенной версией интерпретатора:
https://norvig.com/lispy2.html (An ((Even Better) Lisp) Interpreter (in Python)) все также первая страница выдачи, там же будут и другие варианты.
Такой подход, ни в коем случае не отрицает чтения фундаментальной литературы, а наоборот дополняет его, и даже мотивирует все глубже и глубже изучать тему.
Чтобы этот пост не стал слишком уж большим, я взял самые популярные темы, они входят, если так можно выразиться, в классические топики cs. Получилось 5(Алгоритмы, Математика, Архитектура, Операционные системы, Языки программирования и компиляторы). Не знаю насколько вообще тема поста интересна, если хорошо зайдет, то сделаю еще 5, навскидку: сети, бд, графика и т.д
Два отличных курса от CSC, оба мультиязычные
3.6. Есть один курс на английском, который я не могу не упомянуть:
3.7. Также отличным местом для практики будет CodeWars
Куча задач, огромный выбор ЯПов, после выбора задачи попадаем в среду где пишем решение и запускаем тесты, после прохождения тестов можем отрефакторить и засабмитить код(в целом, стандартный набор для подобных платформ).
Но дальше происходит достаточно интересная штука, нам сразу показывают как эту же задачу решили другие пользователи, присутствует рейтинговая система, благодаря которой хорошие решения будут в топе. Можно посмотреть на более правильные решения, более элегантные, что очень актуально в “сильно-свободных” языках типа того же питона, особенно для новичков.
Лучше изучать математику под конкретную цель. Т.е. в тот момент, когда приходит понимание, что для дальнейшего изучения другой темы необходимо ее(математику) подтянуть.
Но, как бы это помягче сказать, может сложиться ситуация, когда и подтягивать то нечего, настолько с математикой дружба не склеилась. В таком случае, наверно стоит почитать что-то популярное, пускай не относящееся к дискретной математике(cs крутится вокруг неё), просто чтобы понять, что это не такая страшная штука.
4.1. Парочка таких книг:
Красота в квадрате, Алекс Беллос
Удовольствие от х, Стивен Строгац
Теория игр, Авинаш Диксит, Барри Нейлбафф
Что такое математика? Рихард Курант, Герберт Роббинс
После/параллельно, стоит посмотреть что-то из разряда “математика для взрослых/минимум для абитуриента тех.вуза”. Главное, чтобы подобные ликбезы не стали в тягость.
Как и говорилось выше, в cs все крутится вокруг дискретной математики
4.3. На степике довольно много курсов по дискретной математике, возможно кому то такой формат будет удобней.
Почему каждому разработчику сначала стоит изучить теории Computer Science
Любой может научиться кодить. Теории computer science научат вас, как программировать.
Разработчики обычно начинают изучать программирование в колледже, университете или на практике для стажёров. Некоторые программисты-самоучки учат программирование, экспериментируя с технологиями и просматривая туториалы в Интернете. Кто-то объединяет все эти этапы.
Разработчики обычно изучают теории computer science в своих университетах. Основы computer science состоят из таких тем, как структуры данных, алгоритмы, принципы работы сетей, дискретная математика, искусственный интеллект, компьютерная графика, шаблоны проектирования и человеко-машинное взаимодействие. Как говорилось выше, не каждый разработчик проходит через университет, и такие люди сразу переходят к программированию, не затрагивая основ computer science. Иногда такие разработчики изучают основы computer science на своей первой работе.
Я начал программировать на Visual Basic 6.0, когда мне было 13 лет. Мой колледж начал преподавать мне программирование, когда мне было 15 лет. Я создал сотни свободных программ, когда учился в колледже перед университетом. В то время я не освоил теории computer science — я просто знал, как кодить. Университет научил меня теориям computer science. Эти теории сильно помогли мне в карьере разработчика ПО и в работе с open source. По моему опыту, изучение основ computer science до программирования обладает следующими преимуществами:
Теории мотивируют писать высокооптимизированный код
Каким бы мощным ни было современное оборудование, производительность всё равно является критически важным фактором разработки ПО. В прошлом из-за ограничений компьютерного «железа» почти все разработчики вынуждены были писать сверхоптимизированный код. Не стоит забывать, что эти люди отправили на Луну корабль с компьютером, имевшим всего 4 килобайта памяти. Сегодня ситуация совершенно иная. Теперь нам нам нужно 16 гигабайт физической памяти только для того, чтобы запустить современный редактор кода.
Однако если мы работаем близко к уровню оборудования или наш продукт используется миллионами конечных пользователей, то нам всё равно необходимо писать высокооптимизированный код. Если нам нужно писать оптимизированный код, то придётся использовать подходящие структуры данных, быстрые алгоритмы и оптимизированные модели памяти. Эти знания можно взять из таких теорий computer science, как структуры данных, анализ алгоритмов и архитектура процессоров.
Теории объясняют разницу между работой кодера и программиста
По мнению большинства, слово «кодинг» имеет то же значение, что и слово «программирование». Однако нужно объяснить неочевидный факт. Кодинг — это не программирование, а кодеры и программисты — не одно и то же. Кодер может писать код на языке высокого уровня для компилятора или интерпретатора. Чтобы писать код, вам не нужно знать, как работает компьютер или его отдельные части. С другой стороны, программист тоже пишет код, но понимает и внутреннее устройство компьютера. Программист может создавать полнофункциональные программные продукты при помощи минимизации ошибок. Другими словами, кодинг — это подмножество сферы программирования.
Кодером может стать каждый, достаточно научиться синтаксису выбранного языка программирования. Но чтобы стать программистом, необходимо изучить теории computer science.
Теории помогут найти вам свою нишу
В отрасли разработки ПО можно пойти по одному из двух путей: или стать мастером на все руки, или профессионалом в выбранной области. На самом деле, разработчики могут стать профессионалами и в нескольких тесно связанных дисциплинах. Например, мои любимые области — это облачные вычисления и архитектура ПО. Сегодня большинство джуниор-разработчиков из-за современных тенденций начинают свою карьеру в сфере фронтенда. Спустя несколько лет работы от подобных разработчиков часто слышны заявления, что им не нравится то, чем они занимаются.
Все современные карьерные пути основаны на подразделах computer science, таких, как разработка ПО, проектирование сетей, облачные вычисления, мобильные вычисления, проектирование встроенных систем, проектирование баз данных и т.д. Если изучить основы всех этих подразделов, то выбор любимой сферы окажется простейшей задачей.
Теории могут улучшить ваши навыки решения задач
Разработка ПО не всегда является прямолинейным процессом. Разработчики часто сталкиваются с проблемами, требующими надёжного и эффективного решения. Триумф решения в сфере разработки ПО зависит от навыков и опыта команды. Например, команда может реализовать быстрое, но неэффективное решение. В то же время, другая команда может найти эффективное решение той же задачи. Теории computer science помогают разработчикам придумывать эффективные и умные решения. Например, в проекте open source Git проблемой было эффективное хранение объектов коммитов. Первые разработчики Git решили её при помощи хеширования и древовидной структуры данных.
На самом деле, любой разработчик способен решать задачи с собеседований в крупных технологических компаниях. Но реализовывать эффективное и оптимальное решение можно только с помощью теорий computer science.
Отличным способом проверки своих навыков решения задач являются онлайн-соревнования по программированию. Крупные технологические компании используют на собеседованиях похожие задания, чтобы найти тех, кто лучше умеет решать задачи. Они не просят кандидатов писать код по готовой спецификации ПО. Вместо этого они тестируют знания теории computer science.
Заключение
Чтобы начать работать в сфере разработки ПО, необязательно знать теории computer science, однако они дают вам некоторые привилегии. То же самое относится и к языкам программирования. Разумеется, разработчики могут начинать программировать с любого современного языка программирования. Проще всего начинать с Python и JavaScript. Но если вы начнёте с языка C, то это даст вам больше преимуществ.
Иногда начинать разработку ПО с теорий computer science не так просто, как начинать с кодинга. Однако без теорий computer science вы станете кодером, но не программистом. Тем не менее, вы можете выбирать сами, стать ли кодером или программистом. Программирование — это решение задач разработки при помощи кодинга и с пониманием внутреннего устройства систем. Следовательно, если начать с теории, то можно стать более качественным программистом.
На правах рекламы
Если для работы необходим VDS с мгновенной активацией на Linux или Windows, то вам однозначно к нам — сервер готов к работе через минуту после оплаты!
Детальный план самообразования в Computer Science за 1.5 года
Обсуждаем один из возможных планов самообразования в 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 существенно расширяет навыки специалиста относительно решения современных задач анализа данных. В этом завершающем семестре также рассматриваются распределенные системы и практики разработки.
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 на подборке задач, предлагаемых на собеседованиях.




















