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
1
loopback 2018-11-09 11:48:48 +08:00
👍
我可能是个傻 X,拿小红书入门 Scala 看到第五章就放弃治疗了。 |
2
zealot0630 2018-11-09 14:10:01 +08:00
Scala 是接触过的唯一又漂亮又实用的语言
虽然 haskell 和 scheme 也很漂亮,但是不实用 |
3
sadhen OP |
4
ufo22940268 2018-11-09 14:32:39 +08:00
scala 是我用过最舒服的静态语言,没有之一
|
6
linhua 2018-11-09 15:24:25 +08:00
kotlin 呢?
|
7
TommyLemon 2018-11-09 15:56:12 +08:00
对 JVM 平台上 Java,Scala,Kotlin,Groovy,Clojure 都不满意,
希望像 Go 一样保持简单好用,但又避免兼容 JVM,及生态不丰富 等问题。 可以看下 Axis,一起交流探讨 github.com/TommyLemon/Axis-Lang |
8
TommyLemon 2018-11-09 15:56:43 +08:00
@TommyLemon 避免不兼容 JVM
|
10
ostholz 2018-11-09 16:15:50 +08:00
资质太浅,练不了这种武功绝学。 尝试三次学习斯卡拉, 三次放弃。
Kotlin 一次就上手, 看完官方教程, 就能开始干活了。 还是 Kotlin, Swift 适合我这种菜鸟。 |
11
akalxs 2018-11-09 16:44:25 +08:00
资质太浅,练不了这种武功绝学。
写 spark 时用的,java 怎么写,scala 怎么写。。。。 |
13
SabaPing 2018-11-10 09:13:33 +08:00
入坑 scala 一年半了, 说说我的经历和决定比较关键的知识.
第一年时间基本是靠 java 的经验强行写 scala, 用的 scala 特性差不多只有 collection, future, pattern match 啥的. 大概 6 个月前开始深入 scala 的 type system, 慢慢开始写 type 层面的抽象和多态. 这时候掌握了两个关键技术 -- higher-kinded type 和 type class. 三个月前开始深入 functional programming, 主要是学习 cats, shapeless 和 category theory, 目前感觉这方面水实在太深, 涉及到一些固有观念的转变, 听说 scala 大神 @tpolecat 用了 4 年的时间"to be more functional"... 这一块比较关键的学习资料我觉得有两个, 一个是神书"Functional programming in scala", 另外一个是 cats 和 cats-effect 文档. 我们公司的部分生产环境, 大量使用了 scala 代码, 老的有 akka actor, akka stream, akka http; 比较新的有 flink scala; 最近刚试验上了一个用 typelevel 全家桶(cats, cats-effect, http4s, doobie, fs2, circe)写的 http 微服务. 写 scala 还是很快乐的! |