Для старта стоит пройти курс на code-basics. В нем есть весь необходимый материал, чтобы начать что-то делать. Однако, чтобы начать локально разрабатывать вам будет нужно проникнуться одним из отличий LISP'ов от других языков - интрактивным программированием. Немного схожий опыт разработки можно получить используя Quokka с JS'ом, но возможности REPL'а запущенного для Node.js программы довольно ограничены, да и синтаксис с мутабельностью мешают всему этому процессу.
Так что второе, что нужно будет научиться делать - работать с REPL'ом из вашего редактора (я за лучшим опытом также нырнул в emacs и для лиспов так на нем и остался). Тут выбор широкий - Clava для Vscode, Cursive для IDEA, CIDER для Emacs. По ссылкам туториалы по каждому варианту. И обязательно посмотреть как разные люди работают с REPL Driven Development (Show me your REPL). Также стоит настроить окружения (я продолжаю использовать Lein).
Теперь уже можно брать книжку. Первой книжкой по Clojure я рекомендую Clojure for the Brave and True.
Тут вы будеет в зоне серьезных знаний. И нужно будет еще больше разобраться в идиомах Clojure: Data Driven подход и DSL, Иммутабельность, Персистентные структуры и Ленивые Коллекции, в многопоточности.
Дальше еще немного докладиков и воршопов. Clojure для Java'истов (1, 2), для LISP'еров (1, 2), послушать про структуры данных (1, 2).
И уже можно переходить к более специфичной литературе. На русском есть две книжки от Ивана Гришаева: Clojure на производстве первый и второй том.
В ходе прочтения и закрепления тем на практике вы уже должны освоиться в clojure.core - основной стандартной библиотеке, в clojure.spec - мощной библиотекой для валидации (и даже генерации), с тестами, многопоточкой и немного с макросами.
По ходу дела для практики обязательно решать задачки на Exercism. И как они там закончатся (или раньше) уже приступать пилить свои проектики ☺️.
И если вы собираетесь писать web, то обязательно посмотрите про архитектуру web-приложений.
Также в Clojure нет полновесного фреймворка и люди сами собирают из библиотек свой мини-фреймворк. Есть более коробочные решения - biff и kit. Их однозначно стоит посмотреть. Мой выбор библиотек такой: integrant для клея всей системы, aero для конфигов, jetty+ring для сервера, роутинг с compojure, next-jdbc для бд и honeysql для построения sql, migratus для миграций, slingshot для исключений (кстати, вот крутой доклад почему в Clojure не прижилась Maybe монада), логгер - timbre, clj-http как http-клиент, cheshire для сериализации JSON'а.
А дальше путь бесконечный. Экосистема языка богатая, интересных концепций, помимо тех что вы изучите, еще много. Я еще не затронул ClojureScript - диалекта компилируемого в JS для Node.js и браузера для написания фронтенда. Если вас заинтересовало, и хотите стартануть - пишите мне, я обязательно помогу!
Post #90
1.14K