Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。
我们采访了Kyle Simpson,他是开源优先的开发者、学习大神、JavaScript神学家,也是《你不知道的JS》系列图书的作者。
Kyle Simpson或许是2019年JSNation大会(https://jsnation.com/ )最受期待的演讲者: 他将于6月5日和6日举办研讨会(https://jsnation.com/workshops ),并于6月7日发表主题演讲。Kyle是一个活生生的JavaScript典范,是开源精神的最真实的体现。在与JSNation的对话中,他分享了自己对JavaScript所有东西的智慧和知识: JavaScript中最具争议和迷人的东西,以及他爱上JS的“循此苦旅 以达天际”旅程。
你好Kyle!欢迎来到JSNation访谈。既然你不知道JS书籍写的这些东西,那你认为你知道JS吗??
我认为没有人真正了解JS,至少不是完全了解。我说这话是真心的,并不是自夸:我忘记的JS内容比大多数人学到的都要多。本书的主要观点是用一种态度来处理JavaScript,而不是用一种掌握和完成学习的态度,而是不断地尝试更好地学习它。一旦你擅长让JS做你想让它做的事情,学习如何在你的代码中清晰地表达你的想法就进入了一个全新的阶段,而这是一个更深入、更困难的学习阶段。
在你看来,JavaScript中最具争议/矛盾的是什么?
我认为JS处理类型的方式可能是最容易被误解的(因此也是最有争议的),尽管它的“类”系统紧随其后。我发现大多数人提到“类型”就会想到它们在其他语言像C++或Java中习惯的静态类型, 因为JavaScript中没有那么明显的JS类型系统,一个体现在语法上的假设是JS的类型系统是简单的(最好的),或不存在的(在最坏的情况)。在我看来,JS的类型系统实际上非常强大,而且设计得很好。它不是完美的,但它被广泛地理解和利用。
我不认为我们需要在JS中“修复”类型(比如TypeScript或Flow),我认为我们只需要更好地理解它们,更清楚地用JS表达我们的类型。例如,与大多数常见的想法完全相反,在我们的程序中, ==操作符实际上比===更强大、更有用,实际上,应该优先使用==,而===应该是最后一个选项。但要理解我为什么这么说,你必须学习类型,以及它们转换的方式:强制。我真心希望开发人员不要像他们多年来听到的那样不断重复“JS类型是邪恶的”。它们非常棒,如果你不学习并充分利用它们的潜力,你的程序就会受到影响。
JavaScript语言中最吸引你的是什么?
我可能最着迷于JS的“多范式”方法。当然, JS并不是唯一一个被贴上这个标签的语言,但我认为, JS也许是所有语言中最具多范式特征的,这主要是因为这种语言在相反的方向上延伸得有多远。令我惊讶的是,一个仅10天创造的实验语言如何成长为世界上使用最广泛的语言,而与此同时,语言的大部分核心在第10天就已经存在了。我不知道除了将这种令人惊讶的无与伦比的成功归功于Brendan Eich的偶然灵感之外还能归功于什么。我们周围有很多“JS憎恶者”,他们中的大多数人哀叹JS, 并希望其他一些“更好”的语言能够取而代之。
问题是,JS正是达到这个目的所需要的。其他任何一种语言都不会成功。我认为这一部分原因是其它语言中的任何一个都不像JS已经证明的那样灵活(也就是“多范式”)。我不必选择完全按照步骤编写程序,或者完全面向对象,或者完全使用FP模式。我可以选择这些范式中哪个最适合我的程序的每个部分,而且JS足够灵活,可以让我灵活组合使用它们。在我看来,没有任何语言曾经(或者将来也不会)像JS那样接近于通用语言。当它被称为“通用语言”时,其原因是它足够灵活,可以作为几乎所有编程语言任意组合之间的通用桥梁语言。这真的很吸引我。
“你不知道的JS”已经成为JavaScript开发人员的现代圣经。成为一个鲜活的JavaScript经典感觉如何?
首先,我不是JS专家,我绝对不认为我应该被称为“经典”。我非常感谢我有幸给JS社区带来巨大影响(而且是没有计划的!)。当我开始写YDKJS的时候,我告诉我的出版商我想能卖出2500本就很成功了。如今,该书已售出10万多册。我做梦也想不到会有这种事。
这仍然很难理解。我认为并希望能与这么多读者产生共鸣是因为我信任和尊重读者, 实际上我的程序员同事,社区同僚也足以确信他们应该知道某些事情是怎样运行的以及为什么,它们需要知道全部的事实, 而不是被告知按我说的做, 因为只有我知道我在说什么。我总是试着说话和写作,就好像我坐在他们旁边,和他们聊天,我想分享一些我学到的和充满激情的东西。我认为这就是为什么YDKJS能深入人心的根本原因——他们离开时会真心觉得有人关心他们,帮助他们更好地了解JS。
我总是告诉人们,我和他们之间的唯一区别是,我会提出更多的问题,并且直到找到答案才会停下来。然后我决定把我提出问题和寻找答案的过程以书的形式写下来,这样其他人就能更容易地找到答案。我欣喜若狂,几乎难以言表——这对一个作家来说是一件大事!因为它帮助了很多人。
你是怎么“爱上”JS的?你是否有某种老师或导师帮助你起步,或者你是一个自学成才的人?
我绝对属于自学族。我接受过正规的计算机科学教育,但那只教会我把编程当作一门工程学科来欣赏,而不是当作一种爱好或玩具。我参加的计算机科学项目看不起像JS这样的语言,所以它们与我对该语言的依恋没有直接关系。许多人说,他们了解JS越多,就越不喜欢它,但是对我来说,这是完全相反的。
起初我也并不喜欢它,但随着我对它的了解越来越多,我真的开始喜欢上它了。绝对不是一见钟情的那种情况! 我觉得我最喜欢的是,无论我想解决的问题有多复杂,JS总有办法让我去解决。这是我遇到过的最灵活的工具,它让我感到强大和有能力。我对用其他语言编写软件感到无能为力,好像我甚至不知道从哪里开始。但是随着JS在其他领域传播的越多,我就对能在这些地方使用JS越感到兴奋。
我可以为我的手机、我的手表、我的冰箱、我的电视、我的有线电视盒编写应用程序,甚至可以控制我家里的灯泡! 这是我童年梦想的实现,我可以让它做我想做的任何事! 谁会不喜欢呢!?
视频地址:https://youtu.be/hWmNDlLrCI0
你将自己描述为一个开源web布道者、JavaScript神学家、开源优先的开发人员和Symmathecist(共同学习家)。那你认为你到底是什么样的人?
我认为“开源优先”和“Symmathecist”最能体现我在社区中的身份。我之所以说“开源优先”,是因为我真的相信最好的软件是我们共同开发的软件,而不是我们分发给其他人的软件,这样他们就会对我们印象深刻。我总是假设我写的每一行代码都是该代码最糟糕的版本,而我改进它的唯一希望就是尽快把它发布出来,并请其他人来帮助我改进它。我认为这就是作为一个社区运动的“开源”精神最真实的道德准则,我试着去实践它,并为其他人树立榜样。
” Symmathesy “这个概念对我来说是一个较新的概念,因为我只有一个词来形容它,但它是我一直相信的,但我没有一个很好的方式来表达它。Jessica Kerr的一个精彩演讲(https://the-composition.com/the-origins-of-opera-and-the-future-of-programming-bcdaf8fbe960 )帮助我理解了这个思想。Symmathesy的意思是“一起学习”。我对它的理解是“getify”这个词,这是多年前构思出来的,我用它来描述我的角色是“出去获取东西(想法、服务等),并将它们提供给人们使用”。当时我甚至没有意识到这将演变成我的教学。
但对我来说,教与学是同一努力的两个方面。所以当我教书的时候,我真的在和别人“一起学习”,我希望能帮助别人也这样做。因此,开源优先的symmathesy(共同学习)形成了这样一个理念: 如果我们一起做而不是分开做,我们都会变得更好,会学到更多。
你还有其他JavaScript方面的书在编写中吗?
我的下一本新书将是关于提高代码可读性的。事实上,在过去的几年里,我所写的、编码的和教授的几乎所有东西都是以这个主题为基础的,所以,如果你愿意的话,这就是本书的研究和准备工作。但在开始写那本书之前,我必须先处理一下早该发行的YDKJS第二版(https://github.com/getify/you-dont-know-js )和我的新书《轻量级函数式编程JavaScript》(https://github.com/getify/you-dont-know-js )的第二版。哦,我还想用我最近对FP的一些观察来编写FLJS(Functional-Light JavaScript)的续集,内容包括更有效地使用JS类型,在FP模式中使用React-style钩子,等等。有很多东西要写,却没有足够的时间去写!
在你的Kickstarter活动页面上,你提到你正在尝试一种混合出版模式,并得到了人们和出版社的支持。你认为这种模式有效吗?
我为这个实验感到非常高兴,也为O’Reilly愿意让我做这个实验(用他们的钱)感到高兴。我希望,现在仍然希望,如果有人能解开写作和出版的整个过程的谜团,它们就更有可能成为作家。当我告诉我的编辑们,我将要求他们注册Github账户,并将他们所有的反馈以问题和PR的形式发布时,他们都非常胆怯。但这是因为我想在写作中实践那种开源优先(open-first)的心态,就像我在编码和教学中所做的那样。我认为这对于任何对写作感兴趣的人来说都是一件好事。
多年来,有无数人利用了这些信息,向我提出更多探索性的问题,然后自己成了作家。这是非常可喜的。我仍然以这种开源优先的方式写作和(现在是自己)出版,而且我希望只要我是一名作家,我就会继续这样做。我无法想象用别的方法做这件事。我希望我能不断激励其他人也这样做。
你将在Amsterdam最美丽的教堂之一做主题演讲。考虑到你是一个JS神学家,又要去以前的教堂演讲,这难道不是一个征兆吗?
哈! 嗯,这可能是个征兆! 几年前有人给了我这个“头衔”,全都是因为我所有的公开想法和对JS的预测。我觉得很合身。如果JavaScript(以及它的代码可读性)是一种“宗教”,那么我一定会用我的一生系统地思考和推理如何将这种“宗教”应用到我的生活中,以及如何将这个词传播给其他人!
视频地址:https://youtu.be/lDLQA6lQSFg
你打算在Amsterdam 的JSNation会议上谈些什么?
JavaScript多年来一直是一个很好的赌注。不管你有没有意识到,在很长一段时间里,有两种不同的JavaScript基本上是并行运行的。但市场力量正导致它们分化,JS的这两个方向现在正朝着完全不同的方向发展。我觉得我们应该探索和思考这些演进是否会继续对JS有利,并最终对我们和web有利。