【《代码整洁之道》精读与演绎】之一 让代码比你来时更干净

转载自: http://blog.csdn.net/poem_qianmo/article/details/52079996
作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442

我们就是一群代码猴子,上蹿下跳,自以为领略了编程的真谛。可惜当我们抓着几个酸桃子,得意洋洋坐到树枝上,却对自己造成的混乱熟视无睹。那堆“可以运行”的乱麻程序,就在我们的眼皮底下慢慢腐坏。

——《代码整洁之道》作者 RobertC.Martin,于SD West 2007技术大会

一、系列文章前言

敲完上面这段文字的时候,心里在想,一个刚踏入编程生涯的新人,要经历多少的淬炼,才能领略到Bob大叔所谓的编程的真谛。

有人说,这个过程会很漫长,大概至少是在读完N本编程领域的经典著作,并经过大量的思考与实践之后。

而写这个系列的起因,正是因为最近闲暇时一直在阅读一些之前一直想看的经典著作,并有将阅读过程中一些思考和总结记录下来。为了不枉费这些阅读、思考与总结的过程,决定将这些零散的内容整理成文,沉淀下来。过些年后再回首,也许会觉得当时的一些思考,弥足珍贵。

这个系列的文章,不仅仅是读书笔记,而是对一本书核心内容的全新演绎,内容解刨,与重组。希望自己的这些文字,能对各位想进一步了解这些经典著作的读者们有所帮助。

二、《代码整洁之道》其书

《代码整洁之道》(《Clean Code》)是几乎每一个对编程境界有追求、有志于改善代码质量的编程者,都应该阅读的一本好书。

这本书提出了一个观点:代码质量与其整洁度成正比,干净的代码,既在质量上可靠,也为后期维护、升级奠定了良好基础。

书中介绍的规则均来自作者多年的实践经验,涵盖从命名到重构的多个编程方面,虽为一“家”之言,然诚有可资借鉴的价值。

三、本文涉及知识点思维导图

先放出这篇文章所涉及内容知识点的一张思维导图,就开始正文。大家若是疲于阅读文章正文,直接看这张图,也是可以Get到本文的主要知识点的大概。

四、糟糕代码,是如何产生的

最初的问题来了,我们都不喜欢坏代码,为何坏代码还总会产生?

抛开编程者本身技艺的问题,答案也许是想要快点完成任务,项目进度赶着时间,或许我们只是不耐烦再继续做这个需求,渴望它能早点结束。

很多时候,会有一堆事情压着你去完成,你觉得自己需要赶紧弄完手上的东西,好接着做下一件工作,所以,为了走捷径,为了特定实现功能而强加的糟糕的代码,就悄悄地诞生了。我们都曾经瞟一眼自己亲手造成的混乱,决定弃之不顾,走向新的一天,等有朝一日再来清理。

然而中国古训有云,“明日复明日,明日何其多”,勒布朗(LeBlanc)法则也表示,“稍后等于永不。”你会发现,因为各种各样的原因,很多时候你根本都不会(没时间)去整理之前的代码。所以,正如本书作者Robert C.Martin(Uncle Bob),在SD West 2007技术大会上所说的,“那堆“可以运行”的乱麻程序,就在我们的眼皮底下慢慢腐坏。”

我们知道,坏代码会污染环境,最后会坏掉整个项目。保持整洁的习惯,发现脏代码就要及时纠正。花时间保持代码代码整洁,不但有关效率,还有关项目的生存。

五、为什么好代码会很快变质?

为什么好代码会很快变质?一般情况下,需求一直在变更、需求变化违背了初期设计、进度太紧是导致好代码变质的诱因。

多数的产品经理想要好的代码,即便他们总是痴缠于进度,他们会奋力的维护进度和需求。而程序员们则当以同等的热情捍卫代码的整洁性和可扩展性。

举个栗子,如果你是医生,病人在请求给给他们做手术前别洗手,因为那会花太多时间,你会照办吗?本该是病人说了算,但医生却绝对应该拒绝遵从。为什么?因为医生比病人更了解疾病个感染的风险。医生如果按病人说的办,就是一种不专业的态度。

同理,程序员遵从不了解混乱代码风险的产品经理(策划)的意愿,都是不专业的做法。

六、程序员的基础价值谜题

程序员都面临着一种基础价值的谜题。有那么几年经验的开发者都知道,之前的混乱拖了自己的后腿,但开发者背负期限的压力,只好制造混乱。简言之,他们没花时间让自己做得更快。

而其实真正专业的人士明白,这道谜题第二部分说错了,制造混乱无助于赶上期限,混乱只会立刻拖慢你,叫你错过期限,赶上期限的唯一方法——做得更快的唯一方法——就是始终尽可能保持代码的整洁。

七、大师们眼中的整洁代码

到底什么是整洁的代码?有多少程序员,就有多少定义。 “大师级程序员把系统当故事来讲,而不是当做程序来写”。就让我们一起看看经验丰富的大师级程序们都是如何定义整洁代码的。

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#极限编程探险》)作者:

减少重复的代码,提高表达力,提早构建简单抽象,这就是我写整洁代码的方法。

八、编写代码的难度,取决于周边代码的阅读难度

编写代码的难度,取决于周边代码的阅读难度。何出此言?因为各种实践与统计表明,在项目里开发新功能的过程中,阅读之前代码与书写新的代码,花费的时间比例超过10:1,新写代码时,我们一直在读旧代码。既然比例如此之高,我们就应该让读的过程变得轻松,即便那会使得编写过程更难。

所以说,编写代码的难度,取决于周边代码的阅读难度,想要快速实现需求,想要快速完成任务,想要轻松的写代码,先让你书写的代码整洁易读吧。

九、让代码比你来时更干净

我们知道,光把代码写好可不够,必须时时保持代码整洁,我们都见过代码随着时间的流逝而腐坏。我们应该更积极地阻止腐坏的发生。

借用美国童子军的一条简单的军规,应用到我们的专业领域:

“让营地比你来时更干净。”

那么可以同样对编程领域这样说:

“让代码比你来时更干净。”

也就是说,如果我们每次签入时,代码都比签出时干净,那么代码就不会腐坏。这就是我们需要遵从的代码整洁之道。

十、本文涉及知识点提炼整理

文章开头部分已经用思维导图的方式展现了本文的知识点,这边再贴出一个文字列表版,方便大家整理:

1.编写代码的难度,取决于周边代码的阅读难度。想要快速实现需求,想要快速完成任务,想要轻松的写代码,请先让你书写的代码整洁易读。

2.保持整洁的习惯,发现脏代码就要及时纠正。花时间保持代码代码整洁,这不但有关效率,还有关项目的生存。

3.程序员遵从不了解混乱风险的产品经理(策划)的意愿,都是不专业的做法。

4.让代码比你来时更干净:如果每次签入时,代码都比签出时干净,那么代码就不会腐坏。

5.赶上期限的唯一方法,做得更快的唯一方法,就是始终尽可能保持代码的整洁。

本文就此结束。

下篇文章,我们将继续《代码整洁之道》的精读与演绎,探讨更多的内容。

Best Wish~

良好的代码习惯(一)相关推荐

  1. 养成良好的写代码习惯

    第一讲, 养成良好的写代码习惯 Any fool can write code that a computer can understand. Good programmers write code ...

  2. 代码习惯---打印参数

    打印参数很重要. 转载于:https://www.cnblogs.com/Andomly/p/6050773.html

  3. 乘法表输出及其扩展(附带部分代码书写习惯) C++实现

    文章目录 前言 一.理论思路分析 二.代码实现与改进 1.主函数直接打印 2.调用函数打印 总结 前言 乘法表是在学习编程初级阶段常见的问题之一,可以加深我们对循环的理解与应用. 乘法表的思路并不复杂 ...

  4. 使用VB.NET加快代码开发速度

    以前在学校时,编写代码都是使用C#,习惯了C#的代码习惯,等工作后由于工作需要逐渐的开始采用了VB.NET开发项目,渐渐地喜欢上了VB.NET,现在我就罗列一些VB.NET加速代码开发的方法. 一.智 ...

  5. 如何在Java代码中去掉烦人的“!=null”

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 译者:lizeyang blog.csdn.net/lizeyan ...

  6. 哈哈哈,这个教人写烂代码的项目在 GitHub 上火了...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 如果说到什么是好代码,我们肯定都能说出一堆规则,例如使用一致的格式 ...

  7. 哈哈哈,这个教人写出烂代码的项目在 GitHub 上火了...

    如果说到什么是好代码,我们肯定都能说出一堆规则,例如使用一致的格式和缩进.使用清晰的变量名和方法名.在必要时提供文档与注释.不要过度精简代码等等. 但是对于什么是烂代码,你有比较清晰的认识吗? 在 G ...

  8. 从苦逼撸代码到年入上百亿,成为商界领袖,IT从业者想要通过自己的努力改变现状,只靠单纯写代码远远不够...

    作者:邹溪源,长沙资深IT从业者,多年来从事.net企业级架构设计和软件开发,目前在长沙某互联网公司担任高级工程师.本文由架构师小秘圈特约作者供稿! 楔子 昨天晚上做了个梦,梦到老板对我说了一番道理, ...

  9. 前端代码标准最佳实践:CSS篇

    上一篇<前端代码标准最佳实践:javascript>发表后,大家讨论还是很热烈,从侧面体现了前端工程师对写标准的前端代码的重视程度很高.这些最佳标准实践并不是那个权威组织发布的,而是由大量 ...

最新文章

  1. CentOS源码安装GitLab汉化版第3版
  2. 捕捉mysql中不可忽视的知识点(二)
  3. 计算机初中教师资格教案,2018教师资格面试:初中信息技术教案《认识WINDOWS》
  4. Webpack安装、打包过程及开发过程超详细教程(专治看不懂学不会)
  5. redis设置开机自启动
  6. MySQL调优(三):索引基本实现原理及索引优化,哈希索引 / 组合索引 / 簇族索引等
  7. JS之数据类型v(** v**)v个人笔记
  8. 【Python CheckiO 题解】House Password
  9. read 和write
  10. c++类型形参的实参的受限转换
  11. phpmyadmin/scripts/setup.php,Linux下phpMyAdmin安装过程中的问题解决
  12. arcgis将一个shp图层导出为多个shp
  13. 成都双流计算机大专学校,成都双流有哪些好的职业学校?
  14. openwrt ipv6上网配置过程
  15. 激光SLAM技术总结(3)3D激光SLAM算法原理
  16. quartus如何生成sof_如何高效利用Arm DesignStart计划开放的处理器核-工具篇
  17. 2022-2023级西安交通大学MBA提前面试(预报名即将开启)6月初
  18. 使用按键精灵自动截图并保存重命名
  19. 解决iphone插上mac电脑充电不停的断开和链接问题
  20. Intellij搭建spark开发环境

热门文章

  1. 陀螺仪的进动及其数学描述
  2. 中国石油大学《大学英语(三)统考》第二套模拟题
  3. 织梦ajax登录界面,dede织梦后台登陆成功后又跳转到登陆页面
  4. docker配置代理pull报错:proxyconnect tcp: tls: first record does not look like a TLS handshake
  5. 2016清华集训滚粗记
  6. 如何设置某些动作在凌晨12点时自动更新
  7. 计算机学院校运会解说词,大学学院运动会入场解说词
  8. 平面设计中立体表现技法
  9. html画流程图插件,基于SVG的流程图插件Flowchart.js
  10. R语言学习笔记三:两独立样本t检验