博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Scala实用指南》译者序二
阅读量:6231 次
发布时间:2019-06-22

本文共 1505 字,大约阅读时间需要 5 分钟。

我是在开始学习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月于杭州城西

转载于:https://juejin.im/post/5ce57c1e6fb9a07ea803a27a

你可能感兴趣的文章
关于ajax的同步和异步
查看>>
【UWP】FlipView绑定ItemsSource,Selectedindex的问题
查看>>
MySQL----information-schema数据库相关权限的说明。
查看>>
转:Tortoise SVN 版本控制常用操作知识
查看>>
PHP模拟发送POST请求之四、加强file_get_contents()发送POST请求
查看>>
Codeforces Round #192 (Div. 1) C. Graph Reconstruction 随机化
查看>>
[Unity3d][NGUI]打包NGUI预制件成Assetbundle 两种思路.
查看>>
SSO 基于Cookie+fliter实现单点登录(SSO):工作原理
查看>>
golang笔记——IDE
查看>>
专注力的一点体会
查看>>
安装CentOS 7时出现No Caching mode page found问题的解决
查看>>
iOS开发UI篇—Quartz2D使用(绘图路径)
查看>>
esnext:Function.prototype.toString 终于有规范了
查看>>
nginx源代码分析--从源代码看nginx框架总结
查看>>
Arcgis for Js实现graphiclayer的空间查询
查看>>
3.2 re--正則表達式操作(Regular expression operations)
查看>>
HDU 1018 Big Number (log函数求数的位数)
查看>>
CSS3盒子模型
查看>>
毕业课题之------------路面区域增强和总体检測过程
查看>>
C#中一些字符串操作的经常使用使用方法
查看>>