Как из обычного кодера стать крутым разработчиком? Изучаем Computer Science

Статья из группы Random
Современный мир ИТ и разработки ПО довольно-таки суров — высокие требования к квалификации кодеров, постоянные изменения и растущая конкуренция вынуждают специалистов, работающих в этой сфере, постоянно заниматься самообучением и развиваться. Непрерывное обучение требуется даже для того, чтобы просто оставаться востребованным специалистом, ведь “отстать от жизни” проще простого. Как из обычного кодера стать крутым разработчиком? Изучаем Computer Science - 1В публикациях на JavaRush мы стараемся помогать читателям полноценно развиваться и самообучаться, чтобы стать максимально конкурентными в заманчивом мире ИТ-разработки. В сегодняшней статье речь пойдет о самообразовании в обширнейшей дисциплине — Computer Science. Что именно входит в понятие computer science (CS) разберем чуть позже, а пока попробуем ответить на вопрос: зачем, собственно, программисту учить предметы CS и стремиться к совершенствованию в этой области.

Computer Science — зачем учить?

“Программирование — это не что-то, что вы знаете. Это нечто, в чем вы можете разобраться.” Крис Пайн, эксперт в программировании, автор книг и учебников. “В некотором смысле программирование похоже на рисование. Сначала у вас есть только чистый холст и материалы. Нужно использовать сочетание науки, искусства и ремесла, чтобы определить, что со всем этим делать.” Эндрю Хант (Andrew Hunt), автор бестселлера The Pragmatic Programmer и один из авторов Манифеста Agile. Понять к чему мы ведем, несложно. Чтобы стать действительно хорошим программистом, или просто подняться хотя бы на ступень выше рядового кодера, нужно иметь максимально широкие и при этом достаточно глубокие знания в разных сферах, помимо самих языков программирования. И владение дисциплинами, входящими в понятие CS, идет здесь на одном их первых мест.

Дисциплины Сomputer Science

Давайте разберем, какие предметы входят в область компьютерных наук. К коротким описаниям дисциплин с причинами для их изучения добавим рекомендации лучшей книги и лучшей серии бесплатных видеолекций по предмету из, пожалуй, лучшего англоязычного гайда по computer science, написанного Озом Новой (Oz Nova) и Майлзом Бирном (Myles Byrne), преподавателями Школы компьютерных наук Брэдфилда в Сан-Франциско.
  • Программирование

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

    Лучшая книга: “Структура и интерпретация компьютерных программ” (Structure and Interpretation of Computer Programs). Авторы: Джеральд Сассман (Gerald Sussman) и Хэл Абельсон (Hal Abelson).

    А на JavaRush, кстати говоря, всем желающим доступен для изучения легендарный гарвардский курс “CS50. Основы программирования”, полностью переведенный на русский.

    Лучшая видеолекция: Brian Harvey’s Berkeley CS 61A

  • Алгоритмы и структуры данных

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

    Лучшая книга: The Algorithm Design Manual. Автор: Стивен Скьена (Steven Skiena).

    Лучшая видеолекция: лекции Стивена Скьены

  • Компьютерная архитектура

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

    Лучшая книга: “Архитектура компьютера и проектирование компьютерных систем” (Computer Organization and Design). Авторы: Дэвид Паттерсон (David Patterson) и Джон Хеннеси (John Hennessy).

    Лучшая видеолекция: Berkeley CS 61C

  • Операционные системы

    Практически весь код, написанный программистом, будет выполняться операционной системой, поэтому знание принципов работы ОС также является важным элементом.

    Лучшая книга: “Введение в операционные системы” (Operating Systems: Three Easy Pieces). Авторы: Андреа Арпачи-Дюссо (Andrea Arpaci-Dusseau) и Ремзи Арпачи-Дюссо (Remzi Arpaci-Dusseau).

    Лучшая видеолекция: Berkeley CS 162

  • Компьютерные сети

    Мало что в современном ИТ может обойтись без использования Интернета, поэтому ИТ-специалистам важно понимать, как Всемирная сеть работает, чтобы использовать ее потенциал по полной.

    Лучшая книга: Computer Networking: A Top-Down Approach. Авторы: Джеймс Куросе (James Kurose), Кит Росс ( Keith Ross).

    Лучшая видеолекция: Stanford CS 144

  • Математика для computer science

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

    Лучшая книга: Mathematics for Computer Science. Авторы: Альберт Р. Мейер (Albert R. Meyer), Эрик Леман (Eric Lehman) и Фрэнк Томсон Лейтон (Frank Thomson Leighton).

    Лучшая видеолекция: Tom Leighton’s MIT 6.042J

  • Базы данных

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

    Лучшая книга: Readings in Database Systems. Авторы: Джозеф М. Хеллерштейн (Joseph M. Hellerstein) и Майкл Стоунбрейкер (Michael Stonebraker).

    Лучшая видеолекция: Joe Hellerstein’s Berkeley CS 186 Как из обычного кодера стать крутым разработчиком? Изучаем Computer Science - 2

  • Языки и компиляторы

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

    Лучшая книга: “Компиляторы: принципы, технологии и инструменты” (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).

    Лучшая видеолекция: CS 436: Distributed Computer Systems

Советы для изучения Computer Science

Ну и напоследок несколько советов для тех, кто планирует начать изучение дисциплин CS. Как из обычного кодера стать крутым разработчиком? Изучаем Computer Science - 3
  1. Развивайте практические навыки в дисциплинах CS

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

  2. Не прокрастинируйте

    Компьютерные науки — это достаточно сложный предмет, изучение которого мало кому дается легко, особенно поначалу. Именно поэтому, начиная изучать дисциплины CS, нужно не поддаваться прокрастинации — не откладывайте на потом освоение теории, решение задач и практику, так как из-за этого обучение не только может сильно затянуться, но и, скорее всего, окажется не таким эффективным.

    Как из обычного кодера стать крутым разработчиком? Изучаем Computer Science - 4
  3. Не ограничивайтесь одним курсом

    Не ждите, что сможете получить все необходимые знания по предмету из одного курса, как бы хорош он ни был. Лучше всегда обращаться как минимум к нескольким источникам информации, чтобы добиться более широкого понимания предмета.

  4. Найдите единомышленников

    Звучит слегка банально, но эффективно обучаться, как и делать многие другие вещи в жизни, лучше всего в составе группы единомышленников. Найти себе компанию для совместного изучения CS будет полезным по ряду причин. Это поможет учиться более эффективно, вместе решать задачи и проблемы, сравнивать с другими свой прогресс в обучении и навыки применения новых знаний.

  5. Учитесь писать слова, а не только код

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

Что почитать еще:
Комментарии (16)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anonymous #2337929 Уровень 17
18 августа 2020
Глядя на весь представленный список невольно задаюсь вопросом, а реально ли это выучить за оставшуюся жизнь? Но, зато будет чем скоротать век. ))
endorfin Уровень 25, Днепр, Украина
28 мая 2020
Специально для коллег по цеху 🧤: 🤜1) Алгоритмы. Руководство по разработке - Стивен Скиена (Steven Skiena) - 2011 - https://oxy.st/d/JhHb 👉2) Архитектура компьютеров и проектирование компьютерных систем - Дэвид Паттерсон (David Patterson) и Джон Хеннеси (John Hennessy) - 2012.pdf - https://oxy.st/d/LhHb 👉3) Компиляторы. Принципы, технологии, инструменты - Альфред Ахо, Рави Сети, Джеффри Ульман, Моника Лам - 2008.djvu - https://oxy.st/d/MhHb 👉4) Компьютерные сети нисходящий подход - Джеймс Куросе (James Kurose), Кит Росс ( Keith Ross) - 2016.djvu - https://oxy.st/d/NhHb 👉5) Структура и интерпретация компьютерных программ - Джеральд Сассман (Gerald Sussman) и Хэл Абельсон 2006.pdf - https://oxy.st/d/OhHb
Владимир Уровень 20, Днепр, Украина
24 февраля 2020
Вот еще кампутер-саентъс - привет из принстона ... сам сейчас алгоритмы штудирую
Soros Уровень 39, Харьков, Украина
22 февраля 2020
Когда это всё учить?!
endorfin Уровень 25, Днепр, Украина
21 февраля 2020
/* Комментарий удален */