что лучше программист или инженер
Инженер VS Программист. Или куда уходят инженеры
За последнюю неделю на Хабре появилось как минимум три поста о том, как люди разного возраста, пола и полученной специальности становились программистами. Успешными программистами. Эти истории отвечали на вопрос «как», но почти упускали вопрос «почему».
Сейчас я еще работаю инженером, причем по моей вузовской специальности «Радиофизика и электроника», и по профилю кафедры Антенн и Радиопередающих устройств. Но уже активно шагаю в сторону переквалификации.
Почему же я, инженер с 14 годами стажа, решил перейти в программисты?
Востребованость
В России сейчас инженер СВЧ не нужен. Новых разработок очень мало. Интересных проектов почти нет. Есть ВПК, где еще что-то разрабатывают, но там сидят деды, которые не дадут дергаться сильно. Секретный допуск и документация для передатчиков начинается от «совершенно секретно», что лишит вас радости путешествия за пределы России и повесит дамоклов меч службы Гостайны у вас над головой. Разработки только из элементов, доступных в перечне импортозамещения. Новые технологии? Слышали, но не можем. Ах, да, слышать и читать вы их не будете, интернет на работе запрещен.*
*данная информация является личным опытом автора поста
В частном секторе все еще хуже и печальнее. Если считать, что СВЧ в нынешнем его понимании начинается от 10ГГц и не включает сотовую связь, то мест, где вы найдете работу для разработчика, да еще по специальности, да еще за деньги — почти нет.
Оплата труда
Из причины выше можно увидеть, как работают законы рынка. Спрос на работу превышает предложения, поэтому зарплаты идут вниз. Оно и раньше инженер получал меньше рабочего.
Сейчас кажется, что всё осталось также. Средняя зарплата инженера-разработчика в Петербурге — 40 000 рублей. Данная цифра соответствует действительности. Причем разброс небольшой — от 23 до 60. Не нравится – иди работай в другом месте, на твое место есть очередь. Хотя в последнее время ситуация стала меняться еще в том, что на 30 000 руб приходят свеженькие выпускники вузов.
Поэтому я могу точно сказать – уровень образования технических вузов стремительно пикирует вниз. Потому что те, кто понимает на этапе обучения, что высоких зарплат не будет, сразу уходят в программисты.
Одна среда
Опять логический переход. Отличия инженера от программиста у нас небольшое. Системный подход, аналитическое мышление, умения решать поставленные задачи. Даже привычка делать код с костылями выросла из волшебного свойства синей изоленты. Более того, инженер-разработчик в нынешнее время — это в любом случае программист, потому что от микроконтроллеров, обработки сигналов и прочей алгоритмов никуда не деться. От инженера в программисты — всего пара шагов.
Перспективы
Опять выигрывает программист. Инженеры нужны все меньше и меньше. Все более узконаправленные и узконаправленные. В программировании все иначе, это как пучок технологий, где тренды меняются каждый год. «Нам нужно больше программистов». Этот рефрен можно услышать даже из чайника, по WiFi. Я боюсь, что станет, когда инженеров станет слишком мало, но радуюсь, что до этого не доживу. Пока что еще слишком много инженеров и слишком мало программистов.
Вывод напрашивается один. Идти в программисты. Почему я не сделал этого раньше? Одна единственная причина – я создаю устройства. Готовые, технологичные и полезные в пределах целого мира. За небольшую зарплату, с переработками и мыслями по ночам о том, как сделать лучше. Я могу подержать их в руках, я могу вспомнить, как они выглядели, каков был их нелегкий путь от идей к воплощению. Но, наверняка они будут продолжать создаваться и без меня…
Программист VS Инженер
Привет, Хабр. Я достаточно давно наблюдаю за ИТ рынком, но никогда ничего не писал. Это первая часть моей первой пасты, а посему прошу сильно не хейтить.
Таков путь
В своих статьях я хочу поделиться опытом поиска, обучения и интеграции интернов или джунов в продуктовую команду (не путать с фриланс-командами или типа того).
В первую очередь, нужно понимать, что всё написанное ниже сугубо моё личное, субъективное мнение. Оно основано на многолетних наблюдениях и опыте, в частности, опыте и наблюдениях последних пяти лет. Разумеется, не претендую на исключительность и не утверждаю, что оно является истиной в последней инстанции.
В первой части мы рассмотрим разницу между двумя гранями одной и той же сущности. А это, в свою очередь, поможет вам определиться с тем, кого вы хотите видеть в своей команде.
Рассмотрим два базовых варианта:
Программист
На самом деле, разницы между рядовым программистом нашего времени (вы ведь тоже видите эти бессовестно врущие рекламы «стань Java разработчиком за 3 месяца!»?) и аккаунт-менеджером Светой — не так уж и много. Разумеется, я не говорю обо всех-всех аккаунт-менеджерах или обо всех программистах. Я беру основную «массу», которая, судя по всему, будет хейтить этот пост (первая версия была намного жёстче). Поехали.
Программист — просто исполнитель
Для большинства в наше время программирование стало просто работой. Да, самой, что ни на есть, простой работой, что, впрочем, и неудивительно; и объявления про курсы «Java за 3 месяца» тому прямое доказательство.
Программист может писать, а может не писать.
Он будет делать ваши фичи, задавать минимум вопросов, или напротив, максимум (про таких я расскажу в следующей части).
Программист редко задумывается о трендах, новшествах. Он пишет так, как рекомендуют топы (зачастую) или как советуют топовые дев-блоггеры. Я, к примеру, совсем не понимаю, почему у Facebook столь отвратная, нелогичная и запутанная организация фронта, и почему это модно. Вот, хоть карму мне уроните, но не понимаю.
Программистом может стать каждый!
К сожалению, это горькие реалии нашего времени.
С одной стороны, это круто! Прогресс не стоит на месте, человечество развивается. А с другой (девочки из HR агенств меня поймут), рынок перенасыщен некомпетентными или низкоквалифицированными кадрами!
Да, он в принципе перенасыщен, ценники стали выравниваться. Безумных вакансий, где компании ищут джунов за ₽100к, не осталось. По крайней мере, я таких давно не наблюдаю. Лиды всё чаще стоят до ₽250к, ну и т.д.
Найти программиста просто
Это действительно так, но, нужен ли вам «такой программист»? Сейчас если взять среднестатистического frontend разработчика, он безусловно пройдёт собеседование, так как каналы типа WebDev публикуют вопросы с собесов разных компаний и, разумеется, ответы на них, а на ютьюбе шарят гайды по всяким штукам типа замыканий, промисов, коллбеков и прочих «нужных» штук.
На выходе мы получим фронтендера, который за месяц научился всему тому, чему обычно учат на курсах до полугода, а что на самом деле?
На самом деле получается картина маслом: разраб не понимает базовых принципов веб-разработки (DOM, CSS Flow Layout, HTML 5 API, es6+, immutability, etc), он делает так «как показывали в том видосике». Или делает по принципу «я вам тут по доке писал…норм же?»
Кому нужен программист?
Безусловно, такие кадры тоже имеют определённую ценность.
Кому они могут быть полезны в первую очередь?
Инженер
Как правило, бóльшую часть жизни посвящают саморазвитию и учению.
Глубокий анализ
Инженеры разберут ваше легаси на атомы, найдут узкие места, предложат пути решения, если инженер с большим опытом, то он и команду в состоянии подобрать при наличии HR агенства или вообще в одиночку.
Ему не нужно ТЗ, так как знает, что это бесполезная трата времени, а декомпозицию и постановку тасок проще проводить непосредственно знакомясь с требованиями по входу в проект.
Сперва анализ требований, потом проектирование, уже в конце разработка. Да, именно так и в таком порядке. По большому счёту, соотношение потраченного времени распределяется подобным образом: 40/40/20, ну, само собой ±.
Применение мощных практик
Применение сложных практик тоже является ключевой фишкой, ведь если спросить рядового разработчика, что он знает про *DD, с бóльшей долей вероятности дать внятного ответа он не сможет, с инженерами иначе. Код зачастую пишется через TDD, планирование флоу работы над продуктом из клиента посредством набора практик из BDD, проектирование продукта через DDD.
Качество кода зачастую на порядок выше, чем у программистов. Пока не стало модно использовать линтеры и тайпчекеры всем было плевать как писать и для чего писать, сейчас конечно всё стало несколько иначе, но тенденции не сильно изменились: чистота, читабельность, масштабируемость, модульность кода наёмных разработчиков по-прежнему оставляет желать лучшего.
Кому нужен инженер?
И что теперь?
В следующей части мы рассмотрим несколько вариантов привлечения людей в вашу команду, в зависимости от вашего выбора (программист или инженер). Рассмотрим весь процесс поиска. Варианты автоматизации процесса. Что делать если откликов очень мало или наоборот очень много. А самое главное — каким должно быть эффективное тестовое задание для ваших будущих товарищей по клавиатуре.
Чем отличается программист и инженер-программист?
Простой 1 комментарий
Единый квалификационный справочник. Имеет смысл только в организациях с гос. участием, где по разработанной тарифной сетке идёт начисление зарплаты. В коммерции свободы больше, могут обзывать почти как попало (думаю).
bizlog.ru/eks/eks-1/172.htm
Требования к квалификации:
Техник-программист I категории: среднее профессиональное образование и стаж работы в должности техника-программиста II категории не менее 2 лет.
Техник-программист II категории: среднее профессиональное образование и стаж работы в должности техника-программиста не менее 2 лет.
Техник-программист: среднее профессиональное образование без предъявления требований к стажу работы.
bizlog.ru/eks/eks-1/131.htm
Требования к квалификации:
Инженер-программист I категории: высшее профессиональное (техническое или инженерно-экономическое) образование и стаж работы в должности инженера-программиста II категории не менее 3 лет.
Инженер-программист II категории: высшее профессиональное (техническое или инженерно-экономическое) образование и стаж работы в должности инженера-программиста III категории или других инженерно-технических должностях, замещаемых специалистами с высшим профессиональным образованием, не менее 3 лет.
Инженер-программист III категории: высшее профессиональное (техническое или инженерно-экономическое) образование и опыт работы по специальности, приобретенный в период обучения, или стаж работы на инженерно-технических должностях без квалификационной категории.
Инженер-программист: высшее профессиональное (техническое или инженерно-экономическое) образование без предъявления требований к стажу работы или среднее профессиональное (техническое или инженерно-экономическое) образование и стаж работы в должности техника I категории не менее 3 лет либо других должностях, замещаемых специалистами со средним профессиональным образованием, не менее 5 лет.
Кодеры vs инженеры: как не остаться «кодировщиком» на всю жизнь?
В эпоху популярного тренда «войтивайти» с новой силой вспыхнула дискуссия о том, кто сегодня приходит в индустрию — «кодеры» или инженеры, кто из них на самом деле нужен компаниям и и за кем будущее в профессии. Как не остаться «кодером» на всю жизнь и совершить качественный скачок в инженеры-программисты, рассказали основатели курса cron.is Юрий Петранков, Илья Яскевич и Игорь Куценко.
— В чём разница между «кодером» и инженером-программистом?
— Инженер-программист — это инноватор, который с помощью технологий не только создаёт что-то новое, но и постоянно ищет способы, упрощающие решение однотипных задач. Закончив программировать модуль, он уже думает о том, как его ускорить, сделать оптимальнее, безопаснее и пр. Основатели Google создали поисковик, потому что знали, что смогут «заставить» его работать быстрее и лучше, чем у конкурентов (Yahoo и Lycos).
А вот кодировщик не создаёт ничего, он пользуется готовыми решениями, день за днём выполняя одно и то же. Такие люди тоже приносят пользу, но их бич — невысокая зарплата по сравнению с первыми и отсутствие карьерного роста. Пример такого специалиста — PHP-программист, создающий только интернет-магазины. Это не значит, что PHP — плохой язык (профессионалы создают нём поразительные вещи), просто так сложилось, что это лучший пример кодера, пишущего примерно одинаковый функционал на одном и том же движке.
— Как понять, к какому «классу» разработчиков принадлежишь?
— Каждый человек сам выбирает, что ему ближе. У инженера-программиста нет стандартного графика 8 часов в день, потому что он не знает счёта времени, и ему это нравится.
А вот кодировщику ближе стабильная, неспешная и предсказуемая работа. Алгоритм такой:
Взгляните на следующий код:
Инженер-программист очень настороженно отнесётся к данному коду, так как он изобилует подводными камнями и, с большой долей вероятности, в итоге приведёт к проблемам с дальнейшим развитием продукта.
С точки зрения трёх базовых принципов ООП всё верно: код декомпозирован на объекты.
С точки зрения популярных паттернов проектирования код использует паттерн «одиночка» (singleton).
Но личный опыт, полученный на болезненных ошибках, или целенаправленное изучение шаблонов проектирования GRASP подскажут:
Все эти ошибки очень сильно затрудняют переиспользование данных классов и усложняют отладку.
Чтобы видеть все эти проблемы в коде, вам необходимы определённые фундаментальные знания.
— Что имеется в виду под «фундаментальными знаниями»?
— Прежде чем ответить на этот вопрос, нужно обрисовать сегодняшнюю ситуацию в ИT. Люди из других специальностей стремятся попасть в индустрию, и некоторым это даже удаётся. Но такие «специалисты» спустя годы остаются на том же уровне и с той же зарплатой, с которой начинали. Причина застоя кроется в нежелании изучать информатику.
Для большинства из нас информатика ассоциируется со школой, набором текста в Microsoft Word и рисованием в Paint. Но слово «информатика» переводится на английский язык как Сomputer Science. Именно Computer Science необходимо знать для «качественного скачка» или, другими словами, превращения кодера в инженера-программиста.
В действительности информатика затрагивает очень широкий спектр тем: теорию алгоритмов, структуры данных, архитектуру компьютера, анализ производительности, компьютерную безопасность и криптографию, компьютерные сети, базы данных и многое другое.
Заметьте, что в списке перечисленных дисциплин нет популярных фреймворков ASP.NET MVC, AngularJS, Laravel и других. Все они функционируют, опираясь на фундаментальные основы информатики.
— Что конкретно, по-вашему, нужно знать, чтобы стать хорошим разработчиком?
— В ИT существует два типа знаний: узкоспециализированные (по определённому языку, технологиям или фреймворку) и фундаментальные (по разделам информатики).
Как правило, курсы — это ориентированная на один продукт программа, дающая знания по определённому языку. Вы получаете знания по функционалу какого-то одного фреймворка, но при этом понятия не имеете о том, как он создан, какие механизмы заложены в его основу. А фундаментальные разделы информатики, которые мы преподаём студентам, показывают, как работают фреймворки, базы данных, поисковые алгоритмы, как оценивать и оптимизировать работу программ.
Без знаний фундаментальных разделов информатики построить карьеру в ИТ сложно. Некоторые аспекты этой области освещает университет, но не все студенты стремятся постичь информатику, отмахиваясь, что им это не пригодится.
Зная, что лежит в основе работы языков и систем, вы можете легко «переключаться» с одних технологий и фреймворков на другие.
Фундаментальные знания не устаревают, а время, потраченное на их освоение, даёт дивиденды.
— Почему многие, с вашей точки зрения, пренебрегают этими знаниями?
— Проблема в том, что не каждому под силу самостоятельно разобраться в их тонкостях. Большинство учебников и статей преподносят информацию в недоступной для понимания форме. Причины этого разные: слишком сложный математический аппарат, нежелание автора расписывать детали тех или иных алгоритмов, подходов или структур данных, незнание автором всех технических деталей.
Знания, необходимые для целостной картины фундаментальной информатики, фрагментированы и содержат ошибки. Поэтому могут понадобиться годы, чтобы разобраться во всех нюансах информатики. А таких временных ресурсов на информатику, как правило, ни у кого нет.
— К слову, один из ваших преподавателей два года проработал в Google. Какое там соотношение инженеров и кодеров?
— Стоит начать с того, о ком именно идет речь: в Google есть несколько разновидностей работников:
Среди первой категории кодеров не может быть в принципе, поскольку все интервью направлены именно на то, чтобы отобрать исключительно инженеров-программистов. 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% людей не напишут «с головы» удаление узла из АВЛ-дерева. В курсе эта тема даётся так, что вы никогда не забудете, как это сделать. Потому что мы рассказываем ту суть, которую вкладывали авторы в эту процедуру. А зная суть, вы всегда сможете написать данный код без «зазубривания».
— Делитесь ли вы полезными материалами бесплатно?
Время от времени мы проводим бесплатные открытые лекции, чтобы заинтересованный человек мог оценить, подходит ли ему наш курс.
Эта публикация подготовлена в партнёрстве с обучающим центром Cron.is.
Хотите сообщить важную новость? Пишите в Телеграм-бот.
А также подписывайтесь на наш Телеграм-канал.