четверг, 7 июля 2011 г.

Мосты и самолёты

Недавно наткнулся на занятную статью. Основная её идея состоит в том, что разработка программ не была и никогда не будет инженерным делом. В частности автор критикует тех, кто списывает имеющиеся проблемы на молодость индустрии и возлагает надежды значительны прирост качества и надёжности ПО в будущем. В частности он обращает внимание на то, что программ за последнее время понаписали поболе, чем мостов построили за историю.

Мне не очень понравился аргумент. Строительство крупных сооружений на разведанной местности была одной из первых инженерных задач и решать её научились тысячи лет назад. Конструкции со сложностью в тысячи, редко десятки тысяч элементов (возможно моя оценка для мостов и неправильна, но количество ноликов явно до 6 не доходит) это самая заря технологии, как для инженерного дела "в железе" так и для разработки программ. С задачами современного программирования соизмеримы скорее проблемы проектирования автомобилей и самолётов. Давайте будем честными и прибавим к тем 600 000 мостов все модели транспортных средств хотя-бы. Не получается того-же объёма опыта, что у машиностроения, никак не получается.

В конце статьи есть предложение, просто заставляющее ощутить гордость за профессию и осознать разницу между программой и мостом: "Software development is about operating on a living breathing thing and all the while keeping it alive.". Но ведь вокруг помимо мостов огромное количество искусственных конструкций поражающей сложности и живучести. Вы когда нибудь смотрели в иллюминатор при посадке самолёта? Автор кажется нет :) Иначе бы он видел изгибающееся под скачущими нагрузками крыло и десятки аэродинамических элементов судорожно пытающихся отодвинуть момент сваливания ещё на десяток км/ч... Эта конструкция считается мёртвой? Или она случайно не попала в область рассмотрения?

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