引入新编程语言的经验教训

  英文原文:Lessons Learned while Introducing a New Programming Language

  引言:这些年我(在工作中)使用过很多编程语言:(马上能够想到的有)Cold Fusion、HTML、Javascript、php、 SQL、 CSS,、ASP(经典 ASPASP.NET)、C#、Ruby、Flex、Java 以及 Clojure。每个语言都有自身的优缺点。作为一名程序员,你可以很容易地指出这些缺点——概括起来就是一句话:

我痛恨所有的编程语言 —— Matt Foemmel

  我认为一开始就考虑到这个问题很重要。在某些时候,你会对现在提倡的东西开始厌恶,所以请想象一下别人对它的感受。

  在 2008 年,我在 DRW 的一个代码库中引入 Clojure 语言。这篇博客讨论了过去几年中,我在引入新语言的过程中得到的经验和教训。

  选择语言

  在组织里引入一门新的语言并非易事。如果你想要成功,你需要选择一门编程语言,它不但能够满足广泛的技术要求同时还要得到大家的认可。在加入 DRW 的时候,我 100% 用 Java 编程,尽管事实上我编写的大部分代码只需要在眨眼之间运行完成(250毫秒)。我们编写代码要求运行时间比眨眼还要短,Java 是绝对正确的选择,但使用 Java 编写其他代码让我感觉 Java 成为了一种负担。

  偶尔我会抱怨这种负担,我的老板开始对 JRuby 发生了兴趣。我认为选择 JRuby 对我们已经是一个胜利,但就我个人而言更想听到支持非 Java 语言的呼声。如果考虑 JRuby,那么我认为任何高级的动态类型语言都可以胜任。

  然而,在我对 JRuby 生成好奇心之前,我已经开始学习 Haskell 了。总的说来,在贸易公司使用的软件要求运行“快速”。如果我要成功地引入一门新语言,它必须运行得“几乎和 Java 一样快”。Haskell 执行速度很快我已有所耳闻,它同时也满足了我的另一个选择条件:

一门编程语言,如果不能对你思考编程的方式产生影响,就不值得去学习。——  Alan Perlis

  我认为,如果我发现一门编程语言“性能足够好”,发布程序速度更快,并且能够提高我们的编程水平,那么在它上面花时间就是值得的。

  我玩过一点 Haskell,但是学习曲线似乎太陡峭。学习 Haskell 需要一些时间,但更重要的是:我们的产品已经运行在 JVM 上。如果我需要得到任何帮助,应该能够轻易地融入现有的基础设施。想想 Clojure,它的性能足够好,比 Java 更简洁,并且比我之前用过的其他语言更加有效。 Clojure 同时也是动态类型的高级语言(像 Ruby 一样),所以我希望能够得到老板的支持。

  让同事们尽可能地减少学习的痛苦是一个很大的要求——我认为这是接受新语言的关键。Clojure 看上去是最佳的选择,因为我们现在已经在工作中已经使用下列工具:

整天使用 IntelliJ

使用 JUnit 运行所有测试

使用 TeamCity 创建 CI 和 artifact

服务器上运行 JVM

使用 Yourkit 进行动态分析

  Clojure 能够满足我的所有条件,其他同事接受起来也会更容易。

  作为学习,我更推荐 Haskell 或者 OCaml,但他们并不适合在实际中选用——我怀疑是否能够成功地将他们应用到开发中。当我需要在 Clojure 方面给与专业指导时,我会依赖其他人认可的“最佳”JVM 服务器设置。如果一旦选择了 Haskell 或者 OCaml,我将需要在更多方面成为专家(例如部署、内存模型、函数库、新开发工具等等)。

  不论是当时还是现在,我都认为 Clojure 是在技术要求和公司环境下的最佳选择。

  Hello World

  引入一门新的语言是一个微妙的行为。你需要兼顾很多的相关内容。我不确定同事们会对使用 Clojure 作何反应,所以我在家里预先写好了代码。虽然大家都需要集成测试,然而没有人积极行动。于是我开始用 Java 编写集成测试,然后写出了 Clojure 的版本。我非常了解 Clojure 并能够向其他人展示它的简洁——这是团队在集成测试中最看重的东西。除此之外,因为测试并不是实际产品运行的代码,因而并不真正需要考虑实际执行速度。

  集成测试是一个引入新语言的好地方,其实任何非产品代码都是好的选择。例如,你也可以选择数据库迁移脚本、日志文件解析器、第三方软件模拟器或者软件部署。只要你的选择不会马上带来痛苦,你应该能够很容易地从任何迁移到新语言的失败中恢复过来。

  当我完成了 Java 和 Clojure 版本的测试以后,我给开发组里的其他人展示了这两个版本。我告诉他们为什么我推荐 Clojure 版本,并询问他们能不能用 Clojure 做一次尝试。我也做出承诺,让他们很难拒绝做这样的实验。

hello world

( Credit: Windell Oskay)

  你的使命

it知识库引入新编程语言的经验教训,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。