究竟什么是“干净的”代码?
在一定程度上,干净的代码——像漂亮一样——就是在旁观者眼中所留下的印象。有经验的程序员能够一眼看出程序的源代码并断定它是否是一个易读的代码。他们还能够很快地提出关于这个代码是否是高效,结构是否合理以及是否简单明了的意见。所有的这些特征都很难定义,但是当您把代码呈现给这些程序员时,您通常会很赞同他们对代码是否干净的判断。
决定干净代码的因素很多。有些是普遍性的,适用于任何类型的编程语言或者您所开发软件的问题领域。有些是干净代码的属性取决于特定的编程语言。
我们为什么会编写出一些不干净的代码呢?
我认为有以下几个造成我们编写不干净或者冗长代码的原因:
1、时间压力
2、缺少训练
3、动机
让我们分别看看这些原因。
时间压力
软件项目偏离轨道。如果您采用的是一个瀑布式的过程,它们将会比您采用迭代的方法偏离得更厉害,但是无论您采取什么样的生命周期模型,绝大多数项目都会有所偏离。使用迭代递增的生命周期,这种偏离将会是功能性方面的,而不会在交付日期上发生。
当一个项目开始偏离轨道时,开发人员——以及整个团队——都要采取捷径,这是人的本性。有一个谚语:“当您的脖子即将进入鳄鱼的口中,您很难记得您是处于将要陷于沼泽的状况。”当受到时间的压迫时,有些东西就应该放弃,我们通常会忽略那些不能直接减轻压力的事情——我们只知道要攻击鳄鱼。我注意到,过程是这种忽略中典型的牺牲品。这个过程可能会采取特殊的行为或者产生某些工件,但是如果我们能够忽略它就应该忽略掉。当紧迫的时间稍微缓和之后,我们应该有很好的目的和计划返回来检查,但是我们却很少这样做。
当我们不得不丢掉一些东西的时候,干净的代码也属于这个范畴的过程被我们丢弃。为了简单和节约宝贵的时间,我们用“np”来代替“netPay”变量的名称。我们不再提供有意义的注释或者描述这些算法。最终的期限已经迫近,我们只是想着要使我们的代码能够运行。
为了在最终期限完成任务,我们用这样方法来编写代码是目光短浅的做法,我们最终将受到惩罚。
缺乏培训
无论您是在高中,大学还是其它途径学习的编程,问题是您实际上并没有学习如何编写干净的代码。部分原因是由于教育机构的时间都相当紧迫。在有限的学时中也只能教授有限的知识,编码的设计、易读性以及其它干净代码的典型特性在教育过程中都被省略掉,就像一个项目在最终期限时间的压迫下丢弃一些过程一样。
提高我们编码质量
因此,很多人会责备我们为什么会编写如此多不干净的代码。我们应该怎样做呢?我建议有以下三点:
1、把编写干净代码作为您个人过程的一部分。
2、讲授如何编写干净代码。
3、重视干净代码。
重视干净代码
如果您是一位管理人员,您必须确保您的下属能够理解您的价值观念。保证您的开发人员了解代码的质量和优雅性对您是至关重要的。当最终期限迫近时,要支持团队并为范围管理而努力,不要仅仅为了在期限内完成工作而交付差劲的代码(通常是武断地作出判断)。
寻找几种好的方式来宣扬因为编写优质的代码而奖励的行为。奖励并不难执行。您的团队不久就会意识到什么才是您所重视的,他们也将全力以赴并根据这些价值观来编写代码。尽管有很多大的公司并不支持那些价值观,但是从长远来看您的团队将会一直坚持这种观念,因为简洁的代码将会长久地支持他们的工作。