Хотите дальше читать devby? 📝
Support us

Кодеры vs инженеры: как не остаться «кодировщиком» на всю жизнь?

Оставить комментарий
Кодеры vs инженеры: как не остаться «кодировщиком» на всю жизнь?

В эпоху популярного тренда «войтивайти» с новой силой вспыхнула дискуссия о том, кто сегодня приходит в индустрию — «кодеры» или инженеры, кто из них на самом деле нужен компаниям и и за кем будущее в профессии. Как не остаться «кодером» на всю жизнь и совершить качественный скачок в инженеры-программисты, рассказали основатели курса cron.is Юрий Петранков, Илья Яскевич и Игорь Куценко.

Читать далее

— В чём разница между «кодером» и инженером-программистом?

— Инженер-программист — это инноватор, который с помощью технологий не только создаёт что-то новое, но и постоянно ищет способы, упрощающие решение однотипных задач. Закончив программировать модуль, он уже думает о том, как его ускорить, сделать оптимальнее, безопаснее и пр. Основатели Google создали поисковик, потому что знали, что смогут «заставить» его работать быстрее и лучше, чем у конкурентов (Yahoo и Lycos).  

А вот кодировщик не создаёт ничего, он пользуется готовыми решениями, день за днём выполняя одно и то же. Такие люди тоже приносят пользу, но их бич — невысокая зарплата по сравнению с первыми и отсутствие карьерного роста. Пример такого специалиста — PHP-программист, создающий только интернет-магазины. Это не значит, что PHP — плохой язык (профессионалы создают нём поразительные вещи), просто так сложилось, что это лучший пример кодера, пишущего примерно одинаковый функционал на одном и том же движке.

— Как понять, к какому «классу» разработчиков принадлежишь?

— Каждый человек сам выбирает, что ему ближе. У инженера-программиста нет стандартного  графика 8 часов в день, потому что он не знает счёта времени, и ему это нравится.

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

  • Пройти тренинг/курс по интересующей технологии (фреймворку)
  • Получить практику/стажировку
  • Пройти собеседование в компанию
  • Работать с 9.00 до 18.00 до пенсии

Взгляните на следующий код:

Инженер-программист очень настороженно отнесётся к данному коду, так как он изобилует подводными камнями и, с большой долей вероятности, в итоге приведёт к проблемам с дальнейшим развитием продукта.

С точки зрения трёх базовых принципов ООП всё верно: код декомпозирован на объекты.

С точки зрения популярных паттернов проектирования код использует паттерн «одиночка» (singleton).

Но личный опыт, полученный на болезненных ошибках, или целенаправленное изучение шаблонов проектирования GRASP подскажут:

  • Строка 1: сразу в глаза бросаются «магические числа». Число 4, а также строка «Оплачено» вносят неясности в код, затрудняют дальнейшую отладку. Необходимо использовать константы или перечисления.
  • Строка 1: шаблон проектирования «одиночка» в данном коде выступает как антипаттерн. Он увеличивает «связность» кода (coupling), обязывает текущий класс использовать конкретный тип «Order» и его конкретную реализацию. Гораздо эффективнее было бы применить принцип инверсии зависимостей для получения коллекции order’ов.
  • Строка 1: тут же мы видим признак недостаточной зацепленности (Cohesion) класса «Order». Судя по всему, он выполняет не только роль инкапсуляции данных о конкретном order’е, но и роль хранилища всех order’ов, а то и вовсе содержит логику доступа к базе данных. Функциональность этого класса слишком «расплывчата».
  • Строка 4-6: классическое нарушение принципа «информационного эксперта»: текущий класс обязан знать и о нюансах реализации типа «OrderItem» и о нюансах типа «Product». Изменения в типе «Product» заставят переписывать текущий класс. В данном случае, расчет суммы order’а следует разместить в самом классе «Order». Более того, расчёт суммы элемента order’а («OrderItem») следует разместить в классе «OrderItem».

Все эти ошибки очень сильно затрудняют переиспользование данных классов и усложняют отладку.

Чтобы видеть все эти проблемы в коде, вам необходимы определённые фундаментальные знания.

— Что имеется в виду под «фундаментальными знаниями»?

— Прежде чем ответить на этот вопрос, нужно обрисовать сегодняшнюю ситуацию в ИT. Люди из других специальностей стремятся попасть в индустрию, и некоторым это даже удаётся. Но такие «специалисты» спустя годы остаются на том же уровне и с той же зарплатой, с которой начинали. Причина застоя кроется в нежелании изучать информатику.  

Для большинства из нас информатика ассоциируется со школой, набором текста в Microsoft Word и рисованием в Paint. Но слово «информатика» переводится на английский язык как Сomputer Science. Именно Computer Science необходимо знать для «качественного скачка» или, другими словами, превращения кодера в инженера-программиста.

В действительности информатика затрагивает очень широкий спектр тем: теорию алгоритмов, структуры данных, архитектуру компьютера, анализ производительности, компьютерную безопасность и криптографию, компьютерные сети, базы данных и многое другое.

Заметьте, что в списке перечисленных дисциплин нет популярных фреймворков ASP.NET MVC, AngularJS, Laravel и других. Все они функционируют, опираясь на фундаментальные основы информатики.

— Что конкретно, по-вашему, нужно знать, чтобы стать хорошим разработчиком?

— В ИT существует два типа знаний: узкоспециализированные (по определённому языку, технологиям или фреймворку) и фундаментальные (по разделам информатики).

Как правило, курсы — это ориентированная на один продукт программа, дающая знания по определённому языку. Вы получаете знания по функционалу какого-то одного фреймворка, но при этом понятия не имеете о том, как он создан, какие механизмы заложены в его основу.  А фундаментальные разделы информатики, которые мы преподаём студентам, показывают, как работают фреймворки, базы данных, поисковые алгоритмы, как оценивать и оптимизировать работу программ.

Без знаний фундаментальных разделов информатики построить карьеру в ИТ сложно. Некоторые аспекты этой области освещает университет, но не все студенты стремятся постичь информатику, отмахиваясь, что им это не пригодится.

Зная, что лежит в основе работы языков и систем, вы можете легко «переключаться» с одних технологий и фреймворков на другие.

Когда-то существовали тренинги по Windows Server 2003, Visual Studio 2003, .NET Framework 1.1 (Everett), PHP 4 и т. д. Сейчас они бесполезны, их невозможно применить ни в одном реальном проекте. Но, если вы взглянете на реализацию движка MySQL или любого другого, то увидите АВЛ или красно-чёрные деревья, которые неизменны на протяжении  десятилетий. То же самое и с алгоритмами поиска путей юнитов в играх, топологией построения сетей, call-stack архитектурой, а также архитектурой современного железа. Мало что изменилось более чем за 40 лет.

Фундаментальные знания не устаревают, а время, потраченное на их освоение, даёт дивиденды.  

— Почему многие, с вашей точки зрения, пренебрегают этими знаниями?

— Проблема в том, что не каждому под силу самостоятельно разобраться в их тонкостях. Большинство учебников и статей преподносят информацию в недоступной для понимания форме. Причины этого разные: слишком сложный математический аппарат, нежелание автора расписывать детали тех или иных алгоритмов, подходов или структур данных, незнание автором всех технических деталей.

Знания, необходимые для целостной картины фундаментальной информатики, фрагментированы и содержат ошибки. Поэтому могут понадобиться годы, чтобы разобраться во всех нюансах информатики. А таких временных ресурсов на информатику, как правило, ни у кого нет.

— К слову, один из ваших преподавателей два года проработал в Google. Какое там соотношение инженеров и кодеров?

— Стоит начать с того, о ком именно идет речь: в Google есть несколько разновидностей работников:

  • Googler
  • Vendor
  • Contractor
  • Temporary

Среди первой категории кодеров не может быть в принципе, поскольку все интервью направлены именно на то, чтобы отобрать исключительно инженеров-программистов. Google — это продуктовая компания, ей нужны люди, которые создают что-то новое, а не делают каждый день одно и то же.

Что касается трёх оставшихся групп, сказать сложно, в их наборе участвуют посредники и только финальное интервью проходит непосредственно с представителями Google. Уровень знаний у этих инженеров порой меньше, чем у «гуглеров», но всё равно — они должны быть инженерами.

Каждый работник Google — это высокомотивированный специалист, которому не сидится на месте: ему хочется разрабатывать, разбираться, учиться. Учиться без конца — это суть человека, без которой нельзя попасть в компании такого уровня. Некоторые инженеры Google сидят на работе по 10, порой 16 часов, потому что это им действительно интересно. И для этого «весёлого» времяпрепровождения компания создаёт всевозможные условия. При этом, никто не заставляет вас работать более 8 часов — люди делают это исключительно по своему желанию.

— Можно ли ожидать, что «кодеров» заменят роботы? А инженеры-программисты рискуют?

— Стоит обратиться к исследованию оксфордского университета: профессия инженер-программиста выглядит достаточно перспективной и «безопасной». В исследовании Оксфорда за 2013 год было установлено, что инженеры-программисты имеют 8-процентный шанс на автоматизацию в ближайшие 20 лет. И, конечно же, инженеры-программисты не единственные, кто рискует. В исследовании прогнозируется, что 47% всей занятости в США, скорее всего, будет автоматизировано к 2030 году. Другими словами, учиться на инженера-программиста нужно и как можно скорее.

«Мы учим не языкам программирования, мы учим программировать»

— Создавая курс, вы имели в виду, что программист не может самостоятельно «переквалифицироваться» из кодеров в инженеры? Или пытались облегчить ему задачу?

— Каждый человек, желающий совершить скачок из кодера в инженеры-программисты, должен ответить на вопрос: знает ли он, где искать нужную для этого информацию и сколько времени ему понадобится? Если ответ «да» — начинайте прямо сейчас. Но рассчитывайте, что путь будет не из лёгких.

Понимание подводных камней этого процесса привело нас к созданию курса Cronis, в котором мы объясняем все тонкости фундаментальной информатики, убрав из материалы всю «воду» и не вовлекая в объяснения избыточную, ненужную сложность.

Создавая курс, мы ставили перед собой две цели: максимально понятное объяснение самых сложных вещей и решение сложнейших задач, встречающихся на интервью в лучшие компании мира.

Наша идея очень проста: убрать те мучения, через которые в своё время прошли мы и через которые проходят тысячи кодировщиков и студентов. Сэкономить годы бессмысленных попыток понять книги, для прочтения которых необходимо иметь серьёзнейший математических аппарат.

— Речь идёт о теории?

— Мы говорим не только о теории. За время обучения человек проработает несколько тысяч строк кода, оттачивая свои способности на задачах, которые спрашивают на интервью такие топовые компании мира, как Microsoft, Google, Amazon и Facebook.

— Учите ли вы конкретным языкам программирования и фреймворкам?

— Нет, мы учим программировать. В курсе намеренно не затрагиваются языки программирования и фреймворки, поскольку для этих целей существует сотни других тренингов.

— Кто ваши преподаватели?

— Люди с реальным 10-летним опытом, через который пропущены все знания, которые мы даём. Каждый преподаватель является практикующим программистом, поэтому знания курса актуальны и применимы в реальных проектах. Наши преподаватели работали как у нас, так и за рубежом: в финансовых и полупроводниковых отраслях, космической промышленности, имеется двухлетний опыт работы на Google.

— Хватит ли на усвоение всех этих материалов двух месяцев обучения?

— Это два месяца интенсива. Время обучения оптимально: как показывает опыт, это лучшее соотношение с точки зрения эффективность\скорость — скучать точно не придется.

— Можно ли понять фундаментальные темы информатики без высшего образования в сфере Computer Science?

— Действительно, может показаться, что без высшего образования программиста понять фундаментальные темы информатики невозможно. Это неверно — на самом деле всё, что необходимо иметь человеку, это инженерный склад ума, а также целеустремленность, усидчивость и желание развиваться.

— Для кого всё-таки предназначен курс и кто ваши сегодняшние слушатели?

— Курс отлично подходит для студентов, программистов с опытом, кодировщиков, желающих стать инженерами-программистами, а также людям, тем или иным образом связанным с ИT.

Стоит заметить, что если человек никогда не программировал, ему мы помочь не сможем. Нужно иметь базовые знания о любом языке программирования, а также уметь писать «ифы» и циклы.

У нас учатся парни и девушки от 17 до 35 лет. Студенты, люди с 6- и 10-летним опытом разработки. Среди наших клиентов, например, присутствуют сотрудники компании Wargaming — являясь специалистами одной из самых престижных компаний, они растут и совершенствуются.

За время существования курса никто из наших студентов не бросил обучение. Это говорит о том, что наш формат нравится и нужен людям, желающим развиваться.

— Приведите конкретные примеры того, в чём ваш курс отличается от других.

— За созданием курса стоит 10-летний опыт и обобщение всех знаний, которые получил каждый из нас за время своей карьеры. Было разобрано, переработано и исправлено множество информации. В большинстве своих объяснений мы апеллируем к вещам, которые разъясняли сами их создатели.

Например, тема рекурсии в большинстве статей затрагивается довольно поверхностно. Мы же обращаемся к тому, кто первым ввёл рекурсию в программирование — Эдсгеру Дейкстре.

На логичный вопрос, «зачем уделять столько времени рекурсии?», можно ответить так: алгоритмы сортировок, поиска, деревьев и графов в большинстве своём являются рекурсивными. То же самое касается алгоритмов парсинга (разбора) компилятором языков программирования. В конечном счёте, большинство вещей существующих в информатике, сводится к рекурсии. Также, чтобы инженер мог оценить скорость работы рекурсивной программы и потребляемую ей память, необходимо знать, как работает рекурсия на самом «низком» уровне.

Тоже самое касается деревьев, графов и других структур данных. 99% людей не напишут «с головы» удаление узла из АВЛ-дерева. В курсе эта тема даётся так, что вы никогда не забудете, как это сделать. Потому что мы рассказываем ту суть, которую вкладывали авторы в эту процедуру. А зная суть, вы всегда сможете написать данный код без «зазубривания».

— Делитесь ли вы полезными материалами бесплатно?

— На нашем сайте можно найти видеоурок с базовыми концепциями Big O.

Время от времени мы проводим бесплатные открытые лекции, чтобы заинтересованный человек мог оценить, подходит ли ему наш курс.

Фото: Cron.is

Эта публикация подготовлена в партнёрстве с обучающим центром Cron.is.

Что такое партнёрский материал?

Помогаете devby = помогаете ИТ-комьюнити.

Засапортить сейчас.

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

Комментариев пока нет.