Posterous theme by Cory Watilo

Filed under: цитата

PHP маст дай

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

Меня порадовала фраза в статье:


профессиональные программисты на PHP не используют embedded-синтаксис, а предпочитают разделять код и шаблон страницы. Таким образом, очевидно, что embedded-синтаксис — средство завлечения новой аудитории, а не инструмент языка.
 

Лично у меня тут возникают несколько вопросов.
Профессионал, зачем тебе использовать PHP, если все фишки пхп  не используются?
MVC – это убийца PHP как такового, зачем тогда его использовать?
Может быть для того, чтобы написать свой "пхп" на С++, оставив php-шные урлы как Facebook и/или ВКонтакте?

Что такое PHP? Это миллион функций и никакого синтаксического сахара, никакой гибкости, все просто и тупо, все просто, чтобы сделать несложный сайт. Даже консольные скрипты не попишешь на нем, потому что будет через ж*пу :)
PHP – это крутой embedding-синтаксис, который "профессионалы" не используют, это простые формы, который "профессионалы" не используют, это ошибки в браузере, которые "профессионалы" не могут позволить себе использвовать, и это у*бищный синтаксис в неймспейсах (назову я его windows-like), который обсуждают "профессионалы" и индексируют мега-профессионалы :)

Если ты профессионал, или хочешь им быть, тебе это не нужно, тебе не нужен PHP!

У меня есть две цитаты по поводу PHP:


На пхп программируют только лохи

Пхп как шансон, никому не нравится, но все слушают


От слов к делу. А именно к коду.

Я столкнулся с пхп-скриптом, который постит треки из ротации на Last.fm. Да-да, именно Last.fm  Ыubmission. Ко мне обратились как профессионалу в этом деле :) (напомню, я автор Net::LastFM::Submission)

Итак, это был консольный скрипт на PHP, который читал данные из файла и постил их на Last.fm.
Код из разряда говнокода, написан так – лишь бы работал. Тут я сразу вспомнил формулировку write-only, которую прекрепили к Perl.
Если на сегодня есть write-only язык программирования, то это PHP!

Почему-то сразу решил расставить ворнов, чтобы разобраться как скрипт работает. Тут я столкнулся с тем, что PHP и warnings не совместимы :) Сначала я нашел очень интересное решение писать сообщения в STDERR – через php://stderr. От самой конструкции я очень долго смеялся (URI-схема php – это сильно). Затем я написал функцию warn для PHP (real Perl PHP warn):

function warn($msg) { fwrite(STDERR, substr($msg, -1) == "\n" ? $msg : $msg.' at '.__FILE__.' line '.__LINE__.".\n"); }
Всем пхп-профессионалам рекомендую использовать такую функцию :)

Далее я решил сделать глобальную переменную, куда планировал вынести все настройки скрипта. Но не тут-то было, в PHP глобальные переменные не так работают как в Perl без use strict. Чтобы сделать ее видимой, например, в функции, надо использовать global. Ааа, как все сложно :)

Затем я поразился от синтаксиса создания хеша: array( key => value, ... ). Даже в JavaScript проще можно.
Конечно, может быть я в PHP чего-то не знаю (а я и не знаю), но такое решение – полный п*здец, его, наверно, используют 99% новичков. "Профессионалы", вы видели как это делается в Perl? :)

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

Зато есть функция trim – на Perl это максимум 3 регекспы, причем простых, очень простых.
Насколько мне известно, большинство пхпшников боятся, очень боятся регекспов. Я даже знаю почему: это жутко неудобно в PHP!
Проще и круче, чем в Perl, регулярных выражений не найти. "Профессионалы", а вы используете регекспы?

Добило меня: включение класса работы с Last.fm в исходник скрипта, зато все коменты автора класса и права сохранены.
И тут новая волна говнокода.

Количество переменных поражает глаз, такое ощущение, что все из переменных, а где код?
Чтобы сделать GET-запрос используется мега-функция file_get_contents, а чтобы сделать POST-запрос используются сокеты, чистые сокеты. Это что получается, чтобы сделать POST-запрос в PHP я должен быть "профессионалом"?

Это очень сложно, это очень write-only, это п*здец, PHP – это п*здец. Извините, "профессионалы".

Аналогичный код на Perl пишется на много проще, поверьте мне :)

ЗЫ: Для меня Дмитрий Котеров когда-то был иконой веб-разработки, с денвера, форума на dklab.ru и куроводств я начинал, я делал так же: "Generation time: 0.04 s GZip enabled: 9516/23684 (60%)". Затем я забыл про него, научился  программировать на Perl, вспомнил про его модули CGI::WebIn / WebOut, посмотрел исходники и офигел, такого говнокода на Perl от него я не ожидал, это ужас. Потом я понял, что Дмитрий увлекся PHP, мне стало все понятно. Он выпустил пару книг, сделал  МойКруг. Он профессионал, не спорю.

Но! PHP – это зло!

use Perl or die;

Just F*cking Do It


UPD: Придумал новую цитату:


Любишь себя, не пиши на пхп


Original post http://sharifulin.livejournal.com/48745.html

Эффект бабочки и тесты-тесты-тесты.

Ни когда ни кого не цитировал, но тут мнение автора совпадает с моим.
Проект с длинной историей обрастает кучей мелких зависимостей в коде и с каждым годом
понижается его безболезненная модифицируемость. Любое логически верное изменение
может привести к непредвиденным изменениям в отдаленной части проекта. Эффект бабочки.

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

Деньги затраченные на написание тестов могут быть меньшими нежели потеря прибыли от простоя
сервера после очередного обновления хостером модуля. Это вам решать :)

(с) Руслан Закиров, Best Practical Solution


Original post http://sharifulin.livejournal.com/31792.html