2011年11月11日,图灵社区就Ruby的设计和中国程序员关注的诸多话题,采访了Ruby设计者松本行弘先生,以下为访谈内容。
图灵社区:《松本行弘的程序世界》中文版上市之后,在程序员(不仅仅是Ruby)社区取得很好的反响,在此我们对您表示祝贺。在这本书里面,您以Ruby的设计为参照,讨论了编程语言设计与开发的很多知识,这是挺新鲜的角度。是否可以介绍一下,您是如何设计出这样的写作角度的呢?
松本行弘:我写过一本《面向对象的语言Ruby》,那本是专门介绍Ruby的,这一本(指《松本行弘的程序世界》)是介绍编程语言知识的。以这样的形式撰写,我还是头一次。这本来是写给《日经Linux》杂志的一系列专栏文章,最后汇总起来成书。
我主要想通过这些文章来告诉读者作为程序员所需要具备的背景知识,并帮助读者梳理编程语言的历史。作为一名程序员,不仅仅要懂得程序,还要懂得计算机的发展历程、编程的本质、计算机的性质和技巧等等这些看似跟语言没什么关系的东西。一般来说,程序员难以系统地学习这些知识。我在三十几年的工作中,一直在教别人这些内容。不是当老师,而是在工作中教别人,或者作为一种兴趣与别人交流。
对这本书上市之后取得的成绩,我个人也是蛮惊讶的。这本书在日本的反响不错,但在台湾地区的繁体中文版就叫好不叫座。中国内地读者可以选择并喜欢这本书,我觉得这是程序员群体迈向成熟的一个标志。
图灵社区:目前《日经Linux》的“松本行弘技术剖析”的连载,与《松本行弘的程序世界》的写作角度有什么差异?将来是否也会结集出版?
松本行弘:实际上,没有什么区别(笑)。因为出版《松本行弘的程序世界》之后,我又有许多新的认识,所以想继续深入探讨。
新的专栏(指“松本行弘技术剖析”)还没有出版的安排,可能会出吧。目前文章还不够多。收录到《松本行弘的程序世界》中的文章总共连载了3、4年。现在的这个专栏才刚刚开始不久。
图灵社区:您有一个很有意思的观点:“相对于数学来说,程序员更需要的是倾听能力和理解能力,最重要的是沟通能力。”是否可以结合设计Ruby的过程来阐述一下这个观点呢?
松本行弘:这主要来自个人经历吧。说起来惭愧,我小时候数学差极了。语文、英语什么的成绩比较好。可是我又特别喜欢计算机。在研究计算机的过程中,当然也有因为数学不好而遇到困难的时候,不过几乎不成问题啦。相对于数学来说,编程人员更需要诸如揣摩使用者的感受、使用者真正的需求等等的能力。在编程这个广阔的领域中,虽然也有不擅长数学就什么都做不了的部分,但大部分是与数学没有什么关系的。我个人就是这么感觉的。包括Ruby的设计过程,大部分都不用到数学,所以我能做出来。
图灵社区:Ruby的人性化,一直为人所称道。是否可以简要介绍,在设计Ruby的过程中,您是如何提炼并贯彻这一原则的?
松本行弘:在设计这个语言的时候,我首先想到的是:谁来用这个语言。然后换位思考:如果我是对方,我会需要什么,使用起来是什么感受。于是我就设计了一种我自己觉得用起来很舒服的语言。令我感到意外的是,许多用户的体验和我相似,他们也觉得这种语言用起来十分容易上手。
图灵社区:对于中国程序员来说,大家很熟悉您的“Ruby之父”这一头衔。不过,我们注意到,其实您同时在Ruby Association、Heroku等几个机构任职,一直在全方位地推广Ruby。可以简要介绍这些机构在Ruby的推广工作中的不同作用吗?
松本行弘:从2007年开始,在工作中使用Ruby语言的人渐渐增多,比如说为公司编写一个程序等等。在此之前,许多人仅仅将Ruby作为一种兴趣,用它编着玩儿。当他们真正在工作上使用Ruby的时候,就会开始问:“谁设计了这种语言?松本?松本是谁?”这个时候,商业开发者和使用开源软件的兴趣爱好者之间的矛盾愈来愈明显。为了解决这个问题,我创设了Ruby Association。这样可以给商业开发者提供一个付费的平台,使用起来有了商业保障。不过这个组织还很小,目前只在日本国内活动。当然创立当初是放眼全世界的。
说到Heroku则是另外一回事了。去年的12月,Heroku被Salesforce收购。我虽然有朋友在Salesforce工作,但是对Heroku完全陌生,只是听说了它被收购的消息。今年,Salesforce的Marc Beniof希望能接触一些Ruby的相关人士,于是便找到我说:“将来希望能用Heroku的资源来推进Ruby的发展。”过了一周之后,他邀请我与他一起工作。我答应了。这件事本身是他们主动来找我们,我们自己并没有说去寻求什么支持。以前,Ruby社区中有些人白天工作,晚上因兴趣而捣鼓Ruby。而现在到了Heroku工作,则一天到晚都能捣鼓Ruby了。Heroku提供了这样的平台。
图灵社区:您在书中提到过,日本的软件业比美国有所滞后。我们觉得,中国应该会比日本还滞后一些。请结合Ruby在日本和美国的发展,给中国的Ruby程序员指点一下未来之路。
松本行弘:我这么写了吗?如果有写的话,我忘记了(笑)。(注:请参见《松本行弘的程序设计》第14.2节。)
日本和美国的软件业,其实并不存在谁落后于谁的情况,因为二者有很大的差异性。当A和B在同一个方向上发展的时候,我们可以根据先后次序说A落后于B或者是B落后于A。但是日本和美国软件业的发展方向并不相同。日本在传统上比较偏重制造业,比如汽车、钢铁、船舶等等。到了软件业,也想照搬制造业的模式。但是,毕竟软件行业和汽车、船舶之类传统行业的还是有一定区别的,照搬的话,发展就并不是那么顺利了。我想如果大家通过使用Ruby能体会到Ruby的构思和编程的本质,明白软件业和传统制造业的区别,使日本的软件业走上正轨,我的目的就达到了。这也是我当时写《松本行弘的程序世界》的初衷之一。
图灵社区:中国目前的经济发展模式实际上和日本早期的比较相似,目前在国内有许多各种类型的代工工厂,传统的制造工业比较多,而软件行业还不是那么成熟。
松本行弘:好像有美国企业把软件放在中国生产吧?但它是没有放在日本的。中国的软件业还是和日本有区别。我想强调的是,在软件行业,最重要的是:是否有决定权。具体来说就是:第一,是否能够自己选择技术;第二,是否能够决定做什么;第三,是否能够决定在什么环节做出什么特色。
日本有一种职业叫做SE(System Engineer),你知道吗?他们一般都是听上头那些不写代码的领导的指示来做软件,而自己没有决定权。日本有大量这样的SE。作为软件的直接制造者,如果不能自己思考,我觉得那是蛮悲哀的。
我回头来想,中国会不会也有这种情况呢?比如那些做软件代工的企业,美国人或者其他国家的人决定了之后,这些企业就遵照美国人的指示做,可能是有这种情况的。那么我想给中国这些工程师的建议就是:一定切记要自主性、决定权和属于自己的思考。
图灵社区:作为开源/自由软件的践行者,您是否可以对有志投入这一领域、但又担心如何为生的程序员提供一些建议?
松本行弘:这个问题好难回答。在日本,倒是愈来愈多的工程师因开源软件而开始变得有饭可吃了,当然不是很多,只是一部分。我做开源做了十几年了。
我举个例子吧,比如说渔民。刚开始他们捕鱼,鱼是现成的对吧?这就有点像开源。捕着捕着,鱼就渐渐少了,到后来就没有了。这时候就会有人想:如果一直能有更多、更好的鱼就好了。于是这个时候就出现了养殖业。
我觉得开源软件的发展也会出现类似的情况。刚开始很多企业都使用开源软件,唾手可得,也不需要付费。不过用着用着就会发现,好像这些软件都不能满足自己的需求。于是企业希望能够更适合自己的软件来解决问题。这个时候它们会花钱花人力让一些开源软件更加完善,或者将自己的软件开源。在美国有许多这样的企业,日本也有一些,好像欧洲也有。我想中国未来的情况应该也会差不多,我很期待的。
目前在世界上还是很少看到中国、韩国、印度的开源软件。中国有庞大的IT从业队伍,今天的Ruby大会也来了很多优秀的青年,希望他们将来能够使中国的开源软件享誉世界。
以下三个问题,分别来自图灵社区的读者Kraft、刘晓日和无锋之刃。
图灵社区:请问您如果再设计新的语言,会有什么特性呢?
松本行弘:除了Ruby吗?我目前没有其他计划啊。目前是计划2013年发布2.0版的Ruby。此后,Ruby还有好多东西要做,能做个10或者20年吧。之后会不会开发新语言就不知道了。
图灵社区:一门通用型编程语言必定会跟随着应用开发趋势进化,为了增强表达力又势必需要添加新的特性,而为了向下兼容又不能随意删除既有特性,那么在进化过程中将如何保持特性正交、减少特性之间的相互冲突、降低特性组合产生的新风险/隐患/漏洞?
松本行弘:这个……几乎无法解决(笑)。不过其实针对某种特定目的而开发的语言是比较少的。能举例的比如说PHP,是针对Web应用程序所开发的。它有它的专业性,也有局限性。说到Ruby,则不是针对某种特定目的开发的,虽然它诞生初期是一种处理文本的脚本语言,但是它不仅仅局限于这个功能。软件开发、教育、大型计算机等等Ruby都能派得上用场。Ruby并没有针对某些目的去特意地增加什么便利的功能,因为这样一来反而比较危险,会局限Ruby未来的发展。我在设计的过程中一直很注意这一点,不会去弄一个比如针对Web的Ruby。
图灵社区:猴子补丁是个很巧妙而又难以掌握的特性,请问是如何构思出来的?
松本行弘:实际上猴子补丁来自于Lisp,诞生于1958年。Ruby把它拿过来,并起了一个名字,叫做“猴子补丁”。有了名字之后呢,它就开始广为人知。刚开始,它叫做“杂牌军补丁”(guerilla patch),“杂牌军”就是自发参加的军队的意思。后来有人因为口误叫成“猩猩”(gorilla),再后来干脆就叫“猴子”(monkey)了。
这个“猴子”不是我自己起的名字,而是在社区里很自然地演变成“猴子”,从“杂牌军”到“猩猩”再到“猴子”。不过叫它“猴子补丁”是Ruby的创意。有了名字,大家就渐渐关注得多了。这个猴子补丁也不是很难掌握啦,只要理解就很容易了。
最后,松本行弘先生还寄语中国读者,一同为Ruby社区创造更美好的未来!
现场精彩图片
Matz大神演讲中
Matz大神在2011中国Ruby技术大会上挑选幸运的提问读者
会议组织者吕国宁先生向幸运读者送出图灵出版的“神棍节”Matz大神签名本《松本行弘的程序设计》
图灵公司日文图书策划编辑乐馨正在采访Matz大神
笔者与Matz大神合影
Matz大神近照