понедельник, 8 июля 2013 г.

Scala: делаем enterprise по новому



Java очень популярен в enterprise разработке и фактически является стандартом де-факто в этой области. Среди его многочисленных достоинств есть и существенные недостатки, среди которых главным, с моей точки зрения, является отсутствие фана при его использовании. Поясню. Очень сложно получать удовольствие от программирования если использование текущего языка не "возбуждает". И чем больше пишешь на Java чем больше он кажется пресным, скучным и не интересным. Начинают раздражать все его устаревшие конструкции, длинные имена, сплошной ООП, классы в отдельных файлах на каждый чих и т.д. Хочется использовать что-то новенькое и свежее, но при этом не потерять возможность вызывать те стопятьсот прекрасных библиотек на Java, которые мы привыкли использовать каждый день. Решением данной проблемы являются новые языки программирования появившиеся последние несколько лет на JVM: Clojure, Groovy и Scala. Первый очень интересный, но сильно функциональный и у него слишком много скобок, так что пока отложим; второй является динамическим, так что не подходит для больших систем, а вот третий претендент выглядит очень интересным. У него статическая типизация, поддержка ООП, функционального программирования, отличная интеграция с Java и еще куча классных плюшек. Кроме того на нем уже было написано несколько проектов у нас в отделе. Так что новую задачу мы решили делать именно на Scala.

Для изучения Scala прочитал две книги: Programming in Scala от создателя языка Мартина Одерски и Scala in Depth от прожженного перца Joshua D. Suereth. Первая книга произвела просто грандиозное впечатление - без сомнения одна из лучших книг по языкам программирования, которые я читал (вполне может соперничать с тем же Страутрупом). Да, описана не самая свежая версия 2.8; да, есть уже устаревшие разделы (в частности про нативные акторы); да, некоторые сложные темы освещены не до конца, как выяснилось в последствии, но все это меркнет перед отличным изложением, продуманное структурой и понятными примерами. Конечно, возможно на меня такое впечатление произвел сам язык, и поэтому книга показалась особенной, но в любом случае, если надо научиться программировать на Scala, то надо читать Programming in Scala - там есть все что бы начать писать свои собственные классные программы.



Вторая книга представляет из себя этакую смесь полезных советов в стиле Майерса/Шилда/Блоха с разделами особенно глубокого погружения в различные аспекты языка. Описывается версия 2.9. Затрагиваются такие темы, как стиль, интеграция с java, акторы (да, опять устаревшая часть), ООП, функцианальное программирования и т.д. Особенно большие разделы просвещенны системе типов и implicit'ам. Темы очень важные и действительно сложные (но что за магия оказывается при этом на кончиках пальцев!). Вообще вся книга далеко не для новичков - лучше иметь уже хотя бы небольшой опыт продакшен разработки на языке что бы понимать некоторые вещи. В целом, must read для всех, кто пишет на Scala.  

В качестве одной из killer фич языка являются акторы Akka (стандарт с версии 2.10) - созданы по мотивам акторов в Erlang. Писать многопоточные , распределенные программы на них удобно и, я бы сказал, кайфово. Отличная документация по Akka есть на сайте - вроде скоро обещают выпустить пару стоящих книг.

Поддержка Scala есть в IntelliJ IDEA в виде плагина. Поддержка хуже чем для Java, наверное на порядок (но на 2 порядка лучше чем то, что сейчас есть в разных IDE для C++), что связанно со сложностью языка. Есть удобный REPL и фактически прозрачная интеграция с кодом на Java.

Подводя итоги: язык - первый сорт. Книги по нему уже есть высшего качества (чего не скажешь о некоторых других интересных языках). Давно уже я не ловил такой кайф от программирования, наверное в последний раз это было во время моих экспериментов с Erlang и с написанием С++ проекта без legacy-кода - на чистом boost. Если еще не попробовали, очень рекомендую!