「如何实现流动式软件发布」线上课堂开课啦,快来报名参与课堂抽奖吧~ 了解详情
写点什么

Scala:在适合的领域做王者就够了,主流不主流没那么重要

2019 年 8 月 29 日

Scala:在适合的领域做王者就够了,主流不主流没那么重要

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 性能大赛季军。


2019 年 8 月 29 日 07:0614293
用户头像
张晓楠 InfoQ总编辑

发布了 144 篇内容, 共 73.0 次阅读, 收获喜欢 362 次。

关注

评论 5 条评论

发布
用户头像
那个国内scala群是真的不行,喜欢scala的很大部分更喜欢装逼,更有一部分是真的没完全玩懂
2021 年 03 月 22 日 17:34
回复
你好,请问能拉一下我嘛,有什么入群条件吗
2021 年 06 月 10 日 15:43
回复
用户头像
scala引领java的方向
2019 年 08 月 29 日 15:20
回复
用户头像
那么有没有国内的scala社群呢?
2019 年 08 月 29 日 11:54
回复
用户头像
所以特性改善就是重新做一遍? scala2 到3的迁移成本到现在是个未知数。
2019 年 08 月 29 日 09:46
回复
没有更多了
发现更多内容

我们设计的是微服务还是小单体应用

xcbeyond

微服务 方法论 DDD 28天写作

「大厂攻略」打开线程 | 进程 | 协程的大门

我是程序员小贱

面试 操作系统

最近很火的京东、天猫超市飞天茅台抢购是怎么回事,从原理流程给你们分析一波

谙忆

大数据知识专栏 - MapReduce入门

小马哥

Java 大数据 hadoop mapreduce 七日更

2020 全球 JS 调查报告新鲜出炉

蓝色的秋风

typescript Vue 前端 React React Native

Python 循环语句

赵开忠

28天写作

LeetCode题解:105. 从前序与中序遍历序列构造二叉树,递归+使用索引,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

愿景的力量

陆陆通通

愿景 28天写作

大厂面试题:你知道JUC中的Semaphore、CyclicBarrier、CountDownLatch吗

Java鱼仔

Java 面试 并发 JUC

如何使用maven 轻松重构项目

田维常

maven

网络故障排除工具,你用过哪些?

MySQL查询——连接查询

程序员的时光

程序员 28天写作

精选算法面试-数组II

李孟

面试 算法 数组 28天写作

聚焦目标,团队工作不再一盘散沙(中)

一笑

管理 敏捷 目标管理 目标追踪 28天写作

夜莺二次开发指南系列

qinyening

开源 监控 滴滴夜莺 夜莺监控 运维平台

读书笔记:《激荡三十年》上

lidaobing

28天写作 激荡三十年

大厂面试官竟然这么爱问Kafka,一连八个Kafka问题把我问蒙了

五分钟学大数据

大数据 kafka

Mysql报表下载为什么出现了重复的数据?

三石

MySQL性能优化 28天写作 mysql重复数据

谈谈SpringFramework与IoC依赖查找

Java架构师迁哥

创业失败启示录|校园微生活之快叫外卖

青城

28天写作 创业失败启示录 青城

智能building之二 智能单体建筑

张老蔫

28天写作

28 天带你玩转 Kubernetes-- 第七天(玩转 Dockerfile)

Java全栈封神

Docker Kubernetes k8s Dockerfile 28天写作

日语复习Day01【~あげく(に)】

IT蜗壳-Tango

七日更 日语语法 情景句型 程序员日语

杂谈

.

28天写作

Spring Boot如何动态修改日志级别

万里无云

Spring Boot actuator 日志级别

大小公司产品经理岗位对比

Kr

面试官:你说一下对Java中的volatile的理解吧

云流

Java 编程 面试 多线程

Flutter技术在会展云中大显身手

京东科技开发者

小程序flutter, 跨平台 云服务 移动开发

自动驾驶和疫苗的相似之处——浅谈自动驾驶基本架构(28天写作 Day7/28)

mtfelix

自动驾驶 28天写作

京东RPA:以企业数字化转型为驱动的机器人流程自动化解决方案专家

京东科技开发者

RPA 企业信息化 数字化运维

贸易战的本质是什么?

JiangX

经济 28天写作 制造 美国 贸易战

Scala:在适合的领域做王者就够了,主流不主流没那么重要-InfoQ