精华内容
下载资源
问答
  • 代码整洁之道读书笔记

    代码整洁之道读书笔记


    在这里插入图片描述

    展开全文
  • 代码整洁之道,英文书名是The Clean Coder。有人和我一样疑惑吗?中文名究竟是怎么翻译过来的! 我本以为这本书是讲解如何编写代码,像命名规范、模块划分之类。然而书中所讲的内容却和我想的相差甚远,这些内容...

     代码整洁之道,英文书名是 The Clean Coder。有人和我一样疑惑吗?中文名究竟是怎么翻译过来的!

    我本以为这本书是讲解如何编写代码,像命名规范、模块划分之类。然而书中所讲的内容却和我想的相差甚远,这些内容也许正是我这种过分纠结代码的人所容易忽略的。我未曾从书中得到我所期待的,但得到了更重要的。

    1986年,美国发射挑战者号失败,而负责制造火箭的工作人员事先已经发现了存在的隐患。制造火箭的人了解到发射火箭的隐患,多次向火箭发射的管理层反馈,但是没有结果。而对于决定火箭是否发射的当局来说,终止发射带来的时间和经济成本是无法忍受的,而要求终止发射的理由竟然仅仅是有隐患而已。随后,作者提出了两个问题,造火箭的人是否有过失?管理当局是否有过失?这两个问题仁者见仁智者见智。没有唯一的答案,但是却可以讨论。当我们开始讨论这两个问题,就产生了这样的疑问:什么是职业素养?

    我想,如果有一段定义可以比较精确地描述什么是职业素养,那一定是极其抽象和隐晦。当我读完整本书,发觉可以这样简单地定义:职业素养即是在描述职业人员应该做什么,和应该做到什么。

    程序员仅仅是在简单地编写代码吗?若编写代码没有目的,那又有什么意义呢?当程序编码的时候,他是在构建产品。

    每个人都写出过bug,但什么时候出现bug却是有区分的。当你在学校学习的时候,写出bug很好,那说明你发现了自己的某些问题。在工作中,你写出了bug,但是在提交代码之前修改好了,这是合理的。一旦bug出现在最终的产品中,这将是不可容忍的,当然你很有可能因此而失业。另一个问题,程序应该把未经测试的代码交给质量保证人员吗?即程序应该保证代码的质量吗?也许有人会说,如果程序员把代码都测试过了,那还要测试人员干什么?实际上任何职业都应该保证他的工作成果是有效的,有质量保证的。程序员也不例外。我听过一些高级的程序的观点:程序应该自己写单元测试,保证代码没有问题,对于前段而言,虽然很难写出完整的单元测试,但是可以尽量多地点击按钮来保证质量。而对于刚才的问题,也许可以这样回答:测试人员进行的测试和程序员自测的过程是不同的,程序自测相当于白盒测试,而测试人员进行的则是黑盒测试。

    有一点我必须事先申明,书中所表述的观点偏向于理想状态。而理论和实际多少是有差距的。就好像有些老师教育学生应该如何做,而自己却不能遵守规则。书的作者通过讲述自己的经历的错误来表达观点,这恰恰说明他没有完全按照书中表述的观点来做事,起码之前没有完完全全地遵守。

    程序需要保证质量,这意味着他需有充足的时间。理论上,程序应该向客户要求足够的时间完成产品,但实际上则两者总是有冲突,而且富有经验的程序员也可能估计错误时间。这并不意味着程序可以放松产品的质量,它然而要求程序员已经编写的代码都是稳定可靠的。即你可以只提交部分功能,但这些已经提交的功能必须是可靠的。这可能意味着你的代码是低耦合的,模块间的划分是比较清晰的。书中讲的这些职业素养也许不能直接帮助你提高编码的水平,但凡是实现了这些要求的代码一定是高质量的,因为我没有理由相信,安全稳定可靠的程序会是写的一团糟。

     

    转载于:https://www.cnblogs.com/afraidToForget/p/9527107.html

    展开全文
  • 个人读书笔记,学习共享,希望每个苦恼于代码一坨坨混乱不堪的程序员都能学习. * 整洁代码的意义? 可读性,可维护性。 * 如何写出整洁代码? 1.只做一件事 2.不重复 3.有表达力 * 整洁代码的态度要求,要遵守...
  • 代码整洁规范 减少重复代码 提高表达力 提早构建简单抽象 文章目录有意义的命名函数注释格式数据,对象的反对称性错误处理测试类好的代码示范 有意义的命名 名副其实 如果你需要注释来解释一个变量,那就说明它...

    代码整洁规范
    减少重复代码
    提高表达力
    提早构建简单抽象

    有意义的命名

    名副其实

    • 如果你需要注释来解释一个变量,那就说明它不是名副其实
    • 一旦发现有更好的命名,就要换掉旧的,要记住换花的时间是值得的

    避免误导

    • 尽量少使用类型名,除非它真的是这个类型
    • 不要使用过于相似的名字

    命名规范

    • 类名和对象是名词,方法是动词,注意get/set/is的前缀
    • 即每个抽象概念选一个词,DeviceManager和Protocal-Controller是一样的
    • 要保持前后术语规范。
    • 用常量代替原始数字(魔术数)
    • 不要在代码中重复写+1的边界条件,而是用变量进行封装
    • 函数的长短与其作用范围息息相关,所以for循环可以用i,j因为它们作用域很小

    函数

    函数要做到自己理解,而不是通过测试用例,这需要改进和重构简洁。

    尽量短小

    • if/for/while中应该只有一行
    • 函数只做一件事,抽象层上应该是同一级别!
    • 函数的顺序,是自顶向下的规则,抽象到具体的顺序
    • 函数要做什么事和函数要回答什么事区分。函数修改状态和返回状态区分

    参数

    • 参数最多不应该超过3个,如果参数多于3个的时候,就可以思考参数是否能构成一个类
    • 参数不要传布尔值,应该将true/false分成两个函数,然后在布尔值的上一个抽象层直接做判断,而不是将其作为布尔值传递。(整数值,枚举元素等函数选择行为同理)

    处理异常

    • try/catch的每个功能都应该拆出成一个函数
    • 如果你用枚举类型来表示异常,那将意味着你会很不情愿修改它,使用异常代替错误码,新异常就可以从异常类中派生出来.

    重复

    • 永远无法容忍重复代码,这意味着抽象的遗漏3
    • 如果你发现死代码(永不执行的代码块),果断删除
    • 多个switch/ifelse,考虑多态

    判断

    • if的条件如果过多,就要封一个函数,因为没有上下文是看不懂if的
    • 避免否定条件,尽量保持一致,不要带!,可以直接把!函数封成函数

    静态

    • 如果一个函数不依赖其类的属性,都是依赖于参数,这时候该函数就应该声明为静态
    • 静态导入(就是单纯导入),而不是用继承的方式,这样别人不知道函数的来源

    注释

    尽量少写注释

    • 写注释意味着你的代码不够优雅,别人无法理解
    • 能用函数和变量拆解的时候就拆解,而不是用注释去描述
    • 你无法始终坚持维护你的注释,会出现各种问题
    • 不要注释代码,我们有优秀的代码管理器,无用的代码就删掉就可以了,它会保留的。

    好的注释

    • 法律与版本信息
    • 某个决定背后的意图解释,便于后续别人的修改
    • TODO

    如何写注释

    • 一旦写注释就要花时间写好注释,注释的角度尽量从别人的角度出来来想会有什么疑惑,而不是解决自己的疑惑
    • 不要尝试描述代码本身

    格式

    格式之所以重要是因为,你的功能可能会变,但是你代码的风格会一直保留

    正确格式

    • 封包声明,导入声明,每个函数,每个有区别的地方都应该用一行空白行分割。
    • 垂直关系:关系紧密的就应该靠在一起,函数调用了也应该放在一起
    • 水平关系:赋值符前后空格,参数前后空格

    数据,对象的反对称性

    抽象

    • 隐藏实现并非在变量之间放上一层函数层,也不是单纯使用取值器和赋值器往外推,而是暴露抽象接口,以便于用户无需了解数据形式就可以操作数据。
    • 过程式代码便于添加函数(switch实现);对象类代码便于添加数据类型(多态实现)
    • DTO(data transfer object),豆结构,即只有赋值器和取值器操作的私有变量

    错误处理

    try-catch

    • try-catch: 一开始可以用exception捕捉,捕捉到之后要缩小到对应范围。
    • try的内容是一个原子事务,这一点要注意想清楚。

    打包类

    如果需要多次捕捉异常,则可以将其封装在一个类中成第三方API

    在这里插入图片描述

    在这里插入图片描述

    NULL值处理

    • 绝对不要返回Null值,否则别人检查null值会很麻烦,而且检查一多就会乱(可以内部直接抛出错误,也可以定义为空值就好)
    • 禁止参数传入Null值,否则你总不可能每个变量一个个检查null(如果实在没有办法就只能用断言assert检查一下吧,用if有时会太乱混淆)

    测试

    • 测试代码和生产代码一样重要。如果你随便对待,将来将花费更多时间塞入新的测试和检查旧的测试
    • 包括三个环节:BUILD-OPERATE-CHECK 构造测试数据-操作测试数据-检验操作
    • F(Fast)I(Independent)R(repeatable)S(self-validating)T(timely)
    • TDD的思想很重要,否则你无法保证你的任何修改是正确的

    短小

    • 类的名称要描述其权责而不能是一些模糊的词(Process,manger,super),而且描述该类职责的时候不应该出现if/and/or/but这些词语
    • 类的权责应该是单一的,尽量拆成多个短小类吧
    • 长的函数拆成小的函数的时候,参数是否要传,若是那为什么不把它们变成一个类,参数是它们的成员变量就好了。注意变的时候保持单一权责
    • 注意职责的分隔。如果当你新增一个功能可能会影响其他时,说明耦合过强

    好的代码示范

    书的附录记录了好的代码示范

    展开全文
  • 软件质量,不仅仅依赖于项目架构和项目管理,同样重要的是代码质量!!! 序 神在细节中,其实干什么事都一样,...这就是代码整洁之。 全员生产维护(TMP),TMP的主要支柱一就是5S原则体系,5S哲学包括...

    软件质量,不仅仅依赖于项目架构项目管理,同样重要的是代码质量!!!

    神在细节之中,其实干什么事都一样,从小到大,一直明白一个道理:细节决定成败!

    软件架构在开发中占据重要地位。其次,宏达建筑的最细小的部分,比如关不紧的门、有点没铺平的地板,甚至是凌乱的桌面,都会将整个大局毁灭殆尽。这就是代码整洁之所道。

    全员生产维护(TMP),TMP的主要支柱之一就是5S原则体系,5S哲学包括以下概念:

    • 整理:搞清楚事物之所在——通过恰当的命名——至关重要
    • 整顿:每段代码都该在你希望它所在的地方
    • 清楚:对于那种四处遗弃的带注释的代码,反映过往或期望的无注释的代码,除之而后快
    • 清洁:标准化,组内共识,使用一贯的代码风格
    • 身美:自律,贯彻规程,乐于改进

    我喜欢此书中的这句话:对于代码应无情的重构,写出可读的代码,重要程度不亚于写出可执行的代码。我特喜欢无情两个字,因为我总看不惯之前他人写的乱七八糟的代码,想把事情做的尽善尽美。但其实实际情况是很糟糕的,在大部分并不懂技术的老板眼里,你能力的高低,就是看你是否能写出可执行的代码,或者更精确的说是看你能否更快的写出可执行的代码,老板只注重结果,要能看到实实在在的东西,他并不会关心你是怎么实现的,也不关心这些代码是否好维护。直到某天,代码乱成一锅粥,想要改个东西,加个需求,已经举步维艰的时候,我想已经晚了吧。哈哈哈。。。我认为真正牛逼的人,是以最快的速度写出最高质量的可执行的代码!!!

    在我眼里,架构就好比建一个小区,架构师就是开发商,架构决定此小区是什么档次的小区,整个小区是什么样的格局,多大的楼距,绿化是否不错,停车场是否够大,大楼是否坚固,是否抗震,供暖,水电是否很好的接通。架构从根本上决定了整个项目。那么项目管理呢,就好比是物业,管理的好,整个小区井井有序,那么真正的程序开发人员,就是去每家每户装修设计的设计师,刷墙,装玻璃,铺地板,设计房间,只有你出手的东西美观,整洁,那么这一户才能做到尽善尽美。所以说,一个项目,软件架构,项目管理,高质量的代码,我们去映射到一个小区,开发商,物业,装潢,我觉得再好不过了。如果这三项都无比优秀,那么何愁这个项目不精致呢?其实无论如何,要记住两个字:“细节”

    说来说去,最后谨记一点,无论架构还是代码都不强求完美,只求竭诚尽力而已。

    书中的一句话,我们坦诚代码状态,因为它永不完美。我们日渐成为完整的人,配得起神的眷顾,也越来越接近细节中的伟大之处。

    前言

    前言说的这几段我真的很喜欢,因为无论做什么事都是这样:

    习艺之要有二:知和行。你应当习得有关原则、模式和实践的知识,穷尽应尽之事,并且要对其了如指掌,通过刻苦实践掌握它。

    我可以教你骑自行车的物理学原理。重力,摩擦力,角动量,质心等,用一页写满方程式的纸就能说明白,有了这些方程式,我可以为你证明出骑车完全可行,而且还告诉你骑车所需的全部知识。即便如此,你在初次骑车时还是会跌倒在地。我再说的严重一点,让你研究一年如何骑车,各种理论知识技巧,一年之后你第一次骑车还是会跌倒在地!!!

    我们可以写下整洁代码的所有“感觉良好的原则”,放手让你去干。那样的话我们算是哪门子的老师?而你又会成为怎样的学生呢?你必须自行实践,且体验自己的失败。你必须观察他人的实践与失败。你须看看别人是怎样蹒跚学步,再转头研究他们的路数。你须看看别人是如何绞尽脑汁做出决策,又是如何为错误决策付出代价。

    一定要认真阅读第2部分!!!

    我对此书充满期待,开始阅读的旅程吧!

    第一章 整洁代码

    1.1 要有代码

    有人说代码会自动生产出来,不需要人工编写,程序员没用了,这完全就是扯淡!

    代码确然使我们最终用来表达需求的那种语言。我们永远无法抛弃必要的精确性——所以代码永存

    1.2 糟糕的代码

    其实随着时间的推移,尤其赶着要推出产品,代码写得乱七八糟,最后再也没法管理这些代码了。最终导致的结果就是软件越用越卡,崩溃几率越来越大,再那之后不久,该公司就关门大吉了。

    为什么要写糟糕的代码?

    就拿我们现实生活来说,大部分时候是为了赶时间,如果你做的慢老板肯定会大发雷霆,或许我们想赶紧弄完手头的事情,好接着做下一件工作。

    我们都说过有朝一日再回头清理我们写过的烂代码,但是,再那些日子里,我们没听过勒布朗法则:稍后等于永不。

    1.3 混乱的代价

    我经常会做重构他人代码的事情,有很多的代码写的简直混乱不堪,甚至匪夷所思,重构完的那一刻感觉是非常爽的,但是那个过程真是非常艰辛的!!!

    随着混乱的增加,团队生产力也持续下滑,趋向于零。

    1.3.1 华丽新设计

    有一天,再也无法在这种令人生厌的代码上进行开发了,无奈组建新军重新开发一套新系统。

    很重要的一句话:花时间保持代码整洁不但有关效率,还有关生存。

    1.3.2 态度

    这种糟糕的情况经常存在:

    • 要花好几个星期来做本来几小时就能完成的事情
    • 只需做一行修改,结果却涉及上百个模块

    一句经典话:程序员遵从不了解混乱风险的经历的意愿,是不专业的做法。

    1.3.3 谜题

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

    1.3.4 整洁代码的艺术

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

    编写整洁代码的程序员就像是艺术家,他能用一系列变换把一块白板变作优雅代码构成的系统。

    1.3.5 什么是整洁代码

    • 优雅,代码逻辑直截了当
    • 从不隐藏设计者的意图
    • 便于他人阅读和加以增补
    • 看起来像是某位特别在意它的人写的,几乎没有改进的余地,代码作者什么都想到了
    • 没有重复代码,包括尽量少的实体,比如类,方法,函数等
    • 让编程语言像是专为解决那个问题而存在

    1.4 思想流派

    书中很多建议都存在争议,但是都是作者们长久苦思、从数十年的从业经验和无数尝试与错误中得来。好好学吧!

    1.5 我们是作者

    Javadoc中的@author字段告诉我们自己是什么人。我们是作者。作者都有读者,我们一定要负责任!!!

    读与写花费时间的比例为10:1,在写新代码时,我们一直在读旧代码。

    所以,努力让代码变的易读吧!

    1.6 童子军军规

    让营地比你来时更干净

    1.7 前传与原则

    在本书中,你会发现对不同设计原则的引用

    1.8 小结

    没啥说得了,迫不及待了,开始旅程

    1.9 文献

    总结

    其实第一章是一个类似讲故事的章节,根本没必要读这么细,还一小节一小节的都做记录,但是我觉得作者的很多话说的很有深意,我喜欢,把他们记录下来。希望日后翻过来看,我会感觉到很有趣!

    展开全文
  • 代码整洁之道阅读笔记01 第一次阅读,阅读了序,前言和前三章。 整理部分内容如下: 序: 丹麦谚语:小处诚实非小事。以小见大。 5S哲学: 整理--组织,搞清楚事物之所在,通过恰当的命名之类的手段; 整顿--...
  • 代码整洁之道阅读笔记03 本次阅读:第十章到结束 个人感受: 看完这本书,这本书主要是写如何使代码更整洁—可读性强,规范 这一本书里面有很多的代码,通过每一个代码的例子去进行分析,讲解,有很多东西都需要...
  • 代码整洁之道阅读笔记02 第二次阅读,阅读了第四章到第九章 整理部分如下: 第四章:--注释 什么也比不上放置良好的注释来的有用。什么也不会比乱七八糟的注释更有本事搞乱一个模块。什么也不会比陈旧、提供错误...
  • 让注释传达本该更好地在源代码控制系统、问题追踪系统或任何其他记录系统中保存的信息,是不恰当的。注释只应该描述有关代码和设计的技术性信息。 C2:废弃的注释 过时、无关或不正确的注释就是废弃的注释。 C3...
  • 被要求到阅读这本传说中的书,写个读书笔记记录一下~ 第一章 整洁代码 1.勒布朗法则:稍后等于永不(Later equals never) 2.整一章都在描述代码整洁有多重要.. 第二章 有意义的命名 1.选择体现本意的名称能让...
  • 读书交流会 多读书读书 读好书 1 举 头 望 明 月 低 头 敲 代 码 满 园 春 色 关 不 住 一 串 代 码 飘 出 来 夜 阑 卧 听 风 雨 声 做 梦 还 在 敲 代 码 洛 阳 亲 友 如 相 问 就 说 我 在 敲 代 码 风 萧 萧 ...
  • 代码整洁之道 clean code: 能够实现功能,重复代码少,抽象合理有层次,代码表达力高,易于维护/修改/扩展 chapter 2 命名 统一的命名规范 清晰、有意义的名字 chapter 3 函数 短小,只做一件事 每个函数一...
  • 第十章 类 10.1 类的组织 从上往下,从一组变量列表开始:公共静态常量、私有静态变量,私有实体变量 封装 我们喜欢保持变量和工具函数的私有性,有时需要用到受...鉴别权责(修改的理由)常常帮助我们再代码中认
  • 一个强制性的原则是,代码长度最好20行封顶。 2.代码块和缩进:if、else、while语句等,其中的语句只有一个,就是一个函数调用语句; 函数的缩进层级不该多于1层或2层。3.只做一件事: 函数应该做一件事,做好这件事...
  • 第八章 边界 我们很少能控制系统中的全部软件,有时用的第三方或者开源代码,有时用我们公司其他人打造的组件...// 这段代码不太整洁,而且没说明自己的用途 Map sensors = new HashMap(); Sensor s = (Sensor)senso
  • 作者将一个复杂的函数提炼为9行代码,告诉了我们什么样的代码易于阅读 3.1 短小 作者的建议是一个函数封顶20行最佳,每个函数说一件事,每个函数依序把你带入下一个函数。 if、else、while语句等,其中的代码...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,943
精华内容 1,577
关键字:

代码整洁之道读书笔记