[1/2] Clojure: The Documentary (Рубрика Architecture)
Посмотрел новую документалку CultRepo про Clojure и это история о том, как взгляд Rich Hickey на сложность превратился в язык, комьюнити, базу данных Datomic и вообще production-стек для компаний уровня Nubank (о котором я как-то уже рассказывал). В самом фильме появляется не только Рич, но и остальные ключевые люди, которые строили язык, писали про него книги, внедряли его в компаниях и использовали в больших системах.
Ниже интересные моменты, подсвеченные в документалке и которые я вынес для себя (отдельно отмечу, что я не являюсь фанатом Clojure и мне этот язык всегда казался далеким от прода)
1️⃣ Язык программирования - это не синтаксис, а способ думать Clojure важен не потому, что это наследник Lisp и работает поверх JVM, этот язык навязывает определенную модель мышления, где программа строится из простых частей: immutable data, pure functions, explicit state transitions и минимального количества лишних приседаний. И это хороший вопрос для любой команды: ваш основной язык и фреймворки помогают думать проще или просто делают привычные вещи удобнее?
2️⃣ Simple и easy - разные вещи Фильм постоянно возвращается к идеям Rich Hickey из доклада "Simple Made Easy" 15 летней давности. И Рич разделяет их между собой так
- Easy - это то, что рядом, знакомо и быстро дается текущей команде.
- Simple - это то, где меньше переплетений, меньше скрытых зависимостей и меньше случайной сложности. Понимать это различие важно для технических руководителей - часто команда выбирает easy: знакомый фреймворк, привычную ORM, еще один слой абстракции, еще один микросервис, еще одну интеграцию. А потом через год оказывается, что система стала не simple, а просто знакомо-сложной.
3️⃣ Mutable state - главный источник боли Clojure пытается убрать из программы не всю изменяемость, а неуправляемую изменяемость. В официальном rationale прямо говорится, что Clojure строится вокруг Lisp, functional programming, JVM и concurrency, а также вокруг immutable persistent data structures и STM. Самая сильная идея здесь - разделить identity и state. Identity может жить во времени, но конкретное значение состояния должно быть immutable. Значение не меняется; система просто связывает identity с новым value. Это радикально меняет то, как мы думаем про баги, concurrency, аудит, отладку и историю данных.
В посте-продолжении расскажу про оставшиеся интересные моменты.
#Architecture #SoftwareDesign #EngineeringManagement #SystemDesign