“我只有一​​种教学方法:行之有效”-接受Ryan Dahl的采访(Node.js,Deno)



5月27日是Ryan Dahl发布第一个Node.js版本十周年 在过去的十年中,该项目取得了巨大的成功,但是Ryan本人已转而从事其他工作。 他现在在做什么? 他的新项目如何为JavaScript开发人员提供帮助? 他如何看待不同的语言,教育和世代相传?

5月25日,也就是会议日期的前两天,瑞安(Ryan)将在圣彼得堡举行的HolyJS会议上发言。 同时,HolyJS程序委员会成员Eugene bunopus KotDmitry dmitrymakhnev Makhnev向他详细询问了上述所有内容。 在Medium上,我们发布采访的英文版本 ,为Habr制作了俄语版本。

尤金(Eugene) :感谢Node.js,许多读者已经知道您了,但是您能告诉我们一些关于您自己的信息吗?

瑞安 :我来自加利福尼亚的圣地亚哥。 我在大学学习数学,而在罗切斯特大学研究生院学习的专业是代数拓扑。 但是三年后,我想:“我在浪费生命吗? 这些太奇怪了,太抽象了。”

因此,我离开了研究生院,去旅行,一段时间后,我参与了编程工作。 我认为许多人都走过类似的道路。 在2000年代中期,我开始从事Web开发。 一开始,我总体上喜欢Ruby on Rails和Ruby。 至于Node,很幸运能够在正确的时间到达正确的位置。 碰巧的是,当Node成为可能时,我正在考虑相应的问题。

尤金 :运气好吗? 还是您对这个项目有一定的愿景,从一开始就以为它会非常成功?

赖安(Ryan) :如果一个人不希望自己会成功,他会从事这个项目吗? 当然,大多数时候这些希望没有实现。 我们放弃并开始做其他事情-除了我的所有项目,其他事情都发生了。 有了Node,我绝对是幸运的。 然后Chrome(和V8)问世了,我想了很多关于非阻塞输入/输出以及它们如何用Web框架表示的方法,以及所有这些非常适合的JavaScript。

尤金 :现在你在做迪诺 。 您能谈谈当前的工作和未来的计划吗?

瑞安(Ryan) :我的长期合伙人贝特·贝尔德(Bert Belder)和我正在尝试创建一家初创公司。 在过去的一年半中,我们与他合作完成了多个项目,其中一个就是Deno。 Bert在Node的开发中发挥了重要作用,他完成了将Node移植到Windows的大部分工作。 此外,他还是Libuv的作者之一。



尤金 :您认为Deno希望在不久的将来取得重大成功吗? 举例来说,您会在五年内继续努力吗?

Ryan :我不知道Deno是否会在5年后存在-很有可能不会,因为大多数项目最终都没有结果。 但就目前而言,Deno抓住了我,并给了我工作上的满足感。

我认为目前我对动态语言的状态不满意。 我想念一种快速,方便且相当通用的工具。 Node和Python都很好,但是我发现它们在某些方面过分复杂或设计不当。 因此,最后,我尝试为自己的工作流程创建工具。

尤金(Eugene) :在准备问题时,我们在Mapping the Journey网站上阅读了一次采访 。 您在那儿说过您正在从事机器学习。 之后不久,他们参加 JSConf EU会议并介绍了Deno。 那么您的兴趣转移了吗?

Ryan :近年来,我一直沉迷于机器学习算法。 我不会详细介绍我正在从事的项目,但这是一个JavaScript机器学习框架。 因此,多年来我第一次尝试使用Node,这澄清了我在Node中遇到的一些问题。 这导致了在JSConf上的演示,其中展示了Deno原型。 然后该项目表现出极大的兴趣,因此Bert加入了。 我们继续努力。 然后,我将返回到那些ML项目。

我特别想将Deno连接到WebGL。 如您所知,Deno在V8上运行,而V8又是Chrome软件基础架构的广阔天地之一。 Chrome有一个实现WebGL的Angle库。 连接到此将允许Deno对GPU进行编程。 GPU是训练许多现代神经网络模型所必需的。 我真的希望Deno为我提供所需的数学编程过程。 我相信整个统计和数学任务中的很大一部分归结为一种数据游戏,这对于使用动态语言非常方便。

一般而言,世界上没有那么多动态语言,尤其是在流行和快速方面。 因此,JavaScript非常适合定义模型。 在许多情况下,计算将被传输到GPU,因此动态语言的速度或您的运行时将不再那么重要。 总的来说,我计划早晚返回所有这些内容,但是到目前为止,我的重点是Deno。

Dmitry :Deno现在可以投入生产了吗? 您是否知道实际使用Deno的有趣案例?

赖安 :在我看来,不同的人有不同的痛苦阈值。 如果您准备好面对错误,缺少文档和更改API的情况,那么对于某些任务,甚至在今天都可以使用Deno。 但总的来说,他还没有准备好生产。 现在是0.3版,我将我认为适合其他人使用的版本指定为1.0。 这是一个相当大的项目,我们正在创建一个新平台。 为此,需要完成许多工作,我们正在努力正确地做到这一点。 但是,如果您是黑客,请不要害怕弄脏您的手,并在出现问题时提出问题或提出请求-可以使用此方法。

Eugene :公司需要在Deno中添加什么才能开始在生产中使用它?

Ryan :对于Deno,我们专注于与Node.js不同的情况。 我们正在尝试提供对计算机的较低级别的访问权限。 特别是,我们希望Deno能够作为Rust crate导入,并且可以嵌入到其他系统中。

假设您拥有自己的Web服务器或无服务器系统,并且希望为客户端提供执行JavaScript的能力。 也许您不想降低到V8级别,原始的V8将为您提供很少的帮助。 需要一些基础结构,但是台式计算机上的某人可能拥有的完整运行时已经太多了。 我们希望涵盖这种“嵌入”场景。 在这种情况下,我们仍在研究API的外观。 我们也有我们要关注的性能问题。 我们需要提供更好的文档。 通常,有工作要做。

Dmitry :Deno的任务之一是对TypeScript的内置支持。 最近,TypeScript已经广泛传播,许多公司不仅开始在浏览器中使用它,还开始在Node.js中使用它。 听说Node.js核心团队的人也称赞他。 您认为TypeScript是否可以取代浏览器中的JavaScript并获得自己的运行时(可能使用虚拟机)?

Ryan :TypeScript的好处之一是它是JavaScript的超集,因此不会替代它。 我真正可以想象的是TypeScript将成为标准,而可选类型将出现在JavaScript中,但这很快就会发生。

动态语言对于开发的初始阶段非常有用,例如,当您对某些东西进行原型设计时。 TypeScript(以及通常的可选类型的思想)的优点是,随着原型逐渐成熟,您可以通过用类型注释代码来逐渐“扭曲”实现。 这不必同时发生,因此您仍然可以快速移动并概述JavaScript中的新想法。

至于是否可以在V8虚拟机中使用类型来优化运行时,我不知道。 听起来很困难,我没有足够的能力说是否会取得重大进展。 在Deno,我们使用以JavaScript实现的TypeScript编译器。 您可以想象一个编译器的Rust实现可以更快地转换为JavaScript。 这是可能的, swc项目正在处理中。

Eugene :TypeScript可以代替JavaScript吗? 假设在ES 2020中,TypeScript将使用JavaScript合并为一种语言。

Ryan :是的,类型很可能会添加到标准中。 TC 39似乎在规范JavaScript标准吗? 据我所知,到目前为止尚未讨论这种可能性。 但我认为,尽管有可能,但仍需要很长时间。

尤金 :你认识达特吗? 你曾经用过吗? 您如何看待他?

赖安(Ryan) :我是出于好奇而尝试的,但这是很久以前的事了。 Dart的目标类似于TypeScript-它是一种具有可选类型的动态语言。 正如我所说,这使您可以非常方便地组织工作流程。 但是,与TypeScript不同,Dart不是JavaScript的超集,而是另一种语言。 也许正因为如此,它的传播更加缓慢。

没错,Flutter现在已经流行起来,所以也许我在这里生活落后了。 无论哪种方式,TypeScript都可以在不创建新语言的情况下实现相同的目标。

当出现一种新的语言时,他很容易引起人们的好奇心,但是要使人们使用它会更加困难。 收益必须非常重要。 例如,我对Rust很怀疑。 在我看来,他可以做的所有事情都已经在C ++中了,我正在积极使用。 直到最近,我才对Rust有了更深入的了解,而且很明显,对我而言,它可以轻松地替代C ++。 通常,要使一种新语言成功,它必须比旧语言好一个数量级。

尤金(Eugene) :有了语言-就像开车一样,您有时还是会坐公共汽车。

瑞安 :是的。

Eugene :尽管TypeScript流行,但JavaScript现在普遍存在:在后端,前端,移动设备上,React Native,Raspberry Pi等中。 显然,我们有一场革命,一种语言可以完成所有工作。 真的是这样吗 还是总会有特殊语言来完成特殊任务?

Ryan :JavaScript就是那么有趣,因为它可以在任何地方使用。 但值得注意的是,尽管许多人认为TypeScript是一种独立的语言,但它使用JavaScript进行编译。 因此,从我的角度来看,TypeScript也可以在任何地方使用。 总的来说,我同意你的说法。 当然,在可预见的将来,JavaScript将仍然是浏览器和多种设备的语言。 因此,我继续使用它-它提供了广泛的可能性。

德米特里(Dmitry) :但是您不认为JavaScript的这种流行会变得更糟吗? Web现在已成为任何服务必不可少的平台,并且JavaScript是您可以在生产环境中编写Web服务的唯一语言。 如果我们可以选择,并且所有平台都没有使用一种语言进行优化,也许会更好? 也许我们在浏览器中需要不同的虚拟机?

赖安 :我认为这就是导致Wasm受欢迎的原因。 在它上面,您可以将Rust编译为可以在浏览器中执行的代码。

听起来很棒,但我想知道它在使用垃圾回收或其他运行时工具的语言中的效果如何。 尽管从技术上可以通过Wasm使用Python来构建站点在技术上是可行的,但我怀疑结果将是繁琐且缓慢的。 我认为只有经验会在这里显示。

Dmitry :也就是说,如果我想使用某种东西来代替JavaScript,是否需要学习一种可以转换为Wasm的语言?

Ryan :或者用JavaScript。 事实是JavaScript具有垃圾回收器等等。 因此,如果您使用动态语言,则翻译成JavaScript比在Wasm中进行编译更有意义,同时还要编译整个运行时,包括垃圾收集器等等。 尽管V8在垃圾回收方面可能做得更好,但您将不得不投入大量资源。 但是,是的,Dart使用JavaScript进行编译,您可以在其上编写网站。 还有其他语言也可以这样做。



德米特里 :既然我们在谈论不同的语言,那么您觉得在2019年学习哪种旧的或新的语言感兴趣?

瑞安 :我真的很喜欢Rust。 它有许多有趣的发现,例如,单个可变对象的想法。 它具有出色的编译器,可提供经过优化的代码。 但是了解Rust并不容易。 我花了几个月的时间才知道那里发生了什么。 通常,Rust是一种非常有趣的语言,但绝不是通用的。

如果您只是在编写应用程序,那么很可能不会用Rust编写它,而是使用更简单的东西:Ruby,JavaScript或Python。 但是在某些情况下,Rust可以出色地完成工作。 例如,它非常适合编写数据库,Web服务器或我们的虚拟机。 它完全控制了代码中发生的所有事情,但是却以复杂性为代价,这对开发人员是开放的。

Rust是编写底层代码的新词;与Go相比,它具有明显的优势。 Go有一个垃圾收集器,因此它非常适合高性能服务器,它简洁明了,编写起来非常简单。 但是,有时候垃圾回收器可能是负号,而不是正号。 例如,Deno就属于这种情况。 我们包装一个已经具有垃圾收集器的V8。 在一个过程中将出现两个收集器,并且它们的交互可能看起来是灾难性的。 V8本身已经非常复杂。 通常,Rust非常适合我们的目的。 当可以在Wasm中进行编译时,看看Rust有哪些新的应用程序会很有趣。

德米特里 :您如何看待功能语言的日益普及? 例如,用于前端的Elm或Idris。

瑞恩 :我都没有尝试过,所以我无法对他们说任何话。

尤金 :函数语言一般如何?

Ryan :功能样式非常好。 这并不意味着整个应用程序应仅由map,reduce等组成。 在某些情况下,以命令式风格进行工作更容易并且更容易阅读。 两种方法在Rust和JavaScript中都很好地结合在一起,因此不必只限制一个。 最终,CPU仍然势在必行,它可以处理发送给它的指令。 因此,在同一范式中考虑代码是明智的。

尤金 :迪诺是用什么风格写的? 是面向对象还是功能?

瑞安 :两者都用。 这完全取决于我们正在努力实现的具体目标。

Eugene :我们已经讨论了您喜欢哪种语言,但是工具呢? 您最喜欢什么IDE? 您是在MacOS还是Linux上编写的?

Ryan :我用vim编写,使用iTerm2,我的电脑是一台小型MacBook。 我经常旅行,因此我经常在笔记本电脑上工作。 在某个时候,我注意到在大屏幕显示器上工作后,切换到笔记本电脑让我非常痛苦。 因此,我自学成才,一直在笔记本电脑上工作。

在我的地方是一个基于Linux的系统单元,我正在通过SSH连接到它。 我在选择工具方面有些过时,大多数都是类似UNIX的东西。 我正在使用LLDB进行调试。

我曾经在Visual Studio Code中工作,但是现在我们正在编写自己的平台,因此您不习惯从IDE中获得很多集成。 通常,这些事情与我的工作无关,最终,所有这些使我分心。 我习惯使用裸代码,这在开发低级软件时特别方便。 我想如果我为一个流行的平台编写网站或应用程序,我会使用Visual Studio Code。

尤金(Eugene) :一般来说,您是一名老派程序员。

瑞安 :可能是的。

尤金 :接下来的问题是关于学校的。 显然,在不久的将来,将在学校学习数学,英语和其他学科的基本编程技能。 您如何看待? 也许在更遥远的将来,机器学习也将进入学校课程吗?

赖安(Ryan) :在过去的15年中,我一直从事编程工作,在这段时间里,我们的社区发展了很多。 在2005年,在我看来,我错过了所有最重要的事情,尽管按照今天的标准,我们仍然很少。 现在,程序员无处不在。 显然,编程已经吸引了很多观众。 它已成为许多人的一项重要技能。 考虑到这一点,是的,编程应该在高中进行。 但是关于机器学习,我认为更基本的东西对高中生更有用。

在我看来,在数学课程中值得更积极地研究统计学。 在美国的高中阶段,学生需要学习代数,二次方程式,矩阵分析的开始,导数等。 代数和matan占据了程序的大部分,然后只有一小部分人定期使用它们。 但是需要许多专业人员才能处理统计数据。

至于机器学习,它仍处于实验阶段。 十年内一切看起来都不会像现在一样-这个领域变化太快了。

尤金(Eugene) :由于我们谈论的是年轻一代,大约一周前,我们在学校里放假了。 , 15 , , Python Rust. , 2005 , , -, . , YouTube . , .

: .

: , ?

: , . , . YouTube . , . . , , - , . , . .

: , , . ? - , ?

: , , . , . , , . - Rust, , Rust. , : .

: , , — ? - Rust, . ?

: . - ?

: . , , . ? pull requests ? , ?

: . .

: , . YouTube, . - ? ?

: — . YouTube, . Hacker News Reddit, — - . , , - . YouTube . - , . , (, ), YouTube.

: ?

: , . , , JavaScript. — , . . , , . HolyJS. ?

: 2016 , .

: , NodeJS . . ? ? ?

: , Joyent. , , , . , , Deno, . , Deno.

: , ?

: , , . , , , . , . -, , , . , . , , , , , . , — …

: , V8 Volkswagen Beetle?

: !

: , V8.

: , , . , . , , , .

: . ? , . , . ?

: , . , . . , Facebook Google, . - , — , . , . , . - , .

: IT , « » , . , . , IT , ?

: , « » — , . , . , , . , . .

: . , — , — . , . ?

: . , . .

: . , ?

: . .

: , , ?

: , . , - , — . , — , .

: HolyJS 2019 -. , !

: , .

HolyJS Deno: «Deno, a new Way to JavaScript». , .

- , Online- ( - ). , 24-25 , .

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


All Articles