PHP
August 2008 17

Хватит изобретать велосипеды!

Здравствуйте, уважаемые хабрадевелоперы.

С вашего позволения я немного пофилософствую на тему развития нас, как сообщества девелоперов, использующих замечательный язык PHP. Заранее скажу, что многие могут не поддержать мою точку зрения и я буду рад обсудить это в комментариях. Итак, приступим…

Немного истории


Так исторически сложилось, что PHP считается простым языком.
Изначально он создавался для быстрого написания небольших динамических веб-приложений низкоквалифицированным (читай — неопытным и начинающим) веб-разработчиком.
Аббревиатура PHP в далеком 1994 году означала «Personal HomePage».

С тех пор прошло 14 лет, движок PHP переписывался с нуля два раза (если мне не изменяет память), обрастая «взрослой» функциональностью и разбивая стереотипы своей ограниченности проектами уровня Фейсбука и Википедии.
Стоит подождать ещё самую малость и выйдет PHP 5.3 с долгожданными неймспейсами, незаслуженно игнорируемым Late Static Binding и некоторыми добавками синтаксического сахара.

В чем же проблема?


Мне кажется, что сейчас PHP страдает от своего наследия простоты.
Он развивается куда быстрее, чем его сообщество разработчиков, которое не успевает адаптироваться к изменениям самого языка.
Нет, я говорю не про тебя лично, %username%!
Ты наверняка уже узнал, зачем нужно всегда валидировать данные, приходящие из внешних источников; почему стоит разделять логику и представление; как правильно использовать (или не использовать) ООП и паттерны проектирования… ты развиваешься как положено. Но развитие нашего сообщества разработчиков в целом меня беспокоит.

Например, элементарнейший вопрос шаблонизаторов обсасывается на моей памяти уже лет 7, причем ничего принципиально нового за это время не придумали (не считая XSLT, но он тут вообще оффтопик).
Девелоперы толпами, прямо через одного, плодят новые шаблонизаторы, синтаксисы и функциональность которых как две капли воды похожи друг на дружку. Особенно продвинутые пишут расширения на Си, чтобы якобы повысить производительность. О, оптимизация — это вообще отдельная тема. Когда выборка из базы данных занимает 90% времени работы скрипта, а обработка шаблона (условно говоря) — оставшиеся 10%, то непременно оптимизировать нужно именно шаблонизатор! Хотя, это уже совсем другая тема…

Тему шаблонизаторов я привёл в качестве примера. Точно так же мы плодим адаптеры баз данных и кучу прочих библиотек, крупных и не очень. А сейчас начинается новая мода — написать не просто собственную велосипедную библиотеку, а целый велосипедный фреймворк! Это-ж как круто, собственный фреймворк написать! От гордости можно аж лопнуть, закрывая глаза на то, что от конкурента он отличается только тем, что методы fetchAll/fetchRow/fetchOne называются getAll/getRow/getOne.

Другая сторона медали


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

Отчасти я с этим согласен. Я сам писал собственный шаблонизатор. И сам писал собственный адаптер базы данных. Только разница в том, что кроме меня этих поделок никто не видел :) Немного поковыряв их, я набирался опыта и понимал, что ничего принципиально нового я не придумал. С чистой совестью я выбрасывал свои поделки в /dev/null, дабы не засорять «эфир», и брал готовую мейнстримную библиотеку, которая позволяла мне решить эту же задачу если не на порядок проще, то как минимум за чужой счёт — ведь эту библиотеку поддерживают её разработчики и остальные пользователи, вылавливая баги и оптимизируя её, насколько это возможно. Это позволяло мне сконцентрироваться на реализации своих замыслов в моем приложении, а не на написании очередного велосипедного шаблонизатора…

Взгляд с точки зрения бизнеса


Каждый из нас хочет, чтобы наш любимый язык был популярен и приносил ему доход. Я не знаю точной ситуации в России, но у нас в Украине (а точнее — в Киеве) Java- и DotNet-девелоперы получают в среднем на 50-80% больше, чем PHP-девелоперы такого же уровня. Почему? Потому что Java и .NET — это «энтерпрайз», а PHP — это говнокодерство. Это не моё мнение, это мнение работодателей. И наше сообщество это полностью подтверждает, продолжая ковырять несчастные шаблонизаторы, вместо того, чтобы заняться делом.

Но почему, почему же такая фигня произошла именно с нашим сообществом? Почему у джавистов и дотнетчиков с этим всё нормально? (Ну ладно, ладно, у них тоже своих проблем хватает, но мы сейчас конкретно о «велосипедах» говорим)
Я думаю, что это от того, что за каждой из этих технологий стоит крупная компания, которая буквально за ручку (или за ухо :)) ведёт девелоперов в нужном направлении, не позволяя им маяться фигнёй и изобретать «велосипеды», которые уже давным давно изобретены за них. Нужен шаблонизатор — получите. Адаптер доступа к базе данных — легко. Функции логгинга — сколько угодно. Все решения типичные и стандартные. Если нужно что-то особенное — на здоровье, пишите своё… только вряд ли кому-то кроме вас оно пригодится, потому что если бы оно было нужно хоть сколько-нибудь значимому количеству девелоперов, эта функциональность была бы включена в стандартную библиотеку. А если для решения вашей задачи вам приходится практически все вспомогательные классы реализовать с нуля, то либо вы действительно реализовываете какую-то сверхъестественно оригинальную функциональность, либо вы просто дятел и не умеете пользоваться тем, что лежит у вас под носом :)

Как же быть?


Так как же получается… у Java есть Sun, у .NET есть Microsoft, а у PHP никого нет?
Ошибаетесь! У PHP есть Zend!
Да, ребята упустили момент и слишком долго не вмешивались в среду разработчиков, пустив всё на самотёк.
PEAR не в счет — он появился в расцвет PHP 4 без нормальной объектной модели и, если смотреть правде в глаза, качество кода его пакетов оставляет желать лучшего.

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

Хватит изобретать велосипеды!


К этому я и хотел призвать всех вас, уважаемые тепреливые хабрадевелоперы, которые дочитали до этих строк.
Хватит изобретать велосипеды! Лучше помогите улучшить готовые решения, отловить все косяки и добавить в них новые фичи, которые могут быть полезны сообществу. Да, вы никогда не сможете сказать «я — автор этого замечательного фреймворка»… или даже отдельного класса. Но по-моему лучше внести три строчки кода в общий класс, который будут использовать тысячи девелоперов и услышать их молчаливое «спасибо», чем написать собственный «велосипед» на тысячи строк кода, который нафиг никому не нужен будет.

PS: Конечно же, я одобряю инновации. Если у вас возникла революционная идея, которую никто никогда ещё не реализовывал — дерзайте, слава ждёт вас! Но давайте будем смотреть правде в глаза: ещё один шаблонизатор — это немного не то…

PPS: Хотел написать, что Zend Framework — это всего лишь пример крупного проекта, который стоит поддержать. На его месте может быть Symfony, ADODb, Propel или любая другая опенсорсная библиотека. Но всё же Zend Framework заслуживает вашей поддержки как никто другой, ведь без Zend не было бы самого PHP. Если уж решить использовать стороннюю библиотеку, то пускай разработку этой библиотеки курирует именно Zend, ИМХО.
+92
1.8k 30
Comments 97
Top of the day