这是与 Kyle Simpson 的部分会议记录,他是一位来自德克萨斯州奥斯汀的开放网络布道者,对所有关于 JavaScript 的事物充满热情。他是一位作家、研讨会培训师、技术演讲者和 OSS 贡献者/领导者。
感谢大家邀请我。我是 Kyle Simpson,在 Twitter、GitHub 和所有其他重要的地方以 "getify" 的名字被人熟知。上周末我在罗切斯特为 Thought @ Work 会议教授研讨会,并决定留下来看看 新媒体互动开发项目中的一些 JavaScript (JS) 和 Node 课程,所以感谢你们邀请我。
我一直在写一本关于 JavaScript 的系列丛书,名为 You Don't Know JS。整个系列都是开放写作的,在 GitHub 上在线 免费阅读。它们也经过专业的编辑,并通过 O'Reilly 出版。这个系列计划有五本书:两本已经出版,第三本已完成并处于最终编辑阶段,第四本即将完成,第五本即将开始。
- 作用域与闭包:主要介绍闭包,这是最重要的基础主题之一。所有 JS 程序都使用闭包,但大多数开发者不知道他们正在使用它,或者如何称呼它,或者它如何工作。
- this 与对象原型:揭示了
this
关键字的工作原理,然后解决了 JS 有类的误解——不是真的!相反,JavaScript 有原型委托,我们应该拥抱它,而不是试图伪造类导向。 - 类型与文法:深入探讨了强制类型转换,这是大多数人认为在 JS 中是邪恶的机制。我鼓励你深入研究并学习它,因为强制类型转换不仅不像你被告知的那样糟糕或奇怪,而且如果你学会如何正确使用它,它实际上可以帮助改进你的代码!
- 异步与性能(进行中):解释了为什么异步编程的回调是不够的,然后深入探讨了 promises 和 generators 作为更好的异步模式。还介绍了优化和基准测试 JS 性能。
- ES6 及以后(计划中):涵盖了 ES6 中 JS 的所有变化,以及对 ES6 之后地平线上的演进的前瞻。
要理解这个系列的精髓,请将其与 Douglas Crockford 的 JavaScript: The Good Parts 进行比较。他的书对我们的社区来说既有好处也有坏处。它几乎一手将许多开发者带到(或带回!)这门语言,并使其受到认真对待。为此我们非常感谢他。但它也教会了开发者,你只需要学习这门语言的一小部分。而且因为你只需要学习一点点,所以这就是大多数开发者学到的全部。即使是有 5 或 10 年 JS 经验的开发者,对这门语言的了解也相对很少。
我的书恰恰相反。它们是反“精华部分”的。这并不意味着它们是糟糕的部分,而是意味着它们是所有部分。与其因为某人说要避免这门语言的大部分,不如逃避困难的部分,我鼓励你走向“困难的部分”并学习它们。当你在 JS 中看到你不理解或令人困惑的东西时,不要责怪这门语言设计得很差,而是将注意力转向你自己的理解不足,并努力提高你的理解。
这在 JS 开发者中有点独特,他们期望一门语言应该如此简单和直观,以至于仅仅看一眼就足以理解它,如果他们不能理解,那就是这门语言的失败。期望完全不言自明的语法和规则对于任何其他语言(如 Java 或 C++)来说都是不合理的。如果你对代码感到困惑,你不会责怪这些语言的设计者。你会责怪你自己的理解,或者至少是编写代码的人的理解。无论如何,更好地学习这门语言是解决理解不足的最佳方案。很多时候,当开发者讨厌 JS 的某些东西时,事实证明是因为他们根本不够了解它。当我解释它是如何工作时,很多时候他们从讨厌它到欣赏它——顺便说一句,欣赏并不意味着喜欢,它只是意味着尊重。
我相信 JavaScript 需要时间才能正确和完整地学习,如果你要编写它,那么你应该投入这种努力。你应该理解你编写的代码为什么以这种方式工作。不要说“它能工作,但我不在乎它是如何工作的”,你始终可以问的最重要的问题是:“它是如何工作的,以及为什么?” 我是一位开放网络布道者,以教授 JavaScript 为生。我一直与那些不完整和不正确地学习了 JS 的开发者合作,他们不得不努力逆流而上重新学习它。这就是为什么我如此受鼓舞看到你们在大学里学习 JS。通过在学校正确地学习 JS,你可以毕业并直接进入行业,成为新一代的开发者,他们已经理解并欣赏 JS 作为整个 Web 平台的标准的重要性。
JS 将在我们余下的职业生涯中成为 Web 平台的基础。我们不妨更好地了解它!
我想告诉你们的是:我坚信,你们在大学里能学到的最重要的事情——当然,你们正在学习很多很棒的东西——但最重要的是如何学习,以及如何热爱和享受学习。你永远不会找到你喜欢的“一件事情”并在你余下的职业生涯中做这件事。这个行业每隔几年就会重塑自我。如果没什么别的,那也只是 Apple 在这样做。你必须擅长学习和重新掌握新事物。无论你对什么感兴趣,这都是你职业生涯成功的道路。
问答环节
问:五本书,应该按特定顺序阅读吗?
答: 作用域与闭包 是最受欢迎的,按时间顺序发布阅读当然可以。前三本是关于 JavaScript 的核心。第四本和第五本将建立在前三本的基础上,但主要处理 ES6 中语言的新特性。
问:自由和开源软件在你的工作中有多重要?
答: 我职业生涯的一切都是开源的。我非常坚信开源的力量,以及它在我们行业未来成功中的地位。如果你研究技术的历史,它们最初是封闭/专有的,在采用和发展过程中受到引导,最终走向开放。最终,开放总是会胜出。但越来越重要的是,我认为开放应该成为默认模式。很多人说,“我不喜欢把我的东西公开,他们会嘲笑我的烂代码……” 当我编写代码时,人们会说“你只是更有信心,因为你很优秀。” 但如果你看我的旧代码,那里有一些糟糕的东西。当我在“You Don't Know JS”中说“你”时,这是一个集体术语。我也不了解它。
每次我开始为一个项目编写代码时,我都会在 GitHub 上公开地从一个空文件开始。我会尽我所能,并不断发展。但我不只是将 GitHub 用作营销我自己的代码和想法的平台,而是假设我写的每一行代码都是最糟糕的,而变得更好的唯一方法是借助他人的帮助。开源集体使最好的软件比任何一个人都能做出的更好。
这是一种你个人和专业上都应该努力追求的文化。我非常坚信,“开放”是这一切存在的原因,也是我们现在正在做的事情在 10 年后仍然存在的原因。
问:我属于那种害怕公开编码的人。我应该从哪里开始?
答: 我的观点——可能有不同的答案——是寻找其他人的项目。有很多 FOSS 贡献与代码无关。文档通常留到项目结束时,并且被忽视,但保持文档更新至关重要。如果你可以阅读其他人的代码,并添加细节、示例或测试,那将是你可以做出的非常重要的贡献。许多 FOSS 中的“摇滚明星”都是通过参与并从文档/测试开始而取得成功的。一些项目会更进一步,并找出“唾手可得的成果”或已知有简单解决方案的错误。这是一个很好的起点,你可以了解项目是如何运作的。即使是提供错误报告也是一种无需编写第一行代码即可做出贡献的方式。但即使是一行代码也很重要。你之后的人可以从中学习。
问:哪里?
答: GitHub 是事实上的标准。任何社区都可以,当然,我不会说“选择这个项目”。你应该选择你自己感兴趣的项目。如果你对数据可视化感兴趣,那就去了解 D3。找到你热衷的东西。如果你这样做了,你很快就会建立你的信心,这将创建一个良性循环,使人和代码都变得更好。
问:你说你认为 JS 将在我们余下的职业生涯中成为“Web 的唯一语言”?我并不一定支持 Dart 或其他类似的语言,但你不认为这些语言会成功吗?
答: 很好的问题,而且信息量很大,但是…… Dart 不会成功取代 JavaScript,不是因为它不好或设计不良,而是因为 Google 的做法。超越他们在网站上所说的,他们将 Dart 定位为与 JS 竞争,希望取代它,而不是作为一种试验性的语言,旨在有意地告知和影响 JS 的未来。从最初的“泄露备忘录”中,世界了解到 Dart 是关于“[JavaScript 中]无法修复的根本缺陷”的,到他们在 Chrome 中构建的与 JS 并存的 Dartium VM,再到 Dart2JS transpiler——传递的信息不明确,而且不仅让人感觉它是一个“更好的编译 JS 语言”,更像是一种试图希望 JS 衰落的尝试,如果开发者可以在 Web 中原生编写 Dart 的话。我可以肯定地告诉你:Mozilla 永远不会在 Firefox 中实现 Dart。除非在未来 Firefox 不存在,这是我无法想象的,否则 Dart 将不会取代 JS。
从更广阔的意义上讲,有数百种语言可以编译成 JS。你想在 Web 上运行你的代码,所以可以将其“转译”为 JS。我个人不喜欢这些语言中的大多数,但它们都非常重要!源代码不是给计算机用的!有无数种编写代码来生成 1 和 0 的方法。源代码是给开发者用的,你需要找到最适合你大脑的语言。此外,我们需要更多的实验,以及更多编译为 JS 的语言,例如 CoffeeScript,它影响了许多添加到 ES6 中 JS 的伟大特性。我认为 CoffeeScript 本身的未来可能有限,但这没关系,因为它对于推动 JS 向前发展非常重要。至于 Typescript,我不喜欢类,但 Eich 曾公开表示,JS 的未来可能会有类似类型注解的东西。
首先学习 JS,但随着你职业生涯的发展,你会发现其他语言更适合某些问题或团队。很多人这样做是因为他们不想学习 JS,但这是错误的做法。一旦你真正了解 JS,那么你完全可以并且健康地找到你更喜欢的其他语言,这些语言将使用 JS 作为它们的编译目标。这对 Web 平台的未来非常有利。
4 条评论