Я разработчик на Clojure и делаю серверные сервисы и системы обработки данных в функциональном стиле, которые крутятся на JVM. Основа подхода — неизменяемые данные, чистые функции и сборка логики из небольших, ясно названных элементов, за которыми легко следить. Clojure относится к семейству Lisp, поэтому центральный инструмент для меня это REPL: я развиваю код в диалоге с ним, прогоняю выражения на реальных данных и уточняю решение прямо в процессе, вместо того чтобы придумать всё вслепую и потом мучиться с отладкой. Это самостоятельное направление, а не Java, Scala или Elixir под другим соусом, и я подхожу к нему именно так.
Параллелизм строю на родных для языка средствах: atoms, refs, agents и каналы core.async подбираю под конкретную задачу, а не добавляю ради галочки. За плечами REST и потоковые HTTP-сервисы на Ring и reitit, описание и проверка данных через spec и Malli, доступ к Postgres через next.jdbc и HoneySQL, разбор больших потоков трансдьюсерами и ленивыми последовательностями с ровным расходом памяти. Слежу за чистой стыковкой с экосистемой JVM, разумной обработкой ошибок и предсказуемыми, без сюрпризов, выкатками. Запутанный код возвращаю к схеме «чистое ядро — тонкие края с побочными эффектами».
Если нужен сервис, устойчивый под нагрузкой, поддерживаемый конвейер данных или проект на Clojure, зависший на середине, готов взять его и довести до результата. Покрываю поведение тестами, поясняю нетривиальные участки и оставляю рабочий REPL-процесс, чтобы следующий инженер включился сразу.
— Серверные сервисы на Clojure и ClojureScript под JVM
— REST и потоковые API на Ring, reitit и core.async
— Описание и валидация данных через clojure.spec и Malli
— Postgres через next.jdbc, HoneySQL и пул соединений
— Параллелизм на atoms, refs, agents и каналах
— Трансдьюсеры, ленивые последовательности, обработка больших объёмов
— Работа в REPL, тестирование и рефакторинг к чистым функциям
Параллелизм строю на родных для языка средствах: atoms, refs, agents и каналы core.async подбираю под конкретную задачу, а не добавляю ради галочки. За плечами REST и потоковые HTTP-сервисы на Ring и reitit, описание и проверка данных через spec и Malli, доступ к Postgres через next.jdbc и HoneySQL, разбор больших потоков трансдьюсерами и ленивыми последовательностями с ровным расходом памяти. Слежу за чистой стыковкой с экосистемой JVM, разумной обработкой ошибок и предсказуемыми, без сюрпризов, выкатками. Запутанный код возвращаю к схеме «чистое ядро — тонкие края с побочными эффектами».
Если нужен сервис, устойчивый под нагрузкой, поддерживаемый конвейер данных или проект на Clojure, зависший на середине, готов взять его и довести до результата. Покрываю поведение тестами, поясняю нетривиальные участки и оставляю рабочий REPL-процесс, чтобы следующий инженер включился сразу.
— Серверные сервисы на Clojure и ClojureScript под JVM
— REST и потоковые API на Ring, reitit и core.async
— Описание и валидация данных через clojure.spec и Malli
— Postgres через next.jdbc, HoneySQL и пул соединений
— Параллелизм на atoms, refs, agents и каналах
— Трансдьюсеры, ленивые последовательности, обработка больших объёмов
— Работа в REPL, тестирование и рефакторинг к чистым функциям