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

Мне это нравится, потому что для того, чтобы попасть в индустрию, все, что действительно важно, - это то, что может делать человек. Не имеет значения, имеет ли кандидат степень бакалавра или магистра, если он не может решить задачу по программированию. Неважно, что они могут объяснить, для чего нужна нотация Big O Notation, если не понимают, как работает MVC.

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

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

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

Кто-то может иметь 9 лет и не иметь всех необходимых навыков, в то время как кто-то, у кого всего 5 лет, может иметь все, что им нужно.

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

Хорошие методы программирования

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

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

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

Обмен знаниями

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

Это можно сделать разными способами, включая, помимо прочего:

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

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

Настойчивость

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

«… Стойкость - это страсть и постоянная настойчивость, прилагаемая к долгосрочным достижениям, без особой заботы о наградах или признании на этом пути»

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

Технический руководитель однажды сказал мне, что они видят старших в команде как «рабочих лошадок» команды.

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

Старшие - это те, кто тянут команду через все тонкости разработки программного обеспечения.

Если вы еще не являетесь старшим инженером и хотите им стать, начните с этого атрибута.

Открытость узнавать новое

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

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

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

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

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

Может быть в курсе

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

Однажды у меня был товарищ по команде, который, когда я работал с ним над ошибкой, мог сказать мне прямо, даже не глядя на код, что это, вероятно, вызвано либо файлом A в строке 25, либо файлом B в строке 47. Это было потрясающе. .

Этот пример, конечно, неожиданный, но я думаю, что польза от обзора системы не требует пояснений.

Сочувствие

Последнее и, на мой взгляд, самое важное, что нужно старшему инженеру, - это сочувствие.

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

Надежная и доверчивая команда может многого добиться.

Я надеюсь, что меня правильно поймут, когда я скажу, что опыт работы более 8 лет - это не то, что делает старшего старшим. Я считаю, что опыт важен и очень ценен. Но я также считаю, что должность старшего инженера - это та позиция, в которой мягкие навыки начинают становиться невероятно важными, и я хотел выразить это в этом посте. Эти навыки должны быть чем-то, над чем постоянно работают все в нашей отрасли, и, возможно, однажды собеседования и описания должностей будут не только собеседованиями на доске и 8+ лет опыта, но и чем-то, что охватывает некоторые из вещей, которые могут иметь еще большее влияние. по командам.

Думаешь, я что-то пропустил? Не согласны? Дайте мне знать, я хотел бы обсудить! Спасибо за прочтение.