为什么公司要从Scala转到Go?

Jim Plush是网络安全服务提供商CrowdStrike的云工程高级总监。CrowdStrike由McAffee的前CTO George Kurtz及前副总裁Dimitri Alperovitch于2011年创建。


Scala是CrowdStrike内部使用的主要语言。2011年,Jim主导了Scala的使用。在加入CrowdStrike之前,Jim就职的Gravity公司也是Scala重度用户。前段时间,他们将技术栈从Scala转向了Go。


Jim Plush从技术总监的角度介绍了这种变化。随着业务增长,公司的工程师从5个增长到200多个。需要考虑的是,如何让code base便于维护,工程师可以轻松跨项目交流,新人能够快速上手。


几年前,Jim曾遇到一个问题。当时产品中出现了一个会影响大量客户的严重问题。于是他们开始研究问题所在,跟踪代码的修改记录。后来发现了一个从未见过的符号: <|*|> 。当时就有人大喊:“这TMD什么玩意儿?” 想跟进这个方法,也没有成功。Google也搜不到什么。




相关的开发人员正好在外度假。如果有code review机制,或许能避免此类问题,可惜当时没有。后来大家发现,项目中引入了一个叫 scalaz 的库。终于在这个库中找到了那个神奇的符号,问题得以解决。


Scala是一门强大的语言,有学术背景,而且非常灵活。通常可以将Scala开发者分为两类,一类是将Scala看作更好的Java,喜爱Scala的简洁;一类是偏爱函数式编程,愿意深入挖掘,或者把在Haskell之类函数式语言上积累的经验带了过来。




有些代码用函数式风格写出来可能非常简洁。但是随着团队规模不断扩大,如果有很多人读不懂,问题就会凸显。新人也很难直接上手。


Scala也有一些不够完善的地方,像sbt、IDE有些痛点,另外还存在构建缓慢,JAR文件较大等问题。


这种问题并不鲜见,Twitter等公司也经历过同样的扩张之痛。如果是小团队,使用Scala可能非常高效;但在工程团队超过50人之后,使用Scala会面对很大的挑战。


而Go语言诞生的目标之一就是让开发更高效,限制了可选的表达方式,而且在编译层面施加了很多限制。


是否选择Go,公司内部也有很多争论。关于是否采用某个新技术,CrowdStrike有一个策略:如果产品出了问题,至少有3个人愿意在凌晨3点提供支持。在Jim的不断推动之下,Go进入CrowdStrike的技术栈。Jim同时发现,原来面对的很多Scala的问题,Go都能很好地解决。比如构建速度很快,有很多不错的工具,内建了测试框架,有分析器,还有很好的并发模型。


从一个示例项目入手,取得成功。后来一个又一个的项目采用了Go,这方面的开发者也越来越多。开发人员可以跳到任何一个项目,并立即知道其作用。可维护性方面的好处就不用提了。


另外,这也扩大了招聘池。可以选择有其他任何语言背景的人,培训几周Go,很快就能上手。招聘Scala开发者则要困难很多。


有个不愿意切换到Go的同事,在用Go写了第一个项目之后,感慨不已:Go语言的库,读了一遍就知道是干什么的了,而Scala的版本读了四遍,还感觉迷迷糊糊。


当然,Jim也提到,他并不是苛责Scala,有些雄心勃勃的新项目还是会用Scala编写;但如果工程团队不断扩张,则不会再将Scala用作核心语言。而且,Scala并没有完全从CrowdStrike的技术栈中移除。一些Go不太擅长的领域,Scala还是不错的补充,比如机器学习和分析方面,需要与Java项目互操作的地方。另外,提供不错的DSL供分析师使用,这方面Scala也是不二之选。总体而言,Scala更多变成了一种专用工具,不再是核心开发语言。


当然,关于编程语言的话题总是能引起很多争论。Hacker News上就有很多讨论。有人认为,不要把差劲程序员的问题归到语言上。Scala代码写不好的人,未必能写好Go代码。也有人认为应该加强code review,不能让开发人员随意引入第三方库。应该参考一些Scala最佳实践,比如:https://github.com/alexandru/scala-best-practices。更多讨论,可以点击“查看原文”。


Kevin Scott(SVP Eng & Ops @ LinkedIn)在Quora上回答“Is LinkedIn getting rid of Scala?”这个问题时,也提到LinkedIn在下一代的基础架构中,会减少对Scala的依赖,而是以Java 8、C++和Python等语言为主。


像Apache Storm,是以Clojure实现的。2.0版本则有可能基于阿里巴巴用Java实现的JStorm。后来Twitter内部开发的Storm替代产品Heron,则选择了Java,部分性能要求较高的代码选择了C++。


在团队规模不断扩大,招人困难的情况下,选择简单、易上手的语言,可能是最现实的选择。


  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值