2025 AI基础设施风向标,不看必后悔!#AI基础设施峰会 了解详情
写点什么

Coursera 为什么喜欢 Scala

  • 2014-03-17
  • 本文字数:3099 字

    阅读完需:约 10 分钟

Coursera 是由斯坦福大学的计算机科学教授吴恩达和达芙妮·科勒联合创建的一个营利性的教育科技公司,其目的是与世界顶尖大学合作,在线提供免费的网络公开课程,让数以百万的学生都能够获得高质量的学术课程。最近该公司最初的 Scala 倡导者、基础设施工程师 Brennan Saeta 发表了一篇博文,解释了 Coursera 喜欢 Scala 的原因。

Brennan Saeta 表示在公司成立之后的两年中,他们的用户基数和工程师团队呈指数增长,在这个过程中他们尝试了一些语言和框架,但最后的结论是:Scala 应该是他们首选的(如果不是唯一)服务语言,从今往后所有的新服务都将使用 Play 框架用 Scala 编写。

为什么选择 Scala?

Brennan Saeta 表示他们喜欢 Scala 的原因是:它是一个类型安全的语言,在成熟的技术平台之上提供了强大的并发模型。他指出:一些斯坦福的学生最初编写代码时使用的是 PHP,而伴随着工程师数量的增长,Coursera 开始寻找新的技术平台,在这个过程中他们尝试过很多技术平台,包括 Python 和 Go,但是最终还是选择使用 Scala 和 Play 框架,因为这两者能够完美地契合他们的需求。

类型安全

Coursera 致力于支持教育领域的创新,同时提供始终如一的、卓越的用户体验。因此平台发展的非常迅速——编写的代码会被频繁的重写。他们认为重构静态类型的语言要比重构动态类型的语言更容易;而修改现有的 PHP 甚至是 Python 代码则是一个较为困难的工作,工程师通常会回避这种工作因为这样做往往会造成更多的 bug。重构 Scala 不仅是可能的,而且定期重构还能保持代码库的健康。

Coursera 的移动工程师、比特币大亨 Jacob 表示:

“归功于 __Scala__ 的类型系统,它提供了我所见过的最简单的重构体验。”

强大的并发模型

尽管 Python 和 PHP 都支持重量级的进程分支,但是它们却不支持轻量级的并发,例如真正的多线程。而随着 Coursera 的基础设施变得更加多样和复杂(例如每个请求需要与多个数据库通信),他们需要跨多个数据库和服务的聚合能力。Play 的反应式内核和异步类库(例如 WS)能够与该生态系统中的其他强大的并发框架(例如 Akka)无缝地集成。理解并使用这些可组合的框架能够让异步并发代码看起来和简单的同步代码一样,开发者能够编写可读、可维护、有效的服务,而不是让人无法理解的回调。

成熟的生态系统

Brennan Saeta 认为 JVM 生态系统比任何其他的生态系统都要成熟。而 Scala 正好构建在 JVM 和 Java 生态系统之上,利用了该平台强健的工具和类库。很多现代的“大数据”工具——例如 Hadoop 生态系统,Apache Spark 和 Cassandra——都是基于 JVM 构建的,因此他们可以使用这些生态系统基本的客户端类库。此外,与 PHP(在某种程度上甚至也包括 Python)形成鲜明对比的是,Scala 和 Play 项目仅需要在服务集群上安装一个 JVM,极大地简化了服务器的部署和管理。最后,JVM 是一个快速的、功能完善的虚拟机。从堆 Instrumentation 和强大的垃圾收集算法到即时编译器,从功能方面其他运行时都赶不上它。

ASCII 架构师、学习体验工程主管 Eleith 表示:

“作为一个前端开发人员,我深刻体会到了像 __nodejs__ 这样健康的开发者社区的价值。随着我们加入到 __Scala__ 和 __Play__ 社区,我们的团队已经发现了很多这样的优点。”

对 Scala 的担忧

没有一个平台、框架或者语言是完美的。Brennan Saeta 表示他们在开始使用 Scala 之前也有很多担忧,但是幸运的是经过证明只有几个担忧对开发人员而言是严重的问题。

编译时间

Scala 的编译器非常复杂——它运行的阶段超过 25 个——公认的编译很慢。对于这一点 Brennan Saeta 表示:

_“幸运的是,编译时间对我们而言一直都不是一个重要的问题,因为 __SBT__ 的增量编译器能够有效地工作。虽然 __Scala__ 的代码量比 __PHP__ 或者 __Python__ 要多,但是编译通常也就需要几秒钟。_SBT__ 的增量编译连同 __Play__ 的热加载能够让开发人员维持快速的编辑—刷新节奏。尽管随着代码库的增长这依然是一个问题,但是到目前为止还没有发生由于编译时间太长导致我们需要慢下来这种严重的问题。”

Coursera 的基础设施工程师 Frank 表示:

“我个人认为编译和重新加载时间还是相当可以接受的,虽然并不像 __PHP__ 编辑—测试循环那样紧凑,但是与 __Scala__ 给予的类型检查和其他优点相比,这还是可以接受的。”

Coursera 的基础设施主管 Nick 则表示:

_“是的,_scalac__ 是很慢。另一方面,动态语言需要你不停地重新运行或者测试代码,直到找到所有的类型错误、语法错误和 __null__ 解引用为止。当 __scalac__ 为我做这些工作的时候我宁愿喝一杯咖啡。”

晦涩的语法

找到看起来像行噪音的 Scala 示例并不难。更糟的是,有一些类库会滥用 Scala 的能力定义任意的符号操作符,这会让没有经验的人难以理解 Scala 代码。但是尽管 Scala 拥有灵活的语法,它依然是一个相当常规的语言,与其他语言相比它的特殊情况或者陷阱少的多。事实上,如果你熟悉规则,Scala 将会比那些有少量高级功能的语言更容易理解。最后,操作符重载并不是对语言本身的批评。在很多情况下,操作符实际上能让代码更可读。例如,a + b 比 a.plus(b) 更易读。

高级功能

Scala 是一门深奥的、强大的语言,它有很多高级功能,例如宏、隐含类型和存在类型。Brennan Saeta 表示:

_“我们担心的是,开发人员会使用高级功能编写一些甚至连自己都无法理解的复杂代码。在代码中使用高级功能的时候我们会非常小心。例如,在编写服务业务逻辑的时候我们并没有定义新的隐含类型或者宏。但即便如此,我们确实在重要的类库和框架中利用了这些强大的功能。没有它们,_Scala__ 可能没那么有用,我们将不得不求助于代码生成或者忍受大量的样板文件。”

Coursera 的产品工程师 Josh 表示:

_“使用任何语言都可以写出可读性差的代码。_Scala__ 的简练和强大的语言特性能让我们的开发人员编写干净简单的代码;风格指南和同行的代码审查能够确保其他人也能读懂这段代码。”

Scala IDE

编译型语言的开发工作可以通过支持工具分担,其中最重要的工具就是 IDE。这一点 Scala 与 Java 相比非常不足。尽管 Scala IDE 也在持续地改进,但是许多功能依然缺失,例如“类型层次”和“调用层次”;其他的功能也有问题,例如“移动”。Brennan Saeta 表示他们期望随着时间的发展这些空白能够被弥补,但是就目前而言 Scala IDE 依然是该生态系统的一个弱点,幸运的是 Coursera 的工程师正在通过解决一些 bug 为该生态系统做贡献。

Coursera 的基础设施工程师 Daniel 表示:

“与 __Java__ 相比 __Scala IDE__ 落后了几英里,但是人们正在积极地改进它,实际上到目前为止我已经解决了 __2__ 个问题。”

学习 Scala

与 Python、Java 和 Ruby 社区相比 Scala 社区的规模还比较小。Brennan Saeta 表示:

“可以雇佣的 __Scala__ 程序员很少,这意味着 __Coursera__ 公司几乎所有的 __Scala__ 开发人员都是在公司学习的 __Scala_。Scala__ 是一门复杂的语言,它需要时间学习。不可能一个通宵就可以学会 __Scala,_Coursera__ 的学生和雇员都可以参加我们的深度价值学习和教育。我们喜欢互相教导新的概念,同时扩宽自己的知识面。我们之所以选择 __Scala__ 一是因为它本质上是一门富有成效的、健壮的编程语言,二是因为它还教会了我们新的编程范式。因此我们通过学习 __Scala__ 投资于我们的代码库和团队。事实上,Coursera__ 公司的许多工程师都是通过参加我们平台上的函数式编程响应式编程课程一起学习的 __Scala。”


感谢包研对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-03-17 05:156316
用户头像

发布了 321 篇内容, 共 123.8 次阅读, 收获喜欢 19 次。

关注

评论

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

软件测试/测试开发丨App自动化测试高级定位技巧

测试人

程序员 软件测试 自动化测试 测试开发

软件测试/测试开发丨学习笔记之接口自动化测试

测试人

程序员 软件测试 自动化测试 测试开发 接口自动化

M洞察|“MOBA”还是“MMO”?2023上半年热门手游大盘点来了,拯救你的游戏荒

MobTech袤博科技

开源数据可视化开发平台FlyFish数据源应用教程详解

云智慧AIOps社区

前端 大前端 低代码 数据可视化

腾讯安全携手行业伙伴,详解攻击面管理(ASM)核心能力

极客天地

重塑DeFi:深入了解Solaris Network

西柚子

开发敏捷高效 | 云原生应用开发与运维新范式

CODING DevOps

走进“上电科”,共探企业信创选型之路

通明湖

软件测试 | 模块化与模块独立性

测吧(北京)科技有限公司

测试

软件测试 | 不合格需求分析的风险

测吧(北京)科技有限公司

测试

GitHub标星11.9k兼职项目!基于SpringBoot + VUE电商-分销商城系统

Java你猿哥

源码 Spring Boot Vue ssm uni-app demo

日程和任务管理:Things3 中文激活版 支持m1

真大的脸盆

Mac Mac 软件 任务管理器 任务管理工具

全景描绘云原生技术图谱,首个《云原生应用引擎技术发展白皮书》重磅发布

通明湖

神州云科全国巡展·金融客户会北京站成功举办

通明湖

PC、手机丝滑合体!移动时代的最大痛点 英特尔和腾讯搞定了

E科讯

直击不断变化的世界,企业可以学到什么?

智达方通

智达方通 全面预算管理 企业绩效管理 FP&A 财务计划与分析

简单、快速|DeployKit 云部署套件

CODING DevOps

ChatGPT再起争端,如何应对未来的机器挑战?速来学习解决方法!

加入高科技仿生人

人工智能 AI 数字技术 AIGC ChatGPT

软件测试生命周期

测吧(北京)科技有限公司

测试

软件测试 | 编写软件测试计划的注意事项

测吧(北京)科技有限公司

测试

JMeter笔记9 | JMeter参数化

测试 Jmeter 性能测试 自动化测试 接口测试

优雅处理HTTP请求:过滤器拦截器、ControllerAdvice和自定义AOP

Java你猿哥

Java Spring Boot ssm 过滤器 拦截器

金融数字化转型提质增效,神州云科全国巡展深圳站成功举办

通明湖

软件测试 | 测试计划目标

测吧(北京)科技有限公司

测试

再获工信部认可!海泰方圆方案获评“2022年信息技术应用创新解决方案”

电子信息发烧客

自动化导入路由

巨梦科技

阿里P8写出的《深入理解Java虚拟机》最新版,轻松学会JVM底层

程序知音

Java JVM Java虚拟机 Java进阶 后端技术

INFINI Labs 产品更新 | Console 新增数据比对、新增数据看板表格组件及支持下钻功能等

极限实验室

console Gateway 极限网关 easysearch 极限科技

如何让服务器性能“备而不闲”?

通明湖

Coursera为什么喜欢Scala_Scala_孙镜涛_InfoQ精选文章