Node.js创造者,Ryan Dahl专访

原文出处 Episode 8: Interview with Ryan Dahl, Creator of Node.js

Ryan Dahl是谷歌大脑的软件工程师,並且是Node.js的创造者。目前,他正在致力于深度学习研究项目,他研究方向的是图像变换,包括彩色化和超分辨率。他参与了多个开源项目包括HTTP解析器和libuv。

Pramod: 告诉我们你在接触技术之前的经历吧?

Ryan: 我在圣地亚哥长大,我妈妈在我六岁的时候买了一台苹果2C,所以我很早就有机会接触电脑了,顺便说一下我36岁了,当互联网出来的时候,我已经长大了。我在圣地亚哥的社区学院读大学,然后去了加州大学圣地亚哥分校,我在那里学习了数学。然后,我去了罗切斯特大学的数学研究生院。在那里,我研究了代数拓扑学,它是一种非常抽象的学科,我发现它很漂亮,但几年后我厌倦了它,因为它不太适用于现实生活。这是一个博士项目,一旦我意识到我不想做一辈子的数学家,我就退出项目,买了一张去南美洲的单程票。我在那里呆了一年,处于饥饿的学生模式中,我和Eric找到了一份工作, 使用Ruby on Rails为一个滑雪板公司做网站, 这就是我的编程生涯的起点。

Pramod: 放弃博士学位,到南美洲旅行,做网站开发,这都是一种经历。

Ryan: 研究生院的经历,让我擅长处理非常抽象的问题,但网站开发工作是一个非常具体的过程,但我真的想把它变成一个美丽的数学理论,就像我在研究生院经历的那样。我想这让我开始思考,我真的很喜欢Ruby的发展,你可以使用Ruby更清楚地表达你的想法。我认为Rails推广了MVC的结构,它给出了这个新的结构,可能不是完全新的,这两件事结合在一起,对我来说真的很有趣。

Pramod: 构建Web应用程序非常有趣,Ruby是个完美的工具,接下来你继续在德国做一名自由网站开发者。你所从事的项目之一是Node,你在德国时接下来的六到八个月里会一直为之努力吗?

Ruby: 在南美洲之后,我和我的女朋友搬到了德国,因为她是德国人,不得不回大学。我开始去Ruby会议,在那里人们谈论这个MVC的新范例。有一个人叫Chris Neukirchen,他开发了一个叫做Rack的项目,它是Web服务器的简化抽象,它真的把Web服务器变成了一个单一的函数接口,在那里你得到一个请求,然后返回一个响应。结合我正在为Engineyard项目开发的Nginx模块的表现,我开始思考了。在Nginx上一切都是异步的,所以当你为它建立一个模块时,你必须非常小心以避免阻塞。结合Chris Neukirchen的Rack和Nginx Web服务器非阻塞IO结构,使我开始思考如何将这两件事情结合起来。

Pramod: 现在你有一点关于Nginx和Rack想法,你是如何说服自己进行“好吧,我将花我接下来的6个月构建框架,使服务器端可以运行JavaScript,这可能会大大提高性能”这个想法的。

Ryan: 这两件简化Web服务器的接口,就是Rack和Nginx的异步。然后Chrome在2008年12月发布了,还有就是V8 JavaScript解释器,我不应该说解释器,应该是实时编译运行。所以当V8引擎出来时,我开始用它,它看起来非常有趣、干净、快速,突然我想到:哦!JavaScript实际上是单线程的,每个人都在做非阻塞。但就像在Web浏览器中,人们在做Ajax请求时已经在做非阻塞请求。我认为JavaScript加异步IO加上一些HTTP服务器的东西实际上是一件非常酷的事情,我对这个想法非常兴奋,以至于我在接下来的四年里一直在不停地为之工作。

Pramod: JavaScript和异步I/O真的很好。我相信开发人员正等待看到一个框架。只是好奇,在这段时间里,有没有导师或者和任何人商量过?还是只是你自己?

Ryan: 基本上就是我。我有一些编程朋友,他们给了我建议,我的意思是,它的第一个位置真的只有我。但后来,我搬到洛杉矶加入Joyent工作,和很好的编程人员在一起工作,在这之后很多人的想法构成了如今的Node。

Pramod: 给我我们讲述一下Node开发的经过吧,自从你在2009点创建Node以来,已经过去很长时间了。

Ryan: 至少对我自己来说,在我的生活中,没有比为自己坚信的目标而努力更伟大的时刻了,我有时间坐下来好好地工作。我认为Node是一个等着产生的想法,如果我没有这个想法,别人也会有。但碰巧的是,我相对失业,有一些空闲时间,可以连续工作几个月,这就是我可以创造它的一些必要条件吧。

Pramod: 你做得很好。Node是建立在“纯粹的异步”编程模型的思想,这个想法是如何产生的?

Ryan: 我觉得这是一个非常有趣的问题。到目前为止,我已经有好几年了没有在Node上工作过,比如2012、2013年。Node是一个大项目,当它第一次出现的时候,我四处走了一圈,做了一系列的谈话,试图让人们相信也许我们正在做I/O错误,如果我们以一种非阻塞的方式完成所有事情,那么我们就可以解决很多编程上的困难。比如:也许我们可以完全忘记进程,只使用线程抽象和序列化通信。在单个线程中,我们可以完全异步地处理许多请求。当时我坚信这一想法,但在过去的几年里,我认为这可能不是编程的最终全部想法。当Go语言出现后,我认为Go已经出现好长时间了,我第一次听说Go是2012左右,他们有一个很好的运行方式,有独有的绿色进程并且非常容易使用的抽象,我开始认为是“阻塞I/O”,因为它都是在Go和操作系统之间的接口的绿色线程。我认为它实际上是非阻塞I/O,但是他们向用户提供的接口是阻塞的,我认为这是一个更好的编程模型,如果它阻塞的话,你可以在很多action下仔细想想你在做什么。你知道,如果你有一系列的actions,可以这样理解:做A时,等待一个响应,也许抛出异常,做B时,等待响应,抛出异常。但在Node中,这是比较困难的,因为你必须跳转到另一个函数调用中。

Pramod: 我喜欢Go的编程模型。用Goroutines是如此简单和有趣。事实上,我们正在使用它来构建分布式应用程序。

Ryan: 对于某一类应用程序来说,假如你正在构建一个服务器,Go将是首选项。如果在你不需要多线程时,我认为Node的非阻塞模式真的很好,很多回调函数的问题,通过async/await得到了解决。我认为Node不是构建大型web服务器的最佳选择,我肯定会用Go。老实说,这基本上就是我离开Node的原因。人们意识到:哦,事实上,这不是最好的服务器端系统。我觉得Node真的发光点是用在客户端。例如:一些小服务器或小开发服务器的实时流量服务,Node是正确选择。但是如果构建一个大规模分布式DNS服务器,我不会选择Node的。

Pramod: 你一点也不偏袒Node,2009年你在柏林JSCONF介绍Node时,你对突然获得的成功和吸引力感到惊讶吗?

Ryan: 我基本上连续四年感到惊讶。因为它发展得很快,人们非常喜欢它。

Pramod: 在你加入joyant全职开发Node时,那段经历怎么样?开发人员喜欢它,而你就是它的中心。

Ryan: 当然,这是我生命中一次重要的经历,我觉得在这一切的中心,例如会议和诸如此类的东西。有一次我去了日本,人们要求和我合影,我觉得有点奇怪。每当我在网上发表评论时,我就会得到很多评论。我想大约在那个时候,我发现我必须非常谨慎地选择自己的言辞并注意自己的表现,因为人们似乎在认真倾听,这是很奇怪的。我不喜欢这样,我的意思是,我是一个程序员,我想写代码,分享我的意见,而不是太仔细地考虑它是不是合适。

Pramod: 其实有许多服务器端JavaScript项目,Node不是唯一的一个,你认为Node的成功是什么原因?

Ryan: 有几个人想让服务器端运行javascript,我甚至不能再列举它们了,我完全忘了它们是什么。但是他们都做阻塞I/O,这真的不合拍JavaScript的特点。因为没有多进程,如果你正在做阻塞I/O,你实际上不能处理请求,你一次只做一件,那是永远不会成功的。而我喜欢让HTTP服务器工作得很好。所以,我有一个demo,一个HTTP服务器,然后是一个原始TCP服务器,我让这些东西工作得很好,让人们可以坐下来,建立一个网站,而不会经历太多的麻烦。坦白地说,构建一个Web服务器不是容易的事情,我想很多这样的系统留给社区去构建,但是没有人做。我认为有一点很重要,那就是当你发布一个软件框架,或者任何种类的软件时,你需要你有一个demo,可以让人们立即使用。这是Node所做的事情之一,人们下载后可以立刻使用的Web服务器。

Pramod: 如果人们可以很容易的下载、安装和使用它将会产生很大的差异。而且,人们了解JavaScript,他们可以很快就开始编码。

Ryan: 我们理所当然地认为在语言之间切换是多么容易,即使你知道另一种语言,某种程度上说,这也是相当困难的。有很多人非常熟悉JavaScript,而且这些工具能够在其他环境中使用,突然你能做得比你以前多得多,这大大激发了开发者们的兴趣。

Pramod: 在2012年,Node已经有一个巨大的开发者基础,你为什么离开,把缰绳交给Joyent的Isaac Schlueter呢?

Ryan: 我已经在Node上工作了四年,并且已经达到了我想要的地步。我从不希望Node是一个非常庞大的API。我希望它是一种小型的、紧凑的、核心的,然后人们可以在上面构建模块。还有一些关键的事情,我想支持关键的特性,有许多扩展模块是在早期添加的,所有的网络库HTTP、UDP、TCP,我们可以访问所有的文件系统。然后有一大块工作,这可能是五个人一年的工作,把它正确的移植到windows上。我们希望使用Windows抽象来进行异步IO,就需要重写核心库,这样做的结果是libuv库产生了。但在某些时候,所有这些都完成了,我们已经在Windows上发布了,这就是我想创造的,我很高兴我有机会继续贯彻下去。当然,在我余下的生活中,有无数的缺陷需要修复,有足够多的人参与,因此我不需要这样做,我想去做其他事情。再加上Go出现的事实,我并没有看到Node是服务器的最终解决方案。还有一点是不想成为关注的焦点,即使是我的博客。

Pramod: 在你和Node的精彩旅程之后,你决定做什么?

Ryan: 在Node之后,我离开Joyent并退出Node项目后,我搬到了纽约,并花了一些时间去完成自己的项目。所以,我有很多项目。在当时,Instagram已经出来了,这是新的,它似乎很简单,每个人都在说:哇,那很简单,我可以做出来。我不禁想到了同样的事情。所以,我有一个社交网络,一个C++构建系统项目,我还有一个HTML构建系统项目,以一个聪明的方式打包你的JavaScript和HTML。我有一堆的项目,在我的印象里没有一个成功的。虽然我认为它们其中一些目前仍在次要位置,像我的社交网络项目,我会在某个时候回来。我做了一会儿,然后我开始阅读卷积网络以及图像分类是如何解决的,这让我对机器学习非常感兴趣。

Pramod: 你也是谷歌大脑驻留计划的一部分。 这样的经历怎么样?

Ryan: 我刚刚在山景城度过了一年。回过头来,TensorFlow已经在两年前发布了。与此同时,他们宣布了谷歌大脑驻留计划,并邀请了20个人来到谷歌机器学习研究实验室。这些人并不一定是真正学习机器学习的人,而是在数学和程序设计方面有一些背景,并且对机器学习感兴趣的人,他们喜欢这些新想法。因为机器学习正在快速变化,而且还有大量的工作已经完成,但现在社区在神经网络中已经有所缩小,成为机器学习中最有用的算法,也许只是引入了一堆的人,只是尝试这个新的ML框架(TensorFlow),但是这将产生一些有趣的想法。我花了一年的时间,基本上编写了模型,并写了关于这些模型的论文。我主要从事图像转换问题,如果你有一些输入图像,你想预测一些输出图像。我发现这个问题真的很有趣,例如着色的问题,您可以将黑白照片作为输入,您可以尝试将照片的颜色预测为输出。关于这个问题的很酷的是有无限的训练数据,您可以拍摄任何彩色照片并使其饱和,然后这是你的输入图像了。机器学习的一个问题是你需要大量的数据,并且通过这些任务,这不是大问题。近来在生成模型方面已经有做了很多工作,也就是输出图像的模型。特别是生成性对抗网络和像素卷积网络,证明了它有能力学习自然图像的多样性,就像真正了解什么是真实图像,什么不是真实图像,什么看起来像一个真实的形象。我的想法是把这个最近的工作应用在生成模型中,并采取这个无限的训练数据,看看是否可以做一些图像转换问题。我做了一些超分辨率的工作,将一个低分辨率的图像,提高分辨率,这也是图像转换问题。现在我已经完成了两个关于彩色化的项目。

Pramod: 我已经读到了TensorFlow已经成为许多机器学习问题的一个很好的平台。图像分类,转换,我真的不太明白,但我相信它很有趣。你还在继续你的工作吗?

Ryan: 是的,所以我现在仍然在谷歌,作为一个软件工程师,处理同样的问题,研究生成模型,并试图帮助研究人员建立下一代系统,下一代模型。

Pramod: 它与JavaScript、Web或Web开发工作有很大的不同。

Ryan: 是的,我开始学的数学,所以我有相当不错的数学功底。我认为人们喜欢让别人进入某些领域,我真的不想那样做。我不想成为一个JavaScript开发者,我也不想成为一个机器学习开发者。人们探索某些东西是很有趣的,令人兴奋的是建立一些以前从未做过的新事物,它可能在某种程度上造福人类。

Pramod: 是的,很高兴知道机器学习需要良好的数学背景。在最近的一篇关于乐观虚无主义的博客中,你说我们终有一天会模仿大脑,建立一个像人类一样理解和思考的机器。我们实现这一目标有多远?

Ryan: 关于这种预言我必须小心一点,人工智能离人类智力还差得远。我的意思是,我们使用的机器学习系统非常简单,基本上根本不起作用。我有一篇博客,其中列举了开发这些模型所遇到的所有困难。我认为那些不在这个领域工作的人有这样的想法:你可以接受这个模型并通过它运算一些数据,它就可以工作了。但事实并非如此,这些东西都是非常挑剔的并且不是很好理解,即使是最温和的结果也需要很多很多个月的精心调整和实验。最近确实出现了一些有希望的技术,也就是说卷积网络似乎起作用了,而且传播似乎起作用了。事实上,这些东西是建立在一个模型的基础上的,这种神经网络模型不是真正的大脑,但是它是由大脑激发出来的,是非常诱人的。我们也有GPU,我们展示了如何在这些GPU上进行训练,并在一定程度上分配GPU上的训练。我认为这种建立更大,更智能的系统的基础正在发生。就个人而言,我是一个无神论者,一些化学物质和神经元构成了我的大脑,这些神经元相互作用。我认为我的意识,我们所有的意识都被编码,神经元之间的相互作用。我不明白为什么我们有一天能够在这个领域有足够的研究和工作,却不能够效仿这种行为,这真的是太远了,很难预测会有多长时间。

Pramod: 你想在未来20年看到什么科技?

Ryan: 我对机器学习及其带来的可能性感到非常兴奋。我甚至认为,在我们接触到真正的人工智能之前,这种技术就有很多应用层面,基本上任何系统从这项技术中都会受益。就拿现在不可计数的工业过程来说,例如:回收中心可用计算机视觉分类回收,而不是像现在这样。我们将越来越多地看到这些系统被应用到不同的过程中,我认为这将极大地影响科技,而且全人类都将大大受益。

END