Как бы то ни было, почти любая попытка определить деятельность разработчиков ПО приводит к тому или иному компромиссу между производством (production) и творчеством (creation) [На научные же методы, как основу процесса разработки, мало надежды осталось со времен краха автоматизированных средств написания и верификации программ]. Соответственным образом выглядит и большинство современных средств разработки: как среда для созидания с множеством возможностей анализа структуры и процесса, а также использования "типовых решений".
Но попробуем взглянуть пристальнее на процесс и его результат - на то, что происходит в реальности, а не должно бы происходить в некоем "идеальном процессе разработки". Разработчики (один, десяток или тысяча) могут действовать в соответствии с простой метафорой или 1000-страничным "описанием архитектуры", но в любом случае проект движется от небольших "атомов" (или "клеток"), от отдельных строк кода, к модулям, подсистемам и целому. В процессе этого движения атомы-клетки многократно изменяются под влиянием тестирования, изменений в требованиях к проекту и в команде разработчиков, эффектов, возникающих от сочетания с другими частями. Изменения этих (и множества других условий) приводят к образованию и изменению сложных структур, модулей и подсистем: структуры эти обладают своей логикой и стройностью, но эта логика практически не может быть в точности спланирована заранее. На уровне отдельных функций и объектов программист - царь и бог; на уровне общей цели проекта царь и бог - системный архитектор; но вот сочетание отдельных мельчайших частей в более крупные сущности, направление и скорость роста этих сущностей - все это происходит как бы "само по себе".
Не вызывает ли такое описание аналогий с органической системой, ее моделью жизни и развития? Возможно, это и есть такая метафора, сполна описывающая процесс разработки нетривиальных программных систем; она представляется вполне полезной "ментальной моделью".
Следует заметить, что взгляд на программный проект как на форму органической жизни, конечно же, не нов (хотя и не слишком распространен). Другое дело, что большинство апологетов "органической метафоры" смотрят на нее, как на нечто, требующее создания новых, особенных языков, технических средств или методологий (например, см. [1], [2], [3]). В явном виде мысль "мы все работаем именно так, достаточно просто это осознать сполна" выражена, пожалуй, только в работе [4]; а ведь ценность объемлющей метафоры - именно в "сдвиге точки зрения", а не в разработке новых инструментов и средств (по крайней мере - не в первую очередь).
Впрочем, чтобы нетривиальный подход к известной проблеме стал общим местом, апологетам этого подхода нужно "очень громко кричать": поддержка авторитетов, книги в уважаемых издательствах - вот что выводит идею в мейнстрим, вовсе не сам факт высказывания идеи. А пока - "мейнстримный" спор о метафоре болтается между "строительством домов" и "проектированием домов" (с редкими уклонами в "написание стихов").
Манифест органического программирования
1. Исключение - это правило.
2. Наш мир богат и сложен, а не стуктурирован и прост.
3. Программы должны соответствовать нестандартным, меняющимся проблемам, а не стандартным, статичным паттернам.
4. Программная система - органическое создание, а не набор математических алгоритмов.
5. Программные компоненты - составная часть нашего сложного мира, а не описательные мета-сущности.
6. Разработка программ эволюционирует от малого к большому, а не от конкретного к абстрактному.
Автор считает пункты 1-3 общим местом, а пункты 4-6 - своим нововведением.
O. Imbusch, F. Lanhammer, G. von Walter, "Ercatons and Organic Programming"