История одного хуёвого бэкэнда
Работая над одним проектом, я регулярно вступаю в дискуссии с бэк-энд-разработчиком. Мою позицию «PHP — убожество, на котором не стоит писать что-либо сложнее блога» он разбивает более-менее адекватными аргументами о том, что от версии к версии PHP перестаёт быть настолько говнищем, исправляя сборку мусора, утечки памяти, баги парсера и даже добавляя языковые фичи. (Забегая вперёд, скажу, что PHP с каждым годом просто становится всё больше похож на Java.)
Я в какой-то степени смирился с тем, что человек берёт довольно убогий инструмент, прикостыливает туда паралеллизм/асинхронность и пытается этим пользоваться (это детали реализации, и меня, Android-разработчика, это не касается). Но я не могу смириться с предоставленным мне интерфейсом.
Большинство моих требований к бэку отклонялось с аргументацией «это разные сущности — соответственно, для них нужны разные запросы», «бля, ну, это всё нахер поломает» и «надо запускаться, некогда». Часть из них выполнялась замечательным фронт-энд разработчиком, который с помощью отдельного сервера проксил запросы и возвращал склеенные/ообработанные/исправленные ответы.
Но вот это произошло. Мне должно было прийти три объекта более-менее одинакового формата, и я ожидал что-то такое:
{ "first": {"someKey": 100500, "otherKey": 200700}, "second": {"someKey": 9000}, "third": {} }
Но вместо этого я получил такое:
{ "first": {"someKey": 100500, "otherKey": 200700}, "second": {"someKey": 9000}, "third": [] }
Вместо пустого объекта был пустой массив. It is not a big deal — скажете вы и будете по-своему правы. Но с форматом, который переломан, обоссан, без денег и мёртв гораздо сложнее проверять, всё ли правильно: что, если массив приедет не пустой?!
Я пошёл и объяснил ему, что это пиздец ужасно, на что получил ответ, что в PHP это сука массив, и json_encode не имеет способа явно указать на то, что это объект.
Я показал, что json_encode(new stdClass) === '{}'. Но всё бестолку.
— Позвони в Zend и объясни им, что они дегенераты и давно пора исправить json_encode, — сказал он мне.
— ЕБАТЬ, А ОНИ ЧТО, НЕ ЗНАЮТ? — удивился я.
Вот, собственно, и всё.
Если в шаблонизатор добавить драйвер СУБД и ООП, он станет шаблонизатором, который может обращаться к БД и поддерживает ООП, а не языком программирования. Для шаблонизатора нет разницы между массивом/списком, множеством, разреженным массивом и таблицей/словарём, что делает решение простых задач практически невозможным.