你不懂 JavaScript,但你应该懂

目前还没有读者喜欢这个。
Javascript code close-up with neon graphic overlay

照片由 Jen Wike Huger 拍摄

这是与 Kyle Simpson 会议的部分文字记录,他是一位来自德克萨斯州奥斯汀的开放 Web 布道者,对所有与 JavaScript 相关的事物充满热情。他是一位作家、研讨会培训师、技术演讲者和 OSS 贡献者/领导者。


 

感谢大家邀请我。我是 Kyle Simpson,在 TwitterGitHub所有其他重要的地方 以 “getify” 为名广为人知。我来到罗切斯特是为了在本周末为 Thought @ Work 会议举办研讨会,并计划留下来看看 新媒体交互开发 项目中的一些 JavaScript (JS) 和 Node 课程,所以感谢你们邀请我。

我一直在写一本关于 JavaScript 的系列丛书,名为 You Don't Know JS。整个系列都是以开放的方式编写的,在 GitHub 上在线 免费阅读。它们也正在进行专业的编辑,并通过 O'Reilly 出版。该系列计划出版五本书:两本已经出版,第三本已完成并处于最终编辑阶段,第四本即将完成,第五本即将开始。

  1. 作用域和闭包:主要涵盖闭包,闭包是最重要的基础主题之一。所有 JS 程序都使用闭包,但大多数开发人员不知道他们正在使用它,或者不知道如何称呼它,或者它如何工作。
  2. this 和对象原型:揭示了 this 关键字如何工作的奥秘,然后解决了 JS 具有类的误解——事实并非如此!相反,JavaScript 具有原型委托,我们应该拥抱它,而不是试图伪造类导向。
  3. 类型和语法:深入探讨强制转换,这是大多数人认为 JS 中邪恶的机制。我鼓励您深入研究并学习它,因为强制转换不仅不像您被告知的那样糟糕或奇怪,而且如果您学会正确使用它,实际上可以帮助改进您的代码!
  4. 异步和性能(进行中):解释了为什么异步编程的回调是不够的,然后深入探讨了 Promise 和生成器作为更好的异步模式。还涵盖了优化和基准测试 JS 性能。
  5. ES6 及更高版本(计划中):涵盖了 ES6 中 JS 的所有变化,以及对 ES6 之后未来发展的展望。

要理解本系列的精髓,请将其与 Douglas Crockford 的 JavaScript: The Good Parts 进行比较。他的书对我们的社区来说既有好处也有坏处。它几乎独自一人将许多开发人员带到(或带回!)这门语言,并使其受到认真关注。我们为此欠他很多。但它也教会了开发人员,您只需要学习这门语言的一小部分。而且因为您只需要学习一点点,所以这是大多数开发人员学到的全部。即使有 5 年或 10 年 JS 经验的开发人员,对这门语言的了解也相对较少。

我的书恰恰相反。它们是反“The Good Parts”。这并不意味着它们是坏的部分,而是意味着它们是所有部分。与其因为某人说要避免大部分语言——与其逃避困难的部分——我鼓励你奔向“困难的部分”并学习它们。当您在 JS 中看到您不理解或令人困惑的东西时,不要责怪该语言设计得不好,而是将注意力转向您自己缺乏理解,并努力提高您的理解。

这在 JS 开发人员中有些独特,他们期望一种语言应该如此简单和直观,以至于仅仅瞥一眼就应该足以理解它,如果他们不能理解,那就是该语言的失败。期望完全不言自明的语法和规则对于任何其他语言(如 Java 或 C++)来说都是不合理的。如果您对代码感到困惑,您不会责怪这些语言的设计者。您会责怪您自己的理解,或者至少是编写代码的人的理解。无论哪种方式,更好地学习语言是解决理解不足的最佳方案。很多时候,当开发人员讨厌 JS 的某些东西时,事实证明是因为他们根本不够理解它。当我解释它是如何工作时,很多时候他们从讨厌它变成了欣赏它——顺便说一句,欣赏并不意味着喜欢,它只是意味着尊重。

我相信 JavaScript 需要时间才能正确和完整地学习,如果您要编写它,那么您应该投入精力。您应该理解您编写的代码为什么以其工作方式工作。与其说“它可以工作,但我不在乎它是如何工作的”,您始终可以问的最重要的问题是:“它是如何工作的,以及为什么?” 我是一位开放 Web 布道者,以教授 JavaScript 为生。我一直与那些不完整和不正确地学习 JS 的开发人员合作,他们不得不努力逆流而上以重新学习它。这就是为什么我如此受鼓舞地看到你们在大学里学习 JS。通过在学校正确学习 JS,您可以毕业并直接进入行业,成为已经理解并欣赏 JS 作为整个 Web 平台标准的重要性的新一代开发人员。

JS 将成为我们职业生涯剩余时间内 Web 平台的基础。我们不妨更好地了解它!

最后,我想对你们说:我坚信,你们在大学里能学到的最重要的事情——当然,你们正在学习很多很棒的东西——但最重要的是如何学习,以及如何热爱和享受学习。您永远不会找到“一件”您喜欢并将在余生中从事的事情。行业每隔几年就会重塑自我。即使没有,也只是 苹果 在这样做。您必须擅长学习和重新掌握新事物。这是您职业生涯成功的道路,无论您对什么感兴趣。


问答环节

问:五本书,应该按特定顺序阅读吗?

答:作用域和闭包 最受欢迎,按时间顺序发布当然可以。前三本是关于 JavaScript 的核心。第四本和第五本将在前三本的基础上构建,但主要处理 ES6 带来的新事物。

问:自由和开源软件在您的工作中有多重要?

答:我职业生涯的一切都是开源的。我非常相信开源的力量,以及它在我们行业未来成功中的地位。如果您研究技术史,它们开始时是封闭/专有的,在采用和发展过程中被引导,最终走向开放。最终,开放总是会胜出。但越来越重要的是,我认为开放应该是默认模式。很多人说,“我感觉不想把我的东西放出去,他们会嘲笑我糟糕的代码……”当我写代码时,人们会说“你只是更有信心,因为你很优秀。” 但如果你我的旧代码,那里有一些糟糕的东西。当我在 “You Don't Know JS” 中说 “你” 时,这是一个集体术语。我也不知道。

每次我开始为一个项目编写代码时,我都会从一个空文件开始,公开地在 GitHub 上。我尽我所能,并且不断发展。但是,我假设我写的每一行代码都是最糟糕的,并且获得改进的唯一方法是借助他人的帮助,而不是仅仅将 GitHub 用作营销我自己的代码和想法的平台。开源集体创造的最好的软件比任何一个人都能创造的都好。

这是一种您应该在个人和专业上努力追求的文化。我坚信,“开放” 是这一切存在的原因,也是我们现在正在做的事情在 10 年后仍然存在的原因。

问:我属于害怕公开编码的阵营。我应该从哪里开始?

答:我的观点——有很多不同的答案——是寻找别人的项目。有很多 FOSS 贡献与代码无关。文档通常被留到项目的最后,并且被忽视,但及时更新文档至关重要。如果您可以阅读别人的代码,并添加详细信息、示例或测试,那将是您可以做出的非常重要的贡献。许多 FOSS 中的“摇滚明星”都是通过参与并从文档/测试开始才走到这一步的。一些项目会付出额外的努力,并识别出“唾手可得的成果”或已知具有简单解决方案的错误。这是一个很好的起点,您可以了解项目是如何运作的。即使是提供错误报告也是一种无需编写第一行代码即可做出贡献的方式。但即使是一行代码也很重要。之后的人可以从中学习。

问:在哪里?

答:GitHub 是事实上的标准。任何社区都可以,当然,我不会说“选择这个项目”。您应该选择一个您自己感兴趣的项目。如果您对数据可视化感兴趣,请参与 D3。找到您热衷的东西。如果您这样做,您将很快建立起自信,这将创建一个良性循环,使人和代码都变得更好。

问:您说您认为 JS 将成为我们职业生涯中 “Web 的唯一语言”?我并不一定支持 Dart 或其他类似的语言,但您不期望它们会成功吗?

答:好问题,而且信息量很大,但是……Dart 不会成功取代 JavaScript,不是因为它不好或设计得很差,而是因为 Google 的做法。超越他们在网站上所说的,他们将它定位为与 JS 竞争,希望取代它,而不是作为一种语言,通过实验来有意地告知和影响 JS 的未来。从最初的 “泄露备忘录”(世界从那里了解到 Dart 是关于 “[JavaScript 中的] 无法修复的根本缺陷”)到他们在 Chrome 中构建的与 JS 并存的 Dartium VM,再到 Dart2JS 编译器——信息不明确,并且闻起来不仅仅是 “更好的编译 JS 语言”,更像是试图希望如果开发人员可以在 Web 上原生编写 Dart,JS 就会衰落。我可以肯定地告诉您:Mozilla 永远不会在 Firefox 中实现 Dart。除非未来 Firefox 不复存在,这是我无法想象的,否则 Dart 不会取代 JS。

从更广阔的意义上讲,有数百种语言可以编译成 JS。您想在 Web 上运行您的代码,因此可以将其 “转译” 成 JS。我个人不喜欢大多数这些语言,但它们都非常重要!源代码不是给计算机的!有无数种编写代码来生成 1 和 0 的方法。源代码是给开发人员的,您需要找到最适合您大脑的语言。此外,我们需要更多实验,以及更多编译为 JS 的语言,例如 CoffeeScript,它影响了许多添加到 ES6 中很棒的东西。我认为 CoffeeScript 本身的未来可能有限,但这没关系,因为它对于推动 JS 向前发展非常重要。至于 Typescript,我不喜欢类,但 Eich 已有记录表示,JS 的未来可能会出现类似类型注释的东西。

首先学习 JS,但在您的职业生涯中,您会发现其他语言更适合某些问题或团队。很多人这样做是因为他们不想学习 JS,但这是一种错误的做法。一旦您真正了解 JS,那么您完全可以并且很健康地找到您更喜欢的其他语言,这些语言将使用 JS 作为其编译目标。这对 Web 平台的未来非常有益。

User profile image.
在 Fedora 项目中,Remy 担任社区行动和影响负责人,为发行版的用户和贡献者基础带来更多热度和光芒。

4 条评论

“至于 Typescript,我不喜欢类”……我认为这说明了一切。

JS 用于浏览器。对于必须输入数据的内部用户来说,浏览器是非常粗糙和粗鲁的东西。它们不如软件好,但它们对于显示信息来说 “还可以”。它们非常适合向外部用户显示信息。为工作使用合适的工具。JS 的作用是有限的。

JS 的作用仅受 CPU 的能力和您的想象力限制。一个写得好的 HTML/JS 数据收集界面可以是一种使用上的乐趣——90% 的界面是垃圾与 JS 无关,而是与编写或委托它们的人有关。

回复 作者 Chuck Davis (未验证)

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.