April 1, 2009

еще о программировании

Мне запомнился афоризм о программировании, который попался где-то на глаза пару месяцев назад:

"Programming is a desperate losing battle against the unconquerable complexity of code.""Программирование - безнадежная борьба с непреодолимой сложностью кода".

В этой фразе каждое слово - на вес золота.

Главная беда, с которой борется любой программист - не в количестве багов. Не в неопределенности поставленной задачи. Не в дедлайнах. Не в техническом дизайне системы. Не в криворукости, своей или коллег (хоть она и не помогает, прямо скажем). Не в скорости процессора и размере диска. Все это либо вторичные симптомы, либо дополнительные, а не главные факторы.

Главное - сложность систем. Большая компьютерная система для чего угодно сложнее, в качестве информационного объекта, чем почти любое творение человеческого разума до 20-го века.

Что сложнее спроектировать - Боинг-747 или Майкрософт Виндовс? Майкрософт Виндовс на порядок сложнее (вопрос об отстойности конечного продукта давайте отложим в сторону).

Все удачные и полезные решения, которые освоили программисты за 60 лет существования профессии - языки программирования, среды, принципы, объектно-ориентированное программирование, UNIX, что угодно еще - все это решало только одну проблему: найти еще одно место, где можно без особого ущерба для дела снизить сложность и разделить ее на отдельные части. Возможно, я слишком обобщаю, но, честно говоря, мне так не кажется. Все - только для этого.

И все равно эта проблема не решается, и решить ее в принципе невозможно. Подчиняя себя сложность некоторых базовых уровней, мы постепенно улучшаем качество нашей работы (гораздо медленнее, чем предвидели первооснователи в 60-х и 70-х, кстати), но взамен лишь сталкиваемся с более продвинутыми уровнями сложности, до которых раньше не доходили. Словно муравьи, облепившие Вавилонскую башню, и постепенно обживающие нижние ее этажи для своих муравьиных целей - успех этой работы лишь открывает доступ на очередной необжитый этаж, и конца этому не видно - да какой там конец, мы едва-едва от земли оторвались.

Ясное понимание безнадежности самого занятия может оказаться полезным. Иногда.