九年前,在同样的演讲台上,Ryan介绍了尚未成型的JavaScript运行时平台(runtime platform)。在此之前,JavaScript只能用于网站和App的设计,或者说“前端”(front end),新平台允许开发者构建一个网站或网络应用的功能,也就是“后端”(back end),从而将网络开发统一为一种编程语言。这样的平台就是
Node打造了一个能让web研发人员用JavaScript编写完整堆栈的运行时环境,并巩固了JavaScript作为“web语言”代名词的地位。从2009年首次推出Node,到2018年重返会议演讲台,这几年中,不仅Node.js平台获得了发展,Ryan也成为了黑客新闻和TechCrunch圈子中无人不晓的名字,但这次他却打算抛弃之前的创造,重新开始。
2009年,人们如果想要在服务器端应用JavaScript,就要解决JavaScript事件驱动的输入与输出(I/O)问题,恰恰因为JavaScript是单线程的,让Ryan和Node有了成功的空间。但Node的安全性基本为零、构建系统过时,还有NPM(Node包管理器)过度复杂的代码封装等问题,又让Ryan感觉到深深的遗憾:“就有点像有人在用指甲刮黑板一样让我难受,其实它可以发展得远比现在好。”
对于Ryan来说,“远比现在好”是指,Node应该更简单易用而且设计优雅。所以,Ryan向大家介绍了他的新作Deno,一个可以在(Chrome)V8上运行的安全运行时环境。Ryan解释说,这个新平台同样是JavaScript的运行时环境,但更快、更安全,也更优雅,它将会取代Node,变成全球上首选的编码语言运行时环境——不过这一切的前提是新平台能顺利开发完成。
“到目前为止,我觉得进展还算让人满意,”Ryan说。这是软件工程师才能做到的事情:Ryan想要开启下一版本的自己,将他演讲的内容在现实中通过代码迭代实现出来——指出各种bug,保留喜欢的元素,然后描述他将如何重建其余部分。
我很幸运在对的时间遇到了对的事情。看到这一个机会的时候,我想,此时不做,更待何时呢?
Ryan的母亲是圣地亚哥社区大学的一名数学教授,一直是个技术爱好者。“很早的时候,我们家就有了一台电脑。母亲给了我一本介绍BASIC的编程书,所以我有幸比同龄人更早地接触到了电脑。”Ryan说。
在母亲的苹果IIc电脑上,Ryan先是掌握了BASIC的基础知识,然后又尝试了Linux系统,通过兼职电影院放映员,他攒了300美元后从别人那里买了一台二手的PC。90年代的编程世界还相当空白,但却让Ryan感觉兴奋,像是做一个没有参照物的拼图。“那其实是一段非常难得的实践式学习体验。面对一无所知的世界,没有人告诉你怎么做。你只能自己在键盘上一点点摸索,直到真的做出点什么来。”他说。
Ryan更喜欢通过实践来学习,高中生活让他感觉无聊透顶、毫无意义,Ryan说:“我当时就是个坏学生。”高中的最后一年,出现了一款新的点对点文件共享应用Napster,用户都能够通过它来上传和下载音频文件。不过,Napster只能在Windows操作系统上运行,Ryan也想让它能运行在自己最喜欢的操作系统Linux上。于是他自己开发了一款名为gnap的程序,让Linux的桌面环境Gnome也能兼容运行Napster。作为Napster的第一个克隆版本,gnap为Ryan赢得了生平第一次爆火,还登上了当时的黑客新闻技术博客Slashdot。Ryan觉得,他或许能在这一领域有所作为。
高中毕业后,由于成绩不够上大学,Ryan只能到母亲工作的社区大学去读书。因为是个人选择的课程,同时是更偏技术型的学习环境,Ryan如鱼得水般快速成长。在连续两年获得全优的成绩后,他转到了加州大学圣地亚哥分校深造,之后又进入了纽约州北部的罗切斯特大学攻读数学博士学位。
如此这样过了三年,Ryan再次感到了熟悉的无聊感,他被要求做的一切都好像毫无意义,甚至没有特别的用处。“我那时觉得数学离现实太遥远了,全是抽象的东西。这种感觉到达某个极限之后,你就会生出一种想做些真正与现实有关的事情的感觉。”于是Ryan退了学,坐上了飞往智利的单程航班。
本来是想去一个阳光灿烂的地方,但到了目的地Ryan才发现,六月的南半球,正是冬天。由于手头没多少积蓄,Ryan只能暂时住在旅馆的合租房里过渡,直到他找到了一份教英语的工作,生活才有所好转。
但和多年的抽象学术研究相比,摆在Ryan眼前的世界显然有些过于真实了。“房间里没有暖气,到处都在发霉,地板上只有一个床垫,上面铺着脏床单,”他回忆说,“我开始怀疑自己的决定对不对。”
Ryan明白,教英语不是长久之计,便开始在Craigslist网站上找工作。一则广告引起了他的注意:一家冬季运动装备公司想要找人帮忙开发自己的电商网站。它并不是Ryan最理想的工作,但“我当时很需要钱,所以就还挺想去试试的”。
开发电商网站让Ryan感受到了一些“解决实际问题”的快乐,他开始接一些此类的工作。Ryan在2007年就过上了如今被称为“数字游民”的生活——远程在线工作,在全球各处游走,最终他到达了德国。
借着为每个项目解决实际问题的机会,Ryan能慢慢的接触到新的编码栈层。“起初,我主要为滑雪网站做前端开发;然后又一点点接触到网络框架,再到网络服务器,最后开始考虑解决非阻塞式输入输出(non-blocking I/O)的问题。”每次都像高中时使用苹果IIc电脑一样,Ryan通过个人想办法、在网上找资源,摸索出一套套解决方案来。
直到某天早上,Ryan收到了一封将改变他一生的电子邮件。总部在旧金山的云应用管理平台Engine Yard通过推荐人向Ryan发来了一份价值6万美元的合作邀约,邀请他加入技术上的支持团队。Ryan 意识到,开发软件和编程不光是维持“流浪式生活”的资产金额来源,还能切切实实变成一份真正的工作,带来踏实的生活。
但Engine Yard的工程需求并不简单,能够说是Ryan遇到过的最复杂的需求。他们想要打造一个使用非阻塞或异步操作的插件,让软件可以不必等待代码中的非JavaScript操作完成就能继续执行JavaScript操作,这难住了Ryan。
几个月后,2008年9月,谷歌发布了采用JavaScript V8引擎的Chrome浏览器。还在思考如何来解决非阻塞操作问题的Ryan突然受到了启发——如果他能将Chrome的新JavaScript引擎与非阻塞操作结合起来,打造出一个平台,让JavaScript能够同时处理后端开发和前端开发,就能在后端取代Ruby on Rails(使用Ruby语言写的开源Web应用框架),一跃成为全栈式语言。“看到新的Chrome浏览器时,”Ryan说,“我就突然想通了这一点。而且就算我不做这样的一个东西,要不了多久别人也会做的。”
Ryan所说“这样的一个东西”就是Node.js,靠着Engine Yard提供的6万美元基金,他在一家没有WiFi的星巴克里,每天坐在电脑前工作8个小时,如此持续了半年,一点点打磨出了Node.js。“现实地讲,我很幸运在对的时间遇到了对的事情。看到这一个机会的时候,我想,此时不做,更待何时呢?”
2009年,Ryan听说一个新的JavaScript会议将在欧洲举行,他主动联系了JSConf EU的组织者,请求在大会上发言。当年11月,Ryan出现在了柏林,站在150名观众面前首次介绍了Node,并最终赢得了全场的起立鼓掌。演讲逐渐在JavaScript圈子里传开了,短短几个月内,Node就从几十个用户增长到了几万个。大家争先恐后涌入Node,不仅是因为它开发了使用JavaScript的新方式,还因为它比其它全部的产品都快,也更简单易操作,而且开发者的网站和web应用也相应变得更快了。
几周后,当几家位于旧金山的勇于探索商业模式的公司同时向Ryan伸出橄榄枝时,他接受了一家名为Joyent的云计算托管公司的邀请:他们的专长似乎与他最为一致,更重要的是,他们盼望他在内部开发Node。
Ryan入职后,Joyent获得了对Node商业利益的控制权。“我把网站、署名权都转给了他们,源代码的所有版权也从Ryan Dahl变成了Joyent。与此同时,他们也获得了申请商标的权利,”Ryan说,至于他从其中得到了什么:“可能是更早变现的机会,而不用再去冒各种风险。”
Tim Becker是Ryan在JavaScript圈子里的朋友之一,2011年,在一次JavaScript聚会上,Tim随手给不在场的Ryan发了一条信息,建议他也办一次Node的主题聚会,应该会很有意思。“我当时不过随口一说,但Ryan认为这个提议不错,就发了推文。”聚会结束的时候,Tim收到了不下10封邮件,很多人都表示愿意赞助这次聚会,“大家都非常想参与到这次活动中来,Node无疑获得了极大的影响力。”他说。
但Ryan很快就意识到转让授权获得稳定性其实也有代价。尽管Node的影响力慢慢的变大,Joyent却还是希望控制管理薪酬,他们不允许聘请更多的工程师来解决Node因爆发式增长暴露出来的问题,而是把Node当作他们现有云计算项目的一个附带营销工具。因此,很多时候为了跟上平台的加快速度进行发展,Ryan也一定要保持果断——一些极可能会影响了平台发展走向的关键决策也是在这种情况下做出的。
据Node一个早期协作者Bert Belder回忆,那个时期,Ryan突然变得“有些专断起来,有时会直接从代码库里删掉他觉得不好的东西”,比如当时一个让Node的异步操作更顺畅的小软件Promises,Ryan觉得它的设计不够优雅,“第二天,大量相关的代码就被删掉了,”Bert回忆,“就因为原框架发生了变化,任何一个人都不得不通过你自己的需求重写代码。”
然后是他的公众形象问题。Ryan一直很享受自己的匿名状态,他可以无拘无束写博客、发推特,但随着Node知名度的上升,慢慢的变多人开始知道他。Ryan起初没有很在乎迅速积累的关注度,在一次写了一篇题为《我讨厌几乎所有的软件》的博客文章后,数百条评论中几乎骂声一片,Ryan也因此沮丧了一阵子。
但比任何反对言论更让Ryan烦恼的是,用户开始批评起Node来。有人留言说“Node.js有毒吧”,Ryan觉得,自己肯定是在啥地方犯了错。他说:“这件事情对我的冲击很大。我只是想开发技术工具而已,从没想过它发展如此之快,更没做好充当一款工具的脸面的准备,我不想成为它的代言人。”于是Ryan不再公开发言,并在2013年末,注销了自己的推特账号。
2014年初,Ryan与相伴多年的女友分手,创业的疲劳感也突然袭来。管理如此高关注度的复杂项目,对任何人来说都是非常有压力的事,Node如他所望获得了一定的影响力,大部分使用Node开发的项目,有什么样的问题都已经能在开源社区内部消化,Ryan感觉自己已不再需要去尽心维护它了,他想去创造新的东西。在发布完通知之后,Ryan订了去纽约的机票,离开了Node。
在小打小闹又创了三年业后,Ryan最终去了Google Brain(谷歌大脑),参与对谷歌的机器学习引擎TensorFlow的研发。截至目前,TensorFlow的主要开发语言是Python,但其中一个名为deeplearn.js的新项目允许用JavaScript构建模型,这是Ryan最拿手的语言。
Ryan给Bert打去电话:“我们一起把TensorFlow和Node结合起来,做个更好的JavaScript机器学习框架吧。”这对Bert来说当然是个非常着迷的机会,他回忆说,“我是那种十分喜爱尝试各种可能性的人,它可能真的会是未来的大方向。”没过几周,Bert就辞去了IBM内部Node.js专家的工作,进入了谷歌。
起初,重新捡起Node让Ryan有种回家的亲切感。但很快,在外见过五年世面后,积累的新技能、新见解以及对全球编程领域所有进展的认知,让他意识到,他之前的作品实在有太多问题。“真的没什么比回看自己之前写的代码更让人挫败的了。”Node如今看来如此业余又错漏百出,以至于Ryan没办法忍受自己的名字和它关联在一起。
Ryan曾短暂地考虑过改造Node,从内部解决这样一些问题,但他发现这样一些问题都太底层了,作为一款开源产品,引导大家齐心协力朝自己想要的方向开发实在太难,Node的缺陷几乎无解。因此,Ryan决定反其道而行之,不如去开发一个全新的产品,一方面让自己的名字有更好的东西可以关联,另一方面也能解决那些Node无能为力的事情。
几个月后的2018年6月,刚刚辞去谷歌工作的Ryan就在柏林的JSConf EU上登台,为大家带来了自己的新作——Deno。“deno”的发音很容易让人联想到“dino(恐龙)”,所以Deno的企业logo就是一只可爱的小雷龙。
如今以小雷龙作为品牌形象的平台,和2018年勉强能用的演示版相比,已有云泥之别。它比Node更快,使用的是更新、更安全的Rust编程语言。“我们只是更着眼于长远的未来去开发这一平台,目前看来一切进展顺利,”Ryan说。首先,Deno原生支持TypeScript,同时简化了JavaScript代码的捆绑,开箱即用;考虑到Node的安全性几乎为零,所以Deno是运行在网络浏览器的安全沙盒中的。
Deno最大的创新是开始拥抱边缘计算,这在Ryan看来也是网络开发的下一个重大转变。他说:“无需考虑服务器的边缘计算,让你可以在世界上任何一个地区运行,而不用考虑服务器的事情,”他说,“这也是未来五年Deno想要实现的。”Deno的边缘计算版,也是所谓的独立云系统(isolate cloud),会在世界各地的数据中心分别响应最近的JavaScript需求,从而缩短程序和数据中心的连接时间,让程序从离请求发出地最近的数据中心获得响应。
除此之外,Ryan还改变了项目的运作方式,他不想再像Node那样受制于人。所以这一次,除了开源,他还选择了融资——2022年1月,他找到了红杉合伙人Mike Vernal和Lauren Reeder。Mike之前曾和他通过电话,觉得Ryan是个亲切可爱的人,Mike说:“你可以感觉到他更喜欢低头做事,但有些不喜欢但必须做的事他也会去做。他对这一点倒是完全不避讳,反而让我觉得真诚可爱。”
Deno的总部设在纽约,有15名全职员工,同时还在招聘新的工程师,红杉主导了他们2022年6月的A轮融资。目前每周有近10万开发者使用该平台,它一直是GitHub(代码托管服务平台)上排名前50的项目之一,慢慢的变多的企业如Netlify和Slack,都开始使用企业版的Deno Deploy来构建他们的web应用和网站。
Tim觉得,Deno能有今天,很大程度上要归功于Ryan:“很多人都是因为他而来的,因为有他在,而选择无条件相信Deno。”
Ryan希望能在2023年夏天之前发布Deno的通用版本,以吸引更加多的个人用户——包括Node目前所服务的用户。而随着竞争对手的出现,Ryan的紧迫感也在增加,但他将这些人视为自己赛道选对了的证据,同时也将竞争的压力转化为动力。Ryan说:“有一些竞争的刺激反而能激起我的斗志,而且把平台做得更出色本来就是我喜欢做的事。”
在Ryan的设想中,Deno是一个全新打造的产品。“我们在2018年推出Deno的时候,Node已经是行业标准——当时在场的每个人都在用,并且是很专业地用了很多年,”Ryan说,“可能很多东西,包括Node的bug和缺陷,都已经被人习以为常了,觉得‘事情就应该这样’。我希望Deno能给人眼前一亮的感觉,让各位明白,原来事情还能做到更好。”
就像他发现了开发Linux版Napster的机会,或者意识到Chrome的V8引擎可以一改人们使用JavaScript的方式一样,现在的Ryan已经做好了再次创造的准备。他之所以如此在意创造新的开发网络的平台和方式,是因为他认定了网络是“人类信息的媒介”。
Ryan说,如果他能使网络开发变得更容易,“特别是在服务器方面,也就是我有想法与影响力的领域,那么我们就能推动一切都变得更快,更快意味着更顺畅的在线体验、更好的实时通信,以及更多的人能同时在线互动。这将是能带来真正改变的巨大机会。”而在实现这一切之前,他打算不断打磨自己的新平台。