Как я уже писал в своей
прошлой статье, мне удалось заинтересовать
начальство разработкой на Clojure. Поскольку
еще на предыдущей работе мне удалось
выбить разрешение на использование
Clojure в одном из проектов, можно сделать
определенные выводы.
Легче всего убедить
начальство в случае, если предстоит
небольшой fixed-price проект, на который,
предположительно, ресурсов выделено
или впритык, или меньше, чем нужно. Ваш
главный аргумент здесь – время (оно же
– деньги). Вы берете предложенную вам
оценку сроков и поясняете начальству,
что вот на этом, этом и этом этапах
(итерациях, модулях, системах и т.д.)
можно сократить сроки разработки на
30-40%, если отказаться от Java в пользу
Clojure. Любой умный начальник (ну а зачем
вам работать у глупого?) как минимум
выслушает ваше предложение о том, как
сократить сроки.
Будьте готовы ответить
на вопрос, за счет чего уменьшатся сроки.
Это самый шаткий момент, здесь нужна
максимальная предметность. Не стоит
рассказывать о вредности мутабельного
состояния или славном прошлом лиспа.
Идеальный вариант – на примерах показать
насколько меньше в Clojure различных
церемоний, а также насколько проще в
Clojure автоматизировать всю ручную работу,
привычную Java-программистам.
В этот раз мне повезло
сыграть на контрасте. Во-первых, я
показал, насколько проще в Clojure работать
с REST-сервисами, по сравнению с “правильным”
способом на Java – библиотекой JAX-RS.
Во-вторых, я немного рассказал о применении
макросов для автоматизации, а также о
том, насколько просто получить доступ
к данным из БД (на примере библиотеки
Korma).
Следующий вопрос,
который необходимо будет решить – кто
будет поддерживать ваш исходник, ведь
Clojure кроме вас никто и не знает. Я предложил
провести небольшой мастер-класс по
Clojure, чтобы научить людей хотя бы читать
и немного понимать Clojure-код. Главное
здесь – избавить коллектив от страха
перед скобочками. Кроме того, я раздумываю
над тем, чтобы написать небольшую
методичку, максимально приближенную к
практике, о применении Clojure в web-разработке.
Алекс Отт написал введение в сам язык
(http://alexott.net/ru/clojure/clojure-intro/),
но я думаю, есть смысл добавить описание
популярных библиотек, а также рассказать
о распространенных приемах разработки
на Clojure.
Само собой, не рекомендую
ввязываться во всю эту авантюру, если
не опробовали Clojure раньше в хобби-проектах.
Крах будет фатальным как для вас, так и
для репутации Clojure на вашей фирме.
Помимо текущего, у меня
уже есть один коммерческий проект на
Clojure в продакшене и два хобби-проекта,
поработавшие в продакшене какое-то
время. Но последний из них я писал в
сентябре 2012, с тех пор кое-что поменялось.
Ниже я расскажу, что, с моей точки зрения,
изменилось, а также о том, какие грабли
бывают с Clojure.
Самое заметное изменение
– смерть микро-фреймворка Noir. Как
известно, Крис Гранжер собрал на
Kistsarter-е нужную сумму для своего стартапа
и сейчас во всю пилит экспериментальную
супер-модерновую IDE LightTable. Поэтому на
веб-фреймворк Noir и ORM Korma времени у него
не осталось. Общими усилиями выпустили
версию Noir 1.3, и на этом развитие фреймворка
прекратилось.
К счастью, теперешний
мейнтейнер Noir – Raynes (Энтони Гримс) –
исхитрился разделить этот фреймворк
на две части: сам Noir и библиотеку lib-noir.
Так вот, библиотека lib-noir, которая содержит
полюбившиеся всем “батарейки”, жива
и развивается. Теперь её используют в
связке с Compojure.
Энтони Гримс
Библиотеку Korma постигла
более счастливая судьба. Пару недель
назад в чате #clojure на irc.freenode.net Алекс
Барановский предложил взять развитие
Korma в свои руки. Ему дали права мейнтейнера,
и теперь он по-стахановски постит в
гитхаб коммит за коммитом. Пару дней
назад Алекс опубликовал новую версию
Korma – 13-ю бету, которая вышла вслед за
11-й спустя несколько месяцев.
Алекс Барановский
Compojure и Enlive ничем
особенным не отметились за последние
месяцы. Зато вышло несколько бет
библиотеки Enfocus (ClojureScript-версии Enlive).
Автор Enfocus Крейг Киркендалл полностью
переработал архитектуру библиотеки. И
теперь, в 1.0 версиях, в отличие от 0.9, для
доступа к элементам DOM используется
библиотека Domina. В целом, 1.0-версия Enfocus
лучше и стабильнее 0.9 несмотря на
значительные архитектурные изменения.
Крейг Киркендалл
Ну и пара слов о личных
впечатлениях. Когда разрабатываешь
Single-Page Application на Clojure, наиважнейшее
значение приобретают unit-тесты. В
jvm-версии Clojure все не так печально.
Худо-бедно, стектрейс вам подскажет где
и что отвалилось, хотя и здесь функциональное
тестирование лишним не будет (статической
типизации-то нету). Но в ClojureScript типизация
настолько слабая, что на определенном
этапе это может даже быть неудобным.
Сизифов труд вам покажется лёгким и
осмысленным по сравнению с рефакторингом
работающего ClojureScript-приложения. Компилятор
почти ни в чем вам не поможет, и основной
способ докопаться до сути – как-то
запустить засбоивший фрагмент, найти
поломанную функцию и долго медитировать
над её исходником.
Чтобы рефакторинг
ClojureScript-кода был менее болезненным,
необходимо писать юнит-тесты. Причем,
юнит-тестами нужно проверять не столько
логику, сколько количество полученных
параметров и даже наличие вызываемой
функции впринципе (возможно вы все
переименовали, но до сих пор где-то
сохранился код, вызывающий старые,
несуществующие функции).
Юнит-тесты на ClojureScript
– это, пока что, пичалька. ClojureScript –
инструмент молодой, развивающийся. На
сегодняшнем этапе нет устоявшейся
практики правильного написания
юнит-тестов. Местами можно наткнуться
на использование библиотеки PhantomJS. Но,
признаюсь честно, мне не удалось найти
толкового руководство по тому, как её
завести. Да и у самого ничего не получилось.
Поэтому, в моих проектах юнит-тесты
ClojureScript достаточно кустарные.
Завершить обзор хотелось
бы на приятной ноте. В 2012-м году вышли
еще две очень классные книжки по Clojure.
Очень полезная и
практическая книжка Clojure Programming. Помимо
самого языка, в ней есть обзор основных
популярных библиотек и практик разработки
на Clojure.
И вторая, но единственная
в своем роде, – ClojureScript: up and running. В ней
всего 116 страницы, тянет на крупный
туториал. Зато все по делу, без воды.
Подробно рассказано, как завести
ClojureScript и как разрабатывать на нем
приложения.
Clojure Programming сейчас переводится на русский язык, издательство ищет людей для вычитки (у меня в блоге детали)
ОтветитьУдалитьСпасибо, отправил им письмо.
ОтветитьУдалить