Sono stato dove sei, e ho quasi rinunciato un paio di volte. Sebbene non sia affatto un esperto sviluppatore di Scala, sento di avere una solida conoscenza del linguaggio, sicuramente abbastanza da aver avvelenato a fondo il mio rapporto con Java.
La prima cosa che ho fatto è stata passare qualche settimana giocando, leggendo vari blog e introduzioni alla lingua. È stato un errore, non ho imparato (o almeno capito) molto di utile, e mi sono sentito completamente fuori dalle mie profondità.
La seconda cosa è stata passare un po 'di tempo a risolvere problemi tecnicamente semplici ma che mi hanno costretto a esplorare aspetti specifici della sintassi Scala da solo:
Anche se questo non mi ha trasformato in un esperto durante la notte, mi ha dato abbastanza familiarità con la lingua da non sembrare più così impossibile.
Con quella spinta di fiducia, ho finalmente fatto quello che avrei dovuto iniziare: ottenere la programmazione alla Scala di Martin Odersky e cercare di leggere un intero capitolo ogni paio di giorni. È un libro ben scritto e completo, e se hai già un solido background di programmazione, non dovrebbe rivelarsi troppo scoraggiante. Non è necessario rendere la tua prima lettura troppo dolorosa: salta le parti contrassegnate come facoltative, assicurati di comprendere i concetti ma non impantanarti nei dettagli (in particolare, sento che i capitoli sulle raccolte sono eccessivi e possono essere scremato). Sapere che esiste un concetto e dove leggere una spiegazione esauriente di come funziona è di grandissimo aiuto.
Un'alternativa alla lettura del libro è frequentare la lezione di Coursera: è molto meno completa, ma copre la maggior parte dei punti cruciali ed è suddivisa in unità logiche e gestibili. D'altra parte, non so se sia possibile accedere alle lezioni una volta completata la lezione, e ho anche scoperto che ero molto meno impegnato ad ascoltare qualcuno (anche qualcuno ovviamente intelligente e ben informato come Martin Ordesky) di durante la lettura di un libro.
Un altro problema con Scala è la quantità di vocabolario che devi ingerire - per nome parametri? per-la comprensione? chiusura? Se ti senti sopraffatto da questo, ho scoperto che una buona miscela del Glossario della Scala e ricerche mirate di overflow dello stack mi hanno aiutato molto (cercare le risposte di Daniel Sobral e Travis Brown). In effetti, sono arrivato al punto di creare un mazzo Anki con il glossario e ritengo che sia stato di grande aiuto.
Infine, questo è probabilmente ovvio, ma codice, codice, codice. Trova un progetto secondario su cui puoi lavorare, anche se è qualcosa di banale. Quello che ho fatto è stato scrivere un crawler Amazon molto semplice che mi avrebbe inviato un tweet ogni volta che un autore a cui ero interessato a pubblicare un nuovo libro. Ci è voluto più tempo di quanto probabilmente avrebbe dovuto, ma è stato allora che mi sono innamorato della lingua.
Se vai così lontano, probabilmente non avrai bisogno di ulteriore aiuto, ma un buon suggerimento, una volta che avrai imparato la lingua, è quello di approfondire i concetti sottostanti. Hai familiarità con OOP, prova a leggere sulla programmazione funzionale - posso dire con assoluta certezza che ti lascerà a bocca aperta. La programmazione funzionale in Scala dovrebbe essere rilasciata presto (ish), ma l'edizione con accesso anticipato è già eccellente. Un'altra risposta suggerisce la programmazione funzionale per gli sviluppatori Java , che non ho familiarità ma che sono propenso a ritenere buona (quando un libro di O'Reilly non valeva almeno la pena di scremare?).
Spero che questo non sia diventato troppo lungo e ovvio, e onestamente ti auguro il meglio. Scala ha i suoi difetti, ma è un linguaggio meraviglioso e porterà il tuo cervello in direzioni che non sapevi che esistessero. E cercherò il tuo "Learning Haskell, sentendoti scoraggiato" tra un anno :)