JavaScript:从最受误解的编程语言演变为最流行的语言

Stella981
• 阅读 679

《计算机语言:历史与基石》一书由 Jean Sammet 写于1969年。此书的内容是对120种编程语言的考查,其中一些语言有详尽的简介。Sammet 写这本语言编年史的时候,尚未发生结构化编程革命(Structured Programming Revolution)和随后流行的面向对象编程。书籍以一张巴别塔(Tower of Babel,又译通天塔。见译注)的图片作封面。塔身由砖块围成,围在里面的是各种名称的编程语言。

这便是大家熟知的《圣经Genesis》[11:1-9]的故事:

耶和华降临,要看看世人所建造的城和塔。耶和华说,看哪,他们成为一样的人民,都是一样的言语,如今既作起这事来,以后他们所要作的事就没有不成就 的了。 我们下去,在那里变乱他们的口音,使他们的言语彼此不通。于是,耶和华使他们从那里分散在全地上。他们就停工,不造那城了。因为耶和华在那里变乱天下人的 言语,使众人分散在全地上,所以那城名叫巴别(巴别就是变乱的意思)。

这段意思有时理解为做人不能太傲慢;有时理解为一个寓言故事,告诉你为什么人们在说不同的语言:耶和华为防止人们达到自己的潜能而制造了 i18N 问题。不过我想把这个道理放到编程语言上去理解也是如此。编程根本问题在于对复杂问题的把握掌控能力。如果语言在需求变化时未能帮助我们处理复杂的系统, 而最终令人感到混乱,自然离失败不远。

为何有如此之多的编程语言?不计 Sammet 当时的数量,过去四十年已经有大量的新语言或方言问世。虽说我们已经在好长的时间内是在一个高级(High Level)的环境下编程了,但真正能跨域边界,达致完备的地方还不是很多。那么我们应不应该就遵循某种恰当的方式来做,来更加幛显地发挥计算机的优势 呢?能够以同一种绝佳的语言来统一设计,这样的话,所带来的效率毫无疑问是很明显的。因此我们也可以更有效地集中资源来配合来进行培训或开发工具。为什么 我们还不这样子做?

我们已经努力过,现在已经有几种语言尝试构建起大规模的、通用的语言,结果却失败了。随着不断更新语言设计加入更多的功能,使语言本身变得越来越复杂。

因此我们看到取而代之的是许多的专用语言。在完成一些任务的领域中,专用语言可以非常高效地解决,而且本身是不错的。对于要完成某些任务的人而言,选择好的语言,自然如虎添翼。

一门编程语言从某些表达式的语法的运算得到其模型的修正。大多数语言有一组常用的值如数字和文本(numbers、texts 在大多数语言中,奇怪地称作字符串),和若干的操作,如改变和合成值,或一些变量和循环的操作,还有就是把一些常用的操作打包到命令中。

变化行如幻影,线路莫测,就像一道菜和一首乐曲每一次都不尽相同。语言设计的艺术在于清楚哪些是舍的(leave out)。一门良好语言,它里面的功能应该是和谐地工作在一起,帮助我们更好地明白问题和找出解决方案的最佳表达方式(the best expression of its solutio)。

一门好的语言由几组功能所构成,但哪一项的功能才是最好的就永远没有结论。程序员可以不断地讨论这个话题和是否比其他的语言优秀。这里不是说功能不重要。功能它非常重要。只不过我们当时还没清楚它真的那么重要。

于时髦与技术之间而言,语言设计需要做更多的倾向于时髦方面。时髦是nerdliest艺术中一种主要的因素,看起来可能怪怪的,却一点都不假,事实如此。无论语言的设计有多么精巧,若以另一种语法出现的话,则是另类,没有希望得到广泛使用的。这样会约束了语言的进化。

像音乐和食物一样,编程语言也属于时间的产物。语言设计的深层问题不是技术上的,而是属于心理上的问题。一门编程语言应该与我们认知的结构相吻合,从而帮助我们更高效率地判断问题。

编程语言像猫这种动物,换一只猫总比把驯化一只旧的猫容易。按照常理,大多数语言成功后由后来的升级版所取缔。重新规划的语言很难到达旧版所达到的 那种成就。例如,Fortan曾经是语言翘楚,好些年在不断改进,不过Fortran IV的声誉非现代化后的Fortran方言所能及。类似地,Pascal是结构化编程的流行语言,其 OO 的版本却难盖原 Pascal 之光芒。结果,它渐渐被取代。

专业用途的语言做起来挺有意思的,这也解释了它们的数量为什么是如此地多。如果一门语言结构不太庞大,那么一个程序员就可以掌控它了。大多数语言可 以由一个设计师自己创造出来。Pascal:Wirth。C: Ritchie。C++: Stroustrup。Java: Gosling. C#:Hejlsberg。Rebol: Sassenrath。Python:van Rossum.PHP: Lerdorf. Perl:Wall. Ruby: Matsumoto。Lua: Ierusalimschy. E:Miller。JavaScript:Eich。

大多数语言失败之处在于不够清晰。而剩下不多的语言能够一直在单个项目或公司中使用下去。也只有极少数量的语言成为重要的语言。

大体上说,有两种途径会使某种语言变得更重要。第一是它能让人类思想光辉发射光芒。Smalltalk和Scheme都具备这种特质,虽然这些语言并不广泛使用,现在看也过时的了,但历史上它们被公认为是杰出的语言,并对后世的语言设计带来深远的影响。

第二是他本身的流行程度怎么样,这体现了语言其重要性。

程序员在选择一门编程语言的时候,必须再三考虑很多东西,不过到了编写web浏览器的时候当前唯一的选择便是JavaScript

JavaScript可算是一种乖张、亦正亦邪的语言,其貌不扬。它这种乖张的特性给它带来极其糟糕的声誉。DOM文档对象模型也与JavaScript同休公戚,是一个让人不太讨好的API。在理清了JavaScript的概念之后关于DOM各种乱七八糟的东西又随着来(译注:跨浏览器的障碍)。有许多人嚷着要改进JavaScript,但就目前web开发的状况而言可改善的余地很少。JavaScript语言的功能不够清晰,包括别扭的交互操作或失败的设计。正如Emperor Joseph所说的,这语言搞太多花样了。

嗯,那这个JavaScript的 缺失之处这么多,一点都讨好,怎么还能做Web的龙头编程语言?回顾当时萌芽阶段,那位仁兄Brendan Eich就有这个本事,能够说服当时Netscape的秃头老板,要做Navigator自己的脚本语言,还要不是新的语言不去做,——就这样,匆匆忙忙 地设计出一门新的语言并实现出来,还真的没有别的语言能代替这种需求。为了能蚕食Netscape的市场份额,微软的IE团队通过逆向工程小心翼翼地得到 Netscape的语言,尽管明显有许多不足但也不管三七二十一了。其他浏览器厂商亦效仿微软的做法,因此不存在web浏览必须实现的是“标准的JavaScript”之说法。除了JavaScript外,没有其他语言的实现可以在浏览器内全部行得通。再者,互联网发展一切充满着未知,因此不存在对语言仔细地调研,并从没有什么前期性的调研或周密的设计。它只是出自Netscape之手,然后不断被复制而已。若我们刻意地、人为地、费煞苦心地创造一个类似JavaScript的东东而且为它过早地去建立一个标准,那么说不定这不是我们想要的。

尽管JavaScript充满着缺点,但深入其内核是有许多地方错有错着的。当你一步一步慢慢到内部了解其奥秘,变会发现JavaScript是一个精练而且强大的编程语言。许多Ajax库现在用JavaScript来处理DOM,以网页的形式来生成应用程序的交互平台。Ajax变得更为流行正因JavaScirpt还算可以的,而且某些方面还超乎我们的想象。世界上最为流行的JavaScript曾经是世界上最受误解的语言。以其明显的缺陷、不时髦的编程模型、令全世界都误导的简介与它那个不相称的名字,曾经让大多数聪明的程序员觉得毫无价值而遭到抵制。但Ajax给了JavaSciprt二次新生。

正因为JavaScript是浏览器的语言,正因为web浏览器渐渐成为传送消息程序中的重要部分,正因为JavaScript并不是太糟糕,JavaSciprt已经成为世界上最流行的编程语言。由于流通性在加大,同时也被应用在一些嵌入式程序中,——JavaScript已经越来越重要了。

It is better to be lucky than smart..

作者:Douglas Crockford
原文:The World’s Most Misunderstood Programming Language Has Become the World’s Most Popular Programming Language

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Java修道之路,问鼎巅峰,我辈代码修仙法力齐天
<center<fontcolor00FF7Fsize5face"黑体"代码尽头谁为峰,一见秃头道成空。</font<center<fontcolor00FF00size5face"黑体"编程修真路破折,一步一劫渡飞升。</font众所周知,编程修真有八大境界:1.Javase练气筑基2.数据库结丹3.web前端元婴4.Jav
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
3年前
More Effective C++
MoreEffectiveC35个改善编程与设计的有效方法只有深入了解C编译器如何解释代码,才有可能用C语言写出健壮的软件.C的难学,不仅在其广博的语法,语法背后的语义,语义背后的深层思维,深层思维背后的对象模型;C
Wesley13 Wesley13
3年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
Wesley13 Wesley13
3年前
00_设计模式之语言选择
设计模式之语言选择设计模式简介背景设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式(Designpattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这