第一章 整洁代码

  • 第一章 整洁代码

    • 要有代码
    • 糟糕的代码
    • 混乱的代价
    • 思想流派
    • 我们是作者
    • 童子军军规
    • 前传与原则
    • 小结
    • 学习收获

要有代码

  1. 阅读本书(书摘)有两种原因,第一,你是个程序员;第二,你想成为更好的程序员;

  2. 我们要从各个方向来考察这些代码,从顶向下,从底往上,从里往外;我们的目的是知道这些关于代码的事情,分别好的代码和糟糕代码之间的差异,知道如何写出好的代码,以及如何将糟糕的代码改为好的代码;

  3. 有的人也许认为,关于代码的书有点了落后时代——代码将不再是问题;我们应该关注于模型和需求;很快,代码就会自动产生,不需要人工编写;

  4. 扯淡!我们永远抛不掉代码,因为代码呈现了需求的细节。在某些层面上,这些细节无法被抽象,必须明确。将需求明确到机器可以执行的程度,就是编程要做的事情,而这种规约,就是代码;

  5. 即便是特定领域语言的数量继续增加,也终止不了代码。实际上,在较高层次上使用特定领域语言撰写的规范也终将是代码!它也需要严谨、精确、规范和详细,好让机器理解和执行;

  6. 如果说需求规约原则交给了我们什么,那就是归置良好的需求就像代码一样正式,也能作为代码的可执行测试来使用;

  7. 代码确然是我们最终用来表达需求的那种语言。我们可以创造各种与需求无限接近的语言,我们可以创造帮助把需求解析和汇整为正式结构的各种工具。然而,我们永远也无法抛弃必要的精确性——所以代码永存;

糟糕的代码

  1. 我们知道好代码重要,是因为其短缺实在困扰了我们太久;

  2. 他们赶着推出产品,代码写的乱起八糟,特性越多,代码也就越烂,最后再也无法管理这些代码了;——这就是混乱代码对创造它的人的回报;

  3. 为什么要写糟糕的代码呢?是想快点干完吗?是赶时间吗?或许你只是不耐烦再搞这套程序,期望早一点结束;我们都干过这种事;

  4. 我们都曾瞟过一眼自己亲手造成的混乱,但是我们决定弃之不顾,走向新的一天;

  5. 我们都曾看到自己的烂程序竟然可以运行,然后断言能运行的程序比什么都没有要强;

  6. 我们都曾说过有朝一日再回头清理,当然我们都没有听过勒布朗法则:稍后等于永不!;

混乱的代价

  1. 每次添加或者修改代码,都得对那堆扭纹柴了然于心,才能往上扔更多的扭纹柴。这团乱麻越来越大,再也无法清理,最后束手无策;

  2. 新人不知道系统设计,不知道什么样的修改符合设计意图,什么样的修改违背设计意图,而且他们背负着提高生产力的可怕压力,于是他们制造更多的混乱;生产力再次趋向零;直到再也无法在这令人生厌的代码基础上做开发,于是推到重来,可是,只有一部分人才能参加到重来的队伍中,其他人仍然需要继续维护旧的系统;

  3. 新系统的构建时间很长,到了快完成的时候,原来提出推倒重来的成员已不知去向,而现有的成员则要求重新设计一套新系统,因为现有的系统太烂了;

  4. 花时间保持代码整洁不但有关效率,还有关生存;

  5. 好代码为什么会这么快变质为糟糕代码?原因有很多。我们抱怨需求的变化背离了设计的初衷,我们哀叹进度很紧张,没法干好活,我们把问题归咎于愚蠢的经理,苛求的用户等,但是实际上,我们是自作自受,我们太不专业了。

  6. 经理会奋力维护进度和需求,那是他们该干的,而你应该以同等的热情维护代码;

  7. 有那么几年经验的开发者们都知道前期的混乱会拖自己的后腿,但是他们背负期限的压力,于是他们只好制造混乱,简而言之,他们没有花时间让自己做的更快;

  8. 然而真正的专业人士明白,上面的话是错误的。制造混乱无助于赶上期限,只会立即拖慢你,。赶上期限的唯一方法就是适中尽量保证代码整洁!

  9. 如果你不明白整洁代码的意义,尝试着去写整洁代码就毫无益处;

  10. 能分辨整洁代码和脏代码,并不意味着会写整洁代码;

  11. 编写整洁代码,需要大量的小技巧,一种贯彻刻苦习得的“整洁感”。这种代码感就是关键所在。

  12. 缺乏代码感的程序员,看混乱是混乱,无处着手,但是有代码感的程序员能从混乱中看出其它可能的改进方法;

  13. 编写整洁代码的程序员就像是艺术家;

  14. 什么是整洁代码?他们这样说:

    1. 优雅和高效的代码,代码逻辑应当直截了当,叫缺陷无法隐藏;尽量减少依赖关系,使之便于维护;按照某种分层战略完善错误处理代码;性能做到最优,省得引诱别人做没规矩的优化,搞出一堆混乱。整洁代码只做好一件事。(C++语言的发明者:Bjarne Stroustrup);

      优雅!整洁的代码阅读起来令人愉悦!效率!完善错误处理代码,往深处说是在细节上花心思,敷衍了事的错误处理代码是程序员忽略细节的一种表现;最后,整洁代码只做一件事!糟糕代码想做的事情太多,结果除了混乱,还是混乱;

    2. 整洁代码直截了当,如同优美的散文,它们从不隐藏设计者的意图,充满了干净利落的抽象和直截了当的控制语句;(Grady Booch,《面向对象分析与设计》一书的作者);

    3. 整洁代码应该由开发者之外的人员阅读和增补。它应有单元测试和验收测试。使用有意义的命名,只提供一种而非多种做一件事的途径,尽量少的API,代码应该通过其字面量表达含义;(Dava Tomas OTI公司创始人);

    4. 整洁代码就像是某位特别在意它的人写的,几乎没有改进余地。代码作者什么都想到了,如果你企图改进它,总会回到原点,赞叹某人留给你的代码——全心投入的某人的代码;(Michael Feathers,《修改代码的艺术》一书的作者);

    5. 没有重复代码、体现系统中的全部设计理念、包括尽量少的实体,比如类、方法、函数;(Ron Jeffries,《极限编程实施》一书的作者);不要重复代码、只做一件事、表达力、小规模抽象是其认为的重点;

    6. 如果每个程序都让你感到深合己意,那么就是整洁代码,如果代码让编程语言看起来就是专门解决那个问题而存在,就可以称为漂亮代码;(Ward Cunningham,WiKi的发明者,极限编程的创始人之一,Smalltalk 语言和面向对象思想的领袖。所有在意代码者的教父);

    7. 语言是冥顽不灵的,是程序员让语言显得简单;

思想流派

  1. 武术家从不认同所谓的最好的武术,也不认同所谓的绝招。武术大师常常创建自己的流派,聚徒而教;

  2. 任何门派都并非绝对正确;

  3. 本书中列出的建议,乃是我们长久苦思、从数十年的从业经验和无数尝试与试错中得来,无论你同意与否,如果你没有看到或是不尊重我们的观点,就该为自己害臊;

我们是作者

  1. 我们是作者,作者都有读者,作者有责任与读者做良好沟通;

  2. 新代码时,我们一直在读旧代码。既然读代码的比例占的如此高,我们希望让读的过程变得轻松,哪怕这会使编写的过程变得更难。从另一个角度来说,使之易读实际上也使之易写;

  3. 写代码的难度,取决于读周边代码的难度,要想干得快,要想轻松写代码,先让代码易读;

童子军军规

  1. 让营地比你来时更干净;

  2. 如果每次签入时,代码都比签出的时候整洁,那么代码就不会腐坏;

  3. 你想为一个代码随时间流逝而变得更好的项目工作吗?持续改进是专业性的内在组成部分;

前传与原则

从许多角度来看,本书都是《敏捷软件开发:原则、模式与实践(Agile Software Development: principles, patterns and practices),简称PPP》的前传。所以整洁代码也涉及到常见的设计原则,比如:单一职责、开闭原则、依赖倒置原则、里式替换原则、迪米特原则、接口隔离原则

小结

  1. 艺术书并不能担保你阅读完后成为艺术家,它只能告诉你艺术家用过的工具、技术和思维过程。同样,这本书也不会给你代码感,它能做的只是展示好程序员的思维过程,还有他们使用的技术、工具;

  2. 你会看到一个又一个例子,但最终结果取决于你自己;

  3. 你还得练,孩子,还得练!

学习收获

  1. 代码是什么?代码是用来描述需求的!它不仅仅是一行“Hello World”。实际上,最早的那一行Hello World也是描述了一种需求,不是吗?作为计算机专业的学生,我们学习了C++、Java、C#等具体编程语言,可是没有老师正式在课堂上解释过什么是代码,似乎我们使用那些编程语言的输出结果就是代码。可是,是那样吗?我们是一群写代码的人,我们其实是一群描述需求的人,只是用户使用人类语言向我们描述需求,而我们将向机器描述我们的需求;

  2. 没有什么是绝对正确的,我想也不存在XXX是世界上最好的语言、XXX是最好的工具;如果这样认为,其实只是我们沉浸在这一领域,以其技为善。就像书中所说,各派有其善法,但这并不能否定其他门派所授之法;

说实话,第一次看这本书大概是大二上学期或者大一下学期的时候,看了本书的第一章之后,有很长的一段时间,我不敢写代码,怕写出烂代码,因为学习之初,常常使用 int a=10; int* b=&a;这样的语句,这些带我入门的代码被称为脏代码,感觉自己傻了一样。不过也正是那段时间,开始学习面向对象的相关知识,从而接触到设计模式等知识,既然不敢写代码,那我就先学如何才能写出好代码呗,总不能闲着啊,哈哈哈。现在重新学习总结这本书,有了写烂代码的经验,阅读时也就有了更多的体会,还是蛮不错的。

不过,最后一句话更有启示和鞭策:“你还得练,孩子,还得练!”

另外,本系列文章中,除了学习收获下面的内容,其余全部观点均来自书中摘录,在此向书的作者致以崇高敬意!

《整洁代码之道》学习书摘(二)第一章——整洁代码相关推荐

  1. 《代码整洁之道》第一章 整洁代码 ---为什么需要整洁代码?

    第一章 整洁代码 概述 什么是整洁代码? 开始走向整洁代码 概述 欢迎阅读本栏目的读者,如果你想成为更加优秀的coder,请跟随笔者的观点去解析<代码整洁之道>这本书,相信你会收获颇丰. ...

  2. 关系抽取:图卷积网络的学习(二)(附代码)

    关系抽取:图卷积网络的学习(二)(附代码) 目录 关系抽取:图卷积网络的学习(二)(附代码) 论文一:基于关系图的实体关系联合抽取 摘要 1.Introduction 2.Motivation 3.G ...

  3. A.图机器学习(GML)图神经网络(GNN)原理和代码实现(前置学习系列二)

    图学习图神经网络算法专栏简介:主要实现图游走模型(DeepWalk.node2vec):图神经网络算法(GCN.GAT.GraphSage),部分进阶 GNN 模型(UniMP标签传播.ERNIESa ...

  4. 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符

    Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...

  5. Java 学习笔记:第一章 Java入门

    Java 学习笔记:第一章 Java入门 1.1 计算机语言发展史以及未来方向 1.2 常见编程语言介绍 C语言 C++ 语言 Java语言 PHP 语言 Object-C和Swift 语言 Java ...

  6. PMBOK(第六版) 学习笔记 ——《第一章 引论》

    系列文章目录 PMBOK(第六版) 学习笔记 --<第一章 引论> PMBOK(第六版) 学习笔记 --<第二章 项目运行环境> PMBOK(第六版) 学习笔记 --<第 ...

  7. Cyclone V SoC FPGA学习之路第一章:综述

    Cyclone V SoC FPGA学习之路第一章:总体了解 关键词: adaptive logic modules – ALM 自适应逻辑模块 logic array block --LAB 逻辑阵 ...

  8. 学习笔记-应用光学 第一章 几何光学的基本定律

    学习笔记-应用光学 第一章 几何光学的基本定律 1-1 发光点.波面.光线和光束 发光点:本身发光或被照明后发光的几何点 波面:发光点在某一时刻发出的光形成波面 (在各向同性均匀介质中波面是球形) 光 ...

  9. 图机器学习(GML)图神经网络(GNN)原理和代码实现(前置学习系列二)

    图机器学习(GML)&图神经网络(GNN)原理和代码实现(PGL)[前置学习系列二] 上一个项目对图相关基础知识进行了详细讲述,下面进图GML networkx :NetworkX 是一个 P ...

最新文章

  1. Centos 不小心删除了openssl,导致无法使用sshd、yum、wget、curl 等软件的问题。。...
  2. 如何理解soft target这一做法?
  3. 关于程序员的那些事——一个五年程序员的总结
  4. 视觉SLAM直接法与特征法及其在多传感融合中的思考
  5. c语言形考作业1答案,c语言程序设计形考任务二答案.doc
  6. javascript setinterval 正确的语法
  7. 基于xml技术的操作
  8. jquery hover事件中 fadeIn和fadeOut 效果不能及时停止
  9. 计算机等级考试真题演示,全国计算机等级考试二级真题测试(答案)四、演示文稿题-日...
  10. Asp.Net alert弹出提示信息的若干种方法
  11. IPSEC 安全连接
  12. c语言程序谭浩强第二章,PDF版本_谭浩强c语言程序设计. 第二章 程序的灵魂-算法...
  13. 怎么样才可以?批量下载快手播主的全部视频?
  14. 使用DroidCam将手机作为PC的摄像头
  15. 激光位移传感器与其他位移传感器比较
  16. vue引入TweenMax.js
  17. 计算机如何获取知识和技能 实现自我完善,在人工智能中有一个研究领域,主要研究计算机如何获取知识和技能,实现自我完善,这门分支学科叫做。...
  18. 新年特供【供应链作战指北】
  19. Java基础及大数据视频
  20. 为啥小扎一直醉心于元宇宙的布局?

热门文章

  1. 教你快递查询单号查询物流
  2. 青龙面板-快手极速版(每天3块脚本)
  3. AJP:有和没有内化性精神障碍的受虐女孩情绪回路延迟成熟的差异性
  4. 游戏里面的英雄是怎么做的?
  5. 关于godot第三方功能增强版
  6. 20220624 登录和代理ip
  7. SAP FICO 固定资产的四种折旧方式
  8. 蒙特卡洛未来股票价格matlab,股票组合价格蒙特卡洛matlab
  9. 支付宝小程序授权/获取用户信息
  10. 微信小程序Canvas绘制图案(生成海报、朋友圈海报)