写点什么

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

  • 2019 年 10 月 09 日
  • 本文字数:2303 字

    阅读完需:约 8 分钟

选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,点此了解详情。


2019 年 10 月 09 日 11:326768
用户头像

发布了 26 篇内容, 共 13.2 次阅读, 收获喜欢 74 次。

关注

评论

发布
暂无评论
发现更多内容

Flutter 混合开发基础

网易云信

flutter

2021年10年后端开发程序员最新《C/C++Linux 服务器开发》学习路线总结,建议收藏

奔着腾讯去

学习 服务器集群 Linux服务器开发 C++后台开发

4月热搜:揭秘金融级人脸实名认证解决方案背后的技术硬货

百度大脑

百度

浅谈 Serverless 开发和应用

网易云信

Serverless

hive交互的几种方式

五分钟学大数据

大数据 hive 5月日更

和平精英两周年 TcaplusDB一起加油!

数据人er

数据库 nosql tencentdb TcaplusDB 和平精英

一篇文章带你搞懂Python中的类

格致君的planB

阿里架构师自爆“面试指南(泰山版)”所有的成功都不是白给的

Java架构师迁哥

一款优秀数据库中间件的不完全解析

Coder的技术之路

源码阅读 源码刨析 数据库中间件

实现高性能MySQL,深入探索数据库索引

奔着腾讯去

数据库 数据库事务 innodb 索引 MySQL 高可用

新垣结衣嫁了个“非典型性”程序员

小智

程序员 软件开发 日本

指挥中心可视化研判分析系统搭建解决方案

13823153121

【建议收藏】B站上有哪些值得反复观看的Java视频教程?

格致君的planB

指挥中心可视化研判分析系统搭建解决方案

13823153121

仅需几行代码轻松实现第一人称行走

森友小锘

大前端 3D可视化 数字孪生

云小课 | 玩转HiLens Studio之手机实时视频流调试代码

华为云开发者社区

华为 华为HiLens HiLens Studio EI智能体 实时视频

大厂面试题之计算机网络重点篇(附答案)

linux大本营

c++ Linux 网络协议 udp TCP/IP

做了一个开源的在线互动教室,想分享给大家

千竹

开源 WebRTC 在线教育 在线课堂 互动白板

花重金购买的“Java面试知识点”真香,知彼知己,百战不殆

Java架构师迁哥

终于有腾讯云大神把困扰我多年的Redis(分布式锁、延时队列、位图、布隆过滤器、漏斗限流)全部讲清楚了

Java 程序员 架构 面试

只有程序猿才能看懂的520内涵表白

三掌柜

520 520单身福利 520 单身福利

520到了,吟湿几首

花花

520 520单身福利 520 单身福利

一周信创舆情观察(5.10~5.16)

统小信uos

架构训练营模块 4 作业 - 江哲

江哲

浅析决策树的生长和剪枝

华为云开发者社区

数据 决策树 预测模型 剪枝 过拟合

TypeScript 开发环境搭建

Emperor_LawD

typescript ts 520单身福利 520 单身福利

Matlab制作视频并转换成gif动态图的方法

格致君的planB

作为骨灰级MEME项目,Grin接下来会走向何方?

猫Buboo

程序员应该多久跳一次槽?怎样跳槽才是正确的跳槽?

Java架构师迁哥

马斯克会在熊市周期里瞄准下一个百倍币么?

猫Buboo

区块链 狗狗币

选Scala还是Go,一个很现实的问题_语言 & 开发_邓艳琴_InfoQ精选文章