2015 年:第一次写 Java,开始学 Scala
第一次写有 pom.xml 的 Java 代码,买了一本非常厚的《 Java 编程思想》。Coursera 上面有 Scala 的课程,比较懒,看了几节课程,倒是觉得蛮有意思的。工作需要,把《快学 Scala 》第一版上面能看懂的部分大致通读了一遍。后来比较闲,又尝试看《 Akka Essentials 》,代码示例都读了一遍,并不是特别理解。
2016 年:写 Java,写点 Scala
接触的项目基本都是 Spring Boot,有 Java,也有 Java、Scala 混合编写的,同事主要是为了用 Scala 里面的 Future,所以很小一部分代码是 Scala 编写的,被惊艳到了。后来开始有意识地用 Scala 写一些 Adhoc 的代码,写一些小工具。fork 了 learning-scalaz,打算学习一下,然后两年过去了,一行 scalaz 和 cats 代码没看过 (逃
公司内部有不少用 Scala 编写的代码,极少数的纯 Scala 的,多数是 Java 和 Scala 混合编写的。挑了《 Programming in Scala 》第三版的一些章节仔细阅读,平时也有练习。
尝试通读 http://hongjiang.info/scala/ 没有读完。作者本人就在公司,平时也不好意思问一些没有意义的问题。排查线上问题,搞不定的时候,经常去找 hongjiang,晚上加班,hongjiang 正好也在,偶尔也会做一些简单的交流。 收获很多。
2017 年: 每天都写 Scala
接手一个纯 Scala 的 Play 项目,听说后面不打算维护了,<del>窃喜</del>,花了一个周末学习了一下 Binding.scala,用蹩脚的英语写了一篇博客:
http://sadhen.com/blog/2017/01/02/binding-with-semantic.html
然后工作日的时候,花了两周,用 Binding.scala 做了几个页面,用 Slick 访问 MySQL 做 CRUD。内部后台系统,界面确实有点丑陋,不过大家也凑合着用了,没有继续维护也没有下线。
Scala.js 有个小技术点,真心不会,咨询了 @杨博,做了一次伸手党。本来想做一个兼容 Ant.Design 的基于 Binding.scala 的库,顺便学习一下前端,但是 Binding.scala 在实现细节上的一些原理导致做这样一个库,语法上无法和 Ant.Design 一致,然后就弃坑了。Slick 个人体验不是那么爽吧,反正用的时候得各种 Google,还得去查项目的 issue。
人懒,后来都用 MyBatis、Druid,只不过把 Java 换成了 Scala。实际上还是用了 java 的 List。花了一些时间做了一些 Spring Boot 和 Scala 混合使用的探索和思考,后来抽空总结了一下:
http://sadhen.com/blog/2017/05/30/spring-boot-with-scala.html
后来开始负责 Spark SQL,看了不少 Spark 生态里面的代码和 Spark Summit 的视频,也挑了一些相关图书的相关章节阅读,主要是为了解决问题。从 https://github.com/cjuexuan/mynote 以及作者本人获得了很多帮助。
与此同时,胆子比较肥,听闻 @何品 要翻译《 Pragmatic Scala 》,就加入了。
2018 年:每天都写 Scala
业务需要,基于 Catalyst (化学催化剂)自研了单机版的 SQL 引擎,取名为 Enzyme (生物催化剂)。具体细节可见:
https://www.zhihu.com/question/62843146/answer/404597326
最近的时间都花在 Enzyme 引擎在公司内部落地上。在内部做技术分享,和不同部门的同事交流,也发现了不少应用场景。也和 Spark 社区的朋友们做了一些简单的讨论。最近比较忙,过段时间整理一下代码,会开源出来。后面我们挖财数据平台对外的技术博客正式对外开放,也会陆续把 Enzyme 的一些技术细节整理成可读性比较好的博客,另外也会有组里面别的同事的一些技术探索和思考。
7 月份,《 Scala 实用指南》正式出版。在下面的序里面,我写了一些自己对 Scala 语言和工程实践的见解:
https://zhuanlan.zhihu.com/p/48757176
8 月份,在 Spark 的 JIRA 上关注 Scala 2.12 的进展很长一段时间,之前一直没啥时间回馈 Spark 社区,因为 Spark,自己的项目被锁死在 Scala 2.11 很久了,所以抽了一周的工作日晚上和周末的时间,给 Spark 提了多个 trivial 的 PR,大概就是修正一下单元测试、代码的结构之类的,加速一下 Spark 2.4.0 的发布。在这个过程中,顺手跌跌撞撞地修了一个 Scala 标准库的 bug:
https://github.com/scala/scala/pull/7156
为了《 Scala 实用指南》能够受到大家认可,我也开始在知乎上开设专栏,写一些实用的 Scala 相关的知识点。
https://zhuanlan.zhihu.com/scalastyle
SUMMARY
这个时间线我觉得相对比较科学、可信。希望能对刚刚工作,对 Scala 抱有兴趣的朋友有一些帮助。多多交流、多多尝试,总是有益的。
个人没有用过 Shapeless/ScalaZ/Cats,学过 Haskell 但是很快就弃疗了,对 JVM 也是一知半解,小红书都没读完(虽然译者都在或者曾经在我司:( )。在工作中使用最朴素最实用的 Scala 的语言特性,也获得了编码效率上的大幅提升,减少了不少无效加班。知乎上有很多天赋异禀、惊才绝艳的朋友,可能会对新手造成了一些误导,让大家觉得 Scala 特别难,希望我学习并使用 Scala 的经历能够帮助到一些刚刚接触 Scala 并无所适从的朋友,纠正大家对 Scala 的一些知乎印象。
reedited from my zhihu answer: https://www.zhihu.com/question/26707124/answer/527181413
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.