现在,为什么连一个 JavaScript 的厌恶者都认为:每个开发人员都应该学习 JavaScript

时间:2022-09-13 03:27:53

原文地址 http://radar.oreilly.com.cn/blog/2011/mikel/time-to-learn-javascript

现在,JavaScript是必需的。

——Mike Loukides

很长时间以来,我一直把 JavaScript 看作是编程语言的二等公民。早先,JavaScript 是很多安全问题的根源,它就像一个不错的胶水,把 HTML 与样式粘合起来,不会有人用它去写关键代码等。而 JavaRubyPython,这些才是真正的编程语言,用来编写关键代码。

但是,在过去几年里,我对 JavaScript 的态度彻底地发生了变化。JavaScript 已经成长起来。我确信,有很多 JavaScript 开发人员都不会认同我前面的说法,他们会说 JavaScript 一直都是一个强大、成熟、深得人心的语言。或许是对的。尽管你可以用任何一门完整的编程语言去写程序,包括像 BASIC 这种滥东西,然而,一门有用的编程语言必须具备良好表达能力,以及可用的库和开发工具。JavaScript 的表达能力很早以前就已经没有问题了,虽然创建对象的方式有点让人不舒服。但是,最近,我们已经看到了一些极为重要的、扭转局面的技术:jQueryJSONNode.js HTML 5。或许,JavaScript 一直是一门完善的语言,而这些技术(和我后面会提到一些其他技术)已经使 JavaScript 成为每一个开发人员必需知道的语言。如果接下来你要学习一门新的语言,那一定是 JavaScript


极具潜力的Node.js


Node.js 有可能彻底改变 Web 应用程序的开发。Node.js 是一个服务端脚本,用于构建高性能 Web 应用程序的框架——可以快速、高效地响应大量到来的请求。尽管,Node.js 是一个底层框架,能用于构建任何应用程序,但它更适合构建 Web 服务。毫无疑问,与传统的请求/响应模型相比,Node.js 的异步事件驱动模型更适合 Web 应用程序。

两件事情使得 Node 很有价值。首先,Google 在提升 JavaScript 性能上掀起了一场革命。这并不是说,你随时随地都可以用上最好的 JavaScript 引擎(尽管这是我们一个美好的期望),但可以肯定的是,Google 在其他人还没有去做的情况下,已经认真对待 JavaScript 的性能了。如此一来,就迫使 MozillaAppleMicrosoftOpera,还有其他浏览器开发商进行性能竞赛。结果,我们现在使用的 JavaScript 引擎不知道较几年前快了多少倍,完全有能力运行复杂大型的 Web 应用程序。

其次,Node.js 有着庞大的开发人员。不管大家在服务器端使用什么语言,但在客户端却很少有人不使用 JavaScript 的。有些人仅仅是东拼西凑代码,而有些人则用 JavaScript 写了复杂的 Ajax 应用,甚至是完整的 Web 应用程序,如 Twitter Gmail。无论如何,JavaScript 开发人员的数量是庞大的。而像 Doug Crockford 的作者推动,应该把 JavaScript 当作一门真正的编程语言,尽管它还有不少缺陷。

现在,编写 Node 应用程序还是相对粗糙的,毕竟它是一个底层库,与你使用的 JavaScript 很接近,而不像 Rails Django 那样成熟,还不是一个完整的Web框架。但这种状况一定会改变。一些轻量级的框架,如 Express,已经出现了。我相信,更多基于 Node 的完整功能的框架将会不断出现。

我已提到过出现的几乎完全在浏览器中运行的 Web 应用程序。GmailGoogle Maps,这些都不是什么新鲜事。但是用 JavaScript 编写客户端应用程序,并运行在浏览器中,越来越具有吸引力。而 HTML 5 则把这个趋势带到了下一个阶段。


HTML5就是JavaScript


我说过好几次,HTML 5 HTML 关系不大,它其实是 JavaScript。那么,HTML 本身有什么变化?它不过是一些很好理解的新标签而已。HTML 5 的威力在于让你能用 JavaScript 来创建这些标签。如果没有后台代码的支持,来创建一个动画效果、游戏、或是可视化工具,那么,图形画布(Canvas)毫无用处。自从出现支持 Canvas 的浏览器,我们看到了Asteroids 游戏的上百个实现,这些都是开发人员为了熟悉HTML 5的新特性。有的比较粗糙,而有的则极其精致。这些工作完全归功于 JavaScript

HTML 5 不仅仅针对一个基于尖括号标记的巨大改进,而是赋予 JavaScript 更强大的能力。Web GL 库(目前还不成熟)可以在 HTML 5 画布内绘制实时的 3D 图形。HTML 5 地理位置可以让你在浏览器中实现地理位置感知应用程序(移动电话的基本功能)。持久存储和离线功能使得开发者能够编写完整的运行在浏览器中,与桌面程序功能相同的应用程序。目前,有个一个实验性的库,用于多点触摸功能。这些都是 JavaScript 的特性,HTML 5 只是为这些功能提供一个结构而已。
另外,有很多在浏览器库中不需要 HTML5 的重大改进。一直以来,JavaScript 都是承担着在 HTML 中实现动态效果,但是有两个问题:浏览器不兼容,以及直接操作 DOM 太麻烦。jQuery 很好地解决了这两个问题,它是现代客户端浏览器开发的基础。不仅仅的是 jQueryProtovis  D3 让你可以创建直接运行在浏览器上复杂的、可交互的可视化——有史以来第一次使得浏览器成为展示数据的一个重要工具。


JavaScript与数据库、编译器和语言


现在,数据库都开始广泛使用 JavaScriptNoSQL 有三个主要的数据库:CouchDBMongoDB Riak,它们都是文档数据库。它们保存文档,而不是表。对于这三个 NoSQL 数据库,文档不是 Word 或是 Excel 文件,而都是 JSON 文件(Riak也支持XML文档和纯文本)。JSON 已经被广泛作为一种数据交换格式(所有现代的编程语言几乎都有解析JSON的库),可 JSON最重要的是,实现了一种序列化 JavaScript 对象的格式。因此,当你在任何编程语言中使用 JSON,本质上,是为了适应 JavaScript 的开发。JSON 已经成为一个跨语言的标准,不同于 PythonRuby Java 语言序列化格式,这个不争的事实说明 JavaScript 将在更大的舞台上充当重要的角色。更有甚者,上述三个数据库都内置了 JavaScript 查询功能。未来几年,更多的人将会惊讶地发现,JavaScript JSON 内置在其他应用程序里。

JavaScript 开发的时代才刚刚开始。今年 JSConf上,一个主题就是“JavaScript JavaScript 的编译器,被看作是未来的主要趋势。Google 已经大力推进编译 JavaScriptGWTGoogle Web Toolkit)是我所知道的编译JavaScript(从Java代码编译)的最早的框架。我之前不太重视 GWT,它只是一个为了让 Java 程序员不用再学习 JavaScript 的框架。然而,GWT 的确做了很多令人惊讶的JavaScript 处理过程的优化。Closure 就是一个“JavaScriptJavaScript的编译器,能够实现同样级别的优化。几周前刚出现一个 JavaScript 编译器 Traceur,通过它来试验 JavaScript 本身,也就是说,它可以把带有实验性的 JavaScript 语言特性编译成能够运行在任何现代平台上的 JavaScript 代码。

最后,正如我们当初在Java领域看JVM一样,很多语言都在致力于编译成JavaScript,参考 languages compile to JavaScript。有些很有意思的语言,像Coffeescript  Kaffeine,它们在风格上很像 JavaScript,但更关注弥补 JavaScript 的缺陷。你是否发现 JavaScript 对象模型有意思,但就是有点笨拙?是否发现从prototype创建一个对象都需要反复定义这定义那的?你会发现,Coffeescript 对此作了重大改进。除了完善对象模型外,它还添加了新的特性,像列表理解(list comprehensions),去掉了大部分花括号。像 Python 那样,使用缩进来划分代码块。

Web服务器、富Web客户端库、HTML 5、数据库,甚至是基于JavaScript 的语言——到处都是 JavaScript。如果你曾经逃避 JavaScript,现在就学习一下吧,没有任何借口——如果不学,你就会被淘汰。


原文作者简介

Mike Loukides O'Reilly Media,Inc. 的资深编辑。他编辑了很多技术主题的书,但不包括 Windows 编程方面的。他对编程语言、Unix 以及近些年 Unix 相关的内容、系统和网络管理非常感兴趣。他是“System Performance Tuning”的作者,也是“Unix Power Tools”的作者之一。最近他混迹于 Haskell 语言和社交应用领域,尤其是对这些应用产生的安全和隐私问题感兴趣。

Mike也是一位钢琴家和业余无线电爱好者。



在此,说一下,我对 JavaScript 的感受。08年毕业参加工作的两年后,突然有天,直觉告诉我——JavaScript 是一个相当出色、很有潜力的语言,尽管当时几乎没怎么用过,因为我那时的主要职责是编写后台逻辑代码和软件设计,前端问题完全不想考虑,认为那是UI的工作,就像本文作者描述的“……作为HTMLCSS的粘合剂……”。即便用 JavaScript,也仅仅是搞几段代码炫一下界面,或是实在不便用后台实现。随着时间的推移,接触了jQueryAjaxJson 等这些技术,异步、局部刷新等概念,再就是看了很多三方开源的控件,就越发坚定了我之前的看法——网络时代,JavaScript 的确很有潜力……我的意思,不是说哪种语言更好、更重要,关键是你从什么角度,站在什么高度去看,因此不要对我讲:你把CC++Java……置于何处”……