首页 » 读书笔记 » 软件随想录

软件随想录

More Joel on Software. by Joel Spolsky

软件随想录 - 程序员部落酋长Joel谈软件。阮一峰 [译]。

此书为09年9月图灵赠书(参与社区活动,写篇300字书评,获得赠书)。

到京东购买

11 字体平滑、反锯齿和次像素渲染

苹果、微软都采用次像素渲染(subpixel rendering)技术。苹果:字体算法要尽量保持原始设计样式,哪怕有损屏幕清晰性。微软:保证屏幕显示清晰,哪怕背离字体原始设计。苹果字体在屏幕上显得毛茸茸的,边界不是很清晰,但字体族(font family)间的区别明显,能像印刷品那样显示出字体设计中的细微差别;微软奉行实用主义原则,有利于屏幕阅读。

苹果向来注重桌面出版和平面设计,屏幕显示和最终印刷的效果很接近,当判断文本域的颜色深浅时,这个特性尤其有用。微软则会把毛茸茸的边缘用细线代替,Georgia、Verdana字体完全按像素位置设计,在屏幕上很漂亮,印刷出来却乏善可陈。

23 让错误的代码显而易见

Joel第一份工作(1983年9月)在一家以色列大型面包厂工作,每个晚上使用6个像航空母舰大小的巨无霸烤箱生产大概10万个面包。面包厂对“干净”的定义是:机器表面和地板不能沾有面团粉,垃圾中不能有发酵后的面粉。将烤箱内部擦得亮堂不算干净,烤箱大概每10年清洁一次;薄油脂则表明机器刚被清洁过(这与Joel或我们大多数人对干净的定义有很大出入,说明一个问题,外行无法快速定义什么叫干净。

引申到编程。初期,我们追求一致的代码风格(coding style),会指定代码风格规范(coding convention)。继而关注风格以外的东西。接下来是吹捧匈牙利命名法和抨击异常处理。接下来是全文最为出彩的地方,纠正我们对匈牙利命名法的误解。

匈牙利命名法(Hungarian notation)的发明人是微软程序员Charles Simonyi,他主导Word项目。在Simonyi版的匈牙利命名法中,每个变量以小写字母组成的标签打头,表明变量中包含什么种类(kind)的数据。变量看起来像匈牙利文,而Simonyi来自匈牙利,这种命名法叫匈牙利命名法自是理所当然,而且它也是非常有用的。例如:安全的字符串以s打头(safe string),不安全的字符串以us打头(unsafe string),字节数变量以cb打头(count of bytes),rw和col分别表示行(row)和列(column),ix表示数组索引(index),c表示计数器(count),d表示数量差额(difference,如dx表示宽度)。当我们看到:

rw = cb;

这样的赋值,几乎可认定这行代码存在问题(将字节数赋予表示行号的变量),可拉响空袭警报。

这种命名法叫“应用型匈牙利命名法”(Apps Hungarian),因它在应用程序部(Applications Division)中使用。后来这种命名法渐渐走样了,变成一种叫“系统型匈牙利命名法”(Systems Hungarian)的东西,后者的样子大家都很熟悉:如l表示long、ul表示unsigned long、dw表示double word等。这种用法臭名昭彰,但又广为流传。特别是Windows文档中,将之作为变量命名标准,Charles Petzold的Programming Windows等书又推波助澜。

很多年后,Windows程序员发起大暴动(Great Rebellion),反抗匈牙利命名法。直到后来,微软作出表态,不建议使用匈牙利命名法。而今,Joel刨根问底提供的信息就是,这一切错误的来源是:Simonyi文档中用类型(type)而非种类(kind)来修饰前缀标签,而读他文档的人又误解了种类之意,将之传播为变量类型。

Joel感到痛心疾首,并认为Simonyi虽然做出了伟大的贡献,但只写出了艰涩的文档,又因他人之误解,导致之后几代程序员都被误导。这段故事Joel讲的非常精彩。接下来,Joel再次痛骂异常处理。

分享

0

评论

comments powered by Disqus