Seibel:除了命名好变量,尽量少的复制粘贴以外,你经验丰富后,还有哪些写程序的习惯改变了?
Bloch:随着年龄的增长,我逐渐意识到编程不仅仅是让程序运行而已;编程是创造一个易于理解的、可以维护的、高效的作品。一般来说,我发现,干净整洁的代码,往往运行起来更快。这与流行观点正好相反。而且即使它们不快,也可以很容易地让它们变快。正如人们所说的,优化正确的代码比改正优化过的代码容易多了。
我的一些改变是跟具体语言相关的。每种语言都提供了一个工具箱。你要使用正确的工具,在这种语言中正确的工具在另外一种语言中可能不是最好的。举一个简单的例子:如果你用Java 5,使用枚举来代替整数常量或者布尔常量可以大大简化程序,让它更安全,更可靠。
Seibel:说到这儿,你能否谈谈如何能快速熟悉一种新语言?
Bloch:这跟人类的语言很类似。一种方法是学会很多语言。如果你已经熟悉意大利语和西班牙语,那么学葡萄牙语就不需要花太多时间了。你知道的越多,你能吸收的就越多。
学习一种新语言的时候,要利用以前所学的语言的功底,但是也要保持开放的心态。有些人执著于一种理念:“这就是写所有程序必须遵循的方法。”我不说是哪种语言,但是某些语言,出于某种原因,令人执著于这样的理念。当他们开始学习新的语言的时候,他们批评这种语言跟真正的神的语言的所有不同之处。当他们使用新的语言时,他们极力使用真正的神的语言的方法去写。这样,你就会错过这个新语言真正的独特之处。
这就像你本来只有一个榔头,有人给了你一个螺丝刀,你说:“唉,这不是一把好榔头,但是我应该可以倒着抓住螺丝刀,用螺丝刀把来砸东西。”你得到了一个很烂的榔头,但事实上它是一把很不错的螺丝刀。所以你应该对所有事物保持开放和积极的心态。当然,最重要的是代码!代码!代码!要多用语言,这样才能学得更快。
Seibel:为什么人们对所选的计算机语言那么虔诚?
Bloch:我不知道。但是选择一种语言时,所考虑的不仅仅是一系列技术上的权衡,而是在选择一个社群。这就像选择一个酒吧。没错,你希望去一个提供美酒的酒吧,但是美酒不是最重要的。主要是那个酒吧里都有什么样的人,他们在谈论些什么。选择计算机语言也是这样的。时间一长,就这门语言也形成了一个社群,社群里不仅仅有人群,还有他们的软件成果,如工具、库等。这就是有些理论上看起来更好的语言无法成功的原因,他们无法在周围构建成功的社群。
Seibel:要是这么理解的话,Java非常有趣,它有两个社群。一个是实现者和系统开发者,也就是在Javasoft、Weblogic或者类似地方工作的人们。另一个是所有用Java、应用服务器、构建好的框架来构建商业应用的人们。这两个酒吧差别非常大。
Bloch:与Java或者其他语言关联的社群很多。如果语言周围没有形成社群,这通常表明,要么这个语言无人问津,要么就还很不成熟。语言繁荣发展,就会自然地表现为出现越来越多各式各样的社群。同时,如果对一门语言的投入总额增长了,那么它的价值也会相应地增长。