【译文】好代码的11个方面
内容提要
本文讨论了高质量代码的特点,包括外部属性和内部属性。外部属性包括实现目的、易于理解和可扩展性。内部属性包括模块化、恢复创造者意图、简洁表达意图、健壮性、隐藏秘密、隔离假设、开放性和发挥程序员智慧。好的代码提高了质量和可维护性。
延伸解读
外部属性与内部属性的关系
文章将好代码的特征分为外部属性和内部属性。外部属性关注代码实现目的、易于理解和可扩展,是代码作为软件产品的外在表现;内部属性则包括模块化、意图表达、健壮性等具体设计特质。作者强调,外在质量来自内在质量,后者的总和构成前者。这意味着追求代码质量不能只停留在满足外部要求,而需从内部设计着手,通过每一行、每个模块的精心构造来达成整体优质。
可进化性的设计权衡
文章指出软件是不断变化的系统,好代码应易于扩展且难以破坏。设计的力量不在于它能做什么,而在于它不能做什么。这要求避免僵化代码和脆性代码,同时为可能的变化做准备。作者承认无法准确预测代码如何变化,但往往能预测在哪里变化,因此设计时应假定变化会发生,而非假定不会。这种权衡体现了对软件生命周期的务实态度,既不过度设计,也不固步自封。
隐藏秘密与隔离假设的实践意义
好代码隐藏秘密,减少对内部实现的依赖;好代码隔离假设,最大限度地减少知识的使用。文章用汽车线路和快递包裹的比喻说明,子系统间不应分享不该分享的细节,数据传递时不应窥探内容。每一次知识的使用都会将程序与过去的世界绑定,阻碍可能世界的创造。因此,模块应像密封包裹一样传递数据,调用者无需了解内部实现,从而降低耦合,提升可维护性和可发展性。
Q&A
什么是高质量代码的外部属性?
外部属性包括:实现目的(代码作为软件执行以实现目标)、易于理解(便于自己和他人阅读维护)、可扩展性(易于修改和扩展以适应变化)。
好代码为什么必须易于理解?
因为工程师是深入理解系统的人,代码要具有良好的工程性就必须易懂。代码不仅为自己写,也为需要阅读它的人写,便于他人阅读和维护。
好代码的内部属性有哪些?
内部属性包括:模块化分析理解、恢复创造者意图、简洁表达意图、健壮性、隐藏秘密、隔离假设、开放性和发挥程序员智慧。
为什么好代码需要隐藏秘密?
隐藏秘密可以减少对内部实现的依赖。如果外部行为不变,内部变化不会影响使用者。利用禁忌知识的人会在变化的世界中濒临毁灭,而什么都不知道的大师足以维护软件。
好代码如何隔离假设?
通过最大限度地减少知识的使用,避免将程序与过去的世界绑定。每个数据在传递过程中,应像密封包裹一样,避免中间组件窥探内容,从而阻碍可能世界的创造。
好代码的开放性体现在哪里?
开放性指代码在处理集合时尽可能不考虑集合大小,能适应集合的增大或缩小。例如,用集合而非布尔值来处理可能值,当可能性增加或减少时,代码易于调整。