Как в X
Совершенно ужасная вещь — писать на яыке X как в Y. Например, в Питоне как на Хаскеле, а в JavaScript — как в Кложе. Придумать какие-нибудь “элегантные объекты” и тыкать людям, что они живут неправильно.
Чемпионом в этой области является Питон. Из-за его гибкости на нем можно косплеить любой язык — хоть Хаскел, хоть Кобол. Скажем, выражение ниже можно сделать рабочим:
items = List[1, ...]
Для этого пишут особый класс List
с метаклассом, у которого реализован метод
__getitem__
. В нем проверяется, что если второй элемент — класс Ellipsis
, то
возвращается ленивый список от 1 до бесконечности.
Для Питона созданы сотни библиотек, которые косплеят другие языки — Хаскель, Скалу и другие. Я тоже отметился: написал либу с лаконичным названием f, где собраны плюшки Кложи: стрелочные операторы, мультиметоды и всякие мелочи.
Все это замечательно, если бы не одна деталь: оно никому не сдалось. До перехода в Кложу я работал с Питоном семь лет и ни разу не видел, чтобы использовались функциональные поделки. Промышленные проекты на Питоне — это скучный ООП-код без map/reduce, монад и алгебраических типов. В точности так, как это видит создатель языка.
Точно так же в Кложе никто не использует монады. Уже в седьмой раз я устраиваюсь кложуристом и не вижу их в проде (и это хорошо).
В текущем проекте на Кложе беда — его начинали люди, которые знали ее синтаксис,
но не идиомы. Другими словами, они знали, что вместо 1 + 2
надо писать (+ 1 2)
,
но не знали, как устроить работу с базой, компоненты, тесты и окружение.
Кажется, это были рубисты. Я не держал свечку, но это сквозит в коде. Чуваки написали свою ORM, которая матчит базу с REST — кривую и глючную. Для конфигурации используют переменные среды, и это тоже треш и содомия. Компоненты и система убоги. Позже в фирму пришли люди опытом на Кложе. Они либо обходят легаси — ходят в базу напрямую, используют свои решения, — либо прибегают к нему с легким отвращением.
Идиома “писать на X как в Y” — это проигрыш по определению. В любом виде. Это билет в один конец, и он всегда одинаков. Вы пишете “как надо”, но потом уходите, и другие с трудом приводят код в нужное русло. Не всегда удается сделать это полностью — иной раз авгиевы конюшни столь полны, что переделывать слишком дорого, и с этим как-то живут.
Легковестные агенты из Эрланга в Кложе. Элегантные объекты в Джаве. Монады вместо исключений в Питоне. Да, интересно, да, ярко. Но бесполезно.
Если идеи по-настоящему сильны, их нужно выразить в новом языке. Не устраивает чистый C — появляется C++. Не устраивают древние диалекты Лиспа — появляется Кложа. Не нравится бородатый Эрланг — пишут Эликсир.
На любом языке надо писать так, как в нем принято. На Руби — как в Руби, а не в Кложе. На Кложе — как принято в Кложе, а не в Руби.
Чем раньше это поймешь, тем скорее на тебя снизойдет благодать.
Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter
Мопс, 26th Jul 2023, link
Согласен с вашей основной мыслью. Насчет Джавы - разве стиль элегантных объектов не есть каноничный стиль написания программ на Джаве? Настоящий объектно-ориентированный дизайн без null, статических методов, тупых контейнеров данных соответствует идеологии языка, не так ли?
Евгений, 28th Jul 2023, link
Мысль кажется мне очевидной. Тоже не раз сталкивался с разработками на языке Y, где автор(ы) писали как на языке X, и это всегда было ужасно плохо.
Однако заинтересовало: а что в Кложе используется для конфигурации вместо переменных среды. Переменные среды очень хорошо согласуются с докером/CI/CD, и в этом качестве замены им не вижу.
Василий, 1st Aug 2023, link
Если пример с List[1, …], метаклассом и прочим безумием - это из реального проекта, то это, конечно, печально. Чем их “from itertools import count” не устроило? :))
Мне иногда кажется, что индустрию захватили пациенты псих-больницы, начиная от идиотских собеседований и заканчивая фанатиками, которые эти собеседования смогли пройти. Компьютеры всё мощнее, программы всё медленнее, глючнее и раздутее, а религиозные войны за очередной фреймворк всё ожесточённее.
Хочется “проснуться” и чтобы ничего этого не было.