Изучение Scala, чувство разочарования [закрыто]

9

Я учусь на Java и пытаюсь изучить Scala. В настоящий момент я чувствую себя довольно подавленным, кажется, что со Scala можно многому научиться, так много разных способов сделать то же самое.

Мне было интересно, есть ли у кого-нибудь совет о том, с чего начать, и сколько времени им потребовалось, чтобы чувствовать себя достаточно компетентным в языке?

Даже такие мелочи, как циклическое понимание, кажутся действительно мощными, но это просто еще один фрагмент синтаксиса, который вам нужно запомнить!

хт
источник
Scala - это по большей части сложный язык, поэтому не расстраивайтесь! К счастью, я довольно компетентный программист на Haskell, и я подумал, что Scala намного сложнее :) Лучший способ найти что-либо для меня - это чередовать книгу и проект. Для Scala я бы предложил компилятор и лестничные книжки, но для каждого свои
Даниэль Гратцер
Спасибо за поддержку! Что за лестничная книжка?
JCM
Рекомендуемое чтение: с чего начать?
комнат
Я попробовал Scala несколько лет назад с точки зрения Java и не получил этого. Недавно я начал курс на coursera.org по функциональному программированию в Scala. Это достаточно кардинально другой подход, который не помешал моему фону Java. Вместо этого я (заново) учусь мыслить в неизменных структурах данных, рассуждая об алгоритмах, теории множеств, теории типов и обо всех других забавных вещах, которые я не могу практиковать на реальной работе. Не волнуйся; в реальном мире Scala по-прежнему полезен.
BobDalgleish
2
Scala - это новая большая экосистема, которую нужно освоить (сам базовый язык не так уж и велик - в основном это библиотеки и концепции). Если вы придерживаетесь более мелкого конца вещей и выбираете одну концепцию за раз, вещи действительно начнут сходиться. Вещи, которые выглядят как причудливый специальный синтаксис, обычно встречаются в какой-то более общей категории, которую можно абстрагировать по всему языку. Но это определенно требует некоторой игры и чтения, чтобы понять, что это за вещи.
KChaloux

Ответы:

11

Я был там, где ты, и почти сдался несколько раз. Хотя я и не являюсь опытным разработчиком Scala, я чувствую, что теперь твердо разбираюсь в языке - конечно, достаточно, чтобы он полностью отравил мои отношения с Java.

Первым делом я потратил несколько недель на игры, чтение различных блогов и знакомство с языком. Это было ошибкой, я не узнал (или, по крайней мере, не понял) многого, что было полезно, и чувствовал себя совершенно не в своей душе.

Во-вторых, нужно было потратить некоторое время на разработку проблемы, которая была технически простой, но заставила меня самостоятельно изучить конкретные аспекты синтаксиса Scala:

Хотя это не превратило меня в эксперта в одночасье, оно дало мне достаточно знакомства с языком, так что оно больше не казалось таким невозможным.

С этим повышением уверенности я наконец-то сделал то, с чего должен был начать: получить Программирование в Scala от Мартина Одерского и пытаться читать целую главу каждые пару дней. Это хорошо написанная и всеобъемлющая книга, и, если у вас уже есть опыт программирования, она не должна показаться слишком сложной. Нет необходимости делать ваше первое чтение слишком болезненным: пропустите части, помеченные как дополнительные, убедитесь, что вы понимаете концепции, но не зацикливайтесь на деталях (в частности, я чувствую, что главы о коллекциях излишни и могут быть обезжиренный). Знание того, что концепция существует и где прочитать исчерпывающее объяснение того, как она работает, является огромной помощью.

Альтернативой чтению книги является посещение курса Coursera - он гораздо менее всеобъемлющий, но охватывает большинство важных моментов и разбит на управляемые, логические единицы. С другой стороны, я не знаю, возможно ли получить доступ к урокам после завершения урока, и я также обнаружил, что я гораздо менее заинтересован, слушая кого-то (даже такого явно умного и знающего, как Мартин Ордески), чем при чтении книги.

Еще одна проблема со Scala - количество словарного запаса, которое вы должны принять - параметры по имени? для-понимания? закрытие? Если вы чувствуете себя подавленным этим, я обнаружил, что хорошее сочетание словаря Scala и поиска переполнения целевых стеков мне очень помогло (поиск ответов Даниэля Собрала и Трэвиса Брауна). На самом деле, я зашел так далеко, что создал колоду Anki с глоссарием, и чувствую, что это очень помогло.

Наконец, это, вероятно, очевидно, но код, код, код. Найдите сторонний проект, над которым вы можете работать, даже если это что-то тривиальное. Я написал очень простой сканер Amazon, который отправлял мне твит всякий раз, когда автор, которого я интересовал, выпустил новую книгу. Это заняло больше времени, чем, вероятно, следовало бы, но это когда я влюбился в язык.

Если вы зайдете так далеко, вам, вероятно, не понадобится дополнительная помощь, но хорошее предложение, как только вы осознаете язык, - глубже вникнуть в базовые концепции. Вы знакомы с ООП, попробуйте почитать о функциональном программировании - я могу с полной уверенностью сказать, что это поразит вас. Функциональное программирование в Scala должно быть выпущено в ближайшее время (иш), но раннее издание уже отлично. Другой ответ предполагает функциональное программирование для разработчиков Java , с которым я не знаком, но склонен верить, что это хорошо (когда книга О'Рейли не стоила хотя бы скимминга?).

Я надеюсь, что это не стало слишком длинным и очевидным, и, честно говоря, желаю вам всего наилучшего. В Scala есть свои недостатки, но это замечательный язык, и он направит ваш мозг в направлениях, о которых вы даже не подозревали. И я буду искать ваш "Изучение Хаскелла, чувствуя себя обескураженным" через год :)

Николя Ринаудо
источник
3

Scala - это совершенно другой способ мышления на Java, так что не расстраивайтесь! Вероятно, я бы начал с функционального программирования для разработчиков Java, чтобы вы могли перейти к функциональному мышлению.

Есть ли поблизости группа пользователей Java и / или Scala? С коллегой всегда легче выучить новый язык.

Желаем удачи и продолжать настойчиво!

Мартейн Вербург
источник
Кроме того, я бы порекомендовал взглянуть на Scala Frameworkworks или Toolkits относительно областей, которые вас интересуют. По моему опыту, имея проект, над которым вам нравится работать, все становится проще. Проверьте Lift или Play Framework, например, когда вы занимаетесь веб-разработкой или Akka, если вам больше подходят параллельные или распределенные приложения.
Juwi