bash.im ithappens.me zadolba.li
10824

По рукам, пока не поздно

10 апреля 2013, 07:45

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

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

В третьем проекте будем использовать некие абстрактные имена. Удачные функции вынесем в библиотеку, оставив в базовом модуле только специфические процедуры.

В четвёртом проекте подключаем библиотеку, пишем функциональность быстро и легко. Но что это? Где-то возникает странный глюк. Расставляем контрольные точки, пишем в логи запросы, ответы, сравниваем. Расковыриваем изящный код, раздёргивая его на промежуточные переменные. Ура, найдена причина! Интернет-эксплорер (ну конечно, кто бы мог подумать) при запросе передаёт некоторые параметры немного не так, как все остальные браузеры. Пишем патчи к библиотеке, добавляем проверки и подстановки, запускаем — победили! Отключаем пока логи, но когда-то изящный код теперь наполовину состоит из неочевидных по смыслу проверок, кучи промежуточных переменных и так далее.

В пятом проекте подключаем библиотеку, копируем кусками код из третьего и четвёртого. Да, комментарии не всегда соответствуют: при чём тут «списки людей», если мы считаем машинокомплекты? Но код-то один и тот же.

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

— Так, вот тут мы дадим осмысленные имена, ведь у нас не какие-то абстрактные элементы, а баллоны с кислородом!

— А вот тут зачем так? Ведь все вычисления можно записать в одну строку!

— А почему здесь использованы примитивные IF — ELSE, ведь можно применить метод Лоренца — Шагенца для структурных инвариантов!

И хочется взять большую деревянную линейку — и по рукам ему, по рукам, пока не поздно…