Bruce Tate现任icanmakeitbetter.com的CTO,他的团队主要工作语言是Elixir以及Ruby on Rails。他曾任职于IBM公司13年,并担任过多家公司的客户解决方案总监和CTO。Bruce是一位受欢迎的国际讲师,他曾在丹麦、班加罗尔、华盛顿、斯特哥尔摩等世界各地发表过主题演讲。Bruce著有十余本技术书,其中包括3本JavaOne畅销书,以及两本Jolt大奖获奖图书:《七周七语言》Better, Faster, Lighter Java

问:你写作《七周七语言》的初衷是什么?

有趣的问题!你可能想不到,我写作《七周七语言》的原因是恐惧。我担心随着硬件设计的改变,这批编程语言(比如Java, Ruby, Python, C#和C++)可能无法胜任处理多核的工作。我害怕的原因在于我个人的经验局限在这些语言上。所以我决定做一些研究。一段时间之后,我想可能其他人也想和我一起经历这个过程,所以我萌生了写作《七周七语言》的想法。

这个书名可能有些鲁莽。没有人能在七周的时间内学会七种语言,但是这个书名可以引发人们的思考,“我为什么要学习语言?对我有什么好处?”我没有想到这本书会受欢迎,但是这个想法确实很奏效。

问:如果你要重写《七周七语言》的话,你还会选择同样的语言吗?还是会增加一两个新的进去?

我已经用实际行动回答了这个问题,因为我已经写了第二本书,《七周七语言 第二季》(Seven More Languages in Seven Week)。希望在不久的将来,这本书也能被翻译出来。在《七周七语言 第二季》中我写到了Elixir,这种语言受到了《七周七语言》的启发。我还写到了Elm,这种语言可以响应式编程,然后编译到JavaScript中去。Fred Doad撰写了一章关于Factor的内容;Ian Dees写了关于Idris(一种探索类型理论的惊人语言)和Lua的内容;Jack Moffitt撰写了Julia(并发友好的技术计算)以及最后一章关于MiniKanren的内容,这种语言基本上是Lisp和Prolog相结合的产物。这些作者们帮助我在更短的时间内完成了第二本书,如果只有我一个人是绝对做不到的。

问:为什么在《七周七语言》中,你会选择Lisp的方言Clojure,而不是Lisp这种语言本身?

Clojure绝对是最为活跃的Lisp方言。写作这本书的一部分理由在于找到能够吸引潜在读者的话题,而Clojure则引人遐想。这种语言关注正确的问题,比如提高Lisp的可存取性和并发机制。我很喜欢这门语言,它给予了Lisp新生。我一直都是Lisp的秘密粉丝,但是Clojure带给我们的更多。小范围的语法调节以及对Java虚拟机的可存取性改变了Lisp的特色,同时也让它更容易亲近。

问:随着函数式编程特性加入了Java 8,Scala是否有可能会丧失一些原有相对于Java的优势?Scala的未来会如何?

Java真心需要变化。Java增加闭包已经是很久以前的事了。但是对于真正的函数式编程来说还是远远不够的。Scala增加了很多很棒的概念,比如currying,这是一种更好的类型系统、类型推导,以及不错的程序库。你能看到Scala越来越受欢迎,并且它物有所值。它为Java社区带来了真正的函数式编程,同时也允许面向对象编程。

问:决定一种编程语言是否受欢迎的主要因素是什么?

在我写作《七周七语言》的时候,这个问题一直困扰着我。有很多因素能够决定一种语言的接受情况。这里面经常存在潜在的商业问题,你可以把它说成是催化剂。在我们语境下,这种催化剂就是并发和新的硬件设计。但是还有其他因素,比如可访问性、美感,以及实用性。新的语言需要通过社区这一关。伟大和受欢迎的语言需要在合适的时候表明立场,并忠于自己的目标。营销的工作当然也很繁重。还有一些因素则来源于个人喜好。

所有以上内容都是为了说明——我不知道,但是没关系!我认为从很多方面来说,七种都比一种更有趣。

问:逻辑编程在现阶段不是很流行,这种编程语言在未来有机会变成主流吗?那将是一种什么样的契机?

逻辑编程不是主流,但是基于约束的系统形成了我们生态环境的重要部分。像调度和后勤这样的问题需要基于逻辑的系统,而能利用这些语言来解决这类问题的人会受益匪浅。

问:你近期关注了哪种语言?你所期待的未来语言是什么样的?

我的公司现在在大范围内应用Elixir。而我是Elm语言的忠实粉丝。但是我想下一代编程语言与现在的相比,会更加有效地使用类型。我能想象利用类型系统的语言,比如Haskell,但是可能这门语言没有这么严密,或者有哪些特性可以让这种严密性对于程序员来说更易接触。

问:学习函数式编程对于初学者来说似乎特别困难,你认为函数式编程是为更聪明的程序员设计的吗?

我认为函数式编程对于面向对象的开发者来说确实有些难。但是我并不认为学习函数式编程比你当初学习面向对象编程更难。我认为之所以难,是因为它太新了。问题在于,我们要教给新一代程序员的不仅仅是函数式编程,同时也包括像并发和分布式这样的高级概念,甚至也包括像型式类别以及宏命令这样的更高层的抽象。如果想一下把这些概念都学会是很困难的。

问:对于程序员来说,如何能找到最适合自己的语言?

用不同的语言编程!用某种语言来编写下不平凡的东西。你会成为一位更好的程序员,甚至更好的人。

问:为什么你的团队选择Elixir作为工作语言?让整个团队都采用一种小众语言是需要的勇气的,你们从中获得了哪些独特的优势?对于其他想要采用小众语言的团队来说,有什么需要注意的吗?

我们团队都喜欢Ruby,因为它效率高。元程序设计很棒,语法和特性感觉都很自然。工具不错。但是当我们想要解决并发问题的时候,还是遇到了瓶颈,语言阻碍了我们。我们认为这个问题会一直存在,随着时间会变得越来越严重。

Elixir提供了更高层的抽象,但是同时也保留了松本行弘为Ruby带来的编程乐趣。Elixir还提供了由Erlang带来的并发,同时还有用来监控的模型以及我们喜欢的故障。

我认为不需要使劲鼓励其他团队,他们就会采用新的语言,因为新的硬件设计会马上让老编程语言心有余而力不足。我的意见是尝试新的语言,看看它们和你需要解决的问题的契合度如何。最后,慢慢来。我们花了两年的时间才选择了函数式编程和Elixir。要想把最重要的生产系统迁移过去确实需要一些时间。


更多精彩,加入图灵访谈微信!