JavaRush/Java блог/Random/Как из обычного кодера стать крутым разработчиком? Изучае...

Как из обычного кодера стать крутым разработчиком? Изучаем 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, 11:01
Глядя на весь представленный список невольно задаюсь вопросом, а реально ли это выучить за оставшуюся жизнь? Но, зато будет чем скоротать век. ))
endorfin
Уровень 25
28 мая 2020, 18:09
Специально для коллег по цеху 🧤: 🤜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, 13:37
Вот еще кампутер-саентъс - привет из принстона ... сам сейчас алгоритмы штудирую
Soros
Уровень 39
22 февраля 2020, 09:27
Когда это всё учить?!
MartyMcAir
Уровень 41
22 февраля 2020, 10:50
по завтракам, обедам, ужинам и праздникам, как в выходные так и в будни, а так же ночью.. (чтоб на сон сильно не тратиться _ ноо все же, наверно лучше спать) ).. короч. пожизненно)) Да и это явно не весь список.. (как то раз (в начале..) хотел создать mind map схему всёй Java, - основ из чего она состоит.. __ Что бы было проще удержать всё и вся в голове одновременно, так вся схема не помещается даже на большом мониторе с соотношением сторон 21:9 (с максимальным отдалением в сервисе, да и при таком раскладе шрифт слишком мелок, чтобы там что-то разглядеть..)coggle (by Google)) ) Хотя есть же видосы по типу: Java за час.. ___ Да норм всё, пиплов способных запомнить тысячи слов или чего либо моментально, не так уж и много.. Ноо обычные же продавцы со временем, знают где валяется каждый болтик и шурупчик на их витрине.. так и это.. Со временем всё это, как нибудь, во что нибудь да переварится..
Soros
Уровень 39
22 февраля 2020, 11:30
В том-то и дело, что хочется не "как-нибудь, во что-нибудь" а с предсказуемым результатом.
Justinian Judge в Mega City One Master
22 февраля 2020, 13:31
Будет предсказуемый результат. Выдели N времени. Получишь M результата. Главное следить за эффективностью обучения и тщательно подходить к тому что изучается и во что углубляется, не забывая о законе Парето.
MartyMcAir
Уровень 41
22 февраля 2020, 17:24
Согласен, хочется более точный и качественный результат.. Чей-то коммент с др ресурсов: "После того, как накапливается некая критическая масса опыта - мозг начинает понимать, как оно работает." - кажется это близко к правде. (о нет, что я тут делаю, опять прокрастинация(.. )
Soros
Уровень 39
22 февраля 2020, 20:03
Правильнее было бы сказать: Выделив N времени, увеличиваешь шанс получить M результата. И не всегда это M будет соответствовать ожиданию. Это просто некая M, какой-то достигнутый результат. Никогда нет гарантии того, что полученный результат будет в точности соответствовать твоим ожиданиям. Иногда это может быть M+. Однако нужно быть готовым к тому, что, в результате, ожидания были слишком оптимистичными. Время сейчас моё всё предоставлено на изучение Java. А рассчитывать на предсказуемый результат - роскошь, позволительная лишь богачам. Сколько Илон Маск запускал ракет? Сколько Сорос потерял миллиардов на российских акциях «Связьинвеста»?
Justinian Judge в Mega City One Master
22 февраля 2020, 20:36
Про ожидание хорошо подмечено, все упирается в самого человека. Есть Коля, он выучил 30 языков программирования, защитил 50 диссертаций, и опубликовал 100 монографий. Он считает себя бездарем, его усилия не оправдали его ожидания. Есть Вася. Он вывел в консоль Амиго самый умный, и это превзошло все его самые смелые ожидания. Правильная работа с ожиданиями это чрезвычайно важно, это часть того что называют EQ, если ожидания выстраиваются неверно , потом человека начинает колбасит на ровном месте, все вокруг него не то, не так.
Vladimir Khudokormov
Уровень 12
23 февраля 2020, 04:04
можно ссылку на MindMap? не картинку
Konstantin
Уровень 41
24 февраля 2020, 09:16
Да всю жизнь. Хватит?
hidden #2109277
Уровень 22
14 марта 2020, 19:11
ссылочку бы лучше запилил на карту ) спасибо.
deadbiker
Уровень 1
8 мая 2020, 15:31
Ооо какая вкуснятина! Действительно, кидай ссылку на файл со схемой в нормальном качестве))
endorfin
Уровень 25
21 февраля 2020, 21:34
/* Комментарий удален */
Andrei Lead Software Developer (
22 февраля 2020, 15:25
Ога, и специально для "коллег по цеху" все залито через какую-то Ж..у с 100500+ всплывающими окнами и попытками заинсталить какой-то шлак. Испорчу "бизнесс": 1.Скиена С. - Алгоритмы. Руководство по разработке - 2011.djvu - 10.8 MB 2. 3. Ахо,Лам,Сети,Ульман - Компиляторы. Принципы, технологии, инструменты.2ed.2008.djvu - 15.3MB (в простонародье - Книга с драконами) 4. Куроуз Дж., Росс К. - Компьютерные сети. Нисходящий подход (Мировой компьютерный бестселлер) - 2016.pdf - 8.8MB 5. Структура и Интерпретация Компьютерных Программ (RU).pdf - 4MB