松本行弘,Ruby 之父。1965 年生于鸟取县米子市,现居岛根县。筑波大学第三学群信息学类毕业。Ruby 语言发明者,亦是亚洲首屈一指的编程语言发明者、日本唯一的专业编程语言设计者。现兼任网络应用通信研究所(NaCI)研究员、Ruby 协会理事长、Heroku 首席架构师等职。育有三女一男,饲有一猫一狗。喜欢温泉。白羊座、O 型血。
编者按:2 月 24 日,对普通人来说没什么特别,就这样普通的一天,对松本行弘来说却意义非凡,因为他开始着手开发一门新的编程语言,从此他便多了一个新身份——Ruby 之父。图灵教育征集了不同时期读者与 Matz 的合照,做成了照片墙,感谢这么多年 Ruby 的陪伴。祝 Ruby 27 岁生日快乐,也希望它之后能越来越好。
本期图灵访谈带您走进松本行弘的故事(来源:图灵教育,零零妹整理)。
Ruby是马拉松式开发出来的
如今,大家经常会把 Ruby 和 Java 放在一起对比,争论不休。在外界看来,Java 的大名似乎金光闪闪,相比起来,Ruby 就显得低调不少。其实,它们是同一年“诞生”的。
1995 年 Sun 公司将 Oak 语言改名为 Java,正式向市场推出。Sun 公司大肆宣传,许诺这种语言可以“一次编写,到处运行”,它看上去很可能成为未来的主宰。
而在日本一家不知名的软件公司,因为泡沫经济的原因,公司业务不太景气,职员松本行弘顺手开发出了 Ruby。那是 1995 年,这场有关 Ruby 的马拉松,正式拉开序幕!
初中时的松本行弘把爸爸买来计算建筑数据的电脑,当成了自己的玩具。高中时,喜欢看书的他,开始翻看计算机杂志,即便他对编程语言有着浓厚的兴趣,他还是不喜欢汇编语言,Basic 语言也不喜欢。“我一定要使用这些现成的编程语言吗?”他这样问自己。
因为高考时计算机还处在黎明期,父亲反对他考信息科学学院。可他说:“自己真是太喜欢计算机了。未来的出路从未考虑过,可谓是义无反顾了。”大学时,日本经济正处在泡沫经济崩溃的年代,可松本行弘没有一点懈怠,他满满的热情穿梭在图书馆和研究室之间。
松本行弘的第一份工作是在滨松的一家软件公司。因为自己从小在农村长大,不喜欢人多的地方,也不想每天花 1-2 个小时上班。他曾说过:“找工作有一个原则,那就是坚决不在东京。”
他很喜欢这份工作,环境很宽松,负责开发公司内部的 OA 软件,他有足够的时间可以自由地发挥。当时的电子邮件只能发送文字,他就弄一个可以粘贴附件的软件。因为喜欢,所以常常加班到很晚才回家。他那时的梦想就是一辈子做程序员。即使将来当爷爷了,也要继续工作。
起初,松本行弘为了设计一种好用的编程语言作为自己提高效率的工具。虽然如今的编程和软件设计都会自然地考虑人性化的角度,但是在当时,计算机编程刚开始发展的时代,这种想法非常罕见。他清晰地记得那个最初的时间点——1993 年 2 月,他决定开发自己 17 岁时在笔记本上写下的语言。
尽管同事也给了他许多帮助,这仍然是他独自的战斗,尤其是在最开始的三年。
他回忆:“确切地来说是 2 年 10 个月,Ruby 几乎没有用户,我开发的东西得不到任何反馈,那个时候我就产生自我怀疑。啊,为什么我要干这种没有意义的事情呢?感觉没有什么动力往下开发了。因为你知道开发一门编程语言还是蛮复杂的,不是一两天能完成的。我花了 6 个月的时间才让 Ruby 写出了 Hello World,用其他现成的语言的话 10 秒钟就能写出来(笑)。”
尽管他会怀疑自己,但是没有放弃。他说:“我要怎么办呢?我每天给自己定一个小目标。比如今天完成一个函数的打印。马拉松选手们是这样做的,他们的目标往往是‘跑到下一个电线杆那儿’。通过完成这样一个个小目标,最终跑到了终点。现在回过头来想想,能坚持下来真好啊,如果不这样做现在可能就没有 Ruby 这门语言了。”
一个基于 Ruby 的框架就此诞生
生而逢时,1994 年万维网正式诞生,Web 技术不断发展。十年后,Web 2.0 兴起,David Heinemeier H 发明并开源了世界上第一个 Web MVC 框架 Ruby on Rails,引领了服务器端开发技术的变革,也使得 Ruby 语言得到了欧美开发者社区的关注,从此被点燃了加速器,走出日本,大量英文资料开始发展,全球的无数目光开始聚焦于这门优美的语言。
有趣的是,2001 松本行弘在丹麦参加 JAOO Conference 时便遇到过 David Heinemeier H,彼时还是志愿者的 David Heinemeier H 还没有开始学习 Ruby,他跟松本行弘一起探讨了编程语言的话题。谁也没预想到之后 Rails 框架会大火。可谓是奇妙的缘分。
提到 GitHub、Airbnb 和 Twitter 等网站,大家都不陌生,但说到它们的共同之处,你也许要想一想了。没错!它们都是建立在 Ruby on Rails 之上的。
Ruby 优美的语法和 Rails 框架轻量、简洁的理念简直是天生一对。一个大学生程序员说:“我只用了几分钟,敲了 4 条命令和一个启动项目 Server 的命令,便实现了一个简单的网站发表文章的功能。再添加一个 Comment Model 评论模型,一个论坛或者博客就已经完成了,这不就是一个软件工程的大作业吗?
“当别人还在抱着厚厚的将近 1000 页的参考书的时候,我已经将项目做完了。虽说前台显示不怎么好看,但是后台已经写好了,只需要稍加修饰就行了。”很快,Rails 框架的热度席卷了整个 Web 开发领域,Ruby 的人气也水涨船高。尤其是,据说 David Heinemeier H 曾经准备用 PHP 来开发这个框架,但后来却转向了 Ruby。
松本行弘在总结自己对 Rails 框架的看法时说:“首先是得益于 Web 的快速发展,几乎所有的软件开发平台都在瞄准 Web 这个领域。也就是说,在 Web 上能够开发的应用变多了,这是一个主要的背景。另外,Ruby 的优势在于开发效率比较高。这两点结合起来,我认为就是 Ruby on Rails 成功的主要原因。”
“Ruby还有一些比其他语言强大的特性,例如元编程(metaprogramming)、通过猴子补丁(monkey patch)所带来的可扩展性等,David Heinemeier H 正是运用了 Ruby 的这些强大之处,开发出了 Rails。而对于没有接触过 Ruby 的人,比如只用过 Java 这种比较‘死板’的语言的人来说,会觉得‘唉?居然还可以做到这样吗?’,我觉得这也是 Rails 成功的原因之一。
“自从 Rails 推出后,很多模仿 Rails 的开发框架出现了,比如 Symfony、CakePHP 等(在PHP上实现的),但是 Ruby 所拥有的强大特性 PHP 并非完全具备,单纯对比这些开发框架的话,我还是觉得 Rails 更强大一些,David Heinemeier H 选择 Ruby 也正是看重了这一点。
“Ruby 不想阻碍程序员的创造力,David Heinemeier H 正是在此基础上开发了 Rails 框架,让开发者能快速将构想变成现实,被无数开发者们追捧。但是,当初创企业进入高速发展时期,Ruby 的优势就变成了劣势,企业需要限制多样性的编程风格,因为此时他们的需求是稳定性和规模化生产的能力。”
有人说 Ruby 最大的优点是灵活,但同时这也是它不稳定的地方。
像是印证了这个说法,2012 年美国总统大选结果揭晓的那个周二晚上,微博网站 Twitter 遭遇了有史以来最大的访问冲击,服务的负载量陡增,却没让用户感到丝毫的反应迟钝——一些 Twitter 的开发人员把这归功于公司把后端软件从 Ruby 迁移到 Java 的正确决策。
大家曾以 Ruby 的成熟应用 Twitter 为骄傲,可随着系统规模扩展,Twitter 决定放弃 Ruby on Rails。早在 2008 年他们就开始将后台消息系统从 Ruby移植到 Scala(被认为是一种 Java 平台),现在他们的前台也移植到 Java了。
前 Twitter 开发者 Alex Payne 说:“Ruby 擅长做很多事情,但对于长时间的处理过程,尤其是需要大量内存的操作,并不是很在行。”
作为创造者,松本行弘客观地总结了 Ruby 在这方面的劣势。他说:“可以说现在的 Twitter 发展到当初设计上的极限了,毕竟当时,没人想到会有现在的每秒上万这样大的访问量。
“Twitter 刚开始开发的时候,很多人觉得,这种只能写 140 个字的博客有什么意思呢?但 Twitter 出人意料地获得了巨大的成功。在它快速发展的过程中,Ruby 的贡献是相当大的。因为 Twitter 需要增加很多新功能,凭借 Ruby,一个新功能从构思出来到付诸实现,用很短的时间就能够完成。
“而现在它发展到了瓶颈期,为了应付现在越来越大的访问量,Twitter 需要开发一个全新的架构。不过,即便要重写架构,我觉得沿用 Ruby 也是可以做到的吧?(笑)
“在我看来,在网站服务还没有完全成型的时候,最重要的是对需求变化做出快速的反应,这时就需要 Ruby 这样灵活性比较高的语言;而在网站获得成功之后,遇到了设计瓶颈,他们的工程师也想要挑战一些新的东西,就提出要改用 Scala 来编写一个新架构。因为 Scala 是编译型语言,性能也不错,正好适合编写新的架构,以节约一定的资源,我认为这也是很好的一个结果。
“其实,Twitter 转向 Scala 还只是在其核心部分,而在 Web 前端和一些内部工具上还有很多地方在用 Ruby。上个月我还去拜访了一下 Twitter,跟他们的工程师进行了一些交流,Ruby 还是用得很多的哦(笑)。”
27年的坚持,Ruby未来可期
2018 年 2 月,大家为松本行弘举办纪念 Ruby 25 周年的活动,他的两个女儿也特意从东京赶来送上了鲜花和祝福。或许和开发者松本行弘的性格有关,Ruby 社区的氛围友好而团结,大家一起感恩这 25 年来的坚持与陪伴。
然而,在一片欢庆中,外界有网友质疑:“Ruby 还能坚持到下一个 25 年吗?”
由于 Ruby on Rails 框架的成功,Ruby 在 2012 年的 RedMonk 语言排行榜上飙升至第五位,该排行榜结合了 GitHub 和 Stack Overflow 上的排名来评估语言的流行度。尽管 Rails 很受欢迎,但是它面临着越来越激烈的竞争。几年后,随着发展,互联网公司逐渐更关注规模伸缩等问题。2018 年,Ruby 已经 25 岁了,它的排名下降到了第 8 位,甚至有毒舌的网友评论说 Ruby 已死。
松本行弘已经 50 多岁了。从大学毕业开始,他与 Ruby 一起走过了 25 年。他说,这些年发生了很多事情,但感受最深刻的就是这 25 年的坚持。很多软件的生命周期并不长,一门编程语言能够坚持走过 25 年,是一件很了不起的事。
到现在,他的初心一直没有变。Ruby 是开源的,不具有商业性质,只是让更多人使用 Ruby 并不是他的终极目标。他想让更多开发者觉得 Ruby 好用,去享受编程的过程,提高他们的生产效率,才是他的终极目标。
为了做到这一点,他和团队努力优化 Ruby 的性能,Ruby 社区的成员也一直致力于 Ruby 的推广,这样坚持做下去,他相信 Ruby 会为更多人所用。
他说:“Ruby 有很多特性,我觉得最为大家喜爱的是它的简洁、高效以及人性化。但同时也有开发者不喜欢 Ruby,因为一旦应用到工作中,由于 Ruby 太灵活,犯错的概率会随之增大。还有人说 Ruby 很多东西都是在运行时来决定的,比较麻烦。
“这是一个取舍的问题。从使用 Ruby 的角度来说,我个人认为最重要的是灵活性,当然容易写出 bug 的确很烦,不过我还是想要保留 Ruby 最重要的特性。而且,Ruby 会持续改进,进一步提高开发效率。”
25 岁后,成熟的 Ruby 将会面临更激烈的竞争,松本行弘为此也做好了准备,他想要维持 Ruby 通用语言的地位,优化性能,让 Ruby 广泛应用在不同的开发领域。不可避免地,它将会再一次和 Java 这个“同龄人”相遇。不过,相比于有太阳计算机系统、甲骨文、IBM 这些大公司支持的 Java,松本行弘需要在 Ruby 的开源属性的基础上考虑它的商业化发展。
他说:“从 2007 年开始,在工作中使用 Ruby 语言的人渐渐增多。在此之前,许多人仅仅将 Ruby 作为一种兴趣,用它编着玩儿。当他们真正在工作上使用 Ruby 的时候,商业开发者和使用开源软件的兴趣爱好者之间的矛盾愈来愈明显。“为了解决这个问题,我创设了 Ruby Association。这样可以给商业开发者提供一个付费的平台,使用起来有了商业保障。这个组织还很小,目前只在日本国内活动。当然创立当初是放眼全世界的。”
2011 年,松本行弘担任了 Heroku 的首席架构师。Heroku 从 2007 年开始开发,是最开始的云平台之一,当时它仅支持 Ruby,后来被 Salesforce 收购。他们希望能用 Heroku 的资源来推进 Ruby 的发展。
松本行弘说:“以前,Ruby 社区中有些人白天工作,晚上因兴趣而捣鼓 Ruby。而现在到了 Heroku 工作,则一天到晚都能捣鼓 Ruby 了,Heroku 提供了这样的平台。”
Ruby,永远不会停下更新的脚步
松本行弘在笔记本上面写下 Ruby 的时候,是打算把它作为脚本语言的,而在 Ruby on Rails 等框架诞生之后,Ruby 获得了 Web 应用开发语言的地位。
不过,在开发领域大家总会互相借鉴优秀的特性,当 Ruby 人性化、效率高的竞争优势逐渐被追上,它需要突破瓶颈,并且寻求如深度学习、云计算、大数据、IOT 等新领域的增长与爆发的机会。
松本行弘说,他想要维持 Ruby 通用语言的地位。他把目标拆解成了几个主要问题,然后一步一步去实现。
一是 Ruby 的性能。什么是性能?最简单的理解就是响应速度和稳定性,比如 Twitter 所面临的因美国大选而陡增的用户访问量。松本行弘不希望在流量增加之后,开发者就要被迫从 Ruby 迁移,他决心改善这个问题。
另外是可扩展性,就是当软件变得更大更复杂时,如果大家能快速并全面地发现 Bug 和错误,软件开发的速度就会更快。
松本行弘认真地站在用户的角度考虑,他想要在下一个版本中做出优化。他把这个计划起名叫作“Ruby 3x3”,就是希望下个版本能够跑出 3 倍的速度,这是他为自己设立的挑战。
如何完成这个挑战呢?他把问题划分成了几个部分,一是解决 CPU 的性能瓶颈,二是解决内存瓶颈,三是解决 I/O 瓶颈。拆分之后,就可以对症下药。
比如对于 CPU 为瓶颈的情况,VM的性能就是问题所在。他已经随 Ruby 2.6 版一起发布了 JIT(just-in-time) 即时编译器,能在运行时编译 Ruby 程序。在某个以 CPU 为瓶颈的基准测试中,他们观测到的结果是快了将近 3 倍。
松本行弘还和许多中国开发者沟通过,他们通过分析,认为瓶颈主要出在内存。因此,松本行弘也将内存消耗量放入了日常改善的要点列表里。还有对于 I/O 是瓶颈的情况。他认为利用多核 CPU 来减少等待时间是一种方法。因此,为了改善 Ruby 在多核 CPU 上的表现,他也将“如何改善并行执行”作为一个大课题。
松本行弘不愿为了解决眼前的困境草率地更改 Ruby 独一无二的特质,但他希望探索 Ruby 未来的更多可能性。
他说:“Ruby 3 并不打算改变语言本身。我们不想像其他语言一样,做些‘增加类型声明’之类的事情。我们希望 Ruby 保持原样。我们不是通过改变语言本身的方式,而是通过增加支持工具的方式解决这些课题。”
为了使 Ruby 能够应用在数据分析和机器学习领域,他和团队已经做了许多挑战性工作了,所以,他希望 Ruby 也能用在 AI 领域。还有 IoT 或者说设备的编程,他们正在尝试通过 mruby,使得 Ruby 能够用在这个领域。
在云计算等领域,松本行弘也取得了一些可喜的进展。
在 2018 年末,拉斯维加斯举办的 Amazon 技术大会“AWS re:Invent”上,官方宣布 AWS Lambda 开始正式支持 Ruby。松本行弘说微软也有类似的服务,好像叫 Azure Functions,他期待今后 Ruby 也能活跃在这种开发方式中。还有在云配置、DevOps 等领域,他也希望大家使用 Ruby。
他说:“软件开发行业有一个笑话,如果你找不到结对编程的伙伴,那就在旁边放一个泰迪熊,一边与泰迪熊说话,一边编程,这会提升你的编程效率。这种方法真的有用,不可思议(笑)。”
他的理想就是提供一个更聪明的像泰迪熊这样的工具。他希望今后,Ruby 会成为人们可以信赖的、使用它就可以进行编程的存在。
在眼下这场编程语言的角逐中,如何才能不被淘汰?松本行弘明白,相比于有大公司支持的 Java,Ruby 需要结合整个社区的力量,大家要共同努力。
有人可能会问:“Ruby 社区都有谁?”答案是使用 Ruby 的每一个人。
松本行弘已经收到了很多“使用这个 gem 的话,Ruby 会更好”这种建议,他说,为了推进这些建议,新的尝试绝对是必要的。并且,他鼓励大家做些比如“在这个领域我实际地使用 Ruby 了”这样的事情、出一些“如果要应用在这个领域,这部分功能是不够的,修改这部分会更好”这样的主意。他相信开源社区的力量会让 Ruby 更加强大。
他说:“一步一步,在不大幅改变 Ruby 语言的前提下,我们准备继续改善下去。我不希望对于某些人来说 Ruby 是不能用的,或者之前明明能用、现在却不能用了之类的事态发生。”
“因此,不要停下脚步,一直向前是非常重要的。一旦放弃,游戏就结束了,所以我绝不会放弃,我不会做‘放弃 Ruby 的改善’、‘放弃 Ruby 的升级’这种事情。”
推荐阅读:
松本行弘 编程语言的设计与实现
[日] 松本行弘 著,日经Linux 编,郑明智 译
本书由Ruby之父松本行弘在《日经Linux》杂志上的连载整合而成,主要介绍了新语言Streem的设计与实现过程。作者从设计Streem这门新语言的动机开始讲起,由浅入深,详细介绍了新语言开发中的各个环节,以及语言设计上的纠结与取舍,其中也不乏对其他编程语言的调查与思考,向读者展示了创建编程语言的乐趣。从主要语言的常见功能到少数语言的独特功能,穿插对现有语言特征的介绍,干货满满 。巧设“时光机专栏”,坦言不足之处及再思考,展现编程大师的“平凡”一面。