Инжиниринг — это гораздо больше, чем программирование…

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

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

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

Кодеры против инженеров

Разработчики программного обеспечения обычно делятся на две группы: кодеры и инженеры.

Кодеры любят писать код, и иногда у них это хорошо получается! Дайте им проблему и достаточно времени, и они напишут вам код для решения вашей конкретной проблемы.

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

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

Итак, что делают великие инженеры, чего не делает большинство программистов?

1. Узнайте требования к функциям

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

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

  • Требует ли эта новая функциональность добавления новой таблицы или столбца в базу данных?
  • Должны ли мы решить эту проблему с помощью JavaScript, чтобы полностью реализовать эту функцию во внешнем интерфейсе, или вместо этого следует обновить API для комплексной поддержки новой функциональности?
  • При планировании группы функций, в каком порядке они должны разрабатываться и блокируют ли какие-либо задачи другие?

Есть сотни способов, которыми отличные инженеры помогают выявить требования и убедиться, что они обнаружены, чтобы команды могли быстрее планировать и выпускать более качественные функции.

2. Продумайте крайние случаи и протестируйте их

У большинства компаний есть стандарты тестирования нового кода. Чтобы быть объединенным, новый код должен соответствовать некоторому порогу охвата.

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

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

3. Учитывайте пользовательский опыт (UX)

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

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

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

4. Разработайте стратегии развертывания и внедрения

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

Не так быстро! Великие инженеры не просто придумывают решения, они также думают о том, как эти решения будут приняты, развернуты и сопровождены.

Хорошо спланированная стратегия принятия достойной идеи лучше, чем неудачное воплощение идеальной идеи.

5. Устранение технического долга в существующем коде

Великий инженер оставляет код чище, чем он был.

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

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

6. Читайте и пишите документацию

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

Что такое хорошая документация?

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

Хорошая документация не обязательно должна быть длинной или сложной! На самом деле, великие инженеры знают, что лучшая документация — короткая и четкая.

7. Просмотрите код других инженеров

Проверка кода — огромная часть работы инженера! Во время проверки кода великие инженеры обращают внимание на:

  • Соответствует ли этот код требованиям билета?
  • Это технически правильно и обрабатывает случаи ошибок?
  • Является ли реализация настолько простой/прямой, насколько это возможно, и в то же время гибкой?
  • Есть ли хорошее тестовое покрытие и отражают ли тестовые примеры фактическое использование?
  • Включает ли новый код правильные имена, строки документации, комментарии и подсказки типов?

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

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

8. Проведите собеседование с кандидатами

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

Они понимают, что не стоит нанимать отличного программиста, если этот человек не умеет работать в команде. Точно так же они готовы видеть перспективу в более слабом программисте, если этот человек показывает потенциал.

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

9. Тренировать юных инженеров и парную программу

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

Иногда это означает парное программирование. В других случаях это наставничество один на один. Даже комментарии в код-ревью можно считать своего рода наставничеством.

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

10. Реагируйте на инциденты

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

Кодировщик тоже может отреагировать на инцидент, но инженеры идут дальше. Великие инженеры спрашивают:

  • Почему инцидент вообще мог произойти? Чего нам не хватает в наших модульных тестах, процессе контроля качества, стандартах проверки кода?
  • Кого еще может затронуть этот инцидент? Могут ли другие клиенты столкнуться с такой же проблемой? Зависят ли другие службы от затронутого компонента?
  • Как задокументировать инцидент, его разрешение и последующие шаги? Если что-то подобное произойдет в будущем, как упростить поиск решения?

Инжиниринг: гораздо больше, чем просто программирование

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

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

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

Дополнительные ресурсы

DeveloperPurpose.com — серия электронных писем о том, как построить значимую карьеру программиста.