2018 年学好 Scala 的时间线 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
sadhen
V2EX    程序员

2018 年学好 Scala 的时间线

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

    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     Solana     3055 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:34 PVG 08:34 LAX 16:34 JFK 19:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86