2008年7月31日星期四

快乐的工作着


在刚开始学正则表达式的时候,一看例子那些乱七八糟的符号~~麻了!觉得这么难我能会吗?
可是看了几天然后实践一做,嗨,不就这么几个东西嘛,有什么难得,就开始有点想不通当初为什么觉得难了!
----------------------------------------------------
这就是所有学语言的障碍所在,在看书的时候,觉得,哎,行了,例子都能看懂,会了!到真正遍的时候又不会了,我当初学C语言的时候也是,不停的看书看书看书.......!觉得理论都可以了,都会了,例题会分析了,结果一上机,又木了!

实践是检验真理的唯一标准,这是多么无所不能话啊
-----------------------------------------
每天上班都会进过Google公司,在他附近有不少知名公司,可是每当看见google的标志了时候,心情又是一阵激动不已!口水ing!
-----------------------------------------
今天老涂做个个巨搞笑的事情,我们下班走在路上的时候,因为下雨嘛北京这几天,路上有好多积水!然后,我们正在一路走一路说着的时候,一个MM开着个别克过来了,“刷'的一下,水开始做抛物线运动,老涂激动的说了一句”我顶你个肺啊”,其实他也不是要骂他,就是激动了一下,难知道,那MM突的一下就停了,冒出脑袋说:“对不起啊,我已经开的很慢了,哪知道还是。。。。不好意思啊”,搞得老涂巨尴尬。郁闷的说:“好了,我是受害者,这下变成我没素质了”崩溃ing!!!!

2008年7月29日星期二

努力的奋斗着

为了能拿到更高的薪水让我的大学生活水准更高点,为了能积累更多的知识让我和老婆以后的生活更惬意,为了能让自己在公司的地位和尊严更高。。。我只能奋力的学习!
目前在全力攻克java和数据结构中。
希望我能以最快的速度攻克他们。
加油!

成功男人的标准!

成功的男人,最明显的特点就是自信和乐观。在他面前,没有翻不过的山,没有趟不过的河;在他眼里,砍头估计不会有碗大的疤,顶多也就茶杯那么大。

成功的男人相信两句话,第一,“天无绝人之路”。上帝在关闭一扇门的同时,一定会记得为他开一扇窗的;第二,“车到山前必有路”。只要动脑筋,办法总比困难多。

成功的男人敢于负责,善于负责,但从不轻易许诺负责。只要他答应了负责,无论是事业还是女人,他都会负责到底。

成功的男人处在厄境时,不会因为别人看不起就自暴自弃,也不会因为环境所迫就蝇营狗苟,“贫贱而不移”。他知道自己缺少的只是机会而已,他的理想依然远大,他的志趣依然高尚。

成功的男人失误时,从不为自己找任何借口,也绝不把责任推到别人身上。他知道,错了就是错了,摔倒了就是摔倒了。要走向成功,首先
先要学会面对失败,不敢面对失败,永远也不可能成功。怨天尤人时,也许对手走得更前了。

成功的男人失败时,既不歇斯底里的去放纵和发泄自己,也不悲观失望、一蹶不振,更不会丢下他所爱的人和爱他的人走上绝路。他会像一只受伤的狮子,找个谁也找不到的地方让自己安静,默默地舔干伤口上的血迹,整理自己的羽毛和武器,然后精神抖擞地走出来,准备下一场战斗。

成功的男人成功时从不得意忘形,即使在取得了像“建立新中国”这样辉煌的胜利时也一样,因为他知道这只是“万里长征走完了第一步”,更何况“山外有山,天外有天”。在别人欢呼雀跃为他庆贺胜利的时候,他会把自己关在书房里,在“沙盘”前谋划着下一步的行动。

成功的男人对待员工像对待自己的兄弟姐妹一样,因为他知道,他之所以成功,正是由于他们的辛勤和努力;更重要的,他懂得,在员工心目中,他对员工的态度,就是员工对待公司的态度。把员工当兄弟姐妹,员工才会把公司当家。

成功的男人一定有很多朋友,但知心的朋友一定只有几个。成功时围在他身边的不一定是他的“死党”,失恋时想找人去酒吧喝酒,打电话
话的第一个人,一定是他的“铁哥们”。

成功的男人背后不一定站着一个女人,但一定有一个女人,这个女人也许是他的动力,也许是他的压力,也许是他目标,也许是他的耻辱,也许什么也不是。

成功的男人不一定有才,但一定有能;不一定聪明,但一定灵活;智商不一定很高,但情商一定很高;不一定会做事,但一定会做人;不一定酒量大,但一定肚量大

成功的男人像尤今笔下的“古井”,看上去波澜不惊,实际上却一眼望不到底。和他交往得越久,你就会像吸鸦片一样,越来越迷上他。

你们这帮人有中国人的尊严吗?

气死了,在Mariah Carey吧居然有人说,Mariah Carey没巨款,鄙视她,Mariah Carey对灾区的人民慰问了几句,居然说人家假惺惺。好吧,残疾人(仅指思想残废),我来告诉你:

1. 中国受灾了没错,可是,你又有什么权利向别人乞讨捐款,人家捐不捐是人家的事情,不捐不代表没爱心,你怎么可以乞讨呢?(指某些说这个那个明星不捐或捐那么少的人),中国人要有骨气知道吗?捐了,我们接受,这是你们的爱心,我们谢谢你!不捐,也没关系,我们可以靠自己的力量再重建,当然,我们也不会恨你,抵制你什么的。

2. 很多台湾香港艺人捐了不多,然后就有残废在那骂,说你妈的我喜欢你那么多年你居然只捐了那么点,妈的我要抵制你,我要号召抵制你。用你的残疾大脑想一下,台湾谁统治的,是不是共产党统治的,他们能捐已经是很不错了,冒着政府啊,百姓啊,政治啊前途啊等压力捐你已经不错了,别再无耻的索求更多了,还有,你喜欢人家那是你自己的事,关人明星鸟事!

3.整天抵制这个明星抵制那个明星,就因为人家捐少了!别丢人了,真的!中国自强不息的精神是不是教你危难的时候不自己帮自己靠外人捐款了,外人捐的不够多就骂人了,抵制了?

4.关于有残废地址迪奥我想说的事,莎朗只不过是个跳梁小丑而已,管人迪奥什么是,她又不是迪奥总裁,她所发表的言论又不能代表迪奥,你抵制有什么意义?我看是国内的有些品牌从中作梗吧!

5.气死了,不说了,真丢中国人的脸,好好反省自己,残废们,都是一群没大脑而又不理性的人

喜欢google的bolg

本来以前听说google的blog速度慢什么的,没建,但是今天一看,不错,有着google一贯的风格
在MySpace被恶心坏了,只要稍微有点不和谐的内容,比如说什么骂共产党啊,骂社会啊,抱怨社会啊,抱怨Myspace没有自由和民主啊什么的,立马被删,真恶心,这也叫blog,不知道他们的脸皮怎么那么厚来着!
好了,不多说了,以后再这安家,不在看那恶心的myspace,同时,也希望大家来google,我可是google的忠实拥护者哦!

Ubuntu创始人呼吁开发Linux桌面软件对抗苹果

Ubuntu Linux创始人Mark Shuttleworth敦促开发一种Linux桌面软件以对抗苹果在这个领域的竞争以及苹果发布的软件.

Shuttleworth本周二晚上在俄勒冈州波特兰举行的O'Reilly开源大会上发表了讲话.他敦促开发一种新的收入模式以便资助免费软件.为此,他提出了基于服务的机制.他还强调了与Windows兼容的重要性.

Shuttleworth强调了Linux桌面软件的开发以及移动应用程序的开发.他说,我们在提供的用户体验方面能超过苹果吗?这在未来两年的建立这种类型的桌面软件中是一个重要的挑战.

他说,在桌面体验方面,我们一定要超过Mac计算机.但是,这在移动领域也同样重要.我们的挑战是如何在不牺牲社区流程的情况下提供简洁明快的东西.

Shuttleworth指出,Linux应该与Wondows联系起来.他强调说,他认为Linux是未来的平台.但是,我们学习如何与Windows一起工作是很重要的.有扩展能力的软件必须能够在这两个平台上都能够运行.

JavaScript演化成为一种重要编程语言

自JavaScript从ECMAScript 版本3那里获得重大更新后,JavaScript 这些年来一直在稳步前进。InfoQ.com一直在关注其官方网站对JavaScript的更新修改。

  网景公司为JavaScript 2.0而出品的ECMAScript版本4在网上可以下载了。jQuery项目的创建者,John Resig在自己的博客上发表了一些观点:

  我认为JavaScript语言经历了许多不同的阶段:

  1 我们需要为web页面写脚本的阶段(Netscape)

  2 标准化阶段(ECMAScript的出现)

  3 JavaScript并不是一个摆设阶段(Ajax的出现)

  4 JavaScript成为一种编程语言

  JavaScript在1995由Brendan Eich(Netscape公司的一名工程师)所创建,于1996年早期和Netscape 2一起发布。JavaScript作为一种语言,在过去一直受人们所研究评论,如Douglas Crockford 这么写道:世界上最为误解的编程语言;最近Google的Steve Yegge这么描述:JavaScript是下一代重要的语言。John Resig在它的博客中继续写道:

  ……JavaScript将会被作为一种重要的编程语言——从web开发的概念中分离出来。

  不再基于web使用

  在Rails上使用JavaScript,应该承认这个项目是非常好的,但是不幸的,现在绝大多数人都在谈论下一个流行的语言如何到来,宣布对非常流行的Ruby on Rails框架的重写,没有人去关注它。事实上,JavaScript,运行于Rhino,也是我们应该去关注的。

  Helma——这个web应用程序框架是在服务器端使用JavaScript开发的,很稳定。

  所有这些说法让我认识到:JavaScript最为一种语言还是具有先进性的。虽然它的主要领域将会是web浏览器(新的JavaScript引擎会继续朝这个方向努力);在将来,JavaScript使用在服务器端将会使另外一个很大的领域。

  引用Steve Yegge博客中的话:

  ……因为下一代流行语言将至(或许18-24月,或许更短,我说不准,总之是即将到来)……

  许多人看到Steve Yeggie坚信下一代流行语言就是Javascript或者是ECMAScript。在Mozilla 页面,你就会明白网景公司想让JavaScript 2.0和ECMAScript版本4 作为一样的语言,只是JavaScript2.0提供少许几个额外特性。JavaScript 2.0草案规范在这里可以找到

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不但支持经典的继承,而且支持其他一些代码重用的模式。

KDE 4.1 Beta 2:前进两步,后退一步?

鉴于最近桌面上遇到的问题,每个人都同意KDE 4.0是一个错误,4.1被指望能矫正错误。但是关于错误是谁造成的,却持有不同的看法。KDE开发者指责发行版在没做好准备之前匆忙发布,用户则谴责开发者改变了一切。在Fedora邮件列表上,有些人呼吁将KDE 3.5作为未来发行版中的可选桌面。有评论员建议KDE应该分开开发,否则结果将是没人使用KDE 4.x。KDE发言人作出了回应,鼓励用户耐心等待即将推出的4.1。最近发布的4.1 Beta 2也许可以提供一些改进的迹象。Linux专家Bruce Byfield在评测后得出结论:“很有可能,KDE用户将不得不等待4.1之后的另一个或两个版本,才能在功能上匹配早期的版本,尤其是在定制化方面。 ”他指出,KDE 4.1的第二个beta仍然会出现莫名其妙的崩溃。

软件工程师不可不知的10个概念

35公里 写道 "出色的软件工程师善用设计模式,勤于代码重构,编写单元测试,并对简单有宗教般的追求。除了这些,优秀的软件工程师还要通晓10个概念,这10个概念超越了编程语言与设计模式,软件工程师应当从更广的范围内明白这些道理(全文阅读):
接口 (Interfaces )
惯例与模板 (Conventions and Templates)
分层 (Layering )
算法的复杂性 (Algorithmic Complexity)
散列法 (Hashing )
缓存 (Caching )
并发 (Concurrency )
云计算(Cloud Computing )
安全(Security )
关系数据库 (Relational Databases )
10. 关系数据库 (Relational Databases)

关系数据库因为在大规模 Web 服务上缺乏可扩充性而颇受微词,然而,关系数据库仍然是近20年来计算机技术中最伟大的成就。关系数据库对处理订单,公司数据方面有着出色的表现。

关系数据库的核心是以记录表示数据,记录存放在数据库表,数据库使用查询语言(SQL)对数据进行搜索与查询,同时,数据库对各个数据表进行关联。

数据库的标准化技术(normalization)讲的是使用正确的方式对数据进行分存以降低冗余,并加快存取速度。

9. 安全 (Security)

随着黑客的崛起与数据敏感性的上升,安全变得非常重要。安全是个广义的概念,涉及验证,授权与信息传输。

验证是对用户的身份进行检查,如要求用户输入密码。验证通常需要结合 SSL (secure socket layer)进行;授权在公司业务系统中非常重要,尤其是一些工作流系统。最近开发的 OAuth 协议可以帮助 Web 服务将相应信息向相应用户开放。Flickr 便使用这种方式管理私人照片和数据的访问权限。

另外一个安全领域是网络设防,这关系到操作系统,配置与监控。不仅网络危险重重,任何软件都是。Firefox 被称为最安全的浏览器,仍然需要频频发布安全补丁。要为你的系统编写安全代码就需要明白各种潜在的问题。

8. 云计算 (Cloud Computing)

RWW 最近的关于云计算的文章 Reaching For The Sky Through Compute Clouds 讲到了云计算如何改变大规模 Web 应用的发布。大规模的并行,低成本,与快速投入市场。

并行算法发明以来,首先迎来的是网格计算,网格计算是借助空闲的桌面计算机资源进行并行计算。最著名的例子是 Berkley 大学的 SETI@home 计划,该计划使用空闲的 CPU 资源分析太空数据。金融机构也大规模实施网格计算进行风险分析。空闲的资源,加上 J2EE 平台的崛起,迎来了云计算的概念:应用服务虚拟化。就是应用按需运行,并可以随着时间和用户规模而实时改变。

云计算最生动的例子是 Amazon 的 Web 服务,一组可以通过 API 进行调用的应用,如云服务(EC2),一个用来存储大型媒体文件的数据库(S3),索引服务(SimpleDB),序列服务(SQS)。

7. 并发 (Concurrency)

并发是软件工程师最容易犯错的地方,这可以理解,因为我们一直遵从线形思维,然而并发在现代系统中非常重要。

并发是程序中的并行处理,多数现代编程语言包含内置的并发能力,在 Java,指的是线程。关于并发,最经典的例子是“生产/消费”模式,生产方生产数据和任务,并放入工作线程消费或执行。并发的复杂性在于,线程需要经常访问共同数据,每个线程都有自己的执行顺序,但需要访问共同数据。Doug Lea 曾写过一个最复杂的并发类,现在是 core Java 的一部分。

6. 缓存(Caching)

缓存对现代 Web 程序不可或缺,缓存是从数据库取回,并存放在内存中的数据。因为数据库直接存取的代价非常高,将数据从数据库取回并放在缓存中访问就变得十分必要。比如,你有一个网站,要显示上周的畅销书,你可以从数据将畅销书榜一次性取回放在缓存中,而不必在每次访问时都去数据库读数据。

缓存需要代价,只有最常用的内容才可以放入缓存。很多现代程序,包括 Facebook,依靠一种叫做 Memcached 的分布式缓存系统,该系统是 Brad Firzpatrick 在工作于 LiveJournal 项目时开发的,Memcached 使用网络中空闲的内存资源建立缓存机制,Memcached 类库在很多流行编程语言,包括 Java 和 PHP 中都有。

5. 散列法(Hashing)

Hashing 的目的是加速访问速度。如果数据是序列存储的,从中查询一个项的时间取决于数据列的大小。而散列法对每一个项计算一个数字作为索引,在一个好的 Hashing 算法下,数据查找的速度是一样的。

除了存储数据,散列法对分布式系统也很重要。统一散列法(uniform hash )用来在云数据库环境下,在不同计算机之间分存数据。Google 的索引服务就是这种方法的体现,每一个 URL 都被散列分布到特定计算机。

散列函数非常复杂,但现代类库中都有现成的类,重要的是,如何对散列法进行细调以获得最好的性能。

4. 算法的复杂性 (Algorithmic Complexity)

关于算法的复杂性,软件工程师需要理解这样几件事。第一,大O标记法(big O notation);第二,你永远都不应该使用嵌套式循环(循环里面套循环),你应该使用 Hash 表,数组或单一循环;第三,如今优秀类库比比皆是,我们不必过分纠缠于这些库的效能的差别,我们以后还有机会进行细调;最后,不要忽视算法的优雅及性能,编写紧凑的,可读的代码可以让你的算法更简单,更干净。

3. 分层 (Layering)

用分层来讨论软件架构是最容易的。John Lakos 曾出版过一本关于大型 C++ 系统的书。Lakos 认为软件包含了层,书中介绍了层的概念,方法是,对每个软件组件,数一下它所依赖的组件数目就可以知道它的复杂程度。

Lakos 认为,一个好的软件拥有金字塔结构,就是说,软件组件拥有层层积累的复杂度,但每个组件本身必须简单,一个优秀的软件包含很多小的,可重复使用的模块,每个模块有自己的职责。一个好的系统中,组件之间的依赖性不可交叉,整个系统是各种各样的组件堆积起来,形成一个金字塔。

Lakos 在软件工程的很多方面都是先驱,最著名的是 Refactoring (代码重构)。代码重构指的是,在编程过程中需要不断地对代码进行改造以保证其结构的健壮与灵活。

2. 惯例与模板 (Conventions and Templates)

命名惯例和基础模板在编程模式中常被忽视,然而它可能是最强大的方法。命名惯例使软件自动化成为可能,如,Java Beans 框架在 getter 和 setter 方法中,使用简单的命名惯例。del.icio.us 网站的 URL 命名也使用统一的格式,如 http://del.icio.us/tag/software 会将用户带到所有标签为 software 的页。

很多社会网络均使用简单命名,如,你的名字是 johnsmith ,那你的头像可能命名为 johnsmith.jpg,而你的 rss 聚合文件的命名很可能是 johnsmith.xml 。

命名惯例还用于单元测试,如,JUnit 单元测试工具会辨认所有以 test 开头的类。

我们这里说的模板(templates )指的并不是 C++ 或 Java 语言中的 constructs,我们说的是一些包含变量的模板文件,用户可以替换变量并输出最终结果。

Cold Fusion 是最先使用模板的程序之一,后来,Java 使用 JSP 实现模板功能。Apache 近来为 Java 开发了非常好用的通用模板, Velocity。PHP 本身就是基于模板的,因为它支持 eval 函数。

1. 接口(Interfaces)

软件工程中最重要的概念是界面。任何软件都是一个真实系统的模型。如何使用简单的用户界面进行模型化至关重要。很多软件系统走这样的极端,缺乏抽象的冗长代码,或者过分设计而导致无谓的复杂。

在众多软件工程书籍中,Robert Martin 写的《敏捷编程》值得一读。

关于模型化,以下方法对你会有帮助。首先,去掉那些只有在将来才可能用得着的方法,代码越精练越好。第二,不要总认为以前的东西是对的,要善于改变。第三,要有耐心并享受过程。