深入理解Atwood定律

开发 前端
在Jeff Atwood发表于2007年的这篇博客里,他提出了著名的“Atwood定律”,即”任何能够用JavaScript实现的应用系统,最终都必将用JavaScript实现。“ (Any application that can be written in JavaScript, will eventually be written in JavaScript.)那么,这位大牛为何如此推崇JavaScript呢?如何真正理解他提出的这个定律?这就必须完整地看懂他的博文才行。

在Jeff Atwood发表于2007年的这篇博客里,他提出了著名的“Atwood定律”,即”任何能够用JavaScript实现的应用系统,最终都必将用JavaScript实现。“ (Any application that can be written in JavaScript, will eventually be written in JavaScript.)那么,这位大牛为何如此推崇JavaScript呢?如何真正理解他提出的这个定律?这就必须完整地看懂他的博文才行。以下是本人在学习过程中阅读的主要内容摘要:

在他的这篇博文中,他首先提到了另外一位更重量级的大神,互联网之父Tim Berners-Lee 在他的著作 《最小功效原则》中的一段话:

“在过去的40年中,计算机科学一直在开发尽可能功能强大的语言。现在我们必须领会这样的道理:要选择功能最不强的解决方案而不是***的。语言的功效越小,对于储存在该语言中的数据你能做的事情就越多。如果你把程序写成简单的描述性形式,任何人都可以编写一个程序来分析它。比如,如果一个包含了天气数据的网页,里面使用RDF 格式来描述这些数据,用户就可以把它当做一个表格来查找,也许求它的平均值,或者用它绘图,或把它和其他信息结合在一起进行推理分析。另一个极端情况是,这些天气信息是用漂亮的Java applet描绘出来的。虽然这样可能做出很酷的用户界面,但它完全无法用于分析。找到这个页面的搜索引擎会压根不知道这些数据是什么或者是干什么用的。唯一能发现Java applet的含义的方式就是让它在一个人面前运行起来。”

说实话,本人看完这一段有些困惑:JavaScript和Java、PHP这些语言相比,对于搜索引擎对数据进行提取和分析方面并不见得有什么本质 的优势嘛。想了半天还是似懂非懂:这篇文章写于1998年,当时还没有Web 2.0的概念,网站的功能主要是发布公开访问的内容,Java applet都算是“很酷”的用户界面了,所以从逻辑上Berners-Lee 关 注搜索引擎的自动分析是自然的,而且他的例子里并没有推崇JavaScript,举的例子是更为描述性的语言,比如HTML,对于数据提取的确有其优势, 而JavaScript当时作为纯前端页面效果的语言,只是配合HTML使用。但是随着Facebook这样的Web 2.0平台出现,用户贡献的内容成为互联网信息的主要来源,很多动态数据已经无法被搜索引擎自动搜索到,他的上述分析似乎就有点过时了?也许是因为我认识 的高度不够吧。不管怎么样,他的文章中对于编程语言选择的最小效能原则依然是成立的,这也是Atwood提出其定律的理论基础。

Jeff Atwood在博客中引用完上述文章后说:“这个思想后来被编入了正式的W3C文档,最小功效规则。我提出了一个这个规则的推论,它是程序员文化最近的流行元素 之一,我称之为Atwood定律:任何能够用JavaScript实现的应用系统,最终都必将用JavaScript实现。”

为了理解这段逻辑,就需要再阅读这篇W3C文档。 它比较了从最基本的描述性语言(例如HTML和结构化数据库)到一些图灵完备语言(如C和JavaScript)等在自动分析数据难易程度的不同,然后分 析说:“在发布信息的时候,有很多关于语言功效和复杂度的维度需要考虑。比如,语法简单明了的语言会比语法结构复杂的语言更易于分析。如果一种语言把简单 计算包装在不必要的机制(比如对象创建或者线程管理)中,也会类似地阻碍信息提取。” 此外文章还提出了轻量级语言开发的功能更稳定可靠:既然用它编写的代码更易于分析,也就更容易发现其中容易出错的地方。***文章提出了一个实践原则:“在所有适合于在互联网上表达信息、约束条件或程序逻辑的编程语言中,选择功能最不强的一个来使用。

好了,看到这里意思基本上清楚了,语言的语法结构越简单,数据提取和分析就越容易,对于开发互联网应用就越理想。如果对象创建和线程管理都是“不必 要的机制”,那么作为一种基于原型而不是类的面向对象的语言,JavaScript就是***的:它没有类的概念,但所有东西都是对象,无需创建过程就能存 在,而且它是单线程的。同时,JavaScript也走向了后端,Node.js之类的框架和MongoDB之类的NoSQL数据库让Web开发实现了 JavaScript的前后端通吃。

这应该就是Jeff Atwood定律的由来:JavaScript既能独立完成所有互联网应用所需的功能开发,同时又是主流编程语言中最为轻量级的。我想,这个逻辑应该就是 Atwood认为JavaScript将成为统治未来互联网世界的编程语言的根据吧。另外我觉得还有一个很重要的事实,那就是JavaScript已经获 得了所有浏览器的支持,几乎所有的网站都已经在使用它,再加上JSON标准,相比其他语言,它已经占据了有利地形。

他在这篇博客的***还说:”如果你喜欢那篇文章,我推荐你再看《Berners-Lee的架构和哲学精髓》网页中的其他部分。虽然里面的内容对于互联网时代是比较老了,里面只有两篇是去年写的,但它还是包含了发明互联网的那个家伙的一些教诲和洞见,它们经历了时间的考验却仍然闪着金光。”

***我必须感慨一下:大牛的一些名言听起来似是而非,不经过细致的阅读是很难真正理解其逻辑的,而且即使细致阅读了,可能因为思维方式和实践机会的 限制,完全理解其精髓也是很难的,在这样低的基础上再想有什么创新就更难了。这大概也是中关村的挨踢水平远远低于硅谷,中国的互联网公司大都只能依赖山寨 的方式生存的原因吧。

原文链接:http://blog.jobbole.com/48296/

责任编辑:陈四芳 来源: 博乐在线
相关推荐

2016-12-08 15:36:59

HashMap数据结构hash函数

2020-07-21 08:26:08

SpringSecurity过滤器

2010-06-01 15:25:27

JavaCLASSPATH

2017-01-10 08:48:21

2017-08-15 13:05:58

Serverless架构开发运维

2020-09-23 10:00:26

Redis数据库命令

2024-02-21 21:14:20

编程语言开发Golang

2019-06-25 10:32:19

UDP编程通信

2023-10-19 11:12:15

Netty代码

2009-09-25 09:14:35

Hibernate日志

2021-02-17 11:25:33

前端JavaScriptthis

2023-09-26 08:01:46

消费者TopicRocketMQ

2016-10-26 20:49:24

ReactJavascript前端

2012-11-22 13:02:24

jQuery插件Web

2022-02-21 16:57:13

APIIDE构建系统

2020-08-10 18:03:54

Cache存储器CPU

2021-11-18 09:20:29

Channel语言代码

2020-11-13 16:40:05

RocketMQ延迟消息架构

2021-04-22 09:58:15

JDK代理动态

2022-04-24 10:42:59

Kubernete容器网络Linux
点赞
收藏

51CTO技术栈公众号