Computer Science помогает разработчикам писать качественный код, алгоритмически решать сложные задачи, а также строить архитектуры, которые не сломаются при масштабировании. Стать разработчиком можно и без этого, но именно владения Computer Science ожидают работодатели, когда ищут кандидатов из технических вузов или с большим опытом.
Хабр, привет! Меня зовут Александр Скугарев, я работаю продуктовым лидом в Яндекс Практикуме. В этом тексте я вместе с главным экспертом модуля Александром Головко расскажу, зачем разработчикам нужна Computer Science и как мы работаем с этой областью знаний в курсах Практикума.
Что такое Computer Science
Для начала стоит разобраться, почему мы вообще говорим Computer Science вместо «компьютерной науки» или другого русскоязычного аналога. Дело в том, что буквальный перевод звучит для нас незнакомо, ведь в России нет отдельной области знаний с таким названием. У нас есть информатика, прикладная математика, программная инженерия, автоматизация, вычислительная техника, но нет дисциплины, которая бы называлась Computer Science и существовала как самостоятельное явление.
В западной академической и инженерной культуре Computer Science — это не «наука о компьютерном железе», как можно было бы подумать из дословного перевода, и даже не «обучение программированию». Это область знаний, которая изучает вычисления как явление — отвечает, какие задачи можно решать с помощью вычислений, какими способами это делается, как представлять данные, как управлять процессами и как всё это масштабируется. Слово computer здесь имеет историческое значение, ведь изначально так называли не устройство, а процесс вычисления или даже человека, который этими вычислениями занимается. Поэтому Computer Science — это скорее «наука о вычислениях», а не о компьютерах как объектах.
|
Computer Science — это фундаментальная наука о вычислениях и обработке информации, которая изучает, как эффективно решать задачи с помощью алгоритмов и вычислительных систем. |
Computer Science охватывает теоретические основы (алгоритмы, теорию сложности), разработку программного обеспечения, архитектуру компьютеров, искусственный интеллект, машинное обучение, сети, базы данных и безопасность. По своей сути она отвечает на вопрос, что можно автоматизировать, используя абстракции и логику, и служит основой для всех цифровых технологий.
Другими словами, Computer Science становится фундаментом, например, для прикладного программирования. То есть она не рассказывает, как писать код, но зато отвечает на ряд вопросов более глубокого уровня:
-
что вообще можно вычислить и какими способами;
-
что значит «решить задачу алгоритмически»;
-
как представлять данные, чтобы работа с ними была удобной и эффективной;
-
как разбивать сложные задачи на управляемые части;
-
как данные представляются внутри программ и почему это важно;
-
как управлять выполнением программ, чтобы они работали предсказуемо и корректно;
-
что происходит, когда данных становится больше, а система сложнее.
Внутри этой области находятся алгоритмы, структуры данных, базовая теория вычислений, архитектура компьютеров, работа памяти, операционных систем, сетей. Но по своей сути Computer Science — это не набор конкретных технологий, а картина мира, в которой программист видит не только код, но и процессы, структуры и ограничения.
Как Computer Science упрощает жизнь и двигает карьеру разработчика
Представим ситуацию: есть два разработчика — один владеет Computer Science, а другой нет, но при этом у них одинаковый стек, опыт и задачи. Для начала надо подчеркнуть, что разница этих специалистов будет не в том, что один знает больше, а другой меньше. Скорее, они будут думать о проблеме и её решении по-разному.
Можно предположить, что разработчик без знания Computer Science будет решать задачу «в лоб»: добавлять условия, циклы и костыли, пока не заработает. В то время как другой сначала подумает о данных, потоке выполнения, границах задачи, о том, как решение поведёт себя через полгода. А потом сможет описать и презентовать решение другим, приоритизировать свои задачи, выполнить и задокументировать работу. Формально оба будут использовать один язык программирования, фреймворк и базу данных, но качество решений будет разное.
Другими словами, знание Computer Science:
-
снижает количество случайных решений;
-
позволяет быстрее понимать, почему система ведёт себя так, а не иначе;
-
формирует язык для общения внутри команды (обсуждать не на уровне «мне кажется», а на уровне «алгоритм ведёт себя так-то»);
-
помогает осознанно, а не интуитивно выбирать компромиссы между простотой, производительностью и поддерживаемостью.
Отдельное внимание Computer Science полезно уделить при входе в профессию. Стандартный подход — начинать сразу с практики: языка, синтаксиса, фреймворка. Это даёт быстрый результат, но мешает в будущем — довольно скоро у новичка может возникнуть ощущение потолка. Код будет выполняться «как повезёт», сложные и комплексные решения начнут работать с ошибками, которые будут казаться случайными, поведение программ станет непредсказуемым. Чем дальше, тем больше происходящее в коде будет казаться магией.
Computer Science рассеивает эту магию — именно она объясняет новичку, почему алгоритм выполняется именно так, откуда берутся бесконечные циклы и утечки памяти, а также в чём разница между «работает» и «хорошо работает».
Поэтому Computer Science может быть полезным промежуточным этапом между интересом к программированию и уверенным входом в профессию. Владея Computer Science, человек понимает не только как писать код, но и почему он работает именно так. Эти знания не заменяют практику, но делают её освоение более устойчивым.
Откуда у разработчиков берётся знание Computer Science
Как говорилось выше, в России нет прямого аналога Computer Science. Во многом потому, что исторически у нас эти знания были распределены по разным дисциплинам — что-то в математике, что-то в курсах по архитектуре ЭВМ и операционным системам, что-то в инженерных специальностях.
Наиболее комплексно Computer Science дают в технических вузах. Редкий выпускник кафедры вычислительной техники обходится без семинаров по сетям, операционным системам, схемотехнике и теории автоматов. Но и тут есть нюанс — необходимую базу в вузах часто подают формально и в отрыве от практики и реальной разработки.
Школы с сильной информатикой тоже могут заложить правильное мышление, особенно если там учат не просто писать код, а рассуждать, почему алгоритм работает, где он может сломаться и как его улучшить. К сожалению, таких школ немного.
Представление о Computer Science можно получить и через увлечения. Многие сильные разработчики формируют его не через формальное обучение, а годами работы с системами: сталкиваясь с ограничениями, анализируя поведение программ и понимая причины деградации или сбоев. Но этот путь почти всегда долгий и болезненный: человек заново открывает то, что в Computer Science давно известно и формализовано.
Как Computer Science представлена в курсах Практикума
Начнём с предпосылок. Всё началось с исследования, проведённого нами среди наших слушателей и выпускников. Оказалось, что кандидатам после курсов ДПО часто не хватает системного понимания области, в которую они приходят. По крайней мере, так считают работодатели — и поэтому предпочитают нанимать выпускников технических вузов.
Мы решили усилить портрет выпускника Практикума, приблизив его к портрету выпускника вуза: погрузить его не только в задачи разработчика, но и дать фундаментальные знания и представление о том, как код, который он пишет, исполняется на устройстве или на что влияет его оптимизация.
При этом нельзя сказать, что раньше Computer Science не было в курсах Практикума совсем. Часть знаний из этого модуля так или иначе освещалась в наших программах. Например, в каждом курсе по программированию можно было найти материалы о том, как устроен интернет или что такое операционная система. Без этих знаний было бы невозможно изучать более сложные концепты, такие как запросы или клиент-серверная архитектура. Однако теперь мы начинаем с азов и развиваем системное мышление. Поэтому даже изучив блок «Введение в Сomputer Science», слушатели изменят представление о том, чем пользуются каждый день, будь это браузер, мессенджер, компьютер, телефон или умные часы.
Вводя новый модуль, для нас было важно сохранить практическую направленность курсов и разумные сроки обучения. То есть мы не планировали заменить университет и дать «полный фундамент за несколько недель». Вместо этого мы хотели дать базовые ориентиры — рассказать, как код, который пишет разработчик, реально исполняется на устройстве; почему одно и то же задание можно решить по-разному и получить принципиально разное поведение при росте нагрузки; где проходит граница между просто работающим кодом и инженерным решением. Главное для нас — это не исчерпывающее образование по Computer Science, а крепкая база, которая поможет человеку быстрее и глубже понимать то, с чем он столкнётся в практике.
Результатом нашей работы стал модуль Computer Science в курсах IT-профессий. Мы разделили его на три блока с возрастающим уровнем сложности: «Введение в Computer Science», «База» и «Мышление». Вместе они охватывают фундаментальные аспекты информатики: от устройства компьютера, данных и операционных систем до работы сетей, алгоритмов, а также развития инженерного мышления, включая системный анализ, визуализацию и Agile-практики.
Каждый из блоков рассчитан на 15 часов прохождения. При этом проходить модуль можно параллельно с основной программой, периодически возвращаясь к нему при необходимости, чтобы освежить знания или по-новому взглянуть на задачу, с которой слушатель сталкивается в основной программе.
Все три блока будут доступны сразу при покупке курса, но расположены в программе так, чтобы слушатель курса понимал, в какой момент лучше всего уделить им время.
Доступ к материалам модуля получат как новые студенты, так и выпускники предыдущих потоков.
Модуль Computer Science уже доступен в курсах Яндекс Практикума по программированию для начинающих. Почти в каждом есть бесплатная вводная часть — можно начать учиться, не привязывая карту. А если вы ещё не определились с направлением, начните с бесплатного курса «Какую профессию в программировании выбрать», на котором вы узнаете, какие профессии есть в разработке и какая из них вам ближе.
Автор: aleksskug


