Вокруг профессии «Инженер программист» сформировалась довольно странная ситуация: многие источники начинают приписывать этой профессии чуть ли не магические свойства, мол, и тестированием он занимается, и разработать может что угодно, и «программная инженерия» (что бы это ни значило) – крайне ответственное дело, которым не может заниматься разработчик, но может software engineer. Все это вносит путаницу, и люди начинают думать, что инженер программист – это какой-то высококвалифицированный подвид разработчика. Ниже мы покажем, почему это не так (и почему в этой путанице виноваты ВУЗы), а так же расскажем, какими навыками обладает инженер-программист, что он делает на реальной работе и сколько ему платят.
Начнем с той самой путаницы, о которой мы только что говорили. Есть понятия «Инженер-программист», «Программист» и «Девелопер/Разработчик». Так вот, все это – одно и то же. Проблема названий появилась из-за медлительности ВУЗов – раньше, когда компьютеры были ленточными и все писали код на Фортране, программистов действительно называли «Инженерами-программистами», потому что не-инженерам компьютеры были не нужны в принципе – они умели только производить математические вычисления, никаких «Косынок» и «Саперов». Кроме того, даже сейчас формулировка «Инженер-программист» имеет смысл, поскольку любой девелопер должен обладать навыками инженера – приложение в любом случае нужно проектировать перед разработкой, и «Инженер» в названии этот момент как раз отражает.
Проблемы начались, когда индустрия разработки стала развиваться взрывными темпами.
Поскольку лидером в плане рынка разработки были США, многие слова из английского были заимствованы при описании позиций в команде разработки. И вписались они довольно удачно, потому что с точки зрения русского языка «Программист» – это человек, который просто набирает код, который будет исполняться на вычислительном устройстве. «Инженер-программист» – это человек, который придумывает (проектирует) программу + набирает ее. Эти два слова можно заменить одним, «Разработчик», потому что разработкой программных продуктов занимается как раз тот, кто и проектирует этот продукт, и пишет его. То есть инженер-программист = разработчик = девелопер (калькирования слова developer).
Проблема – в том, что слово «Разработчик» (как и девелопер) – довольно широкое и непонятное обывателю. А вот «инженер-программист» – это уже что-то более понятное. Поэтому ВУЗы и госучреждения, которым нужно вести строгую отчетность на русском языке, используют формулировку «Инженер-программист», которую пишут в дипломах и трудовых. Но пусть вас это не обманывает – если госучреждение открыло вакансию Инженер-Программист, оно ищет девелопера под конкретные задачи.
Профессия программиста предполагает разработку приложений для конкретных целей бизнеса. И здесь сразу возникает много вопросов, ответы на которые и раскрывают особенности профессии:
Таким образом, вакансия инженера-программиста предполагает проектирование/дизайн/разработку/поддержку приложения для вычислительного устройства с целью заработка или решения какой-либо проблемы.
И для того, чтобы заниматься таким программным обеспечением, девелоперу нужен стек технических навыков.
Что надо знать/уметь:
Основные личные качества хорошего девелопера – это умение быстро учиться и продуктивно общаться с другими участниками команды.
Оба качества мы уже описали выше.
Плюсы:
Минусы:
ВУЗ – не лучший вариант для получения профессии, и проблема здесь – в длительности обучения. Дело в том, что в 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.
Если вы хотите, чтобы ваш ребенок, закончивший школу, получил высшее образование, то поступить на инженера-программиста – не самая плохая идея. Если же вы – уже сформировавшийся человек, который хочет получить хорошую профессию, то ВУЗ – слишком медленный вариант, смотрите в сторону курсов.
Лишней точно не будет, хотя основам вас научат в процессе обучения языку, на котором вы будете писать. Можете почитывать алгоритмизацию/структуры данных в свободное время.
Тезисно: