有不少人问过我这个问题:你为什么要学习Scala?
在最开始,我也是被各种宣传忽悠了,以为Scala是一门简单的,对Java有很多改进的,甚至可能很快就成为下一代Java的语言。当时正打算做一个网站,于是就用它边学边做。几个月后,实在无法忍受它的编译速度、各种类库的缺失、以及各种各样的编译错误,放弃了它。
但是当时创建的那个Scala群里,却有非常好的交流氛围。很多人由于对Scala很有兴趣,在群里讨论各种新鲜好玩的技术,让我大开眼界,发现Java原来只是一个小世界。另外在群里认识了杨云,也因此加入了TW,现在他是我的sponsor。
来到我们公司之后,居然有两次参与Scala项目的机会。发现我们的客户居然都喜欢用Scala,西安办公室里也有越来越多的人主动或者被迫学习Scala。由于现在有了更多学习的时间,所以我又把它捡了起来,同时惊喜地发现之前一直没搞懂的问题,现在竟然差不多理解了。
我认为我现在学习Scala的原因是:它为我打开了编程世界的一扇门,让我看到了与之前完全不同的世界。通过对它的学习,我可以强迫自己学习更多编程知识,提高自己的能力,从而有机会跟更多牛人交流。另外,我个人也看好Scala的未来,所以认为越早掌握它对自己越有利。
结合我自己的学习经历,我把Scala的学习按难度分成了几块。每一块的难度侧重点相对独立,需要一段时间的专门学习。
第一块是学习Scala的各种基本特性,比如object, trait, pattern matching等,这些知识对于一个熟练的Java程序员来说,没有太大难度。看完一本Scala书,或者参与一个不太复杂的Scala项目,基本上就可以到达。
推荐书籍: « Scala编程» 或者 «快学Scala»
文章:
开源项目:https://github.com/inca/circumflex/tree/master/web
Circum-web是一个比较简单的scala mvc框架,代码简单、注释丰富。由于它没有用到多少函数式风格的代码,对于初学者来说,还是比较容易上手的。虽然现在用它的人不多,但不失为一个很好的学习资源。同时它还有circum-orm等项目,也可以用来学习。
此时最困扰我们的,应该就是各种各样类型相关的编译错误,以及一些复杂难懂的类型声明。
特别是这几个方面:
推荐书籍:<<Scala in Depth>>
博客文章:
参考语言:Haskell中的类型系统
这一块的目标就是搞懂monad,以及各种函数式编程中提到的概念。这里可能要结合其它函数式语言学习。
推荐书籍:<<Scala in Depth>>
<<functional programming in scala>>
推荐博客:
推荐库:scalaz
推荐语言:Haskell
前三块基本上都是语言层面,这一块是库,比如一些我们经常用到的,或者scala中一些很有名的库:
构建工具: sbt
这里要根据项目和兴趣进行选择。
Scala中的一些其它特性,比如: