松本行弘:码云封面人物,程序员的乐趣与存在感

发表时间: 2018-10-30 16:33

关注开源中国OSC头条号,获取最新技术资讯


本期嘉宾

松本行弘(Yukihiro Matsumoto),Ruby 语言发明者,著有《松本行弘的程序世界》《代码的未来》等作品,如今 53 岁的他仍每天享受着编程的乐趣。

编者按

我们有幸参与 Ruby Summit China 2018(10月,郑州)并得到采访 Ruby 之父松本行弘先生的机会。先生不仅是一位魅力十足的资深开发者,还是一位生活的智者,他分享了自己关于技术成长、个人价值,以及如何平衡工作和家庭等方面的经验和观点。我们将此次采访内容整理成文,作为一期特别的「码云封面人物」,希望给大家的工作和生活带来一点小启发:)


访谈现场合影,左起为开源中国码云负责人周凯、松本行弘和图灵教育乐馨

Ruby 从诞生至今的这 25 年中,有哪些让您感受特别深刻的事情?

这 25 年间发生了很多事情,其中感受最深刻的就是这 25 年的坚持。很多软件的生命周期并不长,一门编程语言能够坚持走过 25 年,是一件很了不起的事。

今年 2 月份的时候,大家为我举办纪念 Ruby 25 周年的活动,我的两个女儿也特意从东京赶来送上了鲜花和祝福,虽然家人们对 Ruby 并不太了解,但这 25 年来他们一直都给于我支持和肯定,这让我觉得十分高兴。


图片来源:Sider Blog

之前 Ruby 2.0 发布时您在访谈中提到您给 Ruby 打 90 分,您觉得对于 Ruby 3 的话,分数会不会有所提高?谈谈 Ruby 3 在异步、并发和性能提升等方面的展望?

我们的团队对于性能提升,以及并发进行了非常多的实践。Ruby 在性能提升方面做的还是不错的,两年后的 Ruby 3(我希望能在两年后发布)在性能方面我个人还是比较满意的。在并发方面,虽然目前还有很多纠结的地方,但也会往更好的方向推进。

Ruby 3 整体我希望能做到 95 分,不过像 Ruby 这样的语言,是不可能达到满分的,因为技术环境一直都在变化,Ruby 也要不断地更新换代。


图片来源:攝影/蔡仁译

是否有计划将 Ruby 的应用领域进一步扩大,比如让 Ruby 可以跨平台开发。现在有个 Rubymotion 方案,官方有没有计划推出一些别的方案呢?

目前还没有这样的计划。但实际对于跨平台开发,Ruby 也有很多实现方式,比如你提到的 Rubymotion,另外还有 mRuby 这样适合嵌入式开发的方案,推荐大家去尝试一下这些方案,如此也能对跨平台开发有所帮助。

同时,我们也并不主动计划让 Ruby 应用在哪些方面,而是当这些方面需要我们的时候,比如安卓、iOS开发、科学计算、区块链等,当这些开发者希望得到 Ruby 的支持的时候,我们再给与相应的支持。

您曾经在 2013 年接受的采访中提到,希望 Ruby 不仅仅在 Web 开发领域大显身手,还希望能够在科学计算(Scientific computing)、高性能计算(High performance computing)、嵌入式(Embedded)开发,这三个领域有所发展。过去的这 5 年间,有怎样的进展呢?

如上一个问题所说,我们考虑的不是希望 Ruby 进入什么领域,而是当某些领域的开发者需要用 Ruby 来提高生产效率,或者改善他们编程的舒适度的时候,我们会尽力去帮助这些开发者。比如之前有几位科学计算的工程师需要用 Ruby 开发一个相关的库,我们给他们提供了一些资金;另外有几位程序员想用 Ruby 做嵌入式开发,我们给他们提供了人脉和少量的资金支持。通过这些努力,不管是在科学计算领域还是嵌入式领域,Ruby 也都得到了成长。


图片来源:暮夜晨影

在日本,程序员的待遇、社会地位是怎样的情况?

程序员的待遇,在很大程序上取决于软件公司的老板或者经理,往大的层面说,也取决于整个社会环境,整个社会是否尊重程序员或者软件工程师

中国的情况我不了解,在日本,程序员是不怎么受尊敬的,要想成为一个优秀的程序员,其实并不容易,不仅要学习很多知识,而且还需要一定的工作经验,需要一个很长的周期来习得技术。但大家可能并不懂技术,经常都是一副冷漠脸:“把这个功能实现一下。”完成了之后,又一副理所当然的样子:“哦,完成了呀。”他们不知道这个实现的背后,程序员付出了多少时间和汗水,如果没有程序员的付出,就没有这么多便捷的技术了。可能因为工作强度较大,人际圈子单一等原因,程序员们不太注重外在的东西,大多都很随性。

我觉得在这样的情况下,程序员可以从自身的角度做好两方面的事情: 第一,程序员应该更明确地去表现自己的技术专长,用更大的声音让更多人知道“我精通这门技术,我可以很好地完成这些工作”;第二,程序员可以掌握适当的技术比如 Ruby 来提高自己的生产效率,来提升自己的价值。只有当自己的技术过硬的时候,才会让自己更有价值。做到了这两点,我相信程序员或者软件工程师也可以变得更自由一些。


图片来源:Sider Blog

您接触过的不同国家/地区的 Ruby 社区有什么不同的感受?对 Ruby 社区的发展有什么建议?

世界各地的社区都有一些自己的特点,但是最不一样的要属日本的 Ruby 社区。日本的程序员比别国的程序员更关心 Ruby 本身,可能和 Ruby 诞生于日本有关系,如日本 RubyKaigi 中的讨论的更多的是类似如何改善 Ruby 性能等与 Ruby 自身相关的问题。其他国家和地区的 RubyConf 大部分讨论的是“我是如何把 Ruby 用在工作中的”或者其他的新技术。

在 Ruby 社区,有一些人是有代码编写权限的,他们叫做 Ruby Committer,之前有 30 位以上的贡献者被请到日本 RubyKaigi 的现场做了一次圆桌会,让大家了解到贡献者们都是什么样的人、平时做什么工作等,这个我想其他国家的 RubyConf 是不是可以借鉴。

Python、Ruby、Go 是近年来发展非常突出的语言,“学哪个好?”是许多初学者经常会有的疑问。您觉得可以从哪些角度来分析、选择适合自己的语言呢?

我认为初学者学任何一种语言都可以,我自己最开始学的是 BASIC,后来又接触了很多的语言。编程是一件很有意思的事,让机器按照你的意志去运行,你跟机器说“请这样工作。”然后它就按照你的指令工作,我觉得这很可爱。有点像训练小狗,你对小狗说“来,把东西放在我手上。”然后它就会把东西叼到你的手上。同样,你对计算机发出指令“请计算一下”,它就会帮你计算好,看到计算机这样努力的样子,我打心眼里觉得可爱。

只要你能从编程中获得乐趣,我觉得学什么语言都是可以的。不管用什么语言,都可以对计算机发出指令,让他按照你的意志去工作,这个过程是发现编程乐趣的过程。

另外,还可以观察一下你周围的人,选择你周围的人在用的那门编程语言是最好的。比如你身边的朋友喜欢用 Ruby,可以对你进行一些指导,你就选择 Ruby;再比如你的学长用 Python,你就学 Python。等你学得多了,你会找到你自己内心最喜欢的语言,或者自己最擅长的语言。

您曾经在采访中说过“软件工程师很难仅仅靠技能脱颖而出”,这句话应该怎样理解?除了技能,软件工程师还应该具备哪些素质?

对于程序员来说编程是他们的技能,比如开发新的语言、新的框架或者新的库,编程的知识、经验和能力都算是他们的技能,但要想做出一个好软件,还需要了解比如“这个软件应该有什么功能”、“用户需要什么功能”、“应该怎样设计,用户才不容易犯错”、“用户在使用这个软件时的感受如何”等方面的知识,这些光靠编程技能是没有办法了解的。

就像刚才说的,程序员还需要将“我掌握了这些技能”这件事传达给别人,为了证明自己掌握了这些技能,需要让别人知道“我能干什么事”,比如你可以写博客,或者在社交网络或者 GitHub、码云这样的平台上来介绍自己。

以上,程序员不仅要掌握技能,还需要了解人,了解怎么样才能开发出好的软件,同时让别人了解你所掌握的技能。这样的话,你的程序员生涯就会更加丰富多彩,会比仅仅掌握了技能的程序员体会到更多的乐趣。


图片来源:PR Tables Co.,Ltd

可以谈谈您的新语言 Streem 吗?

几年前我在杂志上连载了关于编程语言的文章,我不仅喜欢 Ruby,而且还热衷于研究编程语言,当时有萌生了一个想法:写一本关于如何开发一门编程语言的书。

在日本关于自制编程语言的书已经有一些了,内容大多是通过某种工具,来介绍编程语言是如何实现的,文字相对专业,书中用来当作范例的语言也不怎么有趣,他们常常把重点放在编程语言的开发过程上,对于实现什么样的编程语言并没有太多斟酌,所以读起来还是比较枯燥。 我是开发过编程语言的,觉得自己最擅长的是考虑应该开发什么样的编程语言,也就是“编程语言的设计”这部分,所以我写了《松本行弘:编程语言的设计与实现》这本书(中文简体版将于 2019 年春天出版上市)。我在这本书里用 Streem 作为范例,因为它是以流(Stream)为计算模型的语言,所以用“Streem”来命名。我不想重复造轮子,所以不想做类似 Ruby 的语言,于是我决定尝试新的方法。

现在是大数据时代,有很多场景都需要处理大量数据,我想如果以流(Stream)为计算模型,开发一种专门处理数据的语言,就会方便地把过去 Shell 脚本所能做的事情大规模地开展起来,以顺应多核时代的需要,因此我最后确定了用 Streem 来作为范例。我希望能开发出和 Ruby 不同的语言,Ruby 是面向对象的语言,Streem 是以流为计算模型的函数型语言,在书中我也详细介绍了这门语言的设计和实现过程。

不过书出版之后,我一直没有时间去进行更深入的开发,但这并不代表我以后不会再继续开发,我认为“流”这个领域是很有前景的,以后有时间的话一定会慢慢丰富它,现在我的时间主要花在 Ruby 上了,看到这个访谈的朋友们,如果你们有兴趣的话,我们可以一起开发 Streem。

您在书里提到过,阅读开源代码是您获取编程知识的重要方式。现在开源发展非常迅速,有非常多的可供阅读和学习的素材,另一方面,也会有难以选择的困扰,对于如何更高效地学习开源代码,您有什么看法?

先说结论,我认为这是因人而异的。说实话,没有那种每个人阅读了都会有用的源代码,所以还是应该根据自己想要掌握的技术或者兴趣领域来选择。

我个人对编程语言的开发很感兴趣,从学生时代开始阅读了很多关于编程语言的源代码,了解了其他的编程语言的设计与开发细节。假设你对操作系统很感兴趣,可以通过阅读 Linux 的源代码来学习操作系统的相关知识;假设你对 Web 应用感兴趣,可以通过阅读其他人写的 Web 应用代码或者框架来学习。总之,根据自己的兴趣和需要掌握的技能来选择学习的源代码。

关于本土化的开源生态问题,码云是中国最大的代码托管平台,至今已运营了 5 年有余,近年用户和项目的增长非常迅速,目前已有 300 多万的开发者用户,超过 5 万的企业用户,想问问您对于打造更好的本土化开源生态环境有何看法?

我之前不知道码云,了解后觉得非常了不起,能够为广大中国开发者和企业提供一个这样的托管平台,方便了大家的工作,而且提供了多样化的可能,我觉得是一件很好的事。不过我在想,码云如果能够走向世界,是不是能够更上一层楼呢?中国的人口是日本的十倍,可以说市场也有日本的十倍那么大,码云在中国国内发展当然是没问题的,但我觉得那样的话是不是有点可惜?所以我希望码云可以从中国出发,成为一个为全世界开发者服务的平台。

现在中国开发者在 GitHub 上创建的项目比以前多了许多,也越来越关注开源项目,但说实话贡献的人还是相对比较少的。这其中的理由我不太了解,可能因为不能自由访问,或者实在太忙没有时间投入开源项目。就中国这个人口基数来说,如果参与贡献的人能越来越多,会爆发出巨大的能量,比如可以从码云平台上选择自己感兴趣的优质开源项目开始,慢慢参与开源,这样整体技术环境也会越变越好。中国的程序员都十分努力上进,我衷心地希望他们能成为世界知名的程序员,或者做出世界知名的项目。

我看到您去年针对日本的年轻程序员做了好几次演讲,可以介绍一下您的心得吗?演讲主题之一的是您给 90 后软件工程师推荐的学习方法,可以详述一下吗?

刚才也稍稍提到了一点,程序员需要让自己有存在感。人是一种社会动物,在众人当中脱颖而出不是一件容易的事。一般在找工作的时候可能都会这样想:用到这门语言的工作机会很多,要不我就学这门语言吧。这项技术用的人很多,要不我就用这项技术吧。但沉下心来想一想,作为一个个体,只需要一份工作对吗?与其去选择一门 100 万人掌握的语言,可能不如去学习一门只有 1 万人掌握的语言,这种稀有价值说不定更有帮助。

有一句话叫做“宁为鸡口,毋为牛后”,我深以为然。在小众的鸡群当中作为领头人你为众人所知,但在庞大的牛群当中你可能什么都不是。举个例子,比如 Ruby 这样比较小众的语言,作为一位 Ruby 工程师,相较于其他语言工程师更有机会脱颖而出,受到尊重甚至获得良好的待遇。

可能不仅仅是日本人,这可能是人的共性。在和别人做一样的事的时候,就会觉得比较安心,这种安心感我个人认为其实并不等于幸福感,在“年轻软件工程师生存战略”这个演讲中我也谈到过,人有从众心理,特别是日本人这种心理特别强。在学校老师常常教导你要和别人一样,但毕业之后走上社会,如果你做的事情和别人不一样,很多情况下待遇等各方面都会比别人好。但是我们从孩童时代就被告知,要和大家一样,和几百万人竞争,学习成绩好就代表你很优秀,可能你也会想,可能必须是这样吧。但走上社会之后,你会发现:啊,其实不是那样的,做“鸡口“可能会有更好的选择,这种思维方式的转换很重要。

我是基督教徒,在日本基督教徒非常少,所以我从小就显得很另类,即使想要从众也很难,因为我和大家不一样,我对这种另类并没有什么恐惧感。这样的成长经历在我长大了之后给我很大的帮助,我成功开发了 Ruby,变得小有名气。我建议大家不要对”非主流“感到恐惧,成为有一名有存在感的程序员,获得社会的尊重,获得尊重之后你的待遇会变好,整个工作和生活也会更上一层楼。

您觉得工作与生活应该怎样平衡?现在中国的软件工程师加班情况特别普遍,996、997 甚至还有号称 007 的公司,很多程序员都觉得疲于奔命,工作之余还要给自己充电防止被淘汰,这样说实话基本照顾不到家庭。我们知道您和妻子一共有四个孩子,还养了一只狗和一只猫,您平衡工作与生活的秘诀是什么?

一天有 24 小时这对谁都是公平的,不管是男女老少一天都只有 24 小时。除去睡觉的时间,会剩下 16 小时左右。这 16 小时如何支配是由个人意志决定的:什么时间去公司,什么时间吃饭,什么时间与家人一起度过。 如何支配时间是由个人价值观中的优先顺序(Priority)来决定的,工作有时真的是很有吸引力,你经过努力获得了预想的结果,充满成就感。渐渐地,工作的优先级会越来越高,花在工作上的时间越来越长,相对地,与家人相处的时间就会变短,有时会引发家庭问题或者健康问题。

我在结婚之前就和家人约定好,把家庭放在优先级最高的位置。我有时沉迷于Ruby开发而不能自拔,这时候我妻子就会提醒我:“我们约好的不是?”“对对对,我忘了(笑)。”家庭和工作的优先级,和家人事先达成共识,是一件非常重要的事。生活和工作像一个天平,当我渐渐偏向工作的时候,我的妻子就会把我拉回来,在这样的反反复复之中,我们一家人走到了现在。

首先,确定家庭和工作的优先级,有条件的话把你的优先级告诉别人,这样在你违反优先级的时候,可能就会有人提醒你。如果你只把优先级藏在自己心里,常常会因为工作太有意思而忘记了优先级。

第二,在工作中,尊重是一件十分重要的事,比如我尊重我的工作,在截止日期之前把工作完成;反过来,公司也需要尊重我,为了保证我的工作效率,不制定不人性的规则,或者准备一些能够提高工作效率的工具,不过度干涉我的工作,这是一种双赢的机制。

不过管理者有时不是很懂技术,有些管理者甚至没有写过代码,这样就需要用各种方式和渠道,将你提高生产效率的方法传达给他:“我通过×××的方式,可以提高生产效率。”你如果直接找管理者谈话,他可能会不太能理解:“该不是在怠工吧?该不是不想工作才想出这样的点子吧?”假如有人在博客上论述自由度对真正提高程序员生产效率的重要性,或者长期加班的害处,通过各种方式让管理者理解,IT 业界长期加班不利于生产效率的提高,而且还会引发各种家庭问题,对公司和程序员都不是好事,上述双赢机制对整个 IT 生态的健康发展大有裨益。

日本的企业这几年越来越体会到加班的坏处,加班文化较之前有了很大的改善,虽然还有很大一部分人还在饱受加班之苦,希望中国的互联网企业也能做到这点。如果你在做出各种努力之后依然得到不到尊重,那么我建议跳槽。

日本把这样的企业叫做 “黑心企业”,顾名思义,这样的企业不尊重从业者,令其长期加班,严重损害从业者的身体健康。其实这种企业的存在,也部分归因于从业者的隐忍,如果从业者都能及时止损,这样的企业就渐渐消失了,这是我一直给别人的忠告。

程序员也是人,虽然三岁小孩都知道,但人们往往只把程序员看做一个编程的工具。我们要努力让大家知道,我们也是人,我们也需要休息来提高生产效率,我们的工作并不是大家所想象的那样机械化。例如盖房子,假设房子下周就要完工了,然后你提出:“不好意思,麻烦把房子向右移 5cm。”可能你觉得“才 5cm 很简单嘛。”,但是如果真的这么说肯定会被打,这个道理大家都能理解。但程序员就常常遇到在项目即将完工前要求改需求的情况,这时应该坚定地拒绝,让社会了解程序员的真实面目以及平时工作的艰辛,才能获得相应的尊重。

访谈手记(乐馨)

距我上次采访 Matz 已经过去 6 年了,53 岁的他虽然胡子花白,但依然步履轻盈,谈到感兴趣的技术话题时眼中闪烁着兴奋的光芒。

这两年 Ruby 不被看好,他常常被问到 Ruby 会不会“死”这样的问题。“这说明 Ruby 已经趋于稳定。但我们会不断改进,Ruby3 的性能预计会提升 3 倍。”他希望可以继续快乐地为这门语言工作,这个他 17 岁时在一个笔记本上写下的语言。

本期封面人物由开源中国·码云(Gitee.com)和图灵教育联合出品

撰文:刘辰、乐馨、陈杨

采访:乐馨、周凯

翻译:乐馨

摄像:暮夜晨影

点击下方“了解更多”观看采访视频