logo
Ещё

Инженер-программист – обзор профессии

Вокруг профессии «Инженер программист» сформировалась довольно странная ситуация: многие источники начинают приписывать этой профессии чуть ли не магические свойства, мол, и тестированием он занимается, и разработать может что угодно, и «программная инженерия» (что бы это ни значило) – крайне ответственное дело, которым не может заниматься разработчик, но может software engineer. Все это вносит путаницу, и люди начинают думать, что инженер программист – это какой-то высококвалифицированный подвид разработчика. Ниже мы покажем, почему это не так (и почему в этой путанице виноваты ВУЗы), а так же расскажем, какими навыками обладает инженер-программист, что он делает на реальной работе и сколько ему платят.


Инженер-программист – кто такой и чем занимается

Отличия от других профессий

Начнем с той самой путаницы, о которой мы только что говорили. Есть понятия «Инженер-программист», «Программист» и «Девелопер/Разработчик». Так вот, все это – одно и то же. Проблема названий появилась из-за медлительности ВУЗов – раньше, когда компьютеры были ленточными и все писали код на Фортране, программистов действительно называли «Инженерами-программистами», потому что не-инженерам компьютеры были не нужны в принципе – они умели только производить математические вычисления, никаких «Косынок» и «Саперов». Кроме того, даже сейчас формулировка «Инженер-программист» имеет смысл, поскольку любой девелопер должен обладать навыками инженера – приложение в любом случае нужно проектировать перед разработкой, и «Инженер» в названии этот момент как раз отражает.

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

Поскольку лидером в плане рынка разработки были США, многие слова из английского были заимствованы при описании позиций в команде разработки. И вписались они довольно удачно, потому что с точки зрения русского языка «Программист» – это человек, который просто набирает код, который будет исполняться на вычислительном устройстве. «Инженер-программист» – это человек, который придумывает (проектирует) программу + набирает ее. Эти два слова можно заменить одним, «Разработчик», потому что разработкой программных продуктов занимается как раз тот, кто и проектирует этот продукт, и пишет его. То есть инженер-программист = разработчик = девелопер (калькирования слова developer).

Проблема – в том, что слово «Разработчик» (как и девелопер) – довольно широкое и непонятное обывателю. А вот «инженер-программист» – это уже что-то более понятное. Поэтому ВУЗы и госучреждения, которым нужно вести строгую отчетность на русском языке, используют формулировку «Инженер-программист», которую пишут в дипломах и трудовых. Но пусть вас это не обманывает – если госучреждение открыло вакансию Инженер-Программист, оно ищет девелопера под конкретные задачи.

Особенности профессии

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

  • Что входит в разработку? Есть понятие, которое прекрасно описывает разработку: «Жизненный цикл разработки ПО». Цикл включает в себя составление ТЗ, планирование, проектирование/дизайн, саму разработку, тестирование и поддержку. Составление ТЗ – работа заказчика, разработчиком программного обеспечения она вроде как не должна осуществляться, но на этом этапе разработчик может консультировать заказчика. Планирование – это ранняя стадия проектирования, здесь выбираются основные технологии и оценивается стоимость/трудозатраты. Планированием занимается ведущий инженер-программист, то есть Lead. Дизайн – это планирование конкретных деталей реализации, здесь уже вовлекаются все разработчики, то есть профессия инженера-программиста предполагает знания в области проектирования ПО. Затем все занимаются разработкой приложения по плану – должность инженера-программиста в первую очередь как раз предполагает умение писать код по ТЗ (и решать возникающие проблемы). Когда все готово, готовое приложение отправляется в отдел тестирования, и тестировщики нещадно издеваются над приложением с целью его сломать. Если получилось – приложение возвращается девелоперам, которые дополнительным программным кодом (и обычно кучей нецензурной лексики в адрес тестировщиков, хотя на деле сами виноваты) исправляют приложение. Когда тестировщиков устроил результат – он отправляется в продакшн, то есть пользователям. Если нужно что-то доделать уже после релиза (ухода в продакшн) или резко исправить баг – этим тоже занимаются разработчики, а сама фаза называется «Поддержка».
  • Что подразумевается под приложением? Все, что можно запустить на вычислительном устройстве. Игра для Steam, сайт, онлайн-банкинг, операционная система, управляющий блок для холодильника – все это является приложением.
  • Какие конкретные цели есть у бизнеса? Решить какую-то проблему и/или заработать деньги. Речь может идти о прямом заработке (продаем подписки на свой сервис) или косвенном (снижаем затраты на поддержку документооборота). Прямым заработком обычно занимаются частные компании, косвенным – государственные структуры. ГосУслуги – явный пример косвенного заработка, государство существенно сэкономило на документообороте.

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

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

Необходимые навыки

Что надо знать/уметь:

  • Языки программирования, используемые на проекте. Вы не можете создать что-то полезное, если не знаете язык, на котором это полезное пишется на данном проекте.
  • Основные фреймворки, используемые на проекте. Новички часто упускают тот момент, что язык при разработке используется не в чистом виде, а в виде фреймворка – функционального расширения базового языка. Нужно знать либо конкретно те фреймворки, которые используются, либо их аналоги (в этом случае вам нужно будет дообучаться).
  • Работа с сопутствующими технологиями. Как минимум Git (система контроля версий), Jira/Trello (система контроля задач) и SQL (язык структурированной базы данных). На проекте могут использоваться и другие технологии, но если вы будете проявлять потенциал – вас возьмут на работу без знания этих сопутствующих технологий и обучат в процессе.
  • Работа в команде. Времена, когда 1-2 девелопера в гараже писали гениальные проекты, прошли. Сейчас небольшой проект – это команда в 5 человек и полгода разработки. Вам ежедневно нужно будет созваниваться с вашими коллегами и обсуждать с ними различные проблемы. Поэтому «стрессоустойчивость», «общительность» и «работа в команде» – это не пустые слова в резюме.
  • Быстрая обучаемость. Приходя на новый проект, вы никогда не будете знать все. Даже когда вы освоитесь, вам все равно придется учить новые технологии. Поэтому приготовьтесь к тому, что вы постоянно будете что-то учить.

Важные личные качества

Основные личные качества хорошего девелопера – это умение быстро учиться и продуктивно общаться с другими участниками команды.

Оба качества мы уже описали выше.

Плюсы и минусы профессии

Плюсы:

  • Хорошо платят.
  • Обычно в команде собираются приятные люди = хороший коллектив.
  • Не требуется высшее техническое образование.

Минусы:

  • Сидячая работа.
  • Интеллектуально тяжелая работа, возможны выгорания.
  • Новичку сложно устроиться – придется минимум пару месяцев ходить на собеседования.


Обучение на инженера-программиста

Платные курсы

Бесплатные курсы

  • Поколение Python. Подробный вводный курс для начинающих программистов. Язык – Python. После прохождения обучения дают сертификат.
  • Основы верстки сайтов. Базовый курс по HTML/CSS.
  • Ruby для начинающих. Вводный курс по Ruby, поможет вам понять, хотите ли вы связываться с веб-разработкой.

Обучение в ВУЗе

ВУЗ – не лучший вариант для получения профессии, и проблема здесь – в длительности обучения. Дело в том, что в IT технологии постоянно меняются и развиваются, кроме того, часто появляются новые. Поскольку стандартное обучение длится 4-5 лет, к моменту получения диплома вы обнаружите, что существенная часть ваших знаний уже устарела. Да, техническое образование даст вам фундаментальные вещи вроде высшей математики, но вероятность того, что эти знания понадобятся вам на практике, крайне мала. Обычно люди с высшим профессиональным образованием начинают свой реальный карьерный путь с позиции Junior – как и люди, не обладающие высшим образованием. Поэтому лучше выбрать платные курсы.

Но если вам все же интересны высшие учебные заведения, то в ТОП-5 входят: МГУ им. Ломоносова, МГТУ им. Н.Э. Баумана, ВШЭ (НИУ), УрФУ им. Б.Н. Ельцина, СПбГУ ИТМО (НИУ).

Обзор рынка труда – зарплаты, востребованность, перспективы

На hh.ru по запросу «инженер-программист» можно найти 8 100 вакансий. На самом деле вакансий – намного больше, но они обычно разбросаны по Телеграм-каналам и небольшим специализированным сайтам. Если рассматривать исключительно hh.ru, то из 8 100 вакансий зарплата указана только у 3 200 – то есть в большинстве случаев зарплата определяется по результатам собеседования. Из 3 200 вакансий у 2 100 зарплата – больше 80 000 рублей. Зарплата от 390 000 рублей выставлена у 100 вакансий. Касательно стека технологий – «инженеров-программистов» чаще всего идут компании, которым нужно писать приложения для микроконтроллеров и поддерживать легаси-код (древний код на полузабытых языках). Поэтому среди требований нередко встречается знание Delphi и C/С++.

Просто для справки: никто в трезвом уме и ясной памяти не начнет сейчас разрабатывать новое приложение на Delphi, а C – самый сложный язык программирования из тех, которые сейчас находятся в активном пользовании.

Примеры вакансий

Разработка POS-терминалов:


Приложения для спутников (нужны сильные математические скилы), з/п до 200 000 рублей:


Ведущий инженер-программист с зарплатой до 90 000 рублей:


Путь инженера-программиста – вероятный карьерный сценарий

Практически все девелоперы проходят один и тот же путь: Junior, Middle, Senior. Junior – это девелопер, который пока еще ничего толком не умеет и не понимает, но подает надежды. Обычно Junior приносит компании больше убытков, чем пользы, но его дообучают на месте и надеются на лучшее. Когда Junior начинает брать на себя реальные задачи, он становится Middle-разработчиком – большие задачи ему еще не доверяют, но и пристально следить за ним уже не нужно. Наконец, когда разработчик становится настолько матерым, что может самостоятельно решать любые задачи и брать на себя за них ответственность, его повышают до Senior. Зарплата Сеньоров в среднем начинается от 1 500$.

Дальше для специалиста открыты все дороги: можно полностью абстрагироваться от кода и стать техдиром/лидом, можно уйти в менеджеры, можно дальше развивать свои кодерские навыки, можно плюнуть на все и открыть маленький ресторанчик (и последнее, кстати, случается довольно часто).

Что почитать по теме

Обзор книг для инженера-программиста

В первую очередь вам нужно читать книги, которые глубоко описывают ваш основной язык программирования – для Python это, например, книги Лутца. Если вам нужно часто работать с сетями и/или операционными системами – читайте Таненбаума. Кнут дает самую развернутую информацию по алгоритмизации и структурам данных, но читать его мучительно тяжело, поэтому Кнута желательно читать после получения позиции Senior-девелопера.

В остальным же читайте книги либо по технологиям, которые вас интересуют, либо по инженерным навыкам: «Чистый код», книги по рефакторингу, паттерны проектирования и так далее. И да, нужно отметить, что часто вместо книг можно найти хорошие курсы/плейлисты на Ютубе – к примеру, есть прекрасный цикл лекций Немчинского, описывающий паттерны проектирования и затрагивающий ООП.

Форумы и тематические площадки

Форумы уже давно не пользуются популярностью основные тематические площадки: Хабр, StackOverflow и LinkedIn

FAQ

Стоит ли поступать в ВУЗ?

Если вы хотите, чтобы ваш ребенок, закончивший школу, получил высшее образование, то поступить на инженера-программиста – не самая плохая идея. Если же вы – уже сформировавшийся человек, который хочет получить хорошую профессию, то ВУЗ – слишком медленный вариант, смотрите в сторону курсов.

Нужна ли алгоритмизация и другие технические знания, вроде структур данных?

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

Подведем итоги 

Тезисно:

  • Инженер-программист – это то же самое, что разработчик/девелопер, никакой разницы нет.
  • Инженер-программист занимается разработкой программного обеспечения.
  • Основные знания – языки программирования, фреймворки, сопряженные технологии.
  • Нужно уметь быстро учиться и общаться с людьми.
  • Курсы > ВУЗ.
  • Много полезной информации для обучения можно найти на Ютубе.
Часто ищут