aaaaaaaaaaaa

The mail from 163

Advertisements

煮花生

上回炖鸡剩了些大料(北京超市里叫八角)。今天到超市买了一袋生花生,花了一块七毛钱:)。

回到家里,洗干净,在放了些咸盐,呵呵。放到电饭锅里一煮,好吃!!

放上照片跟大家分享一下。

已经吃了好多了,呵呵,这是剩下的。

SCJP

前天中午突然间收了,SCJP的证书。虽然考得成绩不高。但是受到证书,心里还是很激动地。^_^

 

拿着礼拜六发的第一笔工资,和MM昨天,买了一瓶科罗纳、一瓶布朗酒。

JavaScript:世界上误解最深的语言

 JavaScript:世界上误解最深的语言

JavaScript,是世界上最流行的编程语言之一。事实上世界上的每一台个人电脑都安装并在频繁使用至少一个JavaScript解释器。JavaScript的流行完全是由于他在WWW脚本语言领域中的地位决定的。

Despite its popularity, few know that JavaScript is a very nice dynamic object-oriented general-purpose programming language. How can this be a secret? Why is this language so misunderstood?

尽管它很流行,但是很少有人知道JavaScript是一个非常棒的动态面向对象通用编程语言。这居然能成为一个秘密!这门语言为什么被误解如此之深?

The Name

名字

The Java- prefix suggests that JavaScript is somehow related to Java, that it is a subset or less capable version of Java. It seems that the name was intentionally selected to create confusion, and from confusion comes misunderstanding. JavaScript is not interpreted Java. Java is interpreted Java. JavaScript is a different language.

Java- 前缀很容易使人联想到Java,并认为它是Java的子集或简化版的Java。看起来最初给它选这个名字是别有用心的,是故意混淆概念、故意制造"误解"的。JavaScript不是解释执行的Java。Java是解释执行的Java。JavaScript是另外一种语言。

JavaScript has a syntactic similarity to Java, much as Java has to C. But it is no more a subset of Java than Java is a subset of C. It is better than Java in the applications that Java (fka Oak) was originally intended for.

JavaScript的语法和Java有相似之处,这就像Java的语法和C很相像一样。但是它不是Java的子集,就像Java不是C的子集一样。它在Java(Oak)最初打算进军的领域中比Java更好。

JavaScript was not developed at Sun Microsystems, the home of Java. JavaScript was developed at Netscape. It was originally called LiveScript, but that name wasn’t confusing enough.

JavaScript不是Sun Microsystems的产品,Sun是Java的家。JavaScript是在Netscape被开发出来的。它最初叫LiveScript,嗯……还是这个名字好。

The -Script suffix suggests that it is not a real programming language, that a scripting language is less than a programming language. But it is really a matter of specialization. Compared to C, JavaScript trades performance for expressive power and dynamism.

-Script后缀让人认为他不是一门真正的编程语言,和一门"编程语言"还有相当的差距。但是这只是应用领域的问题。和C相比,JavaScript是牺牲了性能但换来了丰富的表现力和灵活的形态。

Lisp in C’s Clothing

披着C皮的Lisp

JavaScript’s C-like syntax, including curly braces and the clunky for statement, makes it appear to be an ordinary procedural language. This is misleading because JavaScript has more in common with functional languages like Lisp or Scheme than with C or Java. It has arrays instead of lists and objects instead of property lists. Functions are first class. It has closures. You get lambdas without having to balance all those parens.

JavaScript的类C语法,包括大括号和语句的形式,让它看起来像普通的面向过程编程语言。这是一种误解,因为JavaScript和函数式语言,比如 Lisp 或 Scheme,有更多的相似之处,而不是和C或Java。它使用数组而不是列表,使用对象而不是属性列表。函数是第一位的,它有闭包(closures),另外你还可以使用lambda表达式。

Typecasting

类型转换

JavaScript was designed to run in Netscape Navigator. Its success there led to it becoming standard equipment in virtually all web browsers. This has resulted in typecasting. JavaScript is the George Reeves of programming languages. JavaScript is well suited to a large class of non-Web-related applications

JavaScript最初被设计成在Netscape Navigator中运行,它在Navigator中的成功引领它成为事实上所有web浏览器的标准装备。这就造就了"类型转换"。JavaScript是编程语言中的 George Reeves(超人),是大量非web程序的称职之选。

Moving Target

移动靶

The first versions of JavaScript were quite weak. They lacked exception handling, inner functions, and inheritance. In its present form, it is now a complete object-oriented programming language. But many opinions of the language are based on its immature forms.

JavaScript的最初几版非常弱,没有异常处理,没有内部函数和继承。现如今,它已经成为完全面向对象的编程语言。但是这门语言的许多思想是基于它不成熟的形式的。

The ECMA committee that has stewardship over the language is developing extensions which, while well intentioned, will aggravate one of the language’s biggest problems: There are already too many versions. This creates confusion.

ECMA委员会,这门语言的管家,正在对它进行扩展,也在蓄意恶化它最大的问题:有太多的版本。这是混乱的根源。

Design Errors

设计上的错误

No programming language is perfect. JavaScript has its share of design errors, such as the overloading of + to mean both addition and concatenation with type coercion, and the error-prone with statement should be avoided. The reserved word policies are much too strict. Semicolon insertion was a huge mistake, as was the notation for literal regular expressions. These mistakes have led to programming errors, and called the design of the language as a whole into question. Fortunately, many of these problems can be mitigated with a good lint program.

没有什么编程语言是完美的。JavaScript也有它设计上的错误,比如重载的+号随着类型的不同既表示"相加"又表示"连接",和本该避免的有错误倾向的 with 语句。它的保留字策略过于严格。分号的插入是一个巨大的错误,比如作为字面正则表达式的符号时。这些失误已直接导致编程中的错误,也使这门语言的整体设计遭人质疑。还好,这些问题中有许多都可以在良好的 lint 程序中得以缓解。

The design of the language on the whole is quite sound. Surprisingly, the ECMAScript committee does not appear to be interested in correcting these problems. Perhaps they are more interested in making new ones.

这门语言的整体设计(上的问题)是相当明显的。奇怪的是ECMAScript委员会并没有对修正其中存在的问题表现出太大的兴趣,也许他们更热衷于制造新的问题。

Lousy Implementations

糟糕的实现

Some of the earlier implementations of JavaScript were quite buggy. This reflected badly on the language. Compounding that, those implementations were embedded in horribly buggy web browsers.

JavaScript的一些早期实现有许多bug,这反过来对语言本身产生了很坏的影响。更糟糕的是这些满是bug的实现是嵌入在满是bug的web浏览器中的。

Bad Books

糟糕的书

Nearly all of the books about JavaScript are quite awful. They contain errors, poor examples, and promote bad practices. Important features of the language are often explained poorly, or left out entirely. I have reviewed dozens of JavaScript books, and I can only recommend one: JavaScript: The Definitive Guide (4th Edition) by David Flanagan. (Attention authors: If you have written a good one, please send me a review copy.)

几乎所有的JavaScript书都是相当可怕的。它们包含错误,包含不好的例子,并鼓励不好的做法。JavaScript语言的一些重要特性它们要么没有解释清楚,要么根本就没有提及。我看过很多JavaScript的书,但我只能推荐一本:David Flanagan著的 JavaScript: The Definitive Guide (4th Edition)  (《JavaScript权威指南 第四版》)。(作者们请注意:如果你们写出了好书请发给我一份副本,我给你们校对。)

Substandard Standard

“准标准”的标准

The official specification for the language is published by ECMA. The specification is of extremely poor quality. It is difficult to read and very difficult to understand. This has been a contributor to the Bad Book problem because authors have been unable to use the standard document to improve their own understanding of the language. ECMA and the TC39 committee should be deeply embarrassed.

ECMA公布的官方语言规范的质量极其的差。不仅难读而且极其难懂。它可为那些"糟糕的书"做出了不小的贡献,因为那些作者无法通过这个标准文档来更深地理解这门语言。ECMA和TC39应该为此感到非常尴尬。

Amateurs

业余者

Most of the people writing in JavaScript are not programmers. They lack the training and discipline to write good programs. JavaScript has so much expressive power that they are able to do useful things in it, anyway. This has given JavaScript a reputation of being strictly for the amateurs, that it is not suitable for professional programming. This is simply not the case.

使用JavaScript的人大多不是程序员,他们缺少写良好程序的培训和训练。JavaScript有非常强大的表现力,不管怎样他们也能使用它做有用的事情。这给了JavaScript一个”全然适合业余爱好者而不适合专业程序员“的名声。这很明显是一个错误。

Object-Oriented

面向对象

Is JavaScript object-oriented? It has objects which can contain data and methods that act upon that data. Objects can contain other objects. It does not have classes, but it does have constructors which do what classes do, including acting as containers for class variables and methods. It does not have class-oriented inheritance, but it does have prototype-oriented inheritance.

JavaScript是面向对象的吗?它有对象,它的对象可以包含数据以及对数据进行操作的方法,对象也可以包含其他的对象。它没有类,但是它有构造函数来做类的事情,包括声明类的变量和方法。它没有面向类的继承,但是他有面向原型的继承。

The two main ways of building up object systems are by inheritance (is-a) and by aggregation (has-a). JavaScript does both, but its dynamic nature allows it to excel at aggregation.

构建对象系统的两大主要方法是继承(is-a)和聚合(has-a)。这两者JavaScript都有,但是它的动态天性允许有比聚合更好的实现方式。

Some argue that JavaScript is not truly object oriented because it does not provide information hiding. That is, objects cannot have private variables and private methods: All members are public.

一些关于JavaScript不是真的面向对象的争论其理由是它没有提供信息隐藏。也就是说JavaScript的对象没有私有变量和私有方法:它的所有成员都是公开的。

But it turns out that JavaScript objects can have private variables and private methods. (Click here now to find out how.) Of course, few understand this because JavaScript is the world’s most misunderstood programming language.

但是事实是JavaScript 的对象可以有私有变量和私有方法(点击这里来看如何实现)。当然,之所以很少有人知道这个是因为JavaScript是世界上误解最深的语言嘛。

Some argue that JavaScript is not truly object oriented because it does not provide inheritance. But it turns out that JavaScript supports not only classical inheritance, but other code reuse patterns as well.

另一些关于JavaScript不是真的面向对象的争论其理由是它没有提供继承。但是事实是JavaScript不但支持经典的继承,而且支持其他一些代码重用的模式。

觉得这篇文章很不错,转载过来与大家一起分享.

英文地址:http://www.crockford.com/javascript/javascript.html

中文翻译地址:http://blog.csdn.net/uoyevoli/archive/2006/05/19/744915.aspx 译者:袁晓辉

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1731605

[收藏到我的网摘]   java060515发表于 2007年08月08日 15:02:00

是谁在宣扬Java语言的过时论?

夜神牙晓 发表于 2007-8-2 14:01:00

Java过时了吗?听起来有些人会感到惊讶和不屑,但是网上关于Java过时争论却一直没有停止过,是谁在高谈Java过时论,难道Java真的走到了生命的结点了吗?
  RoR挑战Java Web领域
  Java过时论的传言由来以久,随便在Google上一搜就能搜到191,000条数据,这些数据足可以说明很多人在关心Java技术的过时与否,在众帖子最显眼的便是崇尚敏捷WEB开发的Ribbin大师,Ribbin曾经说过“四年以前,当我开始鼓吹Hibernate,抨击EJB的时候,遭到的是群起而攻之的场面,但是不到一年之后,Hibernate已然得到了普及和大多数Java开发人员的认可;
  在三年以前,当我开始赞誉Spring的时候,Spring还面临着EJB3的阴影,以及EJB2对其不登大雅之堂的指责,然而不到一年的时间,Spring已经成为绝大多数Java开发人员的首选;
  在两年以前,我极力希望宣传WebWebWork,唱衰JSF,时至今日,WebWebWork以Struts2.0的身份容登大雅之堂,而JSF还在靠厂商死挺着;而当一年之前我开始采用RoR开发JavaEye的时候,RoR的置疑之声还甚嚣尘上,但当我在今年初预言07年下半年RoR在国内会被广泛接受的时候,很多人已经笑不出来了;”
  Ribbin多年来一直是Java的企业咨询专家,后期投入到RoR的开发中,做为大师我想他的这些预言有绝对的权威性,RoR在WEB领域的表现是勿庸置疑的,而Java在Web领域这么多年,开源框架的混乱,学习的曲线坡度增加,吓退了很多开发者,转而投向其它开发语言,Ruby号称目前主流的WEB开发技术当中开发速度最快的开发工具,可以达到j2ee框架开发速度的5-10倍,单从这数字上可以看出,RoR在Web领域进步开始超越Java等其它众多开发语言。
  数字终归是数字,我们还要具体情况具体分析,就目前的情况来说,Ruby还挑战不了Java王者的地位,从可以预见将来Ruby也不会取代Java的地位。这是因为: 促成Java成为当今天主流开发平台,是有很多因素综合作用导致的,而且也有一个历史机遇的问题。当应用软件开发方式从C/S转向B/S的时候,Java抓住了历史机遇,造就了目前全球多数应用软件厂商都基于Java开发软件的事实,Java在整个全球的商业价值。并且从从Java自身的语法角度来说,也非常适合目前软件外包产业的大规模分工协作。此外Java并没有固步自封,在开源社区和商业厂商双重强力推动下,Java自身仍然在快速的进步,生命力很顽强。
  Ruby目前只是在Web开发领域对比Java有很强的开发效率优势,但并没有Java那么齐全的产品线,从基础软件到Web应用软件,从桌面到嵌入式开发,Java无处不在。
  Java是主流的工业级别的编程语言这是一个即定的事实,就单个程序员个体的编程效率来说,远不如Ruby,但是很多软件公司,特别是软件外包往往是几十人,上百人大规模团队协作开发,在这种情况下,个体的编程效率并不重要,重要的是团队之间协作和模块独立分割以及组合,Java能够很好的满足这种软件开发模式。但是Ruby显然不适合这种软件开发模式,Ruby更适合小规模团队的开发(一般少于10人),采用敏捷开发方式,高效率的开发软件。
  所以各位对Java有兴趣的开发人员用不着恐慌,语言的多元化发展给我们程序员提供了更多的开发选择,Java多年来的基础还在,到目前为止还没有一种超越Java的开发语言出现,Java过时的说法只是一种推测,一种想法而已。
  Ajax走出PC时代Java移动领域受冲击
  Java过时论源于WEB领域的受到冲击,但是Java在移动领域多年“太平天国”的局面也被打破,2007年月初诺基亚论坛副总裁Lee Epting证实,世界上最大的手机生产商正在研究“移动AJAX”技术,该技术为诺基亚论坛的130万开发者开发出更丰富的手机应用提供支持。
  并且提出Java ME现在在业务模型方面已经曝露出严重的缺陷, AJAXWorld 2006大会的发言人Ajit Jaokar表示,xHTML也将走向它生命的结点,因为Ajax提供了超级用户界面,末来将成为移动应用平台的最佳选择。
  诺基亚走向AJAX的另一个原因可能是来自于微软的.NET Compact Framework的压力,诺基亚对此并不直接支持,而不得不坚持用Java ME、Symbian OS,以及最近的C++。
  业内分析家认为,AJAX与C++和Java相比,不是一个高效的技术;因为它需要更多的处理能力和内存来达到同样的效果,但是他的确可以迅速的进行内容的开发,而对于移动互联网来说,对于高质量的内容有很大的需求,因此诺基亚选择了Ajax。
  AJAX也能为下一代SIM芯片上的内容提供理想的平台,这一点有的开发者已经进行了成功的部署。
  2007年6月29日, Apple在美国的旧金山,发布了跨越时代的手机iphone,Ajax真正走出PC时代,从而实现了灰姑娘到白雪公主的转变,Ajax的在移动领域成功,给Java在移动领域构成的威胁是显而易见的。
  Iphone的推出是否会在业界产生连锁反应,我们无法判断,但是诺基亚的掉头转向ajax,将会使Java在移动领域方面面临一次大的滑坡,也为高调宣传Java过时论者提供了有力的证据。但是Sun公司不会眼看多年打下的江山就此崩盘,jphone的推出也许是对iphone最有力回击,说明Java fx开始绝地反击,群雄争霸的乱象不可避免。
  唱衰Java论者的高调宣言
  在Web领域和移动领域,如果Java受到的冲击还只是零星碎片的话,形成不了集团优势,那么来自微软的全方位进攻,绝对是泰上压顶,.NET是未来开发领域的趋势,是.NET狂热者们的高调宣言。
  虽然donet是抄Java的,但是却抄的很讨巧,能够让大众接受,微软把它集成技术方面的优势发挥的淋漓尽致,易用,快速成为donet的王牌招式,反观Java,就令人失望得多,Java虽然创造了软件开发的神话,却没有持续辉煌的神话。
  即使Java在诸多方面存在着不足,但是我们不能否定它存在的价植,据Sun公司2006年评估数据显示,Java拥用全球450万开发者,与去年相比增加12%,25亿兼容Java的设备,自2004年6月以来增长42%, 10亿Java Card,自2004年6月以来增长67%; ?截止至2005年6月,支持Java的手机数量已达到7.08亿部,于2004年6月相比,增长了23%,7亿台PC计算机,自2004年6月以来增长8%,除此之外,还有上百万台机顶盒、医疗设备、彩票终端机、打印机、网络摄像头、停车付费系统等。这些光环的背后在告诉我们Java过时之路还很远。
  即使.Net获得成功了,Java也不会退出舞台,因为Java的跨平台性决定了Java必须留下来,他会随着Unix走向何方?这还是一个未知数。现在Sun公司已经由盛转衰是一个不争的事实,但是对java过时论地宣扬还为时过早。