重构前四章 不求甚解

不求甚解 之重构前四章

在这篇blog中,我将记录和描述我阅读计算机软件行业经典书籍《重构》过程中的思路和阅读后的总结。整体而言,阅读《重构》是一个美好的过程,但是,可能个人期望过高,导致我觉得这本书有些盛名之下其实难副。下面的文章中,将从三个角度进行描述,分别是

  1. 《重构》讲的是什么
  2. 为什么要读这本书
  3. 如何阅读这本书

《重构》讲的是什么

核心思想

在我们编写大型项目的过程中,由于市场压力,deadline的存在,作为程序员经常听到的一句话是:我不在乎你是怎么弄的,告诉我什么时候可以搞定。作为boss和市场侧,这句话是完全没有问题的。但是,作为一个程序员,这样的语言很可能造成一个恶性循环,我们不妨称之为”老板循环“。紧张的时间,导致架构设计和测试设计不足,从而导致虽然前期功能实现快,但项目和产品质量欠佳。而到了项目的后期,项目进度和产品质量都成了项目瓶颈。新功能难以加入到现有的架构。加入的新功能测试不足,导致大量的时间和人力投入到了debug中。《重构》这本书,则是通过简单的例子,向我们一步步的展示,如何可以跳出这样的”老板循环“。

当”老板循环“出现的时候,所有的人都会十分痛苦。对底层程序员来说,功能难以完善,项目质量差,debug时间多而无聊。对PM来说,项目进度和功能要求与程序员的工作时间成了严重的冲突方,程序员十分痛苦,但是项目进度严重落后,新功能无法交付客户。对老板和客户来说,项目进度差和项目质量糟糕,会逐渐消磨投资人与客户的耐心,从而转向其他团队或者公司的产品。

可能有人说了,既然这么痛苦,我们是不是应该重新设计,重构我们的项目,从根本上解决我们的问题?答案似乎是显而易见的,我们需要”重构“。可是,摆在我们面前的问题是,老板、投资人、客户的deadline不会向后延期,毕竟,他们可不管程序员们具体是怎么解决问题的。针对这样的问题,作者提出来的思路是:

  1. 当出现加入新功能困难时,不妨开始进行重构
  2. 重构可以从非常小的函数着手,逐步进行
  3. 尝试构建测试系统,保障重构的正确性
  4. 任何改动,严格遵循改动,编译,测试,提交的工作流

行文架构

《重构》的行文架构较为程序员化。整个第一章节,作者举了一个戏剧团收入计算的程序作为例子,向我们一步步展示了如何将一个长函数进行抽象拆分,最后变成互相独立的模块,从而友好的增加一个新功能的过程。在读的过程中,我们完全可以跟着作者的思路同时进行编码和修改。这个例子基本展示出了作者的思路。第二章中,承接第一章,作者介绍了重构的原则,包括了什么是重构,为什么重构,如何进行重构等。第三章节中,作者展开描述了什么时候需要重构这个问题,非常具体的说明了很多”代码中的坏味道“。第四章节中,则是阐述了我们测试的价值以及如何进行测试。后续章节则是逐个说明了如何进行重构。

在我看来,阅读了前四章节就能明白作者的核心思想,了解什么是重构,什么时候需要重构,当我们真正开始重构的时候,完全可以像查字典一样,参考后续的重构手法。

为什么需要读这本书

我如何得知这本书

如同文本中”核心思想“那部分的描述,我也是”老板循环“中的一员。在团队中,我体验过的角色包括了:普通开发者,模块负责人,项目经理(PM)。当我是一名开发人员的时候,我每天都在de不是我写的bug。无穷无尽的bug掩埋住了我,以至于对coding产生了负面的厌恶情绪。当我是一个模块负责人,我仍然没能逃离循环,大部分时间我在尝试进行bug的预定位,之后分配给小组的成员。这样的过程持续时间长了,慢慢的对技术角色都产生了厌恶。而当我逃离技术岗位,成了一名年轻的项目经理,我发现,我仍然在循环中,只不过换了一个角色。每天都生活在程序员说的不可能和老板说的必须之间。项目进度落后同时质量欠佳。所以,我渐渐开始思考问题到底出在了哪里。从搜索引擎和博客中,我发现了《重构》这本经典书籍。虽然不能说这本书让我跳出了循环,但我至少学到了一些基础知识点,在以后如果我再回到技术岗位,我觉得我可以试试能不能跳出循环。从一个更高的角度去解决困扰的问题。

从书里,我学到了什么

具体来说,我从书籍中学到的关键点包括:

  1. 重构是一个循序渐进,让系统在可用的状态下,不断改良的过程。让系统处于不可用状态的改写,不叫重构。
  2. 重构技术是一个对架构的补充和修改,通过重构,新功能可以更好的被添加到已有系统中,系统也能变得更为稳定。
  3. 重构也需要遵循一定的方法:抽象、编译、测试、提交。四大步骤缺一不可。如果项目中没有测试系统,不妨开始构建它。
  4. 重构的过程中,要保障各种其他细节,类似分支、数据库等等。

如何阅读这本书

作者的行文思路非常的清晰,甚至有些公式化。无论是大的文章,还是小的章节,基本都遵循:举例,是什么,为什么,怎么做的四段轮逻辑。只需要按照作者的思路,逐段阅读即可。当然了,针对代码示例,自己照着来一遍肯定效果更佳。

原文地址:https://www.cnblogs.com/liwbeijing/p/12283808.html

时间: 2024-08-29 17:11:18

重构前四章 不求甚解的相关文章

《梦断代码》前四章阅读感

第一次看到这本书的时候,印象最深的是它的名字--<梦断代码>.或许讲的是关于在做软件,或者说是做程序时受到的困惑,挫折,甚至是失败的经历或故事. 而看完前四章之后,事实也确实如此,当然也有与之不同的地方,比如说代码的开源与否问题,但对于最初的认识还是有了一些根本上的提高. 对于书中的人物的姓名,我并没有记住太多,对于故事的主线和具体的细节也没有太深刻的印象,不过对于前四章看完之后还是有一些短浅的认识.在前四章中, 有一个名为卡普尔的程序员,他创办的OSAF公司的项目的失败就告诉我,做程序(往大

前四章知识点小结

1.char 是范围比int 小的整型. 如: int sex ='男': 2.从控制台输入信息时,如何能够接收空格 如图中所示:当从控制台输入语句中间遇到空格时,后面的语句将不能被接收. 此时可以把String a = input.next(); 改为String a = input.nextLine();即可. 3. 多行注释以及取消多行注释 ctrl+shift+/ 添加为注释: ctrl+shift+\ 取消添加注释. 4.关于++运算 int num =3; num++表示先执行操作,

读《代码整洁之道》前四章浅显印象 和 我所见的不整洁代码引以为戒

1.根本----良好端正的态度. 2.命名----有意义,规范,可搜索的名称,使用源自问题领域的名称,至少避免误导. 3.类名----名词或者名词短语. 4.方法----应当是动词或者动词短语. 5.双关----最好不要用这种,谁知道add是添加还是相加呢? 6.函数----要短小,印象最深的就是,一个函数只做一件事儿,即使我们需要用到try -catch,也要再独立成一个方法,并且这个方法的第一个单词应该是try. 7.注释----代码即注释当然是最高境界,当我们想写注释才能更好的表达程序的时

java学习笔记[前四章]

一    :Java 发展简史 1. Java 是一种语言,具有自己的语法和数据结构 2. Java 来自于 sun ,sun 指的是斯坦福大学网络 3. 具体发展历程 Java的具体发展历程 时间 描述 1991~1995 Sun 为了占领智能消费电子产品市场,由james gosling 负责该项目,来开发 Oak(橡树) 语言 1995 将 Oak 改名为 Java,当时也是window95版本的发布 1996 发布 JDK1.0 1997 发布 JDK1.1 1998 发布 JDK1.2

&lt;乔布斯传&gt;之前四章札记

乔布斯是被收养的孩子,但是他的养父母绝对是伟大的父母,他们是那样的爱他,以至于后来他的叛逆,父母都会最后毫无悬念的原谅他,并且一如既往的保护他. 乔布斯是个懂技术的人,并且能够热爱工程师这个职业,这为他以后能够准确定位苹果或者设计苹果,甚至创造苹果都在无形中给予了更多的帮助. 我个人认为美国人的大麻合法化不是很好的,就如同我并不喜欢抽烟,因为人们把抽烟当作了一种消磨意志或者打发时光或者解除疲倦的借口,抽烟显然没有带来好处,如果没有烟的存在,也许人们早就创造出了更能替代烟并且起到更积极作用的产物.

C#前四章总结

1.在C#中,对于this关键字的理解正确的是(A).(选择一项) A.this关键字是引用当前类的成员变量 B.this关键字是引用当前类的局部变量 C.this关键字是引用当前类中离它最近的变量 D.this关键字只能引用当前类的变量 分析:this关键字是指当前对象本身.通过this可以引用当前类的成员变量和方法,使用this关键字可以解决成员变量和局部变量名称冲突的问题,因此选a. 2在C#中,下列选项中自定义方法的语句错误是(C).(选择一项) A.在该语句中不能使用goto语句 B在

《让子弹飞》系列——前四章的部分解读

张牧之.黄四郎.汤师爷,分别代表三个意识形态, 分别是社会主义.自由主义.保守主义.张牧之和黄四郎可以在二十年前,精诚合作,推翻了保守的清王朝. 但是推翻了原有的保守主义之后,自由主义就会和保守主义合作,以建立新的秩序. 那么社会主义就会遭到自由主义的扼杀.而社会主义的牧之想要推翻自由主义的四郎,做成三件事,公平.公平.还是他妈的公平! 就需要再联合保守主义的师爷. 此外,至于片中每个人实际上是有多个影射的. 张牧之是以太祖为主,朱元帅为辅,建立的模型,中间可能还夹杂了一点高麻子. 而电影中蒋.

《统计推断(Statistical Inference)》读书笔记——第5章 随机样本的性质

有了前四章知识的铺垫,第五章进入了统计研究的正题——样本的研究.样本可以说是统计学研究中最基本的对象,样本的数学性质也是最重要的研究课题,统计学的一大任务就是从一大堆样本中提取出有价值的知识,正如对原子和分子的研究之于化学一样.下面是这一章的思维导图,

2016701010126 2016-2071-2 《java程序设计》一至四章总结

这是课堂的最后一个编程题,我课堂上这样写: package book; public class Book {    public static void main(String[] args)    {     Books[] books=new Books[3];          books[0]=new Books("Java程序设计",119.00);     books[1]=new Books("C语言程序设计",72.50);     books[2