“我们就是一群代码猴子,上蹿下跳,自以为领略了编程的真谛。可惜当我们抓着几个酸桃子,得意洋洋坐到树枝上,却对自己造成的混乱熟视无睹。那堆“可以运行”的乱麻程序,就在我们的眼皮底下慢慢腐坏。”
——《代码整洁之道》作者 RobertC.Martin,于SD West 2007技术大会
1.0 糟糕代码,是如何产生的
最初的问题来了,我们都不喜欢坏代码,为何坏代码还总会产生?
抛开编程者本身技艺的问题,答案也许是想要快点完成任务,项目进度赶着时间,或许我们只是不耐烦再继续做这个需求,渴望它能早点结束。
很多时候,会有一堆事情压着你去完成,你觉得自己需要赶紧弄完手上的东西,好接着做下一件工作,所以,为了走捷径,为了特定实现功能而强加的糟糕的代码,就悄悄地诞生了。我们都曾经瞟一眼自己亲手造成的混乱,决定弃之不顾,走向新的一天,等有朝一日再来清理。
然而中国古训有云,“明日复明日,明日何其多”,勒布朗(LeBlanc)法则也表示,“稍后等于永不。”你会发现,因为各种各样的原因,很多时候你根本都不会(没时间)去整理之前的代码。所以,正如本书作者Robert C.Martin(Uncle Bob),在SD West 2007技术大会上所说的,“那堆“可以运行”的乱麻程序,就在我们的眼皮底下慢慢腐坏。”
我们知道,坏代码会污染环境,最后会坏掉整个项目。保持整洁的习惯,发现脏代码就要及时纠正。花时间保持代码代码整洁,不但有关效率,还有关项目的生存。
2.0 为什么好代码会很快变质?
为什么好代码会很快变质?一般情况下,需求一直在变更、需求变化违背了初期设计、进度太紧是导致好代码变质的诱因。
多数的产品经理想要好的代码,即便他们总是痴缠于进度,他们会奋力的维护进度和需求。而程序员们则当以同等的热情捍卫代码的整洁性和可扩展性。
举个栗子,如果你是医生,病人在请求给给他们做手术前别洗手,因为那会花太多时间,你会照办吗?本该是病人说了算,但医生却绝对应该拒绝遵从。为什么?因为医生比病人更了解疾病个感染的风险。医生如果按病人说的办,就是一种不专业的态度。
同理,程序员遵从不了解混乱代码风险的产品经理(策划)的意愿,都是不专业的做法。
3.0程序员的基础价值谜题
程序员都面临着一种基础价值的谜题。有那么几年经验的开发者都知道,之前的混乱拖了自己的后腿,但开发者背负期限的压力,只好制造混乱。简言之,他们没花时间让自己做得更快。
而其实真正专业的人士明白,这道谜题第二部分说错了,制造混乱无助于赶上期限,混乱只会立刻拖慢你,叫你错过期限,赶上期限的唯一方法——做得更快的唯一方法——就是始终尽可能保持代码的整洁。
4.0大师们眼中的整洁代码
到底什么是整洁的代码?有多少程序员,就有多少定义。 “大师级程序员把系统当故事来讲,而不是当做程序来写”。就让我们一起看看经验丰富的大师级程序们都是如何定义整洁代码的。
-
Bjarne Stroustrup ,C++语言之父, The C++ Programming Language(中译版《C++程序设计语言》)一书作者:
“我喜欢优雅和高效的代码,代码逻辑应直截了当,叫缺陷难以隐藏;尽量减少依赖关系,使之便于维护;一句某种分层战略完善错误处理代码;性能调至最优,省得引诱别人做没规矩的优化,搞出一堆混乱来。整洁的代码只做好一件事。” -
Grady Booch,Object Orient Analysis and Design with Application(中译版《面向对象程序分析与设计》) 一书作者:
“整洁的代码简单直接,整洁的代码如优美的散文。整洁的代码从不隐藏设计者的意图,充满了干净利落的抽象和直截了当的控制语句。” -
Michael Feathers,Working Effectively withLegacy programming(中译版《修改代码的艺术》)一书的作者:
“整洁的代码总是看起来想是某位特别在意它的人写的,几乎没有改进的余地,代码作者署名都想到了,如果你企图改进它,总会回到原点,赞叹某人留给你的代码——全心投入到某人留下的代码。” -
Ron Jeffries,Extreme Programming Installed(中译版《极限编程实施》)以及Extreme Programming Adventures in (C#中译版《C#极限编程探险》)作者:
“减少重复的代码,提高表达力,提早构建简单抽象,这就是我写整洁代码的方法。”
5.0 编写代码的难度,取决于周边代码的阅读难度
编写代码的难度,取决于周边代码的阅读难度。何出此言?因为各种实践与统计表明,在项目里开发新功能的过程中,阅读之前代码与书写新的代码,花费的时间比例超过10:1,新写代码时,我们一直在读旧代码。既然比例如此之高,我们就应该让读的过程变得轻松,即便那会使得编写过程更难。
所以说,编写代码的难度,取决于周边代码的阅读难度,想要快速实现需求,想要快速完成任务,想要轻松的写代码,先让你书写的代码整洁易读吧。
6.0让代码比你来时更干净
我们知道,光把代码写好可不够,必须时时保持代码整洁,我们都见过代码随着时间的流逝而腐坏。我们应该更积极地阻止腐坏的发生。
借用美国童子军的一条简单的军规,应用到我们的专业领域:
“让营地比你来时更干净。”
那么可以同样对编程领域这样说:
“让代码比你来时更干净。”
也就是说,如果我们每次签入时,代码都比签出时干净,那么代码就不会腐坏。这就是我们需要遵从的代码整洁之道。
7.0总结
- 编写代码的难度,取决于周边代码的阅读难度。想要快速实现需求,想要快速完成任务,想要轻松的写代码,请先让你书写的代码整洁易读。
- 保持整洁的习惯,发现脏代码就要及时纠正。花时间保持代码代码整洁,这不但有关效率,还有关项目的生存。
- 程序员遵从不了解混乱风险的产品经理(策划)的意愿,都是不专业的做法。
- 让代码比你来时更干净:如果每次签入时,代码都比签出时干净,那么代码就不会腐坏。
- 赶上期限的唯一方法,做得更快的唯一方法,就是始终尽可能保持代码的整洁。
网友评论