Я был там, где ты, и почти сдался несколько раз. Хотя я и не являюсь опытным разработчиком Scala, я чувствую, что теперь твердо разбираюсь в языке - конечно, достаточно, чтобы он полностью отравил мои отношения с Java.
Первым делом я потратил несколько недель на игры, чтение различных блогов и знакомство с языком. Это было ошибкой, я не узнал (или, по крайней мере, не понял) многого, что было полезно, и чувствовал себя совершенно не в своей душе.
Во-вторых, нужно было потратить некоторое время на разработку проблемы, которая была технически простой, но заставила меня самостоятельно изучить конкретные аспекты синтаксиса Scala:
Хотя это не превратило меня в эксперта в одночасье, оно дало мне достаточно знакомства с языком, так что оно больше не казалось таким невозможным.
С этим повышением уверенности я наконец-то сделал то, с чего должен был начать: получить Программирование в Scala от Мартина Одерского и пытаться читать целую главу каждые пару дней. Это хорошо написанная и всеобъемлющая книга, и, если у вас уже есть опыт программирования, она не должна показаться слишком сложной. Нет необходимости делать ваше первое чтение слишком болезненным: пропустите части, помеченные как дополнительные, убедитесь, что вы понимаете концепции, но не зацикливайтесь на деталях (в частности, я чувствую, что главы о коллекциях излишни и могут быть обезжиренный). Знание того, что концепция существует и где прочитать исчерпывающее объяснение того, как она работает, является огромной помощью.
Альтернативой чтению книги является посещение курса Coursera - он гораздо менее всеобъемлющий, но охватывает большинство важных моментов и разбит на управляемые, логические единицы. С другой стороны, я не знаю, возможно ли получить доступ к урокам после завершения урока, и я также обнаружил, что я гораздо менее заинтересован, слушая кого-то (даже такого явно умного и знающего, как Мартин Ордески), чем при чтении книги.
Еще одна проблема со Scala - количество словарного запаса, которое вы должны принять - параметры по имени? для-понимания? закрытие? Если вы чувствуете себя подавленным этим, я обнаружил, что хорошее сочетание словаря Scala и поиска переполнения целевых стеков мне очень помогло (поиск ответов Даниэля Собрала и Трэвиса Брауна). На самом деле, я зашел так далеко, что создал колоду Anki с глоссарием, и чувствую, что это очень помогло.
Наконец, это, вероятно, очевидно, но код, код, код. Найдите сторонний проект, над которым вы можете работать, даже если это что-то тривиальное. Я написал очень простой сканер Amazon, который отправлял мне твит всякий раз, когда автор, которого я интересовал, выпустил новую книгу. Это заняло больше времени, чем, вероятно, следовало бы, но это когда я влюбился в язык.
Если вы зайдете так далеко, вам, вероятно, не понадобится дополнительная помощь, но хорошее предложение, как только вы осознаете язык, - глубже вникнуть в базовые концепции. Вы знакомы с ООП, попробуйте почитать о функциональном программировании - я могу с полной уверенностью сказать, что это поразит вас. Функциональное программирование в Scala должно быть выпущено в ближайшее время (иш), но раннее издание уже отлично. Другой ответ предполагает функциональное программирование для разработчиков Java , с которым я не знаком, но склонен верить, что это хорошо (когда книга О'Рейли не стоила хотя бы скимминга?).
Я надеюсь, что это не стало слишком длинным и очевидным, и, честно говоря, желаю вам всего наилучшего. В Scala есть свои недостатки, но это замечательный язык, и он направит ваш мозг в направлениях, о которых вы даже не подозревали. И я буду искать ваш "Изучение Хаскелла, чувствуя себя обескураженным" через год :)