作者:翁松秀
人类行为都是以目的为导向,培训也是。
这次培训目的很明确,就是让我们的代码更加简洁。为了实现这个目的,我们需要搞明白三个问题:
这次培训围绕这三个问题,从思想、函数、重构、设计和工具五个方面讲解代码的简洁之道,最后只为了实现一个目的,也就是本次培训的意义:让我们的代码更加简洁。
培训是双向的,老师们会围绕着培训的目的,从各个维度给我们传授代码简洁的知识和技能,我们也应该看准这个目的,吸收消化,不然老师传授的内容太多,容易导致消化不良。
在软件开发当中,我们有时候会很看重软件的技术体系和架构设计,往往会忽略软件的代码质量,而糟糕的代码质量会使我们的软件变得臃肿、隐藏BUG和难以维护。所以在开发当中技术体系、架构设计和代码质量同等重要,三足鼎立。
代码质量的衡量标准除了实现功能以外,还有一个很重要的标准,就是代码是否简洁。因为我们的代码不仅仅要让机器能看懂,在后期的维护当中更多的是要让人能看懂,所以代码是否简洁,也是代码质量的衡量标准之一。简洁的代码能在很大程度上降低开发和维护的成本。
什么是简洁的代码?
代码的性能主要是对机器来说的,简洁主要是对人来说的,通俗一点理解,所谓简洁的代码,简单直接,从不隐藏设计者的意图,并且让人读起来轻松自如,赏心悦目。从整体上看,代码逻辑应该直截了当,功能让人一目了然,一眼就能看出这个程序,这个模块要实现什么功能,怎么实现。比如目录和实现的分离,让阅读的人一眼就能看出代码的模块划分。从细节上看,代码中应该不存在BUG和坏味道等杂质,包括:命名不规范、重复代码、过长的方法、过大的类、过长的参数列、散弹式修改、依恋情结、Switch语句、临时变量、过度设计、不用的方法、资源不关闭和不符合SOFA原则等。
为什么需要函数?
function:功能,函数。函数是实现某个功能的封装代码。我们需要函数来封装我们的功能,但如果所有的代码都写在一个函数里面,就会使这个函数变得庞杂、子功能模块划分不清晰、不便于我们阅读和维护。
所以在我们的代码中,应该适当使用函数,将我们业务逻辑按功能模块划分,变成简单的子功能模块、实现目录与实现的分离,使模糊的业务逻辑变得清晰、使重复的功能得以复用。
如何衡量一个函数的复杂度?
除了一些基本的衡量标准,比如代码行数、参数个数、变量个数、嵌套层数等,我们主要采用国际标准的**圈复杂度来衡量一个函数的复杂度。**通过这次培训,我们知道了什么是圈复杂度,如何计算一个函数的复杂度,以及函数的十个一原则和SOFA原则,让我们学会了如何写函数,如何做到目录与实现的分离,实现函数抽象层次一致,如何降低一个函数的圈复杂度。
通过前面的培训,我们弄清楚了什么是简洁的代码,以及为什么要实现代码简洁,现在我们需要弄清楚,怎么让我们的代码变得简洁。
重构。
重构是指不改变软件的行为,对软件内部结构的重新调整,提高其可理解性,降低维护成本。 通过重构,我们可以降低程序和函数的复杂度,使我们的代码变得更加简洁。
我们在培训中学习了11种重构方法:封装重复代码、拆分过长函数、拆分过大类、对象传参、拆分发散式类、归并散弹式类、断开依恋情结、抽取数据泥团、多态替代多分支、公布委托对象、封装数据类。
重构贯穿我们编码的整个阶段,在需求分析,系统设计,编码实现,单元测试之后对我们的代码进行重构,然后进行单元测试,再进行重构,直到我们对代码质量满意为止,最后才发布我们的代码。
设计模式是人们从问题中提炼出来的一种通用的解决方案,是经过长时间的试验和错误总结出来的,特定的设计模式适用于解决某一类问题。
在软件开发的设计阶段,需要我们结合具体的业务逻辑,来选择合适的设计模式,除此之外,在编码实现的重构阶段,我们仍然可以采用设计模式来对我们的功能模块进行重构。从而提高系统的可用性、健壮性、可扩展性,降低开发和维护成本。
通过培训,我们了解了设计模式的基本概念,设计模式原则与分类,以及一些常用的设计模式的概念和使用方法。
师傅领进门,修行看个人。短短一节课老师不可能把设计模式所有的内容都灌输给我们,比如老师只能给我们简单介绍设计模式6大原则和23种设计模式,只能给我们一个敲门砖,我们只有通过后面不断地学习才能理解和掌握这6大原则和23个模式,结合具体的业务应用于我们的实际开发当中,打开设计模式的大门。
工欲善其事,必先利其器。 对于我们开发人员来说,IDE是生产工具,熟练掌握工具可以大幅度提高我们的开发效率。
如何高效地进行重构?
手工重构很容易引起代码错误,老师在培训过程中给我们介绍了几种IDE中常用的一些重构的操作命令和快捷键,比如重命名,移动类、方法和成员变量,修改方法签名,提取方法,提取接口和上推下移等一些常用的重构命令,在实际开发中熟练掌握这些命令,能大大降低我们重构的时间成本和引起代码错误的概率。
另外,老师还给我们介绍了代码质量分析工具Sonar,用于分析代码,检测代码的坏味道,计算复杂度,单元测试等。熟悉Sonar能有效地管理我们的代码,保证代码质量,降低维护成本。
老师们通过这次培训,围绕着让我们代码更加简洁的目的,从思想、函数、重构、设计和工具五个方面,让我们明白了什么是简洁的代码,为什么要让代码简洁以及怎么让我们的代码变得更加简洁。
通过培训,公司制定了程序设计师的十三大原则,明确规范我们的编码习惯,提高代码的质量,降低项目交接和维护的成本。
另外我们应该从思想上摆正编码态度,理解函数的作用,掌握重构的方法,善于使用设计模式,最后结合我们的工具来实现我们的代码规范,让我们的代码更加简洁。
通过培训,从思想、函数、重构、设计和工具五个维度让我们了解了什么是简洁的代码,为什么要让代码简洁以及怎么让代码简洁,从思想上给我们带来了观念的改变,包括编码的态度和习惯,让我们掌握了重构代码的方法。
公司应该贯彻程序设计师的十三大原则,设置相应的考核制度,硬性要求开发人员遵守编码规范,提高软件开发的代码质量,降低项目交接和维护的成本。让大家将培训中学到的知识应用于实际开发当中,理论和实践相结合,做到知行合一。使每一个研发人员做到有底线,有规范。这也是培训的最终目的,让我们的代码更加简洁。
如果条件允许,公司可以多组织类似的专题培训,比如说项目管理,提高大家的知识水平和能力,为公司创造更大的价值。