November 27th, 2009

31. Программирование - это процесс проектирования.

(В оригинале - Programming is an act of design)

Kristen Nygaard, отец объектно-ориентированного программирования и языка программирования Simula, говорил: «Программирование – это обучение». Принятие того факта, что программирование, или более точно разработка ПО, это процесс открытий и обучения, а не процесс конструирования, сильно продвинуло техники разработки ПО. Применение концепций традиционной инженерии к разработке ПО не работает. Проблемы документировались и комментировались лидерами программистской мысли уже более 30 лет. Например, в 1987 году Fredric Brooks отметил в «Отчете научно-ислледовательской группы министерства обороны по военному програмному обеспечению», что принцип «сначала определи, потом делай» лежит в основе очень многих проблем.

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

Давайте посмотрим на индустрию автомобилестроения. Когда планируется новая модель, первая вешь, которая делается – это концепт. В основном речь идет о позиционировании. BMW X6 – пример нового концепта, объединяющего свойства «практичного спортивного автомобиля» (SUV) и купе в то, что BMW назвала “Sport Activity Coupe”. Главное здесь то, что до того момента, когда можно будет купить новый Х6, BMW инвестировало тысячи часов и миллионы долларов как в сам автомобиль, так и в линию его производства. Когда BMW получит индивидуальный заказ на машину, одна из их линий соберет именно такой индивидуальный экземпляр Х6.

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

В статье «Что такое проектирование ПО» Jack Reeves предположил, что единственная вещь в разработке ПО, подходящая под определение документа дизайна (в том смысле как этот документ понимается и используется в классической инженерии) – это исходный код. А сборка программного обеспечения автоматизирована и выполняется компилятором, скриптом сборки и тестирования.

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

Для использования опыта остальной индустрии в разработке ПО мы должны помнить: Программирование является проектированием, а не сборкой.

Автор оригинала - Einar Landre

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