За всю свою работу инженером-программистом в области разработки встраиваемых систем, а это более 15 лет, мне ни разу не приходила в голову идея спросить у своего руководителя о том, что мне нужно сделать для того, чтобы перейти с одной категории на другую. Всё что я делал, это решал поставленные перед мной задачи разного характера. Интерес был именно в решении задач, а не в получении категорий. Категории как-то сами по себе назначались…

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

Благодарность

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

О понятии инженер и его образовании

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

Подготовка инженера осуществляется в различного рода высших технических учебных заведениях. Учебный план для инженера-программиста рассчитан на 4-5-6 лет, если мы говорим про бакалавриат, специалитет и магистратуру, соответственно, и состоит из трёх циклов учебных дисциплин:

  • общенаучных — высшая математика, физика, химия, экономика, философия и пр.;

  • общеинженерных — начертательная геометрия и черчение, материаловедение, электротехника, вычислительная техника и пр.;

  • специальных — дискретная математика, алгоритмы и структуры данных, системное программирование, сетевые технологии, схемотехника и пр.

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

Молодой специалист (Джун)

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

Опыт нарабатывается повседневным трудом и решением сложных задач. Что такое «сложная задача»? Всё сугубо индивидуально, для кого-то сложной задачей будет поморгать светодиодом, подключенным к выводу микроконтроллера, а для кого-то реализовать управление интенсивностью свечения того же светодиода, используя для этого ШИМ.

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

Если вдруг, вам стало скучно, не интересно, начала снижаться скорость решения з��дач или вы не можете решить задачу долгое время, не видите перспектив своего развития, то можно сказать, что вы «топчетесь на одном месте». В таком случае можно и нужно поговорить со своим руководителем и совместно с ним наметить путь своего развития, а затем следовать ему. Мидлы и сеньоры тоже этому подвержены, но в меньшей степени, а рецепт решения такой же — говорите со своим руководителем.

Помните, работа должна вам нравиться. В противном случае её нужно менять или менять направление своей деятельности. Всю жизнь по восемь часов в день уделять нелюбимой работе, то ещё испытание.

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

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

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

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

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

В завершении этого раздела коснёмся немного вопроса о самообразовании. В высших технических учебных заведениях даются, как правило, обобщенные знания, покрывающие широкий спектр вопросов с которыми вы будете сталкиваться в своей повседневной, инженерной деятельности. Но прогресс не стоит на месте, появляются новые технологии, новые инструментарии, новые микросхемы и инженер обязан использовать лучшее в своей деятельности. В связи с этим, инженера можно охарактеризовать как человека, учащегося всю свою жизнь: сначала школа, потом университет, а затем сам, путём самообразования. Без самообразования трудно представить себе сколько-нибудь удачное развитие своих навыков и способностей. Если не уделять своему развитию должного внимания, то можно очень быстро потерять свою ценность. Уделяйте своему образованию достаточно времени. Читайте книги, статьи, участвуйте в специализированных конференциях, обсуждайте новшества в вашей области деятельности со своими коллегами — это позволит держать в тонусе ваш ум (главный инструмент инженера) и создавать продукты на переднем крае науки и технологий.

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

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

Специалист среднего уровня (Middle)

В конце прошлого раздела мы упомянули такое понятие как ответственность, и как это важно при переходе от молодого специалиста к специалисту среднего уровня. Что же т��кое ответственность и как определить ответственного человека?

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

Опять же, эти «ожидания» нельзя выразить в количественных единицах, но качественно, по мере своего развития, вы сами будете чувствовать, что можете взять гораздо больше ответственности на себя и это будут видеть окружающие вас коллеги и руководитель, в том числе. С повышением уровня вашей ответственности снижается контроль за вами со стороны руководителя. Вы становитесь более самостоятельным и вам предоставляется больше свободы в действиях.

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

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

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

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

Ура! Вы готовы стать специалистом высокого уровня!

Специалист высокого уровня (Senior)

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

Специалисты высокого уровня участвуют в определении технической политики в команде. Они ведут команду к достижению поставленных целей, в своих зонах ответственности. Они также отвечают за воспитание кадров и передачу своего опыта подрастающему поколению специалистов. Конечно, они по-прежнему решают рабочие задачи, развивают свои компетенции, проводят экспертизы решений и дают рекомендации по их оптимизации.

Они могут быть немного «душными», но это обусловлено грузом ответственности, который лежит на их плечах. От их решений, порой зависит успех продукта и компании, поэтому требуется взвешенно подходить ко всем нововведениям и искать баланс между коммерческой и технической составляющей разработки. Если по-простому, при всех нововведениях, сроки выпуска продукта должны соблюдаться.

В целом, он всё тот же программист, как цать лет назад, только мудрее, реже смеётся (или наоборот чаще) и есть немного седины в волосах =)

Заключение

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