понедельник, мая 12, 2008

Велосипедофобия

"Все мосты через преграды, переброшены без нас" (с) В.Высоцкий


Толкаясь на форумах начал замечать у разработчиков признаки надвигающейся эпидемии этакой "велосипедофобии". Спрашивает человек "Хочу реализовать логирование так-то и так...", а ему в ответ "Зачем изобретать велосипед!!! Есть log4net...", "Чукча не читатель. Чукча писатель. Опять велосипед изобретаешь...". Пишет другой человек статью о способах реализации Persistent Object, а ему в комментах: "Зачем это все надо! Кругом полно ORM-ов выбирай на вкус...". С ORM вообще тяжко стало. Похоже что проектировать свой ORM считается отменной ересью и признаком глубокой задвинутости.

Можно сказать мне повезло, я работал в команде, которая разрабатывала серьезный ORM движок еще в те времена, когда среди дотнетчиков эту аббревиатуру мало кто знал. Да и потом, я еще успел спроектировать пару ORM-чиков попроще, для нужд конкретных проектов. Отличная практика проектирования, скажу вам я. Такого клубка взаимосвязанных и противоречивых требований мало где найдешь. Но похоже следующие поколения разработчиков будет лишено такого удовольствия из-за страха перед изобретением велосипеда.

И совершенно напрасно. Иногда хороший велосипед гораздо полезнее десятка плохо состыкованных шестнадцати-колесных универсальных трейлеров.
Даже у самых лучших фреймворков всегда остаются их врожденные проблемы:
- избыточность / недостаточность функционала для конкретной задачи
- недостаточное соответствие конкретным требованиям
- сложность интеграции с другими фрэймворками
- проблемы с поддержкой и внесением изменений
Иначе уже давно был бы создан мегафреймворк на все случаи жизни, и большинство из нас остались без работы.

И в заключение цитата из статьи Тода Хоффа (Todd Hoff) "Scaling Twitter: Making Twitter 10000 Percent Faster". Один из уроков, вынесенных в процессе масштабирования Twitter-а:

Build it yourself. Twitter spent a lot of time trying other people's solutions that just almost seemed to work, but not quite. It's better to build some things yourself so you at least have some control and you can build in the features you need.


"Делайте это сами. Twitter потратил кучу времени, испробуя казалось бы вполне работоспособные решения, сделанные другими, и все в пустую. Гораздо лучше сделать некоторые вещи самостоятельно, так что вы, как минимум, сможете иметь над ними полный контроль и встраивать новые фичи по мере необходимости". (с) Todd Hoff

P.S. На Тода Хофа наткнулся посредством вот этого блога Insight-it. Тематика, в основном, архитектура web приложений. Занимательно. Рекомендую.

5 комментариев:

Maxim комментирует...

Тенденция все чаще,отмечаемая опытными программистами(достаточно вспомнить не такой давний выпуск радио т на эту тему). Как сказал Umputun в свое рассуждении на эту тему , а может быть не все так плохо, может быть мы чего то не понимаем?
Ведь наверняка так же в свое время опасались перехода на си с asm'а (правда я его не застал поэтому могу только предполагать) думали что теперь программисты отупеют и перестанут понимать в какой регистр процессора что надо записывать, однако вместе с развитием tools'ов расширяется и круг задач решаемых рядовыми программистами , задачи за которые они боялись браться или задачи подвластные только избранным программистам :) стали доступны всем, а так ли это плохо?

example комментирует...

Думается, что прежде чем писать свой собственный велосипед, все равно нужно иметь некоторое понимание того, как эта проблема решалась другими разработчиками до тебя. Иначе ждет такого велосипедиста море граблей.

Meowth комментирует...

Сколько помню себя в IT, и IT в себе - недолго, но ярко:) - обычно проект губила велосипедомания и велосипедофилия, а собсно велосипедофобии ой как не хватало :) К этому подталкивает и стиль проектирования программных систем, которым к сожалению руководствуется большинство - начать кодить как можно раньше, а потом патчить-патчить-патчить и ставить костыли; соответственно, на оценку готовых решений времени не остается .. :(

Не стоит забывать также, что общее решение всегда в целом уступает частному, и это естественно - иначе, как уже сказали, был бы создан мегафреймворк на все времена :)

В этом заключается изрядная доля искусства - взять максимально подходящее из того, что уже существует.

Sergey Rozovik комментирует...

to Meowth

Проблемы велосипедостроения всем известны. Но я, собственно не о том. Я о том, что есть тенденция - избегать действительно сложных задач, заменяя их применением готовых решений и шаблонов. Путь не оптимально, но зато кошерно. И никто не упрекнет в случае неудачи все свалим на кривой фрэймворк.
Но только в процессе решения этих самых сложных задач, собственно и нарабатывается опыт разработчика. Юзая Hibernate, никогда не поймешь комплекса проблем, которые решали те, кто это Hibernate разработали.

BrigOS комментирует...

Кстати да...
Велосипеды иногда крайне полезными выходят. Вот только как просчитать это "иногда"...