Мои мысли о программной инженерии.

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

Что значит быть инженером-программистом?

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

Именно так ISO/IEC/IEEE Systems and Software Engineering Vocabulary определяет разработку программного обеспечения, и, экстраполируя это определение, мы можем сказать, что инженером-программистом является тот, кто применяет инженерию к процессу создания программного обеспечения, но что это на самом деле означает? Что ж, если мы хотим углубиться в эту концепцию, нам нужно начать с определения того, что такое инженерия.

В ENCYCLOPÆDIA BRITANNICA инженерия определяется как приложение науки к оптимальному преобразованию ресурсов природы для использования человечеством, и если перейти прямо к основам, мы обнаружим, что слово инженерия происходит от двух слов ingenium и ingenerare, которые означают сообразительность и творить соответственно, но к чему это нас приводит? Поскольку мы определили инженера-программиста как человека, который применяет инженерию к программному обеспечению, и, принимая во внимание предыдущую концепцию инженерии, мы могли бы рефакторить это утверждение следующим образом:

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

Обязанности инженера-программиста

Существует кодекс этики[1] (который я рекомендую вам прочитать), который совместная рабочая группа IEEE и ASC резюмировала в восьми пунктах, и я попытаюсь изложить здесь еще больше (для целей этой статьи). Я включу только те пункты, которые определяют принципы продукта, личности и профессии):

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

Таким образом, взяв наше предыдущее определение и объединив его с этими профессиональными принципами, мы могли бы дополнить наше утверждение следующим образом:

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

Так, я должен коснуться его?

Технологии развиваются быстрее, чем что-либо еще, и с каждым шагом вперед мы, занимающиеся их созданием, должны развиваться вместе с ними. Возьмем, к примеру, WEB-технологии. Они превратились из системы, обслуживающей статические файлы, в архитектуру клиент-сервер и код по запросу, а затем в веб-сокеты, GraphQL, RESTful-сервисы и т. д. Итак, представьте себе разработчика программного обеспечения, которого просят создать сайт с некоторые функции X, решает использовать что-то с известными уязвимостями, например, flash или java-апплеты, считаете ли вы его/ее этичным или даже хорошим инженером-программистом? Нет, это не оптимальное решение и не соответствует самым высоким профессиональным стандартам, так зачем же это делать? (Это может вас удивить, но я знал таких людей).

Теперь давайте посмотрим на случай существующей системы. Я работаю с платформой электронной коммерции, которая насчитывает около 4,5 миллионов активных пользователей, мы используем Angular для внешнего интерфейса, однако из-за его настраиваемого характера некоторые страницы загружаются долго, и поскольку на сайте одновременно активны многие компоненты. некоторые операции занимают много времени из-за обнаружения изменений, это можно решить с помощью наблюдаемых привязок и ChangeDetectionStrategy.OnPush , однако это работает как есть, оно решает текущие потребности нашего клиента. Следовательно, должен ли я внести изменения? Посмотрим:

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

Итак, что вы думаете об этом?

использованная литература

[1]: https://www.computer.org/web/education/code-of-ethics