Обучение

Сообщение об ошибке

Обучение

Сообщение об ошибке

«Некоторые не понимают разницу компиляции/интерпретации». Зачем Computer Science?

16 сентября 2021

Computer Science – это наука, которая помогает окунуться в мир информационных технологий и дает понимание, каким образом эти технологии функционируют. Сегодня Computer Science делает возможности безграничными, поэтому знания в ней – основа специалиста в IT.

О Computer Science нам рассказали Артем Перевозников, Director of Engineering @IDT Corporation (Минск) и Сергей Семенцов, Group Manager @iTechArt (Гомель) – практики со стажем более 10 лет в разработке. У обоих специалистов есть опыт преподавания, поэтому они с легкостью обозначили необходимый бэкграунд, который должен быть у каждого программиста, и поделились секретом, почему на Западе даже опытные разработчики изучают этот курс. Но обо всем по порядку…


Давайте начнем с основ: что вкладывается в понятие Computer Science?



Артем Перевозников, Director of Engineering @IDT

Computer Science, или, попросту говоря, информатика – наука, которая изучает компьютер и способы взаимодействия с ним. Сюда относится теория вычислений, проектирование аппаратного и программного обеспечения, алгоритмы и способы взаимодействия людей с технологиями.

Приведу пример: в повседневной жизни мы играем, работаем, учимся, просматриваем Instagram на своем компьютере или смартфоне. Многие даже не задумываются, как все это работает, как реализуется то, о чем раньше люди только мечтали. А это как раз-таки описывает именно Computer Science.



Сергей Семенцов, Group Manager @iTechArt

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


Получается, что Computer Science – это must have? Или все-таки можно построить карьеру в IT без глубоких знаний в этой области?

Артем: Только на начальном этапе можно обойтись без познания Сomputer Science, так как от начинающего специалиста еще мало требуют. Однако по мере продвижения по карьерной лестнице возрастают и требования.

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

Сергей: Согласен. На начальном этапе построить карьеру можно и без знаний Computer Science. Таких примеров становится все больше. Однако знание основ формирует инженерный подход к решению задач.

Проблема, на мой взгляд, заключается в том, что некоторые разработчики даже не слышали о таком понятии, как O (n) или не понимают разницу в компиляции и интерпретации, однако в CV почти у каждого указан опыт работы на коммерческих проектах и красивый тайтл Middle Software Developer.

Чтобы понять широту знаний специалиста, помогает анализ его теоретической подкованности. Из этого следует вывод, что построить успешную карьеру можно гораздо быстрее и эффективнее при наличии знаний 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 с большей вероятностью приведет к не оптимальному и даже опасному решению конкретной проблемы. Изучая и углубляя свои знания в CS, специалист накапливает определенный страховочный капитал для себя и своих реализаций в коде.


Правда ли, что даже профессиональные разработчики идут изучать Computer Science? Почему так происходит?

Артем: Чем больше человек знает, тем больше он понимает, сколько еще предстоит узнать.

Конечно, профессионалы тоже изучают Computer Science, особенно эта тенденция распространена на Западе. Вот почему так происходит:

  1. Профессиональные программисты понимают, что они должны быть конкуренты на рынке. Сопутствующие знания будут только в плюс. Мир меняется, а основы остаются основами. Например, изучение нового языка программирования не станет проблемой со знанием основ CS.

  2. Это возможность изучить что-то новое, посмотреть на проблемы с другой стороны, а значит – предложить новые идеи для бизнеса. То, что практикуется ежедневно, – приедается. Тут и приходит на помощь 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 может помочь определиться, если специалист будет задавать себе вопрос «Что мне интересно?». Скорее всего, он будет заниматься этим делом много времени, и я очень хочу, чтобы специалист занимался тем, что ему действительно нравится!


25 сентября в Минске пройдет конференция Open IT, где участники статьи – Артем Перевозников и Сергей Семенцов – выступят в качестве приглашенных спикеров.


Материал опубликован на dev.by, дата публикации: 16.09.2021.


Полная, частичная перепечатка или любое иное использование материалов с сайта IT-Academy разрешается только с указанием активной гиперссылки, ведущей на первоисточник (точный адрес страницы на www.it-academy.by).