NodeJS之父Ryan Dahl:我不想被认为是一个JavaScript专家
被称为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专家,也不想被认为是一个机器学习专家。探索无限的可能性是一件有趣的事情。创造前所未有的、对人类有益的事物会让人激动不已。