С чего начать в Scala (?) разработчику из PHP мира?
=====================================================

 Доброго времени!  
  
**Что уже есть?** Есть опыт разработки (в т.ч. коммерческой) на php/js/python, слегка (только для себя) писал на java.  
  
**Почему?** Словил себя на мысли, что стараюсь писать ООП-код исходя из некоторых принципов функционального программирования (неизменяемость данных, более чистые функции, использование передача методов как функций/лямбд и т.п.), а так же много контрактов и не особо успешных попыток прикрутить строгую типизацию. PHP здесь уже больше мешает, чем помогает писать код. Плюс, конечно, расширение кругозора.  
  
**Зачем?** Писать предполагается серверные части для веба (апи, в основном) как полная замена PHP в будущих проектах. Соответственно, в рамках обучения,предполагается взять один из моих существующих небольших проектов и переписать его на новом языке (скорее всего, для опыта и в стол.. или найти заказчика, согласного на такое).  
  

Пока присмотрелся к Scala. Опыта ноль. Подкупают лаконичность, строгая статическая типизация и функциональный стиль.  

Исходя из вышесказанного, вопроса два:  

1. Scala – адекватный инструмент? Какие могут быть альтернативы/подводные камни?  

2. Посоветуйте, пожалуйста, статьи/туториалы/курсы (годные книги с упором на практику тоже подойдут) по Scala (или другому языку, если ответ на №1 – "нет").  
  

Спасибо. 

 1) Да, вполне годный инструмент. Сам я пришел к Java и Scala после Ruby и Node.js  

2) Есть хорошая книга "Scala для нетерпеливых" 

 У твиттера был годный проект по изучению Scala - [twitter.github.io/scala\_school/ru](http://twitter.github.io/scala_school/ru/)  

PlayFramework 2 мне лично понравился в свое время (писал диплом на нем), но там я правда больше на Java писал, чем на Scala.   

А так соглашусь с unabl4 - для простых и не очень апи это точно будет перебор, так как потом в один прекрасный момент получится так, что поддерживать все это дело сможет только 1 человек, который все это и понаписал. 

> 2. Посоветуйте, пожалуйста, статьи/туториалы/курсы (годные книги с упором на практику тоже подойдут) по Scala (или другому языку, если ответ на №1 – "нет").

  

Я бы в первую очередь посмотрел на <https://www.playframework.com/>  

По сравнению с современными PHP-фреймворками выглядит скудно, но в Scala это мейнстрим: много книг, сообщество и т.д.  
  

> 1. Scala – адекватный инструмент? Какие могут быть альтернативы/подводные камни?

 Посмотрите на предложения труда в том месте, где вы ищете работу.  

Это будет ответом на ваш первый вопрос. 

 1) Лично на мой скромный взгляд, скала для всяких web API - overkill.   

Для таких вещей не нужна функциональщина, монады, функции высших порядков и т.д и т.п.   

Т.е, как академический язык - он превосходен, на этом языке можно "мыслить".  

Но, как мне кажется, лучше писать максимально просто (то, что, например, пропагандирует язык Go).  

2) Курс на coursera, конечно же. Сам его проходил - остался очень доволен. 

 Чтобы эффективно писать на Scala нужно сначала изучить Java SE. Scala все свои высокие абстракции так или иначе транслирует в концепции Java. А чтобы всё это дело ещё лучше понимать надо разбираться в принципах работы JVM. Обычно всё это используется для создания более менее глобальных, высоконагруженных, распределённых приложений. Вакансий по Scala со временем появляется всё больше и больше. Но язык не без своих проблем, стоит только взглянуть на багтрекер и выступления Paul Phillips. Тем не менее он активно развивается, растёт комьюнити. Запущен проект Dotty, в котором компилятор перепишут чтобы он был проще и большее количество людей смогло разобраться в нём чтобы контрибьютить.  
  

PHP отлично подходит для большинства веб-проектов. Пересаживаться на Scala стоит только если вы хотите разрабатывать что-то более глобальное и сложное с большой базой кода. 

 1) Для веб-разработки Скала в ее текущем состоянии, боюсь, не очень подходит (пока?). Сама Скала - вполне зрелый и годный для практического применения язык. Но общепринятый для веб-разработки на Скале PlayFramework по уровню (качество, полнота охвата типовых задач), на мой взгляд, не дотягивает ни до самой Скалы, ни до ПХП-овых фреймворков. Лично я, при попытке перейти с ZendFramework-а на Play, ощутил очень заметную скованность. Естественное желание построить результирующий html, как композицию результатов работы нескольких относительно независимых модулей, столкнулось с техническими трудностями и с необходимостью городить костыли. Правда, PlayFramework активно развивается (я мучался с версией 2.2), и возможно, вскоре его доведут до пристойного уровня.  
  

В то же время я с немалым успехом и удовольствием использую Скалу для написания демонов, мониторящих и обслуживающих нашу сеть (работаю в ISP-компании).  
  

2) Я читал первоисточник, Martin Odersky "Programming Scala", и добивал для актуальности статьями на scala-lang.org (книга описывает не самую свежую версию языка, 2.8). Премного доволен и всячески рекомендую.