BT

你的观点很重要! 快来参与InfoQ调研吧!

Node之父Ryan Dahl:我不想被定义

| 作者 薛命灯 关注 11 他的粉丝 发布于 2017年9月6日. 估计阅读时间: 7 分钟 | ArchSummit社交架构图谱:Facebook、Snapchat、Tumblr等背后的核心技术

被称为Node之父的Ryan Dahl在2012年离开了Node项目,后来加入Google的Brain团队,从事深度学习方面的研究,主要专注在图像的着色和超解像技术上。拥有深厚数学功底的Ryan经历了从Web开发到深度学习的跨越,还主导了多个开源项目,如HTTP解析器、libuv等,可以说是一个技术多面手。他不喜欢被人定义成某个领域的专家。MTJ(Mapping The Journey)网站对Ryan进行了一次深度访谈,他在访谈中提及了他的成长经历、Node的开发始末、个人的职业变迁以及对深度学习和人工智能的看法。

漫漫求学路

Ryan在圣地亚哥长大,在他六岁的时候,家里就购买了一台Apple IIc电脑,这对他后来走上技术之路产生了一定影响。在念完圣地亚哥社区大学之后,Ryan到加利福尼亚大学圣迭戈分校继续攻读数学硕士学位。硕士毕业之后又到罗彻斯特大学继续攻读数学博士学位,在这期间他学习了代数拓扑学。数学曾经让他着迷,他觉得数学是一门非常美妙的学科。不过有一天,他意识到数学并不能被完美地应用到现实生活当中,他也不想余生就做一个数学家,于是他就中途退出博士学位计划,跑到南美洲呆了一年。他在那里找到了一份Web开发工作,开始了他的职业生涯。

Node的诞生

在离开南美洲后,Ryan和他的女朋友去了德国。因为Ryan的女朋友是德国人,她要回到大学继续深造。在那里,有个叫Chris Neukirchen的人开发了一个叫作Rack的Web服务器,这个服务器拥有非常简单的接口——接收请求,返回响应。与此同时,在从事自由职业的过程中,Ryan接触到了Nginx的一些模块,他发现Nginx的很多东西都是异步的。于是他想,如果把Rack和Nginx的非阻塞IO结合起来,那会变成一个怎样的东西呢?

2008年12月,Google发布了V8引擎,这为Node的诞生奠定了坚实的基础。Ryan开始把玩V8引擎,它既有趣又简洁,而且运行速度很快,Ryan突然想到:JavaScript本身就是单线程的,而且浏览器发起的AJAX请求就是非阻塞的。如果将JavaScript和异步IO以及一个简单的HTTP服务器集合在一起,就会变成一个很酷的东西。就这样,在接下来的四年,Ryan开发出了如今被广泛使用的Node。

Node不是万能的

虽然Ryan已经离开Node项目很多年了,但当年开发和布道Node的经历似乎还历历在目。Ryan四处发表演讲,试图说服人们相信阻塞式IO是错误的方式,如果使用非阻塞的方式来处理所有的事情,那么就可以解决很多难点。比如,可以完全把线程忘掉,在单个进程里处理所有的异步请求。那个时候,Ryan相信这就是一切,直到Go语言的出现。其实Go语言早在2009年就发布了,Ryan在2012年才注意到它。Go语言的运行时适当地使用了绿色线程(即用户线程),在运行时和操作系统之间所有的IO操作都是非阻塞的,但是它提供给用户的接口却是阻塞式的。在Ryan看来,这是一种更好的编程模型。为什么这么说呢?假设你的应用程序要做两件事情,分别是A和B。你发起请求A,等待响应,出错。发起请求B,等待响应,出错。Go语言的阻塞模型可以非常容易地处理这些异常,而换到了Node里,要处理异常就要跳到另一个函数里去,事情就会变得复杂。

Node的非阻塞模型没有了多线程,但却多出了“回调地狱”问题。Ryan认为Node并不适合用来开发大规模的服务端应用,相比之下,Go语言会是更好的选择。而Node能够真正一展拳脚的地方是客户端。

低调

在加入Joyent成为全职的Node开发人员之后,Ryan也随之成为更加重量级的人物。参加各种大会,被粉丝要求合影拍照,随便写点东西都会有很多人响应。但Ryan并不喜欢这种状态,他说:

我是一个程序员,我想写代码,我想无拘无束地表达我的想法。我并不喜欢这种状态……

离开Node项目

在Node如日中天的时候,Ryan离开了项目。首先,他当时已经在这个项目上开发了四年时间,已经实现了他的预期目标。他原先的想法是把Node做成简单紧凑的小型化核心,让其他人基于这个核心开发出更多的模块。后来他们不断增加新模块,涵盖了网络协议到文件系统的访问,甚至还把Node移植到了Windows平台上。随着代码量的膨胀,开始出现大量的bug,不过在那个时候已经有很多人可以修复这些bug,无需Ryan操心了。在Ryan看来,如果继续留在这个项目里,无非就是修修bug。而且随着Go语言的发展,他发现Node并不适合用来构建服务器端应用,再加上他不喜欢头上的“光环”,所以决定离开这个项目。

新的起点

在离开Joyent和Node项目之后,Ryan去了纽约,开始开发属于自己的项目。他做了一些项目,但都不算太成功,后来他接触到了卷积神经网络和图像分类技术,对机器学习产生了兴趣。两年前,Google发布了TensorFlow,同时启动了Google Brain Residency计划(为期一年的深度学习研究,有机会与Brain团队的人一起工作),Ryan加入了这个计划,并最终成功成为Brain团队的一员。Ryan的研究方向是图像着色和超解像技术。

对人工智能的看法

Ryan认为,目前的机器学习系统还很简单,离真正的人工智能还差得很远。但是技术在发展,硬件也在发展,人类正在为人工智能的发展奠定坚实的基础。在未来的20年,机器学习技术将被广泛地应用在各个领域,人类一定能够从中获益。

不想被定义

Ryan从做Web开发开始,转而进入机器学习领域,这两个领域看起来相差了十万八千里,但因为Ryan拥有牢固的数学背景,所以这种转变对他而言似乎也是一件很自然的事情。不过他不想被定义成某个领域的专家,他说:

人们喜欢把人和他所在的领域联系起来,但我不喜欢那样。我既不想被认为是一个JavaScript专家,也不想被认为是一个机器学习专家。探索无限的可能性是一件有趣的事情。创造前所未有的、对人类有益的事物会让人激动不已。


感谢郭蕾对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

GO语言的软文吗 by bornku SUN

GO语言的软文吗

这篇文章的作者不要打着 Ryan 的名字胡说八道!!! by L TE

“Ryan认为Node并不适合用来开发大规模的服务端应用,相比之下,Go语言会是更好的选择。而Node能够真正一展拳脚的地方是客户端。”

以上话的出处在哪里? 作者必须给出解释! Node.js 7.0 支持 async/await 语法,和 GO 的写法并没有本质区别。Ryan 编写 Node.js 的目的就是用来开发大规模的服务端应用,而不是什么狗屁客户端。可以开发大规模的非阻塞异步服务端应用,包括 C 语言的 libuv,C++ 语言的 asio,JavaScript 的 Node.js,Java 的 Netty,Nim 的 asyncnet,Rust 的 mio,Go 的 Net。作者不要在这里打着 Ryan 的名字为 Go 语言吹牛逼! 简直无耻!

作者必须对其写的关于 Ryan 的话语给出原文,否则就是胡说八道! InfoQ 这个网站不要这么狗屎,发表文档可以胡编乱造,并且还编造其他开发者的话语,而且你编造的完全没有技术含量。

请你先弄清楚 Libuv 和非阻塞的概念,再评论 Node.js 和 Go!

这篇文章的作者不要打着 Ryan 的名字胡说八道!!! by L TE

“Ryan认为Node并不适合用来开发大规模的服务端应用,相比之下,Go语言会是更好的选择。而Node能够真正一展拳脚的地方是客户端。”

以上话的出处在哪里? 作者必须给出解释! Node.js 7.0 支持 async/await 语法,和 GO 的写法并没有本质区别。Ryan 编写 Node.js 的目的就是用来开发大规模的服务端应用,而不是什么狗屁客户端。可以开发大规模的非阻塞异步服务端应用,包括 C 语言的 libuv,C++ 语言的 asio,JavaScript 的 Node.js,Java 的 Netty,Nim 的 asyncnet,Rust 的 mio,Go 的 Net。作者不要在这里打着 Ryan 的名字为 Go 语言吹牛逼! 简直无耻!

作者必须对其写的关于 Ryan 的话语给出原文,否则就是胡说八道! InfoQ 这个网站不要这么狗屎,发表文档可以胡编乱造,并且还编造其他开发者的话语,而且你编造的完全没有技术含量。

请你先弄清楚 Libuv 和非阻塞的概念,再评论 Node.js 和 Go!

这篇文章的作者不要打着 Ryan 的名字胡说八道!!! by L TE

“Ryan认为Node并不适合用来开发大规模的服务端应用,相比之下,Go语言会是更好的选择。而Node能够真正一展拳脚的地方是客户端。”

以上话的出处在哪里? 作者必须给出解释! Node.js 7.0 支持 async/await 语法,和 GO 的写法并没有本质区别。Ryan 编写 Node.js 的目的就是用来开发大规模的服务端应用,而不是什么狗屁客户端。可以开发大规模的非阻塞异步服务端应用,包括 C 语言的 libuv,C++ 语言的 asio,JavaScript 的 Node.js,Java 的 Netty,Nim 的 asyncnet,Rust 的 mio,Go 的 Net。作者不要在这里打着 Ryan 的名字为 Go 语言吹牛逼! 简直无耻!

作者必须对其写的关于 Ryan 的话语给出原文,否则就是胡说八道! InfoQ 这个网站不要这么狗屎,发表文档可以胡编乱造,并且还编造其他开发者的话语,而且你编造的完全没有技术含量。

请你先弄清楚 Libuv 和非阻塞的概念,再评论 Node.js 和 Go!

这篇文章的作者不要打着 Ryan 的名字胡说八道!!! by L TE

“Ryan认为Node并不适合用来开发大规模的服务端应用,相比之下,Go语言会是更好的选择。而Node能够真正一展拳脚的地方是客户端。”

以上话的出处在哪里? 作者必须给出解释! Node.js 7.0 支持 async/await 语法,和 GO 的写法并没有本质区别。Ryan 编写 Node.js 的目的就是用来开发大规模的服务端应用,而不是什么狗屁客户端。可以开发大规模的非阻塞异步服务端应用,包括 C 语言的 libuv,C++ 语言的 asio,JavaScript 的 Node.js,Java 的 Netty,Nim 的 asyncnet,Rust 的 mio,Go 的 Net。作者不要在这里打着 Ryan 的名字为 Go 语言吹牛逼! 简直无耻!

作者必须对其写的关于 Ryan 的话语给出原文,否则就是胡说八道! InfoQ 这个网站不要这么狗屎,发表文档可以胡编乱造,并且还编造其他开发者的话语,而且你编造的完全没有技术含量。

请你先弄清楚 Libuv 和非阻塞的概念,再评论 Node.js 和 Go!

Re: 这篇文章的作者不要打着 Ryan 的名字胡说八道!!! by 命灯 薛

请点击“深度访谈”链接查看原文,这些是Ryan访谈的内容总结,并非作者臆造。

Re: GO语言的软文吗 by 命灯 薛

请点击“深度访谈”链接查看原文,这些是Ryan访谈的内容总结,并非作者臆造。

Re: 这篇文章的作者不要打着 Ryan 的名字胡说八道!!! by gu binh

Ryan: Yeah, I think it’s… for a certain class of application, which is like, if you’re building a server, I can’t imagine using anything other than Go. That said, I think Node’s non-blocking paradigm worked out really well for Java Script, where you don’t have threads. And I think that a lot of the problems with kind of the call-back soup problem, where you have to jump into many anonymous functions in order to complete what you’re doing has been alleviated these days, with the async keyword, the async feature that’s in Javascript now. So, kind of the newer versions of Javascript have made this easier. That said, I think Node is not the best system to build a massive server web. I would definitely use Go for that. And honestly, that’s basically the reason why I left Node. It was the realization that: oh, actually, this is not the best server side system ever.

Re: 这篇文章的作者不要打着 Ryan 的名字胡说八道!!! by ma hui

你回了他也看不懂(眼斜

Re: 这篇文章的作者不要打着 Ryan 的名字胡说八道!!! by xia xue

确为Ryan所说,请点击深度访谈详细了解。若有个人观点,请理性讨论。

Re: 这篇文章的作者不要打着 Ryan 的名字胡说八道!!! by ching jason

SB

看来 InfoQ 的评论是没有审查的. by Lian Z

评论很自由. 只是这种一条消息发多次的, 存在这种无效冗余就让我想屏蔽掉.

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

12 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT