Прежде всего нужно объяснить разницу между программным инженером и программистом. Часто люди не понимают различий, всех называя программистами.
Программист – это человек, пишущий код согласно ТЗ. Он, следуя инструкциям, пишет код на том или ином языке программирования.
Программный инженер (инженер ПО) создает аккуратные оптимизированные под пользователя программы для решения конкретных задач. С возможностью их дальнейшего обновления, расширения функционала.
Хорошо описал этот момент в своей статье Самер Буне, куратор проекта jsComplete, обучающего портала для разработчиков ПО.
Первое – разработка концепции ПО, второе – “просто кодинг". Проще говоря, все программные инженеры могут писать код, но не все программисты способны разрабатывать концепции программного обеспечения.
Программный инженер отвечает за создание качественного приложения на всех его этапах, чтобы оно отлично закрывало нужны пользователя, было для него подходящим, удобным, эффективным.
Вот еще несколько примеров:
1. Мы учим математику и русский язык в школе, но не все из нас становятся писателями или математиками.
2. Мы поем в душе, но не всегда достойно сцены.
3. Вряд ли можно доверить постройку дома ребенку, который талантлив в LEGO.
4. Почти каждый способен приготовить сносное или даже вкусное блюдо, но не все смогут приготовить ужин на 100 персон в посольстве. Скорее всего, придется позвать профессионального повара.
Вывод таков: простые программы очень сильно отличаются от программ, спроектированных инженерами.
Процесс программной инженерии несколько сложнее. Он включает планирование, проектирование, затем написание, тестирование, курирование ПО. Главная цель решить проблему клиента, пользователя простым путем с лучшим результатом. Созданные решения должны быть безопасны, выдерживать проверку временем, подстраиваться под новые возникающие в процессе задачи.
Программные инженеры знают все о задачах, которые они решают, решениях, которые они предлагают, ограничениях этих решений, их безопасности.