V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sadhen
V2EX  ›  程序员

2018 年学好 Scala 的时间线

  •  4
     
  •   sadhen ·
    darcy-shen · 2018-11-09 09:52:06 +08:00 · 4374 次点击
    这是一个创建于 2196 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

    15 条回复    2020-09-24 21:19:34 +08:00
    loopback
        1
    loopback  
       2018-11-09 11:48:48 +08:00
    👍
    我可能是个傻 X,拿小红书入门 Scala 看到第五章就放弃治疗了。
    zealot0630
        2
    zealot0630  
       2018-11-09 14:10:01 +08:00
    Scala 是接触过的唯一又漂亮又实用的语言

    虽然 haskell 和 scheme 也很漂亮,但是不实用
    sadhen
        3
    sadhen  
    OP
       2018-11-09 14:23:34 +08:00
    @loopback

    这本书是从薄读厚的那种,不是入门书。不过每一个程序员都要有这种拿小红书入门的自信和骄傲,当然也要有自知之明。
    ufo22940268
        4
    ufo22940268  
       2018-11-09 14:32:39 +08:00
    scala 是我用过最舒服的静态语言,没有之一
    ihainan
        5
    ihainan  
       2018-11-09 14:38:12 +08:00
    @loopback 哈哈入门还是 Scala for the Impatient 吧。
    linhua
        6
    linhua  
       2018-11-09 15:24:25 +08:00
    kotlin 呢?
    TommyLemon
        7
    TommyLemon  
       2018-11-09 15:56:12 +08:00
    对 JVM 平台上 Java,Scala,Kotlin,Groovy,Clojure 都不满意,
    希望像 Go 一样保持简单好用,但又避免兼容 JVM,及生态不丰富 等问题。
    可以看下 Axis,一起交流探讨
    github.com/TommyLemon/Axis-Lang
    TommyLemon
        8
    TommyLemon  
       2018-11-09 15:56:43 +08:00
    @TommyLemon 避免不兼容 JVM
    Mistwave
        9
    Mistwave  
       2018-11-09 16:06:12 +08:00 via iPhone
    @loopback 小红书拿来进阶都很难啃,不适合入门🤣🤣
    ostholz
        10
    ostholz  
       2018-11-09 16:15:50 +08:00
    资质太浅,练不了这种武功绝学。 尝试三次学习斯卡拉, 三次放弃。
    Kotlin 一次就上手, 看完官方教程, 就能开始干活了。 还是 Kotlin, Swift 适合我这种菜鸟。
    akalxs
        11
    akalxs  
       2018-11-09 16:44:25 +08:00
    资质太浅,练不了这种武功绝学。
    写 spark 时用的,java 怎么写,scala 怎么写。。。。
    sadhen
        12
    sadhen  
    OP
       2018-11-09 17:00:33 +08:00
    @akalxs 把《 Scala 实用指南》放入你的双十一购物车吧,适合你
    SabaPing
        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 还是很快乐的!
    zuston
        14
    zuston  
       2020-09-11 19:19:42 +08:00
    Enzyme 引擎 开源了么 @sadhen . 我记得之前在 github 上看到过这个项目的~
    sadhen
        15
    sadhen  
    OP
       2020-09-24 21:19:34 +08:00
    @zuston 已经离职,应该不会开源了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5756 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 02:54 · PVG 10:54 · LAX 18:54 · JFK 21:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.