В принципе, об этом сказано в
предыдущей заметке, но сказано слишко неконкретно и безличностно. А вот если подойти к человеку, называющему себя программистом, и спросить: «Чем ты занимаешься?» - появится некое личное отношение.
Инженеру по званию полагается находить технические решения в условиях ограничений - либо это оптимизация чего-то существующего, либо, как
тут говорится, инновация. С этой точки зрения разработка программного обеспечения - лишь техническое средство для оптимизации или инновации. И если программист именно так воспринимает свою работу - тогда он инженер. Не квалификацией в дипломе и не должностью это определяется. Инженера радует, когда предложенное им решение позволяет что-то делать быстрее, качественнее, точнее, дешевле, чище и т. д. Я себя считаю инженером, и меня совсем не вдохновляет счастье маркетолога, получающего из рук программиста новую приманку для лохов, которые купят новинку побаловаться. Хотя я ничего не имею против сферы развлечений, лично для меня работа на один лишь маркетинг - это пустая работа.
Программист, но не инженер, сосредоточен на техническом решении, забывая об адекватности этого решения потребностям пользователей - фактически игнорируя ограничивающие условия. В результате получаются лишь прикольные фенечки, радующие маркетолога, а в худшем случае и их создателя. Например, на этот путь, похоже,
прочно стали разработчики языка C#. Какие ограничивающие условия игнорирует данное сообщество? Язык программирования - это не просто свод формальных правил, по которым программист «чатится» с компьютером. Это, как 40 лет назад справедливо
замечал Эдсгер Дейкстра, и инструмент мышления программиста, и, что самое важное для инженера, средство наработки инженерных решений, пригодных для повторного использования. Постоянные изменения в языке вынуждают промышленных производителей программного обеспечения либо этими изменениями не пользоваться (тогда для кого они делаются?), либо постоянно перебирать все свои наработки, библиотеки, подгоняя их под новые возможности (делать им больше нечего?). Если не соблюдать одну из этих альтернатив, архив наработок из стройного набора инструментов превращается в разношёрстную по архитектурным принципам и стилям реализации свалку, элементы которой будут плохо интегрироваться в прикладных системах. Язык - это элемент платформы, фундамент прикладных решений. В данном случае фундамент представляет собой зыбкое болото: какого размера постройки он способен держать?! Конечно, об этой стратегии Microsoft
уже говорилось: благодаря ей, пока Microsoft занимается теми же инновациями, потребители её продукции (и потенциальные конкуренты) заметную долю времени вместо этого тратят на увлекательную игру в догонялки, чтобы «идти в ногу со временем». Опять же, пустая работа с моей точки зрения.
Для меня различение программной инженерии и программирования без инженерии становится вопросом выбора пути к самореализации и вытекающего из неё самоуважения.