В публикациях на 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.
Развивайте практические навыки в дисциплинах CS
Одно из преимущества CS, как и других ИТ курсов, состоит в том, что полученные только что теоретические навыки можно сразу же применить на практике. Не забывайте об этом, и чередуйте теорию с практикой, чтобы добиться наилучших результатов.
Не прокрастинируйте
Компьютерные науки — это достаточно сложный предмет, изучение которого мало кому дается легко, особенно поначалу. Именно поэтому, начиная изучать дисциплины CS, нужно не поддаваться прокрастинации — не откладывайте на потом освоение теории, решение задач и практику, так как из-за этого обучение не только может сильно затянуться, но и, скорее всего, окажется не таким эффективным.
![Как из обычного кодера стать крутым разработчиком? Изучаем Computer Science - 4]()
Не ограничивайтесь одним курсом
Не ждите, что сможете получить все необходимые знания по предмету из одного курса, как бы хорош он ни был. Лучше всегда обращаться как минимум к нескольким источникам информации, чтобы добиться более широкого понимания предмета.
Найдите единомышленников
Звучит слегка банально, но эффективно обучаться, как и делать многие другие вещи в жизни, лучше всего в составе группы единомышленников. Найти себе компанию для совместного изучения CS будет полезным по ряду причин. Это поможет учиться более эффективно, вместе решать задачи и проблемы, сравнивать с другими свой прогресс в обучении и навыки применения новых знаний.
Учитесь писать слова, а не только код
Еще один распространенный совет от многих экспертов, для тех программистов, которые изучают CS для улучшения своих навыков и повышения профессионального уровня: учиться писать (а не кодить), то есть складывать слова в предложения и составлять из предложений тексты. Этот навык достаточно важен для любого разработчика, а его отсутствие будет мешать прогрессировать не только в изучении компьютерных наук, но и в других аспектах программирования как профессии.


ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ