От программиста до инженера

Опубликовано 1 июня 2019 автором Tim Whelan С тегом: engineering

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

Итак, в чем разница?

Для тех, кто мутирует в инженера, в чем именно разница?

(Я понимаю, что многое из того, что следует ниже, является личным толкованием, и что в реальном мире эти линии четко не очерчены.)

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

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

Думать о данных, желательно как можно раньше, а не позже — с какими данными им придется работать, какого качества эти данные, как выглядит поток данных и чем эти данные окажутся в конечном итоге (и где). Думая о проблеме с точки зрения данных, мы обычно находим гораздо лучшее инженерное решение.

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

Что может заставить начать рост

  • Окружающая среда — другие инженеры, процессы CI/CD играют большую роль в предоставлении ролевых моделей, а также пространства и среды для программистов, чтобы они могли начать думать не только о программировании.
  • Инженеры, которым приходится владеть своим кодом в продакшене, добавляют этому импульсу.
  • Вовлечение всех в архитектурные решения. Поощрение инженеров к участию в разработке более широкой картины начнет расширять их горизонты и то, о чем они думают, приступая к новому проекту или задаче.
  • Сделав еще один шаг — предоставив инженерам агентство определять как можно больше информации о решении, — это только хорошо. Владение с самого начала проекта (или новой функции) — определение проблемы, разработка решения, его реализация, развертывание, а затем владение и сопровождение в производстве.

Собираем все вместе

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

Примечания и цитаты

Скотт Хансельман: системное мышление как никогда важно для начинающих программистов

Я посоветовал этому молодому человеку не сосредотачиваться на синтаксисе C# и деталях .NET Framework, а думать о проблемах, которые он решает, и о системе вокруг него.

Первоначально опубликовано на https://timmyw.gitlab.io.