Scala 是一门现代的多范式编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala允许用户使用命令和函数范式编写代码,它运行在JVM之上,可以直接调用 Java 类库。对于 Scala 在国内的发展,有人非常乐观,也有人异常悲观。乐观的人认为 Scala 可以与Java并存,并逐渐扩大自己的影响范围;悲观的人认为 Scala 前路黯淡,根本无法取代 Java,而不取代 Java 就是失败。对于围绕 Scala 的争论,InfoQ 记者近日采访了字节跳动大数据工程师、Scala 程序员王石冲以及另外几位来自 Scala 社区的专家,从社区发展、生产实践等多个维度,几位专家给出了他们对 Scala 的观点和判断。其中有一个观点给记者留下深刻印象:Scala 为什么非要成为主流呢?它在自己适合的领域做王者就够了,主流不主流其实并不是那么重要。
以下是此次访谈的全部内容,如果你对 Scala 有更进一步的兴趣,王石冲将在即将召开的QCon 全球软件开发大会(上海站)2019上,带来《Scala 和反应式架构》的演讲,更多精彩内容可以点击这里进行了解。
InfoQ:不久前 InfoQ 英文站发布 2019 年 Java 趋势报告,把 Scala 归在技术采用生命周期的第四阶段——晚期大众阶段,对于 Scala 在国内的发展,您认为应被归为哪个阶段、为什么?
王石冲:在我看来,Scala 在中国的发展比较符合早期大众的市场定义。
从社区发展来看,Scala 在中国的主流应用框架只有三个:Play、Akka 和 Spark,其它非主流的应用大部分都没有被发掘出来。相对于欧美来说,在中国没有一个明确的 Scala 社区做资料交换,这一点我们跟欧美还是有差距。应该说国内的 Scala 爱好者的沟通和交流渠道还是比较散乱的,大多集中在论坛、QQ 群或者微信群里,并从这些渠道获得一些正面或负面的反馈。从这个角度来说,Scala 在中国符合早期大众的市场定义。
从生产实践来看,无论是老公司的新部门,还是新成立的公司,如果涉及到大数据、广告、流媒体、游戏、银行以及一些领域模型比较复杂的场景(包括现在火热的 AI 和区块链),大多数企业还是会尝试调研一下 Scala 生态,毕竟 Scala 生态在这方面具有一定的优势,并且也有成功案例。然而这其间也有一个不容忽视的事实:少数企业是在尝试过 Scala 后,转而放弃了 Scala。个中原因,正如 Charles Humble 所说:因为各种问题逐渐弃用它。这类文章我们也见得不少了,而这类尝试过 Scala 后又放弃的公司在国内外都有。
所以从这个角度来看,似乎把 Scala 归为晚期大众阶段也说得过去。不过有的时候这也是一种幸存者偏差:采用并一直停留在 Scala 的公司并没有大规模地宣传 Scala 的使用案例。小公司的声音没有影响力,而大公司则忙于业务,并没有精力做太多的宣传。譬如在字节跳动,我也是来了以后才发现有这么多项目是采用 Scala 进行构建和服务支撑的。
InfoQ:您认为目前 Scala 在国内的发展和采用情况如何?
王石冲:其实国内的广告、电商、数据分析、流媒体、银行等行业,都有采用 Scala(及生态圈)作为基建语言和框架,但因为缺乏一个广而告知并且长期坚持的传播渠道,对于 Scala 究竟在国内发展和采用情况如何,谁也没有明确的数据。
Scala 从诞生之初就缺乏成为主流语言的特点,相比现在很多的流行编程语言,Scala 知道什么是好,并且尽力通过语言特性来让程序员将好的一面全力发挥。而这就对程序员的水平提出了一定要求。Martin Odersky(Scala 之父) 是编程语言理论大神,他通过完善的类型系统以及函数式的支持,使得反应式应用很轻松就能基于 Scala 进行构建。所以 Scala 社区的大多数框架要么是无副作用的纯函数式(scalaz、cats),要么则是高性能、全异步框架(Akka、Play、Lagom)。而说实话,普通水平的程序员可能对 Java 8 的 lamda 表达式、对异步都有所抵触,更遑论 Scala 这种通过特殊模式将函数和各种副作用玩弄于股掌之间的语言。
所以这就造成了一种诡异的形势:喜欢 Scala 的程序员爱不释手;玩不来的则谈之色变。实际上 Scala 语言很简单,再不济也可以把它当成一门可以少写很多字符的 Better Java 来用。但是因为社区整体支撑都是按照高阶模式来进行的,所以不懂这些模式,就没法发挥 Scala 生态的巨大力量,因而就造成了在应用的过程中,一道无形的门槛横在那里。但是如果团队一旦迈过这道门槛,就是肉眼可见的大优势。
在我看来,Scala 无论是在国内还是在国外,都称不上是主流语言。但是有部分团队水平很高的公司,还是深度应用 Scala 来做事情。成名的例子就有 Twitter、LinkedIn、Verizon 等。金融行业则有摩根士丹利、渣打等(但是他们作为闷声发大财的典型,很少对外宣传自己的技术选型)。而很多硅谷的初创团队早期为了快速开发,也是采用的 Scala。
在国内,除了小米、阿里和腾讯的部分团队以及类似于 GrowingIO、水滴这样的初创公司和一些广告公司外,大部分开发者都是应用 Scala 来做 Spark 开发。因为没有典型的、具有号召力的大公司主导,所以 Scala 在社区方面做得也一般。国内社区人员的结构比例没有形成一个热门社区的"金字塔"特点。没有足够多的基础使用者,只有寥寥几个高手和有限数量的初中级选手,撑不起一个热闹的社区,也撑不起一个主流的语言。更神奇的事情是,Scala 和 Spark 可能还不是同一个社区。
InfoQ:对 Scala 在国内的发展趋势以及所遇到的挑战,请您做下分析和点评。
王石冲:我认为 Scala 在可预见的未来都会是小众:有一少部分人非常喜爱它;有一少部分团队或公司在使用它;大部分人最多只是听说过它而已。
造成以上情况的原因有以下几点:
1)Scala 生态一直在持续完善,但它的门槛并没有降低,相反可能还提高了。一个普通的初学者,如果只是独立自学而不是在一个有效率的 Scala 团队里,基本上很难真正进入 Scala 的世界。
2)Scala 本身的一些设计理念并没有被大众所接受(比如隐式转换、宏、协变逆变);Scala 的一些黑科技甚至成为了一些类库作者的炫技资本;此外,还有被国内程序员诟病最深的 sbt 的下载依赖包的速度(1.3.0 之后会有所改善)和难度问题,这些都是 Scala 推广的几座大山。
3)Scala 在国内,特别缺乏有份量公司的强力支持。它的号召力不强,大公司较少应用且少推广,小公司则无法产生足够的影响力。
4)另外一个原因,正如上文所说,国内 Scala 社区的核心成员有点过于理智,不太像 Go、Kotlin 那样一直有狂热的支持者在力推。他们总是安安静静的,不太喜欢争论,没有足够热情及精力去大力推广 Scala 。国内 Scala 社区基本上还是资深的专家们在撑着,新鲜血液太少了。
InfoQ:如果 Scala 在国内的发展形势如此严峻,那么 Scala 在未来还有机会吗?
王石冲:其实多年 Scala 使用下来,我们大可放弃把 Scala 推向主流的这个想法。我们应该认清和接受 Scala 的定位:在大公司内部,它用于开发某个核心组件或基础设置,由少数人参与并把控质量;在新兴的特定垂直领域的小公司,利用 Scala 的优点与其生态提供的工具,打造解决特定问题的工具和服务,这可能才是 Scala 最好的归宿。
这点和 Erlang 一样,在自己适合的领域做王者就可以了,主流不主流其实并不是那么重要。
当然认清现实并不意味着 Scala 就没有发展机会了,它在自己的领域里边,还是拥有比较好的发展前景的,主要有以下几点:
1)Scala 的生态一直在坚定地、卓有成效地完善着,这会极大加大 Scala 作为后端通用语言的竞争力。
2)国内越来越多的人参与到 Scala 和它的生态建设里去了。
3) 国内还是有一些中小型的团队在 Scala 实践上突破了“大数据专用语言”的限制,在整体的应用上拥有不少成功案例。
4)Akka 生态系统的影响力已经超出了 Scala 的范畴,可能会吸引一部分需要 Akka 的 Java 用户过来。
5)Java 在 Oracle 的带领下发生的微妙变化,可能是 Scala 的一个机遇。
有人觉得 AI 和区块链是 Scala 可以尝试弯道超车的点,但目前看来,AI 和区块链领域分别被 Python 和 Go/Javascript 领先几个身位,所以与其搬出 AI 和区块链,不如看看大数据领域带了一波节奏的 Spark,这个曾经最有机会把 Scala 带向主流的 Killer App ,后续能不能有什么惊喜出现。
InfoQ:有人认为 Scala 的语言特性有一些问题:很容易写出一些不宜读的代码。针对这一观点,您怎么看?
王石冲:这个太具有争议性,但一般的业界实践是 Scala 开发团队在 15 人或以下时,会比较好控制风格和质量。而且,对比其他语言,比如 js,一百个 js 开发者里面好的、顶尖的开发者不到 2、3 个,但是 Scala 开发者中,好的、顶尖的比例会高很多。虽然绝对数少,但是相对比例高,所以在开发资源和水平控制上,其实比其它语言社区更有利。
Scala 语言特性的问题也是在一点点地改善,Martin 现在也开始觉得,为 Scala 塞入那么多语言特性,对许多开发人员来说其实是弊大于利的,所以无论是在 Scala 2 的后续版本,还是 Scala 3,都在一点点地改善。
InfoQ:您怎么看待 Java 当前的发展?您认为国内是否在某个相对完整的领域,形成甚至开始引领技术趋势?
王石冲:Scala 语言目前有两个大的目标运行平台——JVM 和 js,所以 Scala 作为一个语言和生态并不敢完全投资在单一目标平台上。虽然 JVM 本身在不断进步,但是 Java 已经被同平台的多种语言赶超,比如 Kotlin、Clojure、Groovy。
嘉宾介绍:
王石冲,字节跳动大数据工程师,Scala 程序员。译著有《反应式设计模式》。主要专注于基于 Scala 构建的反应式架构以及相关应用的实现。之前在从事中小型企业的实时数据流分析系统的开发。第四届阿里中间件性能大赛优胜奖,第一届阿里云 PolarDB 性能大赛季军。
评论 5 条评论