作者:[美] Robert C. Martin
翻译:章显洲 余晟
引言
欲修其身者,先正其心;欲正其心者,先诚其意;欲诚其意者,先致其知,致知在格物。物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐
——《礼记·大学》
第一章_专业主义(讲道理)
1.1 无情重构:
对每个模块,每检入一次代码,就要让它比上次检出时变得更为简洁。每次读代码,都别忘了进行点滴的改善(之所以害怕修改代码,很大程度上是因为没有一套覆盖全部代码的自动化测试系统)。
1.2 坚持学习:
不写代码的架构师必然遭殃,他们很快会发现自己跟不上时代。
1.3 混乱的代价:
程序员不遵从不了解混乱风险的经理的代价,是一种不专业的做法。
赶上期限的唯一方法——做的快的唯一方法——就是始终尽可能保持代码整洁。
我喜欢优雅和高效的代码。代码逻辑应当直截了当,叫缺陷难以隐藏;尽量减少依赖关系,使之便于维护;依据某种分层战略完善错误处理代码;性能调至最优,省的引诱别人做没规矩的优化,搞出一堆混乱来。整洁的代码只做好一件事。
——Bjarne Stroustrup,C++语言发明者
没有测试的代码不干净。不管它有多优雅;不管有多可读、多易理解,微乎测试,其不洁亦可知也。
——Dave Thomas,OTI公司创始人
消除重复和提高表达力,提早构建小规模抽象
——Ron Jeffries 《C#极限编程探险》
代码让编程语言看起来像是专为解决那个问题而存在,就可以称之为漂亮的代码。
——Ward Cunningham,Wiki发明者
1.4 了解业务领域:
每位专业软件开发人员都有义务了解自己开发的解决方案所对应的业务领域;最糟糕、不专业的做法是,简单按照规格说明来编写代码,但却对为什么那些业务需要那样的规格定义不求甚解。
桑塔亚纳:“不能铭记过去的人,注定要重蹈覆辙”。
使代码易读实际也使之易写。 要想干得快,要想早点做完,要想轻松写代码,先让代码易读吧。
持续改进是专业性的内在组成部分。
1.5 试试看:
许诺“尝试”,就意味着承认自己之前未尽全力,承认自己还有余力可施。这也是一种表示你将再接再厉去实现目标的承诺。因此,只要你许诺自己会去“尝试”,你其实是在承诺你会确保成功。如果承诺尝试,你其实是在告诉他们,你有新方案,新方案是什么?如果你此前并未有所保留,如果你没有新方案,如果你不会改变你的行为。如果你对自己原先的估计有充分的自信,那么从本质上来讲,承诺“尝试”就是一种不诚实的表现。
第二章_命名(*)
如果名称需要注释来补充,那就称不上名副其实。
1、选择体现本意的名称能让人更容易理解和修改代码。
2、问题不在于代码的简洁度,而是在于代码的模糊度。
例:
2.1 避免误导
(1)别用accountList来指称一组账号,除非它真的是List类型。
(2)堤防使用不同之处较小的名称。
2.2 做有意义的区分
(1)如果名称必须相异,光是添加数据系列或是废话远远不够——应该提供正确的信息
(2)如果意思相近,就必要增加明确的约定。
(3)要区分名称,就要以读者能鉴别不同之处的方式来区分。
2.3 使用读得出来的名称
(1)避免成员前缀的使用,m_前缀。应当把类和函数做的足够小。
(2)使用不加修饰的接口。不要用IShapFatory来修饰接口,如果接口和实现必须选一个来编码的话,宁可选择用ShapFatoryImp,都比对接口名称编码来得好。
(3)尽量不要使用单字母,在作用域较小、也没有名称冲突,循环计数器自然有可能被命名为i或者j或k。(但千万别用字母!)
(4)专业的程序员:明确是王道。