前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Node.js创造者,Ryan Dahl专访

Node.js创造者,Ryan Dahl专访

作者头像
疯狂的技术宅
发布2019-03-28 10:18:34
1.3K0
发布2019-03-28 10:18:34
举报
文章被收录于专栏:京程一灯京程一灯

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


往期精选文章

ES6中一些超级好用的内置方法

浅谈web自适应

使用Three.js制作酷炫无比的无穷隧道特效

一个治愈JavaScript疲劳的学习计划

全栈工程师技能大全

WEB前端性能优化常见方法

一小时内搭建一个全栈Web应用框架

干货:CSS 专业技巧

四步实现React页面过渡动画效果

让你分分钟理解 JavaScript 闭包



小手一抖,资料全有。长按二维码关注京程一灯,阅读更多技术文章和业界动态。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 京程一灯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档