стрём - девелопо

Пост добавлен: 27.03.2010 14:15:23
Теги: dev, стрём

Пятиминутка ненависти: php

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

1) мучительную поддержку старого кода,

2) разработку методов создания нового кода, поддержка которого не превратится в пытку.

В итоге создание и изменение сайтов не происходит. Только борьба с кодом.

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

В чём-то я добился успеха. Считаю, что моя ORM по API и основным фишкам превосходит все аналоги. Однако ж при движении в некотором направлении другие направления всегда страдают. Читаемость против гибкости. Гибкость против производительности. Производительность против экономии трудочасов. Сумма положительных эффектов за вычетом сопряжённых отрицательных всегда остаётся на примерно одном уровне, как и удовольствие от работы. Не прибавляется.

Долгое время я надеялся, что причина моих неудач в несовершенных алгоритмах. Но есть стена, которая ограничивает красоту алгоритма возможностями языка. Появляется десять тысяч "нельзя". Результат каждой невозможности -- маленькое дополнение. Вместо 20 символов кода на строке пишешь 40. Используешь оболочки для вызовов, промежуточные слои классов для эмуляции виртуальных атрибутов. Каждая из проблем имеет решение в виде изящного костыля. В итоге приложение на php само становится огромным костылём, обречённым на убожество.

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

И придумал что-то, крайне похожее на Ruby.

 

Python, на мой взгляд, ему сильно проигрывает. Да, мотивации, которые привели к созданию Питона, тождественны. Да, технически это язык очень высокого уровня. Но эстетически код на Python вызывает у меня брезгливость, ничего не могу с собой поделать. Всевозможные кортежи, костыли, с ними связанные, зубодробительные итераторы, некрасивые классы и наследования. Мне противно даже стандартное расширение для питон-файлов: .py и .pyc. Пы и Пыц.

Ruby же просто совершенен. Его обвиняют в низкой производительности. Однако, особенно для малых проектов, второй сервер (и даже десятый) стоит существенно дешевле второго (третьего) программиста.

Единственное, что заставляет меня продолжать работать с php, это обилие кода, уже написанного мной на php. Колечко всё работает на php. И это очень грустно. Но я надеюсь, что со временем мне удастся работать с Ruby и вновь получать от этого процесса удовольствие.