Node.js的创建者Ryan Dahl访谈

瑞安·达尔(Ryan dahl) Ryan Dahl于2009年引入Node.js,几年后退休,上周创建了一个新项目: deno-V8 上的 安全TypeScript运行时GitHub 压缩 )。

是时候回想一下Ryan在2017年8月进行的Mapping The Journey播客的采访了,关于他自己,他的职业,关于Node.js的原因以及他为什么停止这样做的原因,以及他现在(当时)的工作。

Habré上已经翻译了这次采访的一部分片段: Node.js的创建者:“对于服务器,除了Go语言,我无法想象其他语言 这篇文章包含完整的翻译。

Ryan Dahl是Google Brain项目的工程师,也是Node.js(基于Chrome V8引擎的JavaScript运行时)的创建者。 Ryan目前从事深度学习研究。 他主要从事图像转换-着色和超分辨率。 他参与了多个开源项目的开发,包括HTTP Parser和libuv。

普拉莫德:大家好。 欢迎来到地图之旅。 说到Node.js,每个人都知道Ryan Dahl的名字。 他证明了我们对输入/输出的处理不正确,并教会了我们如何使用“纯异步”模型进行开发。 今天的来宾是黑客Ryan Dahl,他是Node的优秀程序员和创造者。 瑞安,很高兴认识您,这是我的荣幸。 欢迎光临

瑞安:嗨! 我也很高兴见到你。

P。:Ryan,您最著名的是Node的创建者。 告诉我,您对技术感兴趣之前做了什么?

R:小时候,我住在圣地亚哥。 我6岁那年,妈妈给我买了Apple 2C,因此我很早就可以使用计算机。 顺便说一句,我现在36岁。所以我是在互联网形成期间长大的。 最初,我在当地的一所大学学习,之后他进入了圣地亚哥的加利福尼亚大学学习数学。 然后我进入罗切斯特大学数学研究生院。 是的,在那里我学习了代数拓扑-对我来说似乎是非常美丽的一门相当抽象的学科。 但是一段时间后,我感到无聊,因为我认为她没有现实生活中的应用。 毕业后,我决定获得博士学位,但意识到我不想将余生用于数学,并退出该计划。 我买了一张去南美的单程票,在那里住了一年,作为一个“饥饿的学生”。 然后他开始与一个人Eric建立网站。 我的职业生涯由此开始。 我在Ruby on Rails上为一家滑雪公司制作了一个网站。

P .:太好了! 这可能是一种有趣的经历-退出博士学位课程,前往南美并成为Web开发人员。

R .:我会的。 仅仅是因为您习惯了研究生学习后的抽象任务,网站开发是一个非常具体的过程。 但是,我试图将所有这些转变成一种美丽的数学理论,就像我在裁判法院学习的理论一样。 我想我真的很喜欢Ruby可以让您在开发过程中更清晰地表达思想。 这使我感兴趣,并引发了一些想法。 我认为这只是关于Rails。 当时,Model-View-Controller方案并不是什么新鲜事物,但在我看来,正是由于Rails才使它流行起来。 我喜欢的就是这种组合。

P:是的,Web开发是一项有趣的活动,而Ruby是一个很好的工具。 之后,您是德国的自由开发人员。 您的项目之一是Node。 您还继续研究了6-8个月,对吗?

R:就这样。 南美之后,我将女孩搬到德国-她是德国人,她需要重返大学。 我开始参加Ruby会议,在那里人们讨论了这个新的Model-View-Controller范例。 在那里我遇到了一个叫克里斯​​·纽基兴的人。 他创建了Rack,该项目实质上是Web服务器的简化抽象。 Rack将Web服务器变成具有单一功能的界面,您可以在其中发出请求并接收响应。 然后,我在Engineyard的自由项目中使用Nginx模块。 让我提醒您,在Nginx中,所有内容都是异步运行的,因此在为其构建模块时,需要避免锁定。 当我在Nginx Web服务器上使用非阻塞I / O时,我遇到了Chris Neukirchen的Rack项目。 我认为这就是为什么我有想法将这两件事结合在一起的原因。

P。:事实证明,在Rack和Nginx的基础上,您想到了开发一个框架,该框架可以从服务器端执行Javascript代码并显着提高性能。 您如何决定在接下来的6个月中这样做?

R:这两个元素-Rack和Nginx具有异步性-一起简化了Web服务器界面。 Chrome于2008年12月发布。 随之而来的是JavaScript V8引擎。 更准确地说,不是引擎本身,而是JIT编译发生的运行时。 通常,随着V8的发布,我开始了解它。 V8看起来很有趣,整洁并且运行很快。 突然,它突然降临在我身上。 JavaScript是单线程的,每个人都已经在上面编写了非阻塞算法。 我的意思是,每个人都已经在浏览器中发出了AJAX请求,无论如何这些请求都是非阻塞的。 我认为:很棒,JavaScript,加上异步I / O和HTTP服务器的一些功能是我所需要的。 这个想法让我深受启发,在接下来的四年中我一直不懈地努力。

P .:是的,JavaScript和异步I / O可以正常工作。 我认为开发人员只是在等待这样的框架。 我出于好奇而问:当您开发Node时,您是否有某种导师,还是您自己进行管理?

R:总的来说,我自己做了一切。 我的一些朋友是程序员,他们提供了一些建议,但我开始独自在房间里工作。 然后我搬到了旧金山,在Joyent遇到了很多非常专业的程序员。 已经有许多人为Node提供了意见和建议。

P .:清楚。 请告诉我们有关Node开发过程的信息。 当然,自2009年以来已经过去了很多时间...

R:对我来说,人生中最美好的时刻是当我沉浸在头脑中的某个时刻,当我相信某个主意时。 当我有时间努力工作时。 Node是一个需要实施的想法,如果不是对我来说,其他人会接受的。 碰巧的是,我几乎没有工作,也没有足够的空闲时间。 我可以投入Node几个月的时间-就在这个时候您可以发布初始版本。 这很棒又有趣。

P。:上课,你做得很好。 节点基于纯异步编程模型。 您认为这个想法行得通吗?

R:一个有趣的问题。 已经有好几年了,我自己从2012年到2013年都没有在Node上工作过。 当然,在此期间,Node取得了巨大的发展。 当他第一次离开时,我做了很多演讲,并试图解释说也许我们做错了一切,而无阻塞的I / O将有助于解决许多开发问题。 或者,我们可以完全忘记线程,而通过流程抽象和序列化来解决。 但是同时,在一个进程的框架内,将处理许多请求,因此我们将实现异步。 那时,我真诚地相信这个想法,但是在过去的几年中,我意识到这绝不是唯一的机会。 特别是Go发布之后。 在我看来,Go出现得更早了,但我在2012年首次听说了它。 然后,他已经有了一个良好的运行时和高质量的绿色线程,并且有了这些,就很容易使用抽象。 这就像阻塞I / O,但是据我了解,Go和操作系统之间通过绿色线程的接口实际上是非阻塞的。

但是,所有这些都以阻塞接口的形式提供给用户,在我看来,该模型具有优势。 通常,更容易理解阻塞算法中正在发生的事情。 如果有一系列动作,则可以执行以下操作:执行A,等待答案或捕获错误。 然后执行B并得到答案或错误。 在Node中,一切都变得更加复杂,因为您必须跳入另一个函数调用。

P。:我也非常喜欢Go中的编程模型。 使用Goroutines是一种乐趣。 现在,我的团队只是在Go上编写分布式应用程序。

R:是的,对于某些类型的应用程序,Go最适合-例如,在构建服务器时。 我什至无法想象如何处理其他事情。 不过,尽管如此,我认为无阻塞范例对于没有线程的Javascript非常有效。 此外,在Javascript中,现在有了async关键字,您可以使用异步函数,因此您不必再在匿名函数之间匆忙地去了解回调的内容。 较新版本的Javascript使工作更加轻松。 但是,我认为Node并不是大型Web服务器的最佳选择。 为此,我本人肯定会选择Go。 老实说,这就是为什么我停止在Node上工作的原因。 我刚刚意识到这不是开发服务器的理想系统。

奇怪的是,在我看来,Node确实在客户端方面表现出色。 它使您可以在创建网站时巧妙地使用脚本。 例如,Browserify确实打包了客户端Javascript。 这允许客户端在服务器上处理JavaScript。 另一个例子是小型开发服务器,甚至是处理实时流量的生产服务器。 对于某些事情,Node可能非常有用和方便。 但是,如果您要建立一个庞大的分布式DNS服务器,我不建议您选择Node。

警:世界各地的开发人员都会发现考虑它很有用。 对于任何企业来说,选择正确的工具都很重要,因此您对Node持相当客观的态度。 您是在2009年柏林JsConf会议上首次介绍Node.js的。 也许您为他这么快取得成功感到惊讶?

R:当然可以。 总的来说,四年来,我一直都在纳闷。 Node的发展速度惊人,社区非常喜欢它。

警:在那之后,您加入了旧金山的Joyant,并一直在Node上工作,对吗? 告诉我们您在那里的经历。 开发人员感到非常高兴,而您处于活动的中心。

R:是的,这是我一生的亮点之一。 我真的是在活动的中心,参加了各种会议。 甚至我访问日本后,人们都要求我和我合影...我什至感到不舒服。 当我在网上评论某事时,感觉就像一百个人立即回答了我。 然后我意识到我必须仔细选择我的话并考虑他们对我的看法-似乎他们真的在听我说,这很不寻常。 我不喜欢这一切 毕竟,我是一名程序员,只想编写代码,有时会表达我的意见而没有过多的谨慎。 对此,我有些不安。

警:您创建Node时是29岁或30岁? 而且他已经成为如此有影响力的技术。

R:是的。 但是后来我仍然更有可能是新手开发人员。

P。:Ryan,那时在服务器端有许多使用JavaScript的项目。 Node不是唯一的解决方案,但它是最成功的-您为什么这么认为?

R:是的,确实有几个人尝试将JavaScript应用于服务器工作。 现在我什至不记得他们的名字。

事实是,在所有这些项目中都使用了阻塞输入/输出的方式,这与JavaScript的安排方式并不太好,因为它不适用于线程。 而且,如果您使用阻塞I / O,则将无法处理请求。 就是说,您必须一次处理它们,但没有任何结果。 另外,我添加了一个高质量的HTTP模块,并演示了如何配置HTTP服务器以及简单的TCP服务器。 我试图确保这些事情正常运行,并且人们可以毫无问题地建立站点。 我必须承认,提升Web服务器并非易事,许多项目需要社区必须自行完成的功能。 但是没有人构建任何东西,因为没有东西可以与该系统一起使用。 我认为,对于任何新框架或整个产品,您都需要一个可以立即使用的基本示例。 这是Node的优势-人们可以直接下载并设置Web服务器。

答:的确,良好的设计以及安装和使用的便利性非常重要。 已经有更多的人能够使用JavaScript编写代码,因此他们可以立即开始工作。 当我第一次开始使用Node时,我的JavaScript知识也有所帮助。

R:在我看来,我们习惯于在各种语言之间切换非常容易。 但是,即使您已经知道某种语言,也很难为新语言建立上下文。 许多开发人员已经知道Javascript,因此他们有兴趣在新上下文中使用新工具使用熟悉的语言。 事实证明,相同的语言开辟了更多的机会。

帕:那是肯定的。 在2012年,大量开发人员在Node上工作。 您为什么决定离开该项目,然后将其从Joyent交给Isaac Schluter?

R:我认为有两个原因。 然后我在Node上工作了4年,总的来说,我做了我计划的一切。 我没想到Node会变成一个庞大的API。 我的想法是创建一个紧凑的小型内核,人们可以在其上构建其模块。 我想支持几个关键功能。 从一开始就添加了扩展模块,然后我们整理了网络库,HTTP,UDP,TCP,并提供了对所有文件系统的访问。 然后,由五个人组成的小组负责完成将其全部安装到Windows的重要任务。 我们想使用Windows抽象-完成端口-进行异步I / O。 因此,我们必须重写根库,并由此获得libuv库。 某一时刻,一切准备就绪,我们发布了Windows版Node。 然后我想:太好了。 我已经实现了我的目标,并且很高兴我能想到一切。 当然,直到生命的尽头,仍然可以修复一千个错误,但是团队中有足够的人可以解决这个问题。 我想做其他事情。 另外,Go出现了,对我而言,Node不再是服务器开发的唯一解决方案。 嗯,我不想每次都在博客上写东西时成为关注的焦点。

P .:清楚。 是的,不是每个人都喜欢。 当您开始使用Node时,您可能有一些计划。 您认为Node现在已经完成了吗?

R:当然,Node超出了我的所有期望。 毕竟,现在有数十万人使用它。

P。:告诉我,当您完成Node开发的这一有趣阶段时,您决定做什么?

R:离开Joyent后,我搬到纽约,做了一个短暂的假期从事自己的项目。 我有几个。 Instagram当时问世,当时它并不复杂。 每个人都说:“哇,这太简单了,我会自己建造的。” 而且,我当然也这么认为。 我有一个社交网络项目,我还构建了一个用于C ++的构建系统和另一个用于HTML的构建系统,该系统类似于Browserify-它巧妙地打包了Javascript和HTML。 总的来说,我有很多项目,但是在我看来,没有一个项目真正成功。 其中一些仍在开发中,例如我的社交网络。 有一天我会再来的。 那是我一段时间。 然后,我开始阅读和学习卷积神经网络以及如何解决图像分类问题,并且我对机器学习非常感兴趣。

警:您也是Google Brain计划的居民。 您的印象如何?

R:是的,我最近在山景城呆了一年。 我会回来的:TensorFlow是两年前问世的。

同时,在机器学习实验室,Google Brain宣布了一项针对居民的新计划,根据该计划,大约有20人被邀请到那里。 我认为这个想法是邀请那些不一定熟悉机器学习但在数学和编程方面有所思考的人。 那些对使用这些新想法感兴趣的人。 机器学习在不断变化,并且正在完成许多工作,但是现在,社区终于将重点放在神经网络上。 相信这是用于机器学习的最有效的算法。 因此,提出了这样一个想法-聚集对使用新TensorFlow框架感兴趣的人们,以便可能得出一些有趣的结论。 我在实验室呆了一年。 基本上,我开发了模型并撰写了有关它们的科学论文。 在大多数情况下,我从事图像转换任务。 也就是说,如果存在某种源图像,则需要预测将要输出的图像。 我认为这是一个非常有趣的任务。 真正的例子之一是着色。 您可以拍摄黑白图像,然后尝试预测将产生什么颜色。 最有趣的是,对于此任务,要训练的数据是无限的。 毕竟,您可以完全消除任何彩色照片的饱和度,并获得原始的黑白图像。 机器学习的主要问题之一是需要大量数据,而用于此类任务的数据很多。 最近,关于生成模型的大量研究。 例如,有生成竞争性网络和像素卷积网络已学会感知真实图像,即在真实图像和看起来像真实图像的人工副本之间进行区分。我想将这些生成模型研究的结果和一个无穷无尽的数据库用于训练,并将所有这些应用于图像转换任务。我研究了超分辨率-此过程可让您提高原始图像的分辨率。我还完成了在图像之间进行转换的任务,并完成了两个着色项目。

警:谢谢你的解释,瑞安!我还读到TensorFlow是执行机器学习任务的强大平台。图像分类,转换-当然,我特别擅长于图像处理,但是我敢肯定,这一切都非常令人兴奋。您是否继续在机器学习领域工作?

R:是的,我仍然在Google工作,但已经以工程师的身份从事类似的工作。我研究生成模型,并帮助研究人员构建新一代系统和模型。

P .:太好了!尽管生成模型几乎与您过去的活动无关-Javascript,Node和Web开发...

R:可以肯定。但是我还是从数学开始的,而且我有很好的数学基础。好吧,我不是为特定地区而战的人之一。无论是JavaScript还是机器学习,我都不想成为专家。我只想探索有趣的机会。最重要的是,它激发了我发明并开发出有益于人类的新事物。

.: . , . Optimistic Nihilism , , . , ?

R:是的,我需要对预测更加谨慎……所以我只是分享我的个人观点:我们离建模人类智能还遥不可及。我们使用的机器学习系统要么非常原始,要么根本无法运行。我刚刚写了一篇关于我在Google Brain的住所的博客文章,并列出了开发此类模型时出现的问题。在我看来,那些远离此领域的人经常认为您可以采用一个模型,将数据传递给它,然后一切都会自行解决。但这不是那么简单。有很多陷阱和研究不足的问题。为了获得最适度的结果,有时需要数月的试验和花丝定制。所以我们离模仿人脑还很远,但是有前景的技术已经出现,例如卷积神经网络或误差的反向传播方法。而且,令人鼓舞的是,这些技术基于神经网络模型,该模型与人脑不太相似,但在某种程度上受到有关其知识的启发。我们也有用于训练它们的GPU和方法,并且我们已经知道如何至少部分地使用它们进行分布式训练。因此,我认为,现在正在为更大,更智能的系统奠定基础。就我个人而言,我是无神论者,而且我不相信我的大脑只不过是化学物质和神经元。我的意识和任何人的意识都以某种方式编码在这些神经元的相互作用中。因此,原则上没有障碍为了模拟这些过程,仅需要在该领域进行更多的研究和开发。预测需要多长时间为时尚早。

帕:我知道了。瑞安,您看过很多东西-告诉我,您认为技术在20年后将如何发展?

R:我非常感兴趣地关注机器学习及其带来的机会。甚至在我们创建真正的人工智能之前,这些技术就可以在许多不同的应用程序中找到。原则上,它们在需要做出合理假设的任何系统中都非常有用。例如,您可以使用计算机视觉在回收中心分类物料。在无数领域中,基本的机器学习技术将派上用场。我认为它们将越来越多地应用于各种过程,这将对技术领域以及整个人类产生巨大影响。

帕:我同意,机器学习是一个令人兴奋的话题。观看没有驾驶员的汽车如何沿着山景城行驶,真是太有趣了。将来的某一天,最好躺在椅子上并完全控制机器。Ryan,感谢您提供出色的Node框架并访问了我们。祝您在未来的项目中一切顺利!

R:谢谢你的邀请,谈话很有趣!

P .:谢谢!仅此而已。我很高兴和一个谦虚而伟大的人瑞安聊天。在作为开发人员的职业生涯初期,他已经取得了很多成就,并且取得了令人印象深刻的方式。两周后与我见面,看看下一个故事!

Source: https://habr.com/ru/post/zh-CN413187/


All Articles