Maksym Prokopov personal blog
Idea is a something worth sharing

Вот я и стал коммитить в Clojure опенсорц

30.12.2016

Reading time: 3 min.

Я уже как-то признавался в любви языку программирования Clojure, но все руки не доходили до чего-то более-менее серьезного. Всем интересующимся программистам рекомендую почитать Out of the tar pit про растущую сложность создания и поддержки современных программ, и как с этим бороться.

Разработка на Clojure не похожа на легкую прогулку. Сначала открываешь для себя концепции функционального программирования, начинаешь любить рекурсию, абсолютно под другим углом разворачиваешь мозг и только работая над реальным кодом начинаешь постигать все вот это вот дао функциональщины, принципы разделения и организации кода в неймспейсы, трудности дебага, прелести REPLа.

LightTable, конечно, редактор с характером, но, пожалуй, лучшее из того что есть на сегодняшний день для интерактивной разработки, почитайте и посмотрите видео у Никиты Прокопова про это. Да-да, не смотря на весь мой опыт с Vim, Emacs, Spacemacs.

Из сложностей, которые поджидают за углом малоопытного кложуриста, я бы отметил понимание работы протоколов, defrecord, макросов и интероп с Java. Нужно довольно четко понимать, когда уместно использование всего этого, а когда нет. Разобраться со всем этим помогут хорошие книги. Обратной стороной начальной сложности являются в перспективе более краткие и выразительные программы, которые легко и приятно дополнять и расширять.

И вот, работая над Clojure прототипом JSON API нашей админки я незаметно для себя стал контрибьютором в Open Source, чему, конечно, очень рад.

Вот моя первая clojure библиотека для работы с бизнес-временем при расчетах различных SLA. Значительно более элегантное функциональное и гибкое решение, нежели то, которое я запилил когда-то на Ruby. Тестирование в Clojure делается во много раз приятнее, чем рельсовым rspec. Гораздо меньше фрикций на подготовку тестового окружения, да и при желании написание тестов можно проводить прямо в редакторе в том же файле что и само код при интерактивной разработке! А затем переместить все тесты в отдельный выделенный для этого неймспейс.

Собственно вот линк на мою первую библиотеку https://github.com/mprokopov/business-time. Пришлось окунуться в недружелюбный мир Java и разобраться с могучей joda-time и почему у всех реализаций joda-time для clojure отсутствуют то тут то там обертки (wrappers) методов для объектов типа Duration и многого другого.

Также закоммитил pull-request в Korma для лечения JDBC MySQL timezone issues, про наличие которых вообще не подозревал, пока не стал разбираться с business time.

https://github.com/korma/Korma/pull/374. Вообще Korma это такой почти рельсовый ORM, который выглядит очень удобно для работы с SQL при помощи абстракций, так близких всем рельсовикам. Но что действительно хочется попробовать это мигрировать от MySQL/Postgres в сторону Datomic. Datomic выглядит той самой «серебрянной пулей» баз данных, которая обладает просто таки уникальными свойствами.

Для разработки JSON API есть подход от использования самого «ничего», то есть голого Compojure, так и более высокоуровневые Liberator и Pedestal, которые уже больше похожи на фреймворки, нежели библиотеки. Кстати, с Clojure очень хорошо доходит разница между библиотеками и фреймворками, но следует все же помнить, что с большей мощью приходит и большая ответственность.

Делать open source мир вокруг себя богаче легко и приятно, присоединяйтесь, друзья!