图灵访谈:松本行弘与他的《代码的未来》

松本行弘(Yukihiro Matsumoto),Ruby 语言设计者。1965 年 4 月 14 日出生于日本鸟取县。1984 年,就读于筑波大学第三学科信息学系。2 年后休学,成为末日圣徒耶稣基督教会的宣讲师。大学复学后,加入中田育男教授的研究室。1990 年大学毕业。后在岛根大学攻读博士课程,修满学分后退学,未获学位。现任株式会社 Network 应用通信研究所研究员、乐天株式会社乐天技术研究所研究员,Ruby Association 理事长,Heroku 首席构架师。

问:松本先生的《代码的未来》和您的上一本书《松本行弘的程序世界》相比有哪些不同,又有哪些看点呢?

Matz:《松本行弘的程序世界》一共涉及了 14 个话题,每个话题都是浅尝辄止,内容比较广泛但不是很深入,而这次的新书则是设定了一个大的主题——即对未来即将到来新技术的思考,因此内容比《程序世界》所涉及的范围要窄一些。此外,这本书还在时间尺度上进行了探讨,例如从计算机出现以来,到现在为止经历了怎样的变化,并由此来思考未来可能会发生的变化,也就是对过去和未来两方面都进行了思考。计算机的世界变化非常快,而这本书的目的在于探讨其未来变化的方向。

问:关于编程语言进化的方向,保罗·格雷厄姆在一篇名叫“一百年后的编程语言”的文章,主张“拥有最简洁最小核心的编程语言”将是未来发展的趋势。对于这一观点,您在书中表示“不同意”,这是为什么呢?您对编程语言发展方向的看法又是怎样的呢?

Matz:保罗是一个很喜欢 Lisp 的人,而 Lisp 所具备的特性正好符合他所说的“一百年后的编程语言”的样子,因此保罗认为一百年后的编程语言就应该变成 Lisp 这个样子。但实际上,Lisp 这个语言的历史已经有 50 多年了,说实话,Lisp 现在并没有成为一种有很多人在用的主流语言。我觉得这也许是因为 Lisp 对于大多数程序员来说不具备那么大的魅力,也就是说,作为一种“拥有最小核心”的语言,或者从某种意义上说是一种很“美丽”的语言,和程序员们所期望的语言之间,存在着一定的差距。如果一两年的时间里,Lisp 的魅力没有被大家所接受,那还可以理解,但已经过了 50 年还没有被广泛接受的话,是不是它在本质上就不太符合大家的期望呢?“对人类来说好用的语言”和“拥有最小核心的语言”之间的这个差距可能是很大的,我觉得可能将来 100 年也没办法消除。至于未来的编程语言应该是怎样的,我觉得应该是兼具接近 Lisp 的运行模型,以及人类容易理解的语法这两方面特征,这么一看 Ruby 是不是更接近这样一种语言呢?

问:松本先生被称为 Ruby 之父,我们知道在编程语言的设计过程中,可能要做出很多选择,例如动态还是静态、基于原型还是基于类等等。在 Ruby 的特性中,您认为当初最难做的选择是什么?

Matz:在设计 Ruby 之前,我在上大学的时候还设计过另外一种语言,而那种语言是完全静态的,和 Eiffel 语言非常相似。而我原本也是特别喜欢静态语言的,不过上大学时设计的那种语言是以学术研究为目的的,多年之后,当我想设计一种编程语言作为自己的工具来用的时候,我就觉得还是动态语言实际用起来比较好用。抱着这样的想法,我设计了 Ruby ,现在看来这个设计还是正确的。那么当初对于 Ruby 应该是静态还是动态这个问题,也许算不上是最难的吧,但至少是我在设计中做出的“最大”的一个判断。而在此之后,因为是动态语言,那就借鉴一下 Smalltalk 和 Lisp 吧,Perl 有一些功能也不错,于是如此这般吸收了这样一些语言的特性,也就显得比较自然而然了。 Ruby 的特点在于Mixin模块,而这个特点在 Ruby 诞生当时还算是非常罕见的,因为我不喜欢多继承,总觉得应该有一个更简单的方式,所以就设计了 Mixin 模块。

问:那么现在回过头来看,Ruby 当中有哪些地方会让您觉得“如果当初设计成这样就好了”呢?

Matz:最开始的时候我的目标只是想实现 Perl 所具备的功能,因此从 Perl 借鉴了很多,比如说用美元符号($)来修饰变量名之类的,现在看来觉得学得有点过了,搞得和 Perl 太像了。当然,除此之外还有其他一些小地方,但最主要的我觉得就是这个了,也就是跟 Perl 太像了这一点。刚开始的时候,还没有形成 Ruby 的语法习惯和文化,因此很多东西都是从 Perl “抄”过来的,现在看来好像一股脑拿过来的东西太多了,里面其实有一些是不需要的。而经过一段时间之后,Ruby 自己的文化已经形成,Rails出现之后又形成了 Rails 的文化,而到了这个时候再看的话,可能就会觉得这些 Perl 的部分好像没啥必要呢。

问:大家都认为“Ruby 有现在的人气基本上都是由于 Ruby on Rails 的贡献”,您在书中也认同这个观点,那么您认为 Ruby on Rails 获得巨大成功的原因是什么呢?

Matz:首先是得益于 Web 的快速发展,几乎所有的软件开发平台都在瞄准Web这个领域。以往在用 CS(客户端-服务器)架构来开发的系统,现在都可以在 Web 上实现了。在 Web 上能够开发的应用变多了,这是一个主要的背景。另外,Ruby 的优势在于进行软件开发非常容易,也就是开发效率比较高。这两点结合起来,我认为就是 Ruby on Rails 成功的主要原因。

此外,Ruby 还有一些比其他语言强大的特性,例如元编程(Metaprogramming),通过猴子补丁(Monkey patch)所带来的可扩展性等等,通过这些特性,甚至可以对基础的类进行增强。DHH 正是运用了 Ruby 的这些强大之处,开发出了 Rails。而对于没有接触过 Ruby 的人,比如只用过 Java 这种比较“死板”的语言的人来说,会觉得“唉?居然还可以做到这样吗?”,我觉得这也是 Rails 成功的原因之一。

问:据说 DHH 曾经是准备用 PHP 来开发这样一个框架的,但后来却转向了 Ruby ?

Matz:对,因为 PHP 在元编程方面有很多限制吧。Rails 推出之后,又出现了很多(在 PHP 上实现的)模仿 Rails 的开发框架,比如 Symfony、CakePHP 等等,但是 Ruby 所拥有的强大特性 PHP 却并非完全具备,即便不考虑它们各自的背景,只是单纯去对比这些开发框架的话,我还是觉得 Rails 更强大一些,我觉得 DHH 选择 Ruby 也正是看重了这一点。顺便,我其实是见过 DHH 的,在丹麦,那时候他还没开始学习 Ruby ,说不定那次见面也是对他产生影响的一个原因吧。

问:中国读者很关心的一个话题是,Ruby 目前最广泛应用的领域就是 Web 开发,那么在 Web 开发这个领域之外,Ruby 的发展方向又是什么呢?

Matz:的确,Ruby 在 Web 开发领域被用得很多,例如 Rails、Sinatra 等开发框架。但编程的世界并非只有 Web 而已,我也一直希望 Ruby 能够从 Web 中走出去。在不久的将来,我认为 Ruby 有望被应用的领域,主要有三个。

  1. 科学计算(Scientific computing),也就是大学科研中所要用到的计算。在这个领域,Python、R、matlab 等语言用得非常多。我希望 Ruby 也能够进入这一领域,为此我们正在开发一个叫做 Sci Ruby 的项目,希望借此推动 Ruby 在大学科研计算领域的应用。
  2. 高性能计算(High performance computing)。这个和科学计算有点接近,是运用超级计算机来进行计算的领域。和 C++ 比起来 Ruby 确实要慢很多,所以大家都觉得 Ruby 不可能被用于高性能计算领域。东京大学一个研究生做了一个研究项目,将 Ruby 写的代码编译成 C 语言代码,然后再编译成二进制程序,这个过程中需要用到类型推导等技术,最好的情况下,速度能够达到 C 语言(指用 C 语言人工编写的同等程序)的 90%。这个项目目前只发表了论文,还没有公开源代码,我希望明年这个项目的成果能够全部公开。
  3. 嵌入式(Embedded)开发。所谓嵌入式就是指在微型设备,例如手机、医疗器械、机器人,在这些环境下,现在的 Ruby 其实并不是很适合,内存开销很大,API 也不合适,因此才需要开发适合嵌入式开发的,内存开销比较小的,并且具备面向嵌入式开发 API 的 Ruby 引擎,这也就是 mruby 。

以这三个领域为首,我希望 Ruby 能够在 Web 开发以外的领域有更多的发展。

问:Twitter 主要是用 Rails 开发的,我看了一则消息,说美国大选的时候 Twitter 遇到了前所未有的大访问量,Twitter 称为了应付访问量的上升,正在从 Ruby 转移到其他语言,您对这个问题怎么看呢?

Matz:这里面原因很多吧。首先,Twitter 刚开始开发的时候,没人知道 Twitter 会获得今天的成功,当时很多人觉得,这种只能写 140 个字的博客有什么意思呢?但 Twitter 却出人意料地获得了巨大的成功。在这个过程中,Twitter 增加了很多新功能,在它快速发展的过程中,Ruby 的贡献是相当大的。因为一个新功能从构思出来到付诸实现,可以用很短的时间就能够完成。Twitter 刚开始开发的时候不可能考虑到会有现在这样大的访问量,也就是遇到了设计上的瓶颈了,因为一般的网站也不可能会有每秒上万的访问量,因此可以说现在的 Twitter 发展到当初在设计上的极限了。

为了解决这个问题,Twitter 需要开发一个全新的架构,以应付现在越来越大的访问量。不过,即便要重写架构,我觉得沿用 Ruby 也是可以做到的吧?(笑)话说,一个网站在遇到设计极限的时候,有很多解决方法,比如重写架构、换其他语言等等,其中重写架构我觉得是最重要的,而实际上 Twitter 也正是做了这方面的工作。但在这个过程中,他们的工程师想要挑战一些新的东西,那么从编程语言上来说,就提出要改用 Scala,因为 Scala 是编译型语言,性能也不错,正好适合编写新的架构,我觉得这样也不错。

在我看来,在网站所提供的服务还没有完全成型的时候,最重要的是能够对需求的变化做出快速的反应,这个时候就需要 Ruby 这样灵活性比较高的语言;而在网站获得成功之后,遇到了设计瓶颈,用一种新的语言,比如Scala,来编写一个新的架构,以节约一定的资源,我认为这也是很好的一个结果。Twitter 转向 Scala 还只是在其核心部分,而在 Web 前端和一些内部工具上还有很多地方在用 Ruby 。其实,上个月我还去拜访了一下 Twitter,跟他们的工程师进行了一些交流,Ruby 还是用得很多的哦(笑)。

问:目前世界范围内广泛使用的语言大部分都是来自欧美的,作为例外大概只有来自巴西的 Lua 和来自日本的 Ruby ,您在书中也说这种情况让人感觉“很寂寞”,那么造成这种情况的原因是什么呢?要改变这种局面,我们应该做出怎样的努力呢?

Matz:关于 Lua 呢,其实如果你要说它是欧美的也可以,巴西是属于“拉丁美洲”嘛(笑)。要说亚洲或者东亚这边的话,那就只有 Ruby 了,真的是蛮寂寞的一件事。从世界范围来看,(对于编程语言来说)欧洲和美国的影响力应该是最强的,而亚洲虽然有众多的人口,但却没有能够出现很多的编程语言,确实挺寂寞的。

如果说对将来的期待,别的国家我不太清楚,至少在日本,其实是有很多人在开发各种各样的编程语言,但除了 Ruby 以外,其他的语言在日本以外几乎就没人知道了。如果对编程语言感兴趣的人越来越多,所创造出来的编程语言也越来越多的话,这其中应该就会有那么一两个能够取得成功吧。在日本还存在一个问题就是语言障碍,日本人除了母语以外,精通外语的人不多,有趣的是,居然有用日语来编写程序的编程语言呢。(图灵社区:说到这个,其实中国也有用汉语写程序的编程语言呢。)中国也有吗?果然。不过这些语言虽然有趣,却只能给日本人用,也就无法走向世界了。

说句题外话,我曾经收到过一个美国人发给我的一封邮件,他说你是个日本人,但 Ruby 看上去却跟英语没什么区别,因为 Ruby 程序都是用英语写的嘛,难道没有用日语写程序的编程语言吗?为什么没有呢?我只好回答说:有啊,只不过你不知道而已,即便知道你也没办法用嘛。

现在在日本对编程语言感兴趣的人不断增加,大概我总是在网上还有书里说编程语言多么有趣,多少也是受了我的这些言论的影响吧,现在有不少人在挑战设计新的编程语言。在这些新的编程语言中,如果能有千分之一的语言能够最终获得成功,我认为就是很好的结果了。我不知道中国、韩国,以及其他一些亚洲国家中,有多少人想要挑战这一领域,不过如果大家以我的这本书为契机,能够改变“编程语言是别人给我们的,我们只能被动接受”这种看法,继而抱有“自己创造一种编程语言也不错嘛”这样想法的人能够越来越多的话,这其中一定会有人获得成功。

说到开源,无论是日本,还是中国、韩国,在世界范围内发表的项目还很少,这也算是一个可以去努力的切入点。这里面可能有很多原因,比如英语很难学,(图灵社区:比如 GitHub 也很难用?)哈哈,GitHub 在中国能用吗?(图灵社区:能用能用……)唔,还好还好。不过,这个(哔——)的影响还是很大的,有很多资料不太容易获得吧。(图灵社区:是啊,比如 Go 语言的官网就上不去呢。)啊!Go 的官网上不去吗!果然是因为它是 Google 的吧(笑)。总之,需要面对的难题还是很多的。另外,在日本也是如此,程序员把大多数时间都用在了工作(挣钱)上,要进行开源项目之类的活动就比较困难了。10 年前,开源这个概念在日本也没人接受,而现在大家都逐渐明白了开源的主要性,开源项目也就逐渐增多了,我想未来几年中,在中国应该也会产生类似的变化吧,我很期待。

而且,在刚开始做的时候,没人知道到底做什么会成功。我在设计 Ruby 的时候,也不可能想着 Ruby 很不错以后一定会在全世界广泛使用。因此,一种编程语言生逢其时可能更重要一些,但这种事情,你不去尝试一下是不会知道结果的。在中国,也一定会有一些编程语言或者软件因为生逢其时,从而走向世界并获得成功。

问:在书里讲到 Dart 的时候,您说过对于编程语言来说,生态环境是很重要的。那么要建立这样的生态环境,需要一些怎样的努力呢?

Matz:从用户的角度来看,用这种编程语言,对我有什么益处,这一点很重要。在 Rails 出现之前,使用 Ruby 的人,包括我自己在内,大多数都是觉得 Ruby 写程序很轻松,这可能是选择 Ruby 的主要目的。当然,Rails 出现之后,因为“我要做个网站,Rails 最快”这样的理由而使用 Ruby 的人变多了。因此,如果你设计一种新的语言,如果能够准确地传递给用户使用这个语言所能带来的好处,我想这样的语言成功的可能性会更大一些。

问:非常感谢,在采访的最后,请您谈谈对中国程序员的寄语吧。

Matz:在《程序世界》中我也提到了,我觉得编程的未来应该会以开源的形式发展下去,未来的创新性软件或者编程语言,可能都会以开源的形式出现。作为开源软件来说,别人做出来我可以免费使用,这一点大家都很开心。在经历了这个阶段之后,如果能够更进一步,将自己做的软件开源,使其对全世界产生影响,如果能做到这一步的话,你可能就会成为一名一流的软件工程师。中国的软件工程师,就我接触的这些人来看,大家都非常认真和努力地学习技术,我希望这些人之中,能够有更多的人迈出这一步,从而成为可以影响世界的一流程序员。

————————-

来源:图灵访谈

阅读剩余
THE END