首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

选Scala还是Go,一个很现实的问题

知乎有一个问答:如果对方是一个 Scala 爱好者,有什么办法说服他使用 Go?

有朋友表示,你不被他说服用 Scala 就很不错了。

也有不少朋友十分有原则:请打钱,谢谢,双倍工资也可以,不挑。反正只要钱到位,你让我写汇编都行。

还有一位 PHP/C 程序员趁机发问,假设你是 Go 的爱好者,我该如何说服你用 PHP?另一位回:杀了我吧,宁死不屈。

直钩钓鱼,又是一场语言之战,但从这个问题底下的回答来看,Scala 爱好者的心并不是那么容易动摇。

Scala vs Go

但在比较 Scala 与 Go 时,国外的垂直化产品推荐社区 Slant 却为大多数人推荐 Go。

在“首先学习的最佳编程语言是什么?”这一问题中, Go 排名第 13,Scala 排名第 17。在“什么是最好的服务器端编程语言”和“后端开发人员学习的最佳编程语言是什么?”以及“并发编程的最佳语言是什么”等问题中,Go 的排名都高于 Scala。

程序员们还分别就 Scala 和 Go 的优缺点展开了小范围的讨论,从支持者的气势来看,Go 语言无疑是赢家——关于 Scala 的评论数量远小于 Go 语言。

一些 Scala 的拥护者表示——

  • Scala 支持函数式和面向对象的编程风格。新玩家可以学习这两种范式而无需学习新语言,资深玩家可以根据当时最适合他们需求的方式在两者之间切换。
  • Scala 提供类型推断,虽然它提供与 Java 类型系统相同的安全性,但允许程序员专注于代码本身,而不是更新类型注释。
  • 除了 Java 本身,Scala 在JVM 语言中的热度算得上是数一数二的。如果你正在做 Android 或类似的 JVM-only 平台开发,或者既要开箱即用的跨平台兼容性,又要性能,Scala 是一条可行之路。
  • 它的不可变值使其非常适合处理并发。
  • 它有针对可重用和安全代码的富有表现力的函数式编程抽象。

Go 语言的优势也很明显——简单,快速,有爸爸。

  • 人们选择 Go 的一个重要原因是,Goroutines 是运行在 OS 线程上的“轻量级线程”。它们为并发操作提供了一种简单的方法——在函数前加上 go 将同时执行它。它利用 Goroutine 之间的通信渠道,防止冲突,并使跨 Goroutine 的同步执行变得毫不费力。还可以在编译时使用 GOMAXPROCS 变量定义 goroutine 可以运行的最大 OS 线程数。
  • Go 非常快速,其性能与 Java 或 C++ 相似,但比 Python,JS,Ruby 或许多其他动态语言更容易编写。它简化了语法,只有被认为是关键的功能才会添加到语言中,这使得它足够小,容易记忆,减轻了程序员和编译器开发人员的负担。
  • 另外,Go 语言还有一个闪亮的身份,富二代。它出身于 Google,背后站着一堆牛气哄哄的作者,Facebook、Uber、今日头条、滴滴等公司都在使用它、研究它,这代表着,有一大堆优秀工程师正在为它的发展添砖添瓦。

瞧瞧这世道,不仅人要拼爹,语言也得拼爹。

从 Scala 到 Go

如果是你来做选择,你会选择选 Scala 还是 Go?

这是一道很现实的问题。国内用 Scala 写后端的公司并不多,大部分都是用来做数据开发,如果你想找一个不做 Spark 的 Scala 工作,还真挺难……

究其原因,可能有以下几点:Scala 为新开发人员带来了较为陡峭的学习曲线,那么团队新血液的加入注定是一份不小的花销,所以一般的公司还真有点拿不下Scala。设想一下,假如Scala项目的核心人员离职了……Scala还有一些难点,比如 SBT、IDE 环境、构建缓慢、JAR 文件较大,等等。

这些问题也是令 Scala 采用先驱之一的 Twitter 头痛的原因,Raffi Krikorian曾任 Twitter 平台工程副总裁,他负责 Twitter 的后端基础架构,也是负责在推特上引入 Scala 的人之一。当他被问到如果必须再次选择是否还会选择 Scala 的问题时,他的答案是,不确定。

因为 Scala 的诸多痛点,曾把 Scala 当成技术栈重要组成部分的网络安全服务提供商 CrowdStrike,在工程师团队由早期的 5 人扩大到 200 多人的时候,决定迁移到 Go 语言技术栈。在引入 Go 之后,他们发现,原来 Scala 可能会遇到的问题,比如构建速度、SBT 等,对 Go 语言来说,都不是问题。Code Base 好维护了,代码容易看懂了,新人可以快速上岗了,工程师可以跨项目交流了。CrowdStrike 的云工程高级总监 Jim Plush 不由感叹,如果是小团队,使用 Scala 会非常高效,但当团队规模扩大到 50 人以上,你就会面临很大的挑战。

2017 年,Vista Group International Ltd 旗下的电影行业营销数据分析和活动管理解决方案公司 Movio 曾发布一篇文章,Making The Move From Scala To Go, And Why We’re Not Going Back,用中文说就是从 Scala 迁移到 Go,永不回头。这篇文章发布后受到了很多关注,一些读者认为这是对 Scala 的 diss。面对诸多质疑,Movio 解释了他们从 Scala 迁移到 Go 的原因,列举了 Scala 的部分问题和 Go 的优点,并表示,虽然他们选择从 Scala 迁移到 Go,并逐步将 Scala 代码库的一部分重写为 Go,但 Scala 仍然是 Movio 的一些小队的主要语言,也就是说,在 Movio ,Scala 和 Go 共存。

文章的最后有一句话,技术栈需要根据自身情况去选择,所以他们选择了 Go。确实如此,虽然语言爱好者会为自己使用的语言进行辩护,但其实大家都知道,每一种语言都有自己的适用场景,想用一种语言干完所有的事情绝无可能。所以现在公司很多都是多语言公司,他们会把对的语言用在对的产品上,就像 Go 语言适合做网络并发的服务,那它就会被用于推送监控等项目,而 Scala 适合大型工程项目,写起来很爽,可以替代 Java 做应用级开发。

编程语言是程序员的第一工具,启动一个新项目,少不了编程语言的选型问题。QCon 上海 2019 设置“编程语言”专题,和你从冷门但有趣的Pony、不那么主流但实用的Scala、JavaScript 的新特性,聊到老而弥坚的Java、冉冉升起的新星Go,你会发现自己从来没有真正认识过SQL,还将知道为何使用 .NET 的公司很少 996,点此了解详情。

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/aC9jJU3iMkoMHRQ8MhxT
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券