重构

重构(Refactoring)是指改变代码的结构和组织,同时保持原有功能逻辑不变的过程。Eric S. Raymond 认为“重构的原则性目标就是提高正交性”。正如许多物理学家所坚信的,万物运行的规律应该是简单、简洁的一样,在软件开发中,要完成某个功能,总应该存在着一种简洁、清晰的实现。软件重构的目标,就是要追求这样的完美境界:“完美之道,不在无可增加,而在无可删减。”(引自安东尼·德·圣埃克苏佩里[法],论飞机设计)

在“这个设计能行吗?”之后要提出的头几个问题就是“别人能读懂这个设计吗?这个设计优雅吗?”

第二系统综合征(Second-System Effect)

设计一个系统有两种方式:一种是尽量简单,这样显然不会有什么问题;另外一种是,尽量复杂,这样没什么显然的问题。 第一种方法其实更难。它需要从复杂的自然现象中发现简单的物理规律的那种技能、投入、洞察力,甚至是那种灵感,同时还需要你能接受你的目标受限于物理、逻辑和科技的约束,以及在目标间有冲突的时候可以妥协。 —— Tony Hoar,图灵奖获奖感言

在《编程人生》中,Joshua Bloch 有这样的观点:

在大多数情况下,程序员的时间比计算机的时间更宝贵。但是当你的程序运行在成千上万台机器上的时候,就完全不同了。所以我们写的有些程序(例如谷歌的索引服务器的内循环程序),使用那些可能不那么安全的语言,榨出每一点值得榨出的性能。

我要重点说说一类人,用 Kevin Bourrillion 的话来说,他们“缺乏感同身受的基因”。如果你不能把自己想象成使用你的 API、你的语言的普通程序员,那么你就没有办法做一个好的API或者语言设计者。