«Некоторые не понимают разницу компиляции/интерпретации». Зачем Computer Science?
Computer Science — это наука, которая помогает окунуться в мир информационных технологий и дает понимание, каким образом эти технологии функционируют. Сегодня Computer Science делает возможности безграничными, поэтому знания в ней — основа специалиста в IT.
О Computer Science нам рассказали Артем Перевозников, Director of Engineering @IDT Corporation (Минск) и Сергей Семенцов, Group Manager @iTechArt (Гомель) — практики со стажем более 10 лет в разработке. У обоих специалистов есть опыт преподавания, поэтому они с легкостью обозначили необходимый бэкграунд, который должен быть у каждого программиста, и поделились секретом, почему на Западе даже опытные разработчики изучают этот курс. Но обо всем по порядку…
Давайте начнем с основ: что вкладывается в понятие Computer Science?
Приведу пример: в повседневной жизни мы играем, работаем, учимся, просматриваем Instagram на своем компьютере или смартфоне. Многие даже не задумываются, как все это работает, как реализуется то, о чем раньше люди только мечтали. А это как раз-таки описывает именно Computer Science.
Получается, что Computer Science — это must have? Или все-таки можно построить карьеру в IT без глубоких знаний в этой области?
Артем: Только на начальном этапе можно обойтись без познания Сomputer Science, так как от начинающего специалиста еще мало требуют. Однако по мере продвижения по карьерной лестнице возрастают и требования.
Специалисты, которые изучали Computer Science, без особого труда создают набор правил или инструкций для компьютера, чтобы решить проблему бизнеса. Поэтому эта наука — бэкграунд, который должен быть у каждого программиста.
Сергей: Согласен. На начальном этапе построить карьеру можно и без знаний Computer Science. Таких примеров становится все больше. Однако знание основ формирует инженерный подход к решению задач.
Чтобы понять широту знаний специалиста, помогает анализ его теоретической подкованности. Из этого следует вывод, что построить успешную карьеру можно гораздо быстрее и эффективнее при наличии знаний CS.
А можно ли начинать изучать язык программирования, не зная основ Computer Science? Или все равно придется сделать шаг назад и вернуться за базой.
Артем: База есть база, от ее изучения все равно никуда не деться. При изучении языков программирования косвенно затрагивается и Computer Science, ведь множество учебных задач построены на алгоритмах. Так, во время изучения языков программирования происходит неосознанное освоение и Computer Science, построенное на любопытстве и логике.
Здесь хочу подчеркнуть важный момент — знание базы значительно ускоряет изучение языка программирования.
Сергей: Верно, фундаментальные труды по CS точно не создавались впустую. Я думаю, что правильно начать изучать любой язык программирования именно как инструмент, который позволит параллельно осваивать алгоритмы и структуры данных, а также практиковаться в них. Ведь, овладев JS, специалист может усилить свои позиции в React/ VueJS/ Angular.
Если представить ситуацию, что на работу устраиваются два специалиста с равными знаниями по определенному языку, то выбор будет в пользу того кандидата, который владеет основами CS. Поэтому моя рекомендация для начинающих специалистов: учите инструменты для работы (языки, фрэймворки, библиотеки), но не забывайте о базовых понятиях. Старайтесь расти как вглубь, так и вширь.
Что происходит, если программист не изучает Computer Science?
Сергей: Во-первых, это автоматически может сильно усложнить путь входа в компании GAFAM или FAANG (Facebook, Microsoft, Amazon, Apple, Netflix и Google). Из-за большого наплыва людей таким компаниям приходится делать определенный первичный отсев. Отсев оказалось удобно производить, как раз выявляя недостатки знаний в основах CS, особенно в части алгоритмов и структур данных. Сейчас это считается минимальным базовым порогом, который должны знать все специалисты без исключения. Во-вторых, это может затруднить обучение новым технологиям в будущем.
Артем: Хочу добавить, что без изучения CS развитие программиста притормаживается. Он превращается в «кодера» — человека, который выполняет работу строго по инструкции других людей.
Также программисту поручают более рутинную и монотонную работу. Это сказывается и на зарплатных ожиданиях, потому что таких специалистов много и они легко заменяемые.
Как незнание Computer Science может сказаться в работе?
Сергей: Это зависит от конкретной задачи. Допустим, когда речь идёт о верстке или любой другой активности разработчика, где задействованы монотонные и механические действия, то незнание CS никак не скажется. Но если говорить о сложных и масштабных задачах, то их успешное выполнение попросту невозможно без CS.
Часто есть задачи, которые немного сложнее обычного чтения и сохранения файлов, хотя и там могут быть свои нюансы. К примеру, когда речь идёт про одновременный доступ к информации от нескольких процессов. Потому такие задачи автоматически порождают сразу много вопросов.
В качестве небольшой рекомендации здесь может выступить книга Э. Таненбаума «Современные операционные системы», где такие темы, как «Процессы/Потоки», «Память», «Файловая система» и др. разобраны достаточно подробно. Плюс в книге приведены примеры с наиболее популярными ОС на данный момент.
Правда ли, что даже профессиональные разработчики идут изучать Computer Science? Почему так происходит?
Артем: Чем больше человек знает, тем больше он понимает, сколько еще предстоит узнать.
Конечно, профессионалы тоже изучают Computer Science, особенно эта тенденция распространена на Западе. Вот почему так происходит:
- Профессиональные программисты понимают, что они должны быть конкуренты на рынке. Сопутствующие знания будут только в плюс. Мир меняется, а основы остаются основами. Например, изучение нового языка программирования не станет проблемой со знанием основ CS.
- Это возможность изучить что-то новое, посмотреть на проблемы с другой стороны, а значит — предложить новые идеи для бизнеса. То, что практикуется ежедневно, — приедается. Тут и приходит на помощь Computer Science c ее многогранностью попробовать себя в разных сферах.
Сергей: Мне кажется, что с ростом технической экспертизы профессиональные разработчики всё чаще возвращаются к CS. Отчасти потому, что что-то забывается. С другой стороны, мы находим новые разделы, с которыми раньше активно не работали. К тому же это бывает жутко интересно!
Каждый из разработчиков решает свои поставленные цели в изучении CS:
- Кто-то решает задачи, чтобы держать себя в тонусе.
- Кто-то любит различные соревнования и поэтому активно погружается в эту область.
- Часть из разработчиков таким образом готовятся к собеседованиям. Причем как те, кто идет на собеседование, так и те, кто их проводит.
- У кого-то это связано с текущей позицией, и он участвует в разработке чего-то нового.
- Самые счастливчики это те, для кого изучение CS это хобби, и они совмещают приятное с полезным.
Нужно ли изучать эту науку тестировщику, пиэму, бизнес-аналитику или техническому писателю?
Артем: Для программистов Computer Science является приоритетом в изучении. Для тестировщиков, пиэмов, бизнес-аналитиков или техписов знание этой науки на общем уровне будет дополнительным преимуществом: это позволяет вести коммуникацию с программистами на более понятном языке.
Сергей: Я бы сказал, что для всех специальностей изучение CS актуально. Просто разница в глубине проработки материала. У меня на курсе «Project Manager в IT» я стараюсь максимально расширить текущую программу для слушателей, чтобы передать им как можно больше технических моментов.
Не могу не согласиться, что понимание принципов разработки ПО, а также CI/CD, System Control Version — все это Must Have для инженеров. Такая же ситуация будет справедлива и для бизнес-аналитика, но в меньшей степени, так как у них упор больше в сторону бизнеса.
Что касается дизайнеров, то тут тоже бывают сложности, если у специалиста развито только чувство прекрасного, но нет представлений, как работает веб-разработчик или «мобильщик». Это вносит определенный рассинхрон в команду. Поэтому более тесная интеграция UI/UX специалиста в команду — это важный момент для успешного завершения проекта.
Какие знания можно получить на курсе Computer Science?
Артем: На курсе можно понять принципы работы компьютерных систем. Изучить, как устроен компьютер на практике, и написать простейшие программы. Также можно узнать, на каких современных языках программирования создаются web-приложения, сервисы, игры, базы данных и др.
Что вы можете посоветовать тем, кто еще не определился с направлением?
Сергей: Если стоит задача найти наиболее полный курс по CS и у специалиста неплохо с английским, то имеет смысл посмотреть курсы на Udemy или Coursera, а также Pluralsight. Особенно могут быть полезны курсы от технологических университетов США.
Если стоит задача понять, «моё это или нет», то посмотрите в сторону курса от IT-Academy. У меня лично есть желание поработать с материалом этого курса и расширить его в будущем, чтобы самому принять участие как преподаватель на курсе.
Артем: Добавлю, что Computer Science может помочь определиться, если специалист будет задавать себе вопрос «Что мне интересно?». Скорее всего, он будет заниматься этим делом много времени, и я очень хочу, чтобы специалист занимался тем, что ему действительно нравится!
Зарегистрироваться на конференцию
Читать на dev.by