好的编程原则与好的系统设计原则和技术实现原则密切相关。多年来,以下编程原则使我成为一名优秀的程序员。我相信这些原则可以极大地提高任何开发人员的编程能力,使他开发出更易于维护、bug更少的程序。我不想重复自己——这也许是编程开发最基本的原则,它告诉你不要重复代码。我们的许多编程结构的存在都是为了帮助我们消除重复(例如,循环、函数、类等)。一旦程序中出现重复(比如很长的表达式,很多语句,但都是为了表达同一个概念),就需要重新对代码进行提炼和抽象。求精原则——与“不要重复自己原则”有关,这个原则是说“程序中的任何一段功能代码在源代码文件中都应该是唯一的”。保持简单——永远保持简单(避免复杂)两者都应该是你的首要目标。简单的程序更容易编写,产生的错误更少,也更容易维护和修改。不要开发你现在不用的特性——除非你真的需要用它,否则不要轻易乱加你不用的特性。使程序运行的最简单方法——开发时问自己一个很好的问题,“使程序运行的最简单方法是什么?”这有助于我们在设计时保持程序简单。别乱动我的脑子——这实际上是史蒂夫·克鲁格(SteveKrug)所著的一本关于Web界面操作的书的书名,但也适用于编程。要点是程序代码应该是人类可以轻松阅读和理解的。如果一个程序需要读者花太多精力才能理解,它可能需要进一步简化。开放/封闭原则——程序中的实体(类、模块、函数等)应该对扩展开放,对修改关闭。换句话说,不要编写其他人可以修改的类,而是编写人们可以扩展的类。为维护者编写程序——任何值得编写的程序在未来都值得维护,无论是你还是其他人。以后你要维护这些程序的时候,你对这些代码的记忆基本跟陌生人一样了,所以你还可以像一直在给别人写程序一样。帮助你记住这个原则的一种方法是“写程序永远记住,将来维护你写的程序的人是一个有严重暴力倾向并且知道你住在哪里的精神病患者”。最小惊奇原则——最小惊奇原则常用于用户界面设计,但该原则也适用于编写程序。程序代码应该尽可能少地让读者感到惊讶。即要遵循编码标准和通用习惯,按照公认的习惯进行组织和命名,尽可能避免非常规的编程动作。单一职责原则——一个代码组件(例如一个类或函数)应该只执行一个单一的预设任务。最小化耦合关系——一段代码(代码块、函数、类等)应该最小化它对其他代码的依赖。这个目标是通过使用尽可能少的共享变量来实现的。“低耦合是一个结构合理、设计优良的计算机系统的标志,将其与高内聚特性相结合,对于实现可读性和可维护性等重要目标具有重要意义。”最大内聚弹性——具有相似功能的代码应该放在同一个代码组件中。隐藏实现细节-隐藏实现细节可以最大限度地减少修改程序组件对使用该组件的其他程序模块的影响。得墨忒耳法则(LawofDemeter)——程序组件应该只和它的直系亲属有关系(比如继承的类、包含的对象、通过参数入口传入的对象等)避免过早的优化——只有当你没有其他关系时程序的问题,但是当它比你预期的慢时,你可以考虑优化工作。您应该只在所有其他工作都完成后才考虑优化,并且您应该只根据经验进行优化。“不应该考虑小的性能改进,优化应该是97%的性能改进:过早的优化是万恶之源”——DonaldKnuth。代码重用——这不是一个非常核心的原则,但它和其他原则一样有价值。代码重用可以提高程序的可靠性,节省您的开发时间。职责分离——不同领域的功能应该由完全不同的代码模块管理,尽量减少这些模块之间的重叠。拥抱变化——这是KentBeck的一本书的副标题,它是极限编程和敏捷开发方法论的基本原则之一。许多其他原则都是基于这个想法:面对变化,欢迎变化。事实上,一些经典的软件工程原则,比如最小化耦合,就是为了让程序更容易面对变化而设计的。不管你是否采用了极限编程方法,这个原则对你的程序开发都有重要的启示。
