<!doctype html>

The pragmatic programmer(2).md

程序员修炼之道(二)

读书笔记--第三周


第二章 注重实效的途径

DRY原则:系统中的每一项只是都必须具有单一、无歧义、权威的表示。

  • 强加的重复:

    • 信息的多重表示。编写简单的过滤器或代码生成器,可以在每次构建软件时,使用简单的代码生成器,根据公共的元数据表示构建多各种语言下单的结构。可以根据在线数据库schema、或是最初用于构建schema的元数据,自动生成类定义。这本书就是一个例子:这本书中摘录的代码,由预处理器在作者每次对文本进行格式化时插入。诀窍就是让该过程成为主动的,这不能是一次性转换,否则就会回退到重复数据的情况。

    • 代码中的文档。糟糕的代码才需要注释,我们需要把低级的知识放在代码中,它属于那里;把注释保留给其他的高级说明。否则,我们就是在重复知识,而每一次改变都意味着既要改变代码,也要改变注释。举个反面例子

       
      xxxxxxxxxx

      int d;   //d 是直径

      这样就犯了低级的知识放在了代码中的错误,好的方法是这么写:

       
      xxxxxxxxxx

      int diameter;   

      这样不需要注释也知道这个是直径。

    • 文档与代码。文档和代码都含有同一知识的表示。

    • 语言问题。

  • 无意的重复:

    • 例子:一个表示线段的类

       
      xxxxxxxxxx

      class Line{

        public:

         Point start;

         Point end;

         double length;

      }

      重复原因:每改变一个点,都要改变长度,重复!

      好的写法:

       
      xxxxxxxxxx

      class Line{

        public:

         Point start;

         Point end;

         double length(){ return start.dictanceTo(end); }

      }

    • 有时为了性能而选择违反DRY原则。通常:需要缓存数据,以避免重复昂贵的操作时。其诀窍是使影响局部化。对DRY原则的违反没有暴露给外界:只有类中的方法需要注意“保持行为良好”。在可能的情况下,应该总是用访问器函数来写对象的属性。这将使未来在增加功能(比如缓存)变得更加容易

  • 无耐性的重复:

    • 相似的程序拷贝代码并在其基础上做改动,可以节省几秒钟时间,但是以后可能损失几个小时。欲速则不达!
  • 开发者之间的重复:

    • Make it easy to reuse.

      • 要营造一种环境,在其中要找到并复用已有的东西,比自己编写更容易。如果不容易,大家就不会去复用,而如果不进行复用,我么就有重复知识的风险。

正交性

  • 什么是正交性:某种不依赖性或是解耦性

  • 正交的好处:消除无关事物之间的影响

    • 设计自足的祖籍按:独立,具有单一、良好定义的目的。

    • 提高生产率和降低风险。

      • 提高生产率

        • 改动得以局部化,设计、编写简单的组件,对其进行单元测试,然后把它们忘掉。
        • 促进复用。
      • 降低风险

  • 项目团队:

    • 正交的团队效率更高(尽管如此,我们依然鼓励自团队不断地相互交流)。
  • 编码:

    • 让你的代码保持解耦
    • 避免使用全局数据
    • 避免编写相似的函数

    养成不断地批判对待自己的代码的习惯。寻找任何重新进行组织、以改善其结构和正交性的机会。这个过程叫做重构,它非常重要!

正交性与DRY原则密切相关。运用DRY原则,实在寻求使系统中的重复降至最小;运用正交性原则,可以降低系统的各组件间的相互依赖。在做project时紧密结合DRY原则,运用正交性原则,将会发现开发的系统变得更加灵活、更易于理解,并且更易于调试、测试和维护。

我们已经开始了我们的project,但是还没有开始code,提前看了这个让我有了code时候注意DRY和正交的意识,如果有一天我们大家都在不顾一切地做出改动,而每一处改动似乎都会造成别的东西出错,那么项目很有可能是没有进行正交的设计和编码。那么这就是我们重构的时候了。

转载于:https://www.cnblogs.com/rui-zhao/p/8608078.html

《程序员修炼之道》读书笔记(二)--第三周相关推荐

  1. 《程序员修炼之道》笔记(二)

    第二章 注重实效的途径 1. 重复的危害 a) DRY-Don't Repeat Yourself.系统中的每一项知识都必须具有单一.无歧义.权威的表示. b) 重复是怎样发生的 Imposed Du ...

  2. [转载+电子书下载]《程序员修炼之道》 笔记与感想

    [转载]<程序员修炼之道 >笔记与感想 1 我的源码让猫给吃了 不要寻找借口,从自身找原因 2 软件的熵  一句话:不以善小而不为,勿以恶小而为之. 从初期就要做好规范,不要因为是poc这 ...

  3. 《程序员修炼之道》笔记(一)

    这几天开始看<程序员修炼之道>,也许不少人看了书的标题,第一时间会觉得这是鸡汤一类的书.但至少以我自己的感受来看,这是很棒的书,现代人文主义不是提倡自我意识嘛,自己感觉好的就是好的.况且人 ...

  4. 程序员修炼之道---读书随笔1

    终于开始读<程序员修炼之道>这本书了,初看这本书的名字,有点以前的道士修炼法术的意思,觉得很是好奇,作为一名程序员,该如何修炼我们自己呢? 这本书涵盖的主题从个人责任.职业发展,直到用于使 ...

  5. 程序员修炼之道阅读笔记02

    本周阅读了程序员修炼之道(从小工到专家)的第四章<注重实效的偏执>.第五章<弯曲,或折断>.第六章<当你编码时>的相关内容,对其中一些值得我们学习的地方进行了摘录. ...

  6. 程序员修炼之道阅读笔记01

    读过这本书之后,我觉得这本书主要是在讲一个优秀的程序员应该具有的特点,素质和应该怎么去做.真正是一个程序员从小工到专家的修炼之路. 对于第一章"注重实效的哲学"有如下总结和理解 1 ...

  7. 《程序员修炼之道》笔记(九)

    *续 第八章 注重实效的项目 1. 无处不在的自动化 文明通过增加我们不假思索就能完成的重要操作的数目而取得进步. 无论是构建和发布流程.是书面的代码复查工作.还是其他任何在项目中反复出现的任务,都必 ...

  8. 《程序员修炼之道》笔记(八)

    第八章 注重实效的项目 随着你的项目开动,我们需要从个体的哲学和编码问题转向讨论更大的.项目级的问题.我们将不深入项目管理的具体细节,而是要讨论能使项目成功或失败的几个关键区域. 1. 注重实效的团队 ...

  9. 《程序员修炼之道》笔记(四)

    第五章 弯曲,或折断 为了赶上今天近乎疯狂的变化步伐,我们需要尽一切努力编写尽可能宽松灵活的代码.否则,我们可能就会发现我们的代码很快就会变得过时,或是太脆弱,以至于难以清理. 1. 解耦与得墨忒耳法 ...

  10. 程序员修炼之道--读书简记

    前言 1,关注你的技艺 2,思考!思考你的工作 3,这是一个持续的过程 第一章 务实的哲学 1,人生是你的,你有选择权 人生是你自己的,是你在拥有.经营和创造 2,软件的熵:破窗理论 在城市中心,有些 ...

最新文章

  1. Cassandra 1.2 发布,NoSQL 数据库
  2. ansible模块---续
  3. SAP Spartacus可供demo用途的Commerce Cloud public instance
  4. ansible中yaml语法应用
  5. apache 虚拟主机详细配置:http.conf配置详解
  6. Docker(一):基础入门篇
  7. quartz 每30秒执行一次_30条一眼就让人心动的文案:每一次黄昏,都是坠入思念的夜深。...
  8. 使用Visual Studio 部署SharePoint时提示“路径中具有非法字符”
  9. Mipmap drawables图标
  10. 百面机器学习—模型复杂度与模型的方差、偏差的关系
  11. 上下定高 中间自适应_B站微服务框架Kratos详细教程(3)中间件
  12. ASC加密解密(笔记)
  13. 【高频电子线路】[笔记]第1章 绪论
  14. 配置阿里云maven仓库地址
  15. python地理数据处理 下载_Python批量下载地理空间数据云数据!Python无所不能!...
  16. uCos中的信号量机制
  17. module ‘sklearn.utils._openmp_helpers‘ has no attribute ‘__pyx_capi__‘
  18. alexa排名的作用
  19. 【计算机毕设之基于springboot的救灾物资管理系统-哔哩哔哩】 https://b23.tv/jtV9Bib
  20. 不重启容器的情况下添加或者删除端口

热门文章

  1. Linux电源管理(一)电源管理系统架构
  2. 用vue-cli3+vue-video-player写了个高佣联盟推广网站
  3. 阿里巴巴开发者社区电子书藏经阁
  4. ffmpeg学习日记702-报错-包含‘PRId64‘的报错
  5. 网络编程经典好书推荐
  6. 小黑子—多媒体技术与运用基础知识二:数字音频处理技术
  7. Seam - 无缝集成 JSF,第 2 部分: 借助 Seam 进行对话
  8. NBIOT-BC28模块程序操作接口编写(基于STM32F103ZET6)
  9. SAAS 客服云平台市场调研报告
  10. 轩辕Linux开放实验室