深入剖析编程当中最容易被误解的语言:JavaScript

阅读数:6775 2019 年 8 月 30 日 16:43

深入剖析编程当中最容易被误解的语言:JavaScript

长久以来,很多人都将 JavaScript 贬低为一种“不合适”的编程语言。由于具备非结构化这一特性,JavaScript 被人们与“奇怪”联系起来,也确实导致很多已经熟悉了其他语言的开发者难以理解其设计思路。

尽管如此,JavaScript 仍然从一种普通的脚本语言,逐步发展为广受运用的高人气开发方案,甚至在 Web 相关设备上占据着统治地位。目前,Netflix 以及 Paypal 等巨头级企业都采用 JavaScript 进行前端与后端开发。

目前市面上也存在不少中间翻译框架,可将您的 JavaScript 代码转换为其他语言形式——包括 Java 以及 C++。这意味着与作为转换对象的其他语言相比,JavaScript 本身至少具备相同的表达能力。
那么,为什么还是有人讨厌 JavaScript?为什么“传统培训”出来的开发人员会把嘲笑 JavaScript 当成一种集体性共识?

让我们从头聊起

JavaScript 在设计之初并没有考虑到如此广泛的应用需求。当年 Brendan Eich 在开发 JavaScript 的首个版本时,只用了 10 天时间。最初,他希望 JavaScript 能够成为一种类似于 Scheme 的多范式编程语言——没错,很多开发人员压根没听说过这个字眼,能够遇到的实例更是少之又少。

JavaScript 之所以看起来跟 Java 有所关联,主要是由于网景公司。作为 JavaScript 的最初管理者,他们希望 JavaScript 能够成为 Java 大家庭中的一分子,从而引导人们更积极地接纳它。毕竟里面有“Java”呢,应该没多大区别吧?

然而,JavaScript 的底层设计思路仍然与 Scheme 非常相似,目标用途也很接近。JavaScript 当中仍然存在大量来自 Scheme(及其表亲 Lisp)的设计范例。这有点像走进一家人的客厅,这里或多或少都有上一代老人留下的痕迹——Scheme 就是这位老从,拥有着两倍于 Java 的存在历史。

除了看起来像 Java 之外,JavaScript 与 Java 基本上没有任何相同之处。

由于这种“虚假宣传”,不少训练有素的开发人员在使用 JavaScript 时碰了一鼻子灰。他们大胆运用一切自己所熟知的经验与心得,但却无法在 JavaScript 这位号称是 Java 表亲的新语言当中得到与预期相符的结果。

JavaScript 的优势

多范式特性有着自己的优势——主要是该语言能够适应要求,而非由要求适应语言。

Java 以及 C++ 这类“传统”语言拥有明确的结构与语法要求,我们必须遵循这些要求才能顺利完成程序编译。

相比之下,JavaScript 根本就不在乎这些,它只关注一点——能否在浏览器中持续运行。对于一部分风格比较严谨的开发人员来说,这样的价值主张几乎代表着垃圾代码、糟糕的模式以及易受潜在攻击影响等负面后果。但是,我们必须得承认,开发人员并不是总能想明白自己的代码到底在干些什么;如果弄不清楚,那传统语言在这方面也没比 JavaScript 好到哪去。

无论语言是否健壮,水平不高的开发人员总能够找到造成灾难性后果的方法——这与具体语言无关。而在他们用不上自己的专业知识时,情况往往会更加糟糕。

JavaScript 的多范式特性,还意味着开发人员可以根据要求对模式进行调整,从而实现最佳结果。我们并不一定要使用单一的继承模式。利用 JavaScript,大家可以选择伪经典、原型、差异甚至是函数继承。

JavaScript 的缺点

强类型值在 JavaScript 当中没有什么特别的限定。大家可以把任何值填充进去,而这很有可能在后续运行当中给应用程序造成破坏。

这确实给很多投身于 JavaScript 的开发者带来巨大的困扰,因为所有东西都可以是 var 或者 let。但是,在 TypeScript 出现之后,这个问题似乎得到了很好的解决。

JavaScript 的另一大问题可能与某些出乎意料的奇怪设置相关,例如双精度浮点、强制性要求(变量不是类型,但值是类型)、由承诺与异步带来的复杂调用机制,以及因为无法将声明为私有或者公开而导致几乎一切都成为全局变量(TypeScript 修复了这个问题)等等。

对某些人来说,JavaScript 确实像宣传所说的那样“尽可能灵活”。但是,它有点太灵活了,灵活得像没有骨头的面条。有些人更喜欢明确的结构与清晰的架构,而不是过度灵活——我很理解这些朋友。

JavaScript 到底好不好?这完全取决于您的心态与知识水平

作为开发人员,我们更倾向于支持自己最熟悉的东西。我们会自然而然地对不同的思维方式表现出抵制,这也是学习过程中的一部分。这一点在面对我们所熟悉的代码模式时,变得尤为明显。

不过,虽然某些模式可能更适合于某种语言,但模式并不会永远通用;或者,由于语言之间语法结构存在巨大差异,有时候我们不可能指望着利用完全相同的思维方式获得基本一致的结果。

虽然我们确实能够在编程当中把许多内容转移至 JavaScript 当中,但也有不少内容转移不了。JavaScript 的优势在于任何人都可以随时使用,但其最大的缺点也正在于这里。

面对 JavaScript,我们不需要投入数个小时甚至几天来接受系统的计算机科学教育,也不需要为了编写一个小小的正常程序而参阅大量教程、内容、书籍、使用手册等资料。

JavaScript 可能也是唯一一种大家能够直接从 Stack Overflow 上复制代码,并贴下来加以使用的语言。在绝大多数情况下,这些代码都能直接起效——不挑环境、不挑设置也不挑依赖性。JavaScript,就是这么轻松随意。

正因为如此,我们才更有必要投入时间进行认真学习。从零开始,不涉及库、也不涉及框架,单单只是学会认识 JavaScript。
每个人都在讨论 Angular、React 以及 Vue,但似乎没人在意 JavaScript 本体。

写在最后

不同的人对于 JavaScript 的“恨”当然也有浅有深,具体取决于大家对自己所熟悉并坚持的“母语”有多么热爱。

没错,JavaScript 确实很奇怪,但 Java、C++、Swift、Python 乃至一切现存语言难道就不奇怪了?奇不奇怪,要取决于我们审视的角度。

为了真正体会到 JavaScript 的能量与潜力,我们需要着眼于客观现实,同时尽可能摒弃个人喜好、偏见、判断以及对该语言的刻板印象。

只有这样,我们才能真正以开放的心态审视自己的代码,而不会陷入自我暗示的反馈循环当中。毕竟作为人类,我们的固有短板就是更愿意看自己想看的,而不是真相。

要成为一名更高效、更出色的开发人员,我们必须学会如何迈过这道槛。高级开发人员们都曾经历过这一阶段,并最终成就了更杰出的自己。

天赋异禀、与众不同,再加上这二者之间的种种其它特性,共同造就了 JavaScript 这朵“奇葩”。

原文链接:
Why JavaScript Deserves More Love Than Hate

评论

发布