本人计划在2013年撰写《驯服烂代码——代码内在质量的改善之道》一书,恳请各位关注驯服烂代码的朋友审阅下面的写作大纲,看看如何写才能帮到日夜加班奋战在烂代码之中的人们。望不吝赐教,多谢!
内容简介
第一篇 明道
本篇讨论烂代码的含义和驯服烂代码的概念。
第1章 关于烂代码
本章讨论“烂代码”的含义和代码变烂的原因。
1.1 代码的内在质量
Steve McConnell在其著作《代码大全(第2版)》中指出:“1)软件同时拥有外在的和内在的质量特性。2)外在特性指的是该产品的用户所能够感受到的部分,包括:正确性、可用性、效率、可靠性、完整性、适应性、精确性和健壮性。质量的外在特性是用户关心的唯一软件特性。3)而程序员除了关心软件质量的外在特性之外,还要关心它的内在特性,包括:可维护性、灵活性、可移植性、可重用性、可读性、可测试性和可理解性。其中可读性指在细节语句的层次上理解系统的难易程度,而可理解性指同时在系统组织和细节语句两个层次上理解系统的难易程度。”
本书主要关注以下代码的内在质量特性:1)可理解性、2)可测试性和3)可扩展性。其中可扩展性包括了上面McConnell列出的可维护性和灵活性。
1.2 何谓烂代码
《修改代码的艺术》作者Michael C. Feathers说:“遗留代码(即本书讨论的烂代码)就是那些没有编写相应测试的代码。”
本人认为烂代码就是那些1)难理解、2)难测试和3)难扩展的代码。
1.3 为何代码会变烂
在心态方面,有两点原因:深陷贪嗔痴,未曾戒定慧。
深陷贪嗔痴
贪:贪图完成更多新功能或更早地完成任务,明明看到烂代码, 却总想以后有时间再去处理, 但是总是找不到时间。
嗔:当需要改别人写的代码就嗔怒: 为什么总是我给别人擦屁股?后果:不去读和改别人的代码,而是什么都自己写,造成大量代码冗余。
痴:不知如何提高代码内在质量。不知该如何用英文命名方法名、变量名,不知道方法名可以当作注释使用。没有写单元测试、TDD、结对编程的习惯。不知道单元测试好比地方政府,没有单元测试就好像无政府。不了解重复代码好比机构臃肿人员冗余的行政机构, 大大降低修改代码的效率, 而重构就是消除重复代码的利器。不了解重构需要有单元测试保护。不了解自动化单元测试与自动化集成测试的区别。不知道如何通过解耦合来写单元测试。不了解面向对象设计的SOLID(单一职责、 开闭、里氏替换、接口隔离、依赖倒置)原则。不了解代码腐臭的危害和克服方法。误认为只有写代码才算真正的工作,理解代码似乎不算真正的工作。
未曾戒定慧
程序员不安心编程序,期望转型:项目经理、产品经理、团队经理。业内有一种古怪的风气,使那些有一定行业经验的程序员, 纷纷转向,立志去做管理方面、设计方面的事情。 这是整个行业病态的表现。
在技术方面&#
内容简介
第一篇 明道
本篇讨论烂代码的含义和驯服烂代码的概念。
第1章 关于烂代码
本章讨论“烂代码”的含义和代码变烂的原因。
1.1 代码的内在质量
Steve McConnell在其著作《代码大全(第2版)》中指出:“1)软件同时拥有外在的和内在的质量特性。2)外在特性指的是该产品的用户所能够感受到的部分,包括:正确性、可用性、效率、可靠性、完整性、适应性、精确性和健壮性。质量的外在特性是用户关心的唯一软件特性。3)而程序员除了关心软件质量的外在特性之外,还要关心它的内在特性,包括:可维护性、灵活性、可移植性、可重用性、可读性、可测试性和可理解性。其中可读性指在细节语句的层次上理解系统的难易程度,而可理解性指同时在系统组织和细节语句两个层次上理解系统的难易程度。”
本书主要关注以下代码的内在质量特性:1)可理解性、2)可测试性和3)可扩展性。其中可扩展性包括了上面McConnell列出的可维护性和灵活性。
1.2 何谓烂代码
《修改代码的艺术》作者Michael C. Feathers说:“遗留代码(即本书讨论的烂代码)就是那些没有编写相应测试的代码。”
本人认为烂代码就是那些1)难理解、2)难测试和3)难扩展的代码。
1.3 为何代码会变烂
在心态方面,有两点原因:深陷贪嗔痴,未曾戒定慧。
深陷贪嗔痴
贪:贪图完成更多新功能或更早地完成任务,明明看到烂代码, 却总想以后有时间再去处理, 但是总是找不到时间。
嗔:当需要改别人写的代码就嗔怒: 为什么总是我给别人擦屁股?后果:不去读和改别人的代码,而是什么都自己写,造成大量代码冗余。
痴:不知如何提高代码内在质量。不知该如何用英文命名方法名、变量名,不知道方法名可以当作注释使用。没有写单元测试、TDD、结对编程的习惯。不知道单元测试好比地方政府,没有单元测试就好像无政府。不了解重复代码好比机构臃肿人员冗余的行政机构, 大大降低修改代码的效率, 而重构就是消除重复代码的利器。不了解重构需要有单元测试保护。不了解自动化单元测试与自动化集成测试的区别。不知道如何通过解耦合来写单元测试。不了解面向对象设计的SOLID(单一职责、 开闭、里氏替换、接口隔离、依赖倒置)原则。不了解代码腐臭的危害和克服方法。误认为只有写代码才算真正的工作,理解代码似乎不算真正的工作。
未曾戒定慧
程序员不安心编程序,期望转型:项目经理、产品经理、团队经理。业内有一种古怪的风气,使那些有一定行业经验的程序员, 纷纷转向,立志去做管理方面、设计方面的事情。 这是整个行业病态的表现。
在技术方面&#