我是在开始学习Java的同时开始接触Scala的,在此以前饶有兴致地学过Scheme,也看过几章《Haskell趣学指南》,所以对Scala中的一些函数式编程的概念并不陌生。我喜欢Scheme那种简洁之美,可是很遗憾,使用Scheme构建应用程序每每缺砖少瓦,困难重重。而Haskell给人一种繁复艰深的感受,阅读和编写Haskell代码的心智负担比较大。Scala是一门理想的语言,既知足了编程语言爱好者不灭的好奇心,又恰到好处地弥补了Java语言所缺失的简洁和表达力。得益于与Java良好的互操做,使用Scala能够站在Java庞大的生态之上,迅速构建出应用程序。程序员
Scala的美在于精巧的内核,Scala的丑陋在于复杂的实现。做为程序员,咱们不可能只品尝精巧的美而忽视复杂的丑陋。本书的长处在于克制,恰到好处地引导Java程序员进入Scala的世界,也指明了深刻学习的路径。对已经熟悉Scala的程序员来讲,本书也能够做为编写易读Scala代码的指南。Scala是多范式的,从实际工做的角度,我我的比较推崇编写贴近Java风格的Scala代码,并适度地利用Scala的语言特性简化代码,我认为这也是本书一以贯之的主题。编程
由于Java语言表现力有限,因此咱们须要使用各类设计模式提升代码的抽象能力,固化编码逻辑。Scala这门语言在设计之初就借鉴了大量现存的语言特性,并吸收了许多设计模式中的精华,所以表现力很是强大。就我我的所了解的,Spark Catalyst源代码中利用逻辑计划的模式匹配作执行计划的优化,直观明了,大大下降了SQL执行计划优化器开发的门槛。很难想象,使用C或者C++,如何才可以编写出易于阅读、易于维护的等价实现。设计模式
Scala太灵活了,在学习的过程当中难以免会遇到很多艰深的小技巧,也会遇到各类陷阱。所以,一方面咱们编码须要克制,另外一方面咱们须要加深本身对JVM上代码运行机制的理解。王宏江的博客是不可多得的学习资料,可以帮助咱们拨开语言特性的迷雾,直击代码运行的本质。本书与其一模一样,也有很多深刻JVM字节码的分析,模仿这种分析方式,结合GitHub上的Scala标准库源代码,咱们可以提高本身诊断问题的能力,加深对这门语言的理解。编程语言
本书诚如其名——实用。在内容的编排上,本书除了对语言自己的提炼,也同时介绍了Akka和单元测试,这对工程实践来讲有极大的帮助。对尚未参与过真正工程开发的读者来讲,掌握单元测试是必要的。在阅读大型开源项目的时候,从单元测试入手,能够窥得项目的设计轮廓和API完整的使用方法。越是优秀的开源项目,其单元测试越是完整、易读。在翻译本书的时候,我的尚未接触过Akka,审阅合译者翻译的本书第13章以后,我理解了Actor模型中隔离的可变性。在最近的工做中,这些知识和Akka的文档,帮助我发现了一个使用Akka的开源软件中对IO操做和Actor模型误用而致使的性能问题。函数式编程
Scala官方也提供了Gitter的中文聊天室,贴代码比较方便,任何Scala相关的问题均可以在聊天室交流。我( @sadhen)和 @何品 (@hepin1989)都在聊天室中。函数
最后,感谢在翻译过程当中挖财诸位同事在工做上的帮助,也很是感谢个人领导曹宝开明的管理风格和一向以来对技术好奇心和驱动力的鼓励。固然,也很是感谢合做译者何品大哥,何品大哥对技术的执着和热情、在开源社区的参与度、技术深度和流畅严谨的译笔,都深深地感染着我鼓励着我。性能
沈达 2018年3月于杭州城西单元测试