Node.JS 创始人 Ryan Dahl 专访(一)
Node.JS 创始人 Ryan Dahl 专访(一)

原文链接:Episode 8: Interview with Ryan Dahl, Creator of Node.js - Mapping The Journey

Ryan现在是谷歌大脑的一名软件工程师,他是Node.js的作者,一个基于Chrome V8引擎的JavaScript的运行时环境。现在,他的工作方向是深度学习,主要专注于图像之间的转换,比如彩色化,提升像素,他在不同的项目都有所贡献,像 HTTP 解析器,libuv等。

主持人:大家好,欢迎大家踏上今天的采访之旅,当我们听到Node.js的时候,第一时间想到的就是Ryan Dahl。他向我们展示了一种全新的异步编程模型,以前我们所做的I/O可能都是完全是错的。今天我们请到的就是Ryan,一名黑客,卓越的编程者,Node的作者。我非常激动和荣幸Ryan能来参加今天的采访,欢迎你,Ryan。

Ryan:大家好,非常高兴能接受这个采访。

主持人:我们都知你是Node的作者,你稍微说一说你在从事科技行业之前你的生活么?

Ryan:当然,我是在圣地亚哥长大的,母亲在我6岁的时候买了一台Apple 2C电脑,这是我最早接触到的电脑。我现在36岁,换句话说,我的年龄和互联网的年龄一样大。我先是在圣地亚哥的社区大学读书,然后去了加利福尼亚大学圣地亚哥分校读数学,后来,在罗切斯特大学的研究生学院读数学。

我在那里研究代数拓扑学,一门非常抽象的学科,刚开始的几年感觉这门学科非常优美,后来就渐渐的觉得无聊,因为实在是没有什么实际应用的场景。在研究生毕业之后,就顺其自然地读了Ph.D。在某一天,我突然意识到,我真的不想在我余生成为一名数学家,然后就退学了。然后,买了一张去美国南部的单程机票并在那呆了一年,在那里我依然保持着学生的刻苦学习,和Eric一起做一些网页开发,这也就是编程职业生涯的开端。那时候是为一家滑雪板公司做网页,基于ROR的网页开发。

主持人:从Ph.D退学,去美国南部做网页开发一定是一次无比正确的经历吧。

Ryan:是啊,我的意思是,从研究生学院出来,曾经解决都是非常抽象的问题,然而网页开发则是一种混合的过程,我还尝试把我在研究生学院学到的优雅的数学知识融入进去,这也是我非常喜欢用Ruby开发的原因吧,你可以用Ruby更好的表达的意图,这是非常有意思的,Rails框架在这方面就体现得很好,它发明了一种「模型,视图,控制器」架构,也许不是第一个,但是一定是Rails让这种架构流行起来的,数学的优雅和编程的应用,这两者的结合,真的非常吸引我。

主持人:编写网页程序的确十分有趣,Ruby也是一个非常完美的工具。接下来,你在德国以自由工作者的方式接着工作,其中一个项目就是Node,为此你为Node连续工作了六到八个月?

Ryan:是的,在从美国南部离开之后,便和女朋友搬到了德国,因为她是一个德国人,而且必须返回大学。就在从那开始,我开始参加那里的Ruby大会,在那里大家开始讨论这种MVC模型,其中有一个叫Chris Neukirchen的小伙伴,他开发了一个叫做Rack的项目,一个精简抽象的网页服务器程序,它将网页服务器集合到一个单函数接口中,接收到请求,你便可以返回一个响应。

于此同时,我正在为一家公司做一些Nngix扩展的开发工作,在Nginx的世界中,所有的一切都是异步的,所以说,当你开发Nginx扩展的时候就必须特别小心拥塞的问题,这个时候,我开始思考如何把Chris的Rack项目和Nginx的非拥塞模型合并在一起呢?

主持人:那时你就有些关于Rack和Nginx的想法了,那么你是如何说服你自己花费六个月的时间,实现一个能够运行在服务端端javascript框架,以此来提升性能的想法呢?

Ryan:这其中有两个部分,一个部分是简单的服务器接口,Rack,另一个是完全异步的部分就是Nginx,我开始思考这两者,就在这个时候,Chrome在2008年的12月发布,同时发布的还有V8引擎,我开始在这个V8引擎中摸索,它看起来如此让人着迷,简洁,高效,此时我突然明白,javascript就是单线程,但所有处理都是非阻塞的。

这让我觉得有点匪夷所思,但是网页浏览器的确所有请求都是非阻塞的啊,无论是AJAX请求还是其他,然后我就在想如果javascript加上异步IO加上一些HTTP服务器的内容,一定会是一件非常酷的事情,对于这个想法我非常兴奋,并坚持不懈的为此工作了四年。

主持人:的确是这样,Javascript加上异步IO起到了非常好的效果,我想开发者们都在寻找一种如此实现的框架。在那段困惑的事情,有没有人给你一些建议呢?还是就仅仅是你一个人?

Ryan:就仅仅是我一个,编程界的一些朋友也给了我一点建议,但最初的工作就仅仅是我在家里编写出来的,后来,搬到旧金山,见了一些编程界大牛,这些人给了很多的想法也为后来的Node作出了很大的贡献。

主持人:从你2009年以来开始开发Node,在这段时间,你的心路历程是怎样的呢?

Ryan:我认为至少对我来说,在我人生中,没有比那时更加棒了。Node就是那个等着我去做并且不得不做事情。也许其他人也有此类的想法,但是我能够实现的的原因,主要得益于我的自由工作,这使我有大量的自由时间,可以连续不停地好几个月为之编写代码,这也是一个项目的初始版本所必要的条件,无论怎么说,这段经历非常棒,也非常有意思。

主持人:这真是非常美妙的经历,你做的非常棒。Node是基于「完全异步」的模型的,你为这个想法做了哪些工作呢?

Ryan:这也是个非常有趣的问题,我现在已经好几年没有为Node编写任何代码了,当Node刚诞生的时候,我到处去演讲,希望可以说服更多的人,让他们相信以前我们所做的I/O操作可能都是错的,我们可以用异步的方式来操作所有的事情,这也能解决编程方面上很多的难题。比如,即使是在单进程的情况下,通过异步也能处理非常大流量的请求,在那段时光里,我是强烈相信这个理念的,但是在后来的几年里,我 也意识到异步不是编程最终解决方案,而是仅仅是个开始,尤其是,当Go语言诞生以后。

Go语言诞生已经有很长一段时间了,我是大约2012年才第一次接触到Go,Go语言拥有非常漂亮的运行时环境,还有特别健康的线程管理,非常便于使用。

Go语言给编程人员所提供的接口看似是堵塞的,其实不然,这真的是非常好的一种编程模型。在很多情况下,同步的编程方式是更要简单的,不必关心各种回调的嵌套问题,在Node中,想要实现就困单得多,你不得不在回调函数中去使用。

主持人:我也非常喜欢Go的编程模型,使用goroutine真的非常简单和充满乐趣,现实中,我们就是用Go来搭建分布式应用。

Ryan:Go语言对应用级开发真的是合适,如果你要是构建服务层的应用,真的没有比Go更加合适的了。也就是说,我认为Node的非堵塞编程模型在javascript上表现得不错,因为不需要考虑线程的问题,但是回调地狱真的让人头疼,你不得不不停的在回调函数中做处理,但随着async关键词的出现,在javascript也能进行同步的操作了。

我认为Node绝对不是构建大型网页服务的最好选择,我会用Go而不是Node,讲真的,这也是我离开Node的原因。

主持人:选择正确的工具对开发者来说真的是非常重要,你现在对Node真的没有一点偏袒。当你在2009年柏林的JsConf上,向开发者介绍了Node.js,当时你对这些突如其来的成功感到惊喜么?

Ryan:是的,我四年都在这种连续不断的惊喜中,Node成长得非常快,越来越多的人喜欢Node。

主持人:后来,你加入了Joyant公司,并在那里全职为Node工作,然后搬到了旧金山对吧?这段经历是怎么样的?

Ryan:在这段人生经历中,我感到大家以我为中心,无论是在各种开发者大会中,还是其他地方。有一次,我去了日本,大家都来找我合影,我就感觉怪怪的。在线上也是同样的情况,无论什么时候发表什么评论,大概都会有100多个人的回复。

所以,我不得不谨慎地选择自己的措辞,因为很多人在关注你,这实在是太奇怪了!我非常不喜欢这种感觉,作为一个程序员,我只想写点代码,不必顾虑太多就能分享自己的观点,所以这种感觉让我不是特别喜欢。


If You Have Any Question, You Can Contact Me Through liam@blue7wings.com, @Blue7Wings, #Liam_Hsia