Программирование vs Паттерны
Утро понедельника. Коллега по работе просит выполнить небольшой поисковый запрос. Полчаса и запрос готов. Не проходит и пяти минут, как коллега придумывает парочку условий. Дописываю условия. Теперь он хочет еще больше информации в ответе. Начинаю слеплять таблицы…
И так проходит первая половина дня. Я работаю прослойкой между сотрудником и Базой Данных — не самое лучшее занятие для программиста. Потому решаю составить программу, призванную удовлетворить всевозможные запросы, не заставляя пользователя изучать SQL. Сотруднику отказано с очередным запросом и объявлено о готовящейся программе. Ему идея понравилась, но волнует вопрос "Когда?". Да я и сам не знаю когда… Неделя-две-три… Там будет видно. Просит альфа-версию пораньше. Пришлось пообещать ему дать погонять первую же альфу.
Сижу. Лист бумаги перед клавиатурой, ручка в руке… Начинаю мулевать архитектуру программы. Пытаюсь учесть всевозможные аспекты работы программы, предугадать возможное развитие. После пары неудачных рисунков получается уже что-то правдоподобное. Наконец-то… Пора кодить…
Намечаю несколько классов, пишу код… Работа кипит… В душе созревает недовольство получаемой архитектурой. Чувствую, как зависимости между классами растут и растут… Программирование на уровне интерфейсов соблюдается лишь в 3-5 четко обозначенных местах. Хочется взять ручку и снова рисовать. Но другая моя половина говорит: "Будь мужиком! Пиши код и не жалуйся! Ишь ты, архитектура ему чем-то не нравится. Писал раньше без принципов ООП и все замечательно работало". Сотрудник, между тем, утром и вечером интересуется прогрессом. Я при каждой встрече предрекаю ему близость развязки. Но код от этого лучше не становится. Скорее наоборот.
Теперь уже совесть не позволяет сесть порисовать архитектуру. Совесть: "Если ты рисовать будешь, кто тогда будет писать код? Да уже поздно все переделывать! Сделай чтобы просто работало. А потом уже займешься… ре… реф… рефакторингом!" Поддаюсь этим уговорам.
Наконец-то программа начинает частично функционировать. Сотрудник частично удовлетворён, поздравляет с отличной программой. Это окончательно заглушает вопли души о внутреннем несовершенстве ПО. А тем временем, в процессе окончательной доработки программы, изменения вносятся по всему коду, тестов и в помине нет…
И стадия рефакторинга никогда не наступит. Вопрос от начальства: "Какой еще РеХаКтОрИнГ? Ты же сказал всё работает! У нас много других задач...".
Что может быть хуже, чем осознавать свои проблемы и быть не в силах их исправить?
P.S.
Это не я, а один мой друг моего друга, который мне и не друг вовсе. И вообще, все совпадения с реальными людьми случайны.