首页 > 编程语言 >NodeJS之父Ryan Dahl:我不想被认为是一个JavaScript专家

NodeJS之父Ryan Dahl:我不想被认为是一个JavaScript专家

时间:2023-10-19 23:14:30浏览次数:44  
标签:Node Dahl NodeJS JavaScript 阻塞 Ryan 开发 Go

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

标签:Node,Dahl,NodeJS,JavaScript,阻塞,Ryan,开发,Go
From: https://www.cnblogs.com/sexintercourse/p/17775936.html

相关文章

  • JavaScript内置对象和DOM
    数组数组遍历/* 数组遍历的方法 1.for循环遍历数组下标输出 2.forEach遍历forEach(function(item,index,arr)) 3.filter(function(item,index,arr))返回一个新数组,回调函数返回true的结果会保存在新数组中 4.map(function(item,index,arr)) 返回一个新数组,回调函数retur......
  • Javascript抓取京东、淘宝商品数据
    随着互联网的发展,越来越多的商品信息被发布在各大电商平台上,如京东、淘宝等。这些平台上的商品信息对于消费者来说是非常重要的,可以帮助他们了解商品的价格、详情和评价等信息。而对于商家来说,了解竞争对手的商品信息也是至关重要的。因此,抓取京东、淘宝商品数据成为了一种常见的需......
  • linux centos7 部署 nodejs 的 express
      链接:https://www.youtube.com/watch?v=oGbLL1_0q64 yuminstallgcc-c++openssl-develmake-ycd/tmpcurl-sLhttps://rpm.nodesource.com/setup|bash-yuminstall-ynodejsnpminstall-gexpress-generatoruseraddusernamepasswdusernamemkdirfirst_project......
  • javascript如何写不用转义的字符串代码
    js中的String.raw函数 语法 String.raw`templateStr`;  String.raw(obj,...substitutions); 支持能力有限,如可以支持String.raw`c:\aaa\bbb`       //result:   c:\aaa\bbb 但是String.raw`c:\aaa\bbb\`       //result:  ......
  • javascript之分片上传,断点续传的实际项目实现详解
    首先,我们需要了解什么是分片上传和断点续传。分片上传是将大文件分成多个小块进行上传,每个小块可以独立上传,从而提高上传速度和稳定性。而断点续传是指在上传大文件时,当上传过程中因断网或其他原因中断,再次上传时可以不用重头开始,而是从中断的地方继续上传。接下来是分片上传和......
  • 在JavaScript中,`!!`(不是not)操作符的作用是什么?
    内容来自DOChttps://q.houxu6.top/?s=在JavaScript中,!!(不是not)操作符的作用是什么?我看到了一些代码,似乎使用了我不知道的操作符,形式为两个感叹号,就像这样:!!。有人能告诉我这个操作符是做什么的吗?我看到这个操作符的上下文是:this.vertical=vertical!==undefined?!!ver......
  • JavaScript高级程序设计(第3版)pdf电子版Nicholas C. Zakas
    JavaScript高级程序设计(第3版)pdf电子版作者:[美]NicholasC.Zakas原作名:ProfessionalJavaScriptforWeb出版年:2012-3-29ISBN:9787115275790链接提取码:jz6rJavaScript最基础的书籍。......
  • JavaScript中'??'和'?.'
     ??空值合并运算符判断一直变量是否为'null'/'undefined',进行不同的返回值处理console.log(1??2)//1console.log(null??2)//2console.log(undefined??2)//2console.log(1??2??3)//1console.log(null??2??3)//2console.log(null??null??3)//3......
  • JavaScript的数字运算不准的问题
    JavaScript的运算问题存在两方面:第一个表示不准问题:打开浏览器按F12,在Console里,输入0.1+0.2=0.30000000000000004输入91.25*0.7=63.87499999999999 解决这个问题,要用第三方库math.js或decimal.js constmath=require('mathjs');console.log(math.add(0.1,0.2));......
  • iframe实现与父页面跨域隔离的JavaScript 代码沙箱
    这篇文章主要介绍了使用iframe实现与父页面跨域隔离的JavaScript代码沙箱,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪目录正文1.iframe2.dataURL3.将JavaScript代码变成dataURL4.如果需要获取执行结果的话,基于postMessage定制通信机制正文假......