*续 第五章弯曲,或折断

4 它只是试图

a) 以一个电子表格应用举例,除了显示表格,还要能把数值显示为柱状图,还有总计功能。实现的大概过程为:首先创建一个模型(数据自身),以及用于对其操纵的常用操作;然后创建不同的视图,以不同方式显示数据,作为表格、柱状图、总计框,每个视图都有自己的控制器。

b) 让视图与模型分离,可以用低廉的代价为自己换来许多灵活性,MVC是最为重要的维护可撤销性的途径之一。

c) MVC

模型,表示目标对象的抽象数据模型。模型对任何视图或控制器都没有直接的了解

视图。解释模型的方式。它订阅模型中的变化和来自控制器的逻辑事件。

控制器。控制视图、并向模型提供新数据的途径。它既向模型、也向视图发布事件。

(但MVC在Web应用中,受限于HTTP连接的特性,控制器无法向视图发布事件。)

d) 除了一般意义上的MVC,我们还可以超越GUI,组成模型-查看器网络。查看器对象可以是更高级对象的模型,而后者自己可能又是不同的格式化查看器的模型。


5 黑板

a) 关于黑板方法,可以用侦探的工作来举例。每个侦探都随时可以在黑板上增加各种事实、证人陈述等,以促成发现某些关联,最终破案。黑板方法有一些关键特性:

没有侦探需要知道其他任何侦探的存在

侦探可能接受过不同的训练,具有不同程度的教育背景和专业经验。但他们都渴望破案,这就是全部的共同点。

在这个过程中,不同侦探可能来来去去,并且工作班次也可能不同。

对放在黑板上的内容没有什么限制,可以是图片、判断、物证等。

基于计算机的黑板系统最初是为在人工智能中的应用而发明的,解决的问题大而复杂,如语言识别、推理系统等。现代的分布式类黑板(blackboard-like)系统有JavaSpaces和T Spaces等。


第六章 当你编码时

传统看法认为,项目一旦进入编码阶段,工作主要就是机械地把设计转换为可执行语句。但作者认为,这种态度是许多程序丑陋、低效、结构糟糕、不可维护和完全错误的最大原因。

编程不是机械工作。相反,编程时每一分钟都需要作出决策,如果要让程序享有长久、无误和富有生产力的“一生”,就必须对这些决策进行仔细地思考和判断。

不主动思考他们的代码的开发者是在靠巧合编程。

1. 靠巧合编程

a) 士兵起初没有探测到地雷,但这不过是侥幸,但他由此得出了错误的结论,认为这里没有地雷,最终导致了灾难性的结果。作为开发者,我们也工作在雷区中,应该保持警惕,不要得出错误的结论。我们应该避免靠巧合编程——依靠运气和偶然的成功——而要深思熟虑地编程。

b) 实现的偶然。实现的偶然是那些只是因为代码现在的编写方式才得以发生的事情,你最后会依靠没有计入文档的错误或是边界条件。

虽然靠巧合编程,但代码已经能工作,但这种做法很危险。因为它也许不是真的能工作,只是看起来能工作;而且我们依靠的边界条件也许只是一个偶然。在不同的情形下(比如不同的屏幕分辨率),它的表现可能就会不同;此外没有计入文档的行为可能会随着库的下一次发布而变化;而多余的和不必要的调用也会使你的代码变慢;多余的调用还会有引入新bug的风险。

对于你编写给别人调用的代码,要进行良好的模块化以及把实现隐藏在撰写了良好文档的小接口之后。

对于你调用的例程,要只依靠计入了文档的行为。

c) 语境的偶然。比如GUI,是否在依靠说英语的用户、有文化的用户,或者别的什么没有保证的东西。

d) 项目可以在所有层面上让人误入歧途,从生成需求直到测试。人们常常在头脑中带着许多假定,但这些假定很少被计入文档,而且在不同的开发者之间常常是冲突的。所以最好不要假定,而是要证明。

e) 怎样深思熟虑地编程

总是意识到你在做什么,不要做温水中的青蛙。

不要盲目地编程,试图构建你不完全理解的应用,或是使用你不熟悉的技术,就是希望自己被巧合误导。

一定要按照计划行事。

依靠可靠的事物,而不是巧合或假定。如果你不得不依靠假定,就依靠最坏的假定。

为你的假定建立文档。这有助于你澄清头脑中的假定,并把它们传达给别人。

不要只是测试你的代码,还要测试你的假定。不要猜测,要实际尝试它。编写断言测试你的假定。

为你的工作划分优先级,把时间花在重要的方面。

不要做历史的奴隶,不要让已有的代码支配将来的代码,随时准备好就进行重构。

下次如果有什么东西看起来能工作,而你却不知道为什么时,要确定它不是巧合。

转载于:https://www.cnblogs.com/zhixin9001/p/6798646.html

《程序员修炼之道》笔记(五)相关推荐

  1. 程序员修炼之道-笔记

    写在前面的话 最近突然非常看重对事情的反思与总结,以前看书有做笔记但太少,没有把当时的第一感受记录下来,所以要开始补笔记了. 第一章 注重实效的哲学 1.我的源码让猫给吃了 半年前总是因为在出现需求与 ...

  2. 《程序员修炼之道:从小工到专家》阅读笔记03

    <程序员修炼之道:从小工到专家>阅读笔记03 第六章 当你编码时 靠巧合编程应该避免靠巧合编程,避免依靠运气和偶然的成功.而要深思熟虑的编程. 怎样深思熟虑的编程:1)总是意识到你在做什么 ...

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

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

  4. 《程序员修炼之道》读书笔记(二)--第三周

    <!doctype html> The pragmatic programmer(2).md 程序员修炼之道(二) 读书笔记--第三周 第二章 注重实效的途径 DRY原则:系统中的每一项只 ...

  5. 《程序员修炼之道–从小工到专家》读书笔记

    <程序员修炼之道–从小工到专家>的读书笔记 <程序员修炼之道–从小工到专家>[美]Andrew Hunt / David Thomas 著 马维达 译 看这本书主要使用了检视阅 ...

  6. 读书笔记2014第4本:程序员修炼之道-从小工到专家(第一章)

    <程序员修炼之道-从小工到专家>是一本1999年写的老书,但15年之后,书中的许多道理依然没变,时不时拿出一章咀嚼一下仍有许多可回味之处. 第一章 注重实效的哲学 1.我的源码让猫给吃了 ...

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

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

  8. 读书笔记-程序员修炼之道-序

    前言 我们应该成为什么样的程序员 注重实效的程序员具备的特征 注重实效的个体大型的团队 它是一个持续的过程 前言 程序员修炼之道这本书已经通读了一遍,获益良多,但还是不甚理解,所以在重读一遍,顺便做一 ...

  9. 程序员修炼之道:从小工到专家阅读笔记01

    个人感受部分: 01.总是想要塑造一种自己全能的形象,害怕承认自己的无知和错误. 02.好的程序员对他或自己的职业生涯负责,并且不害怕承认无知和错误,直视我们的缺点--我们必须诚实.责任是我们要主动承 ...

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

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

最新文章

  1. 在Spring Boot中使用 @ConfigurationProperties 注解 (二十六)
  2. Vivado中Block Memory Generator v8.3的使用
  3. Spring ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别
  4. avue form提交变为不可编辑_教程42——富文本编辑器的原理(项目)
  5. 了解计算机指令和汇编指令
  6. qt geomery的单位是什么_斜管沉淀池的原理是什么?
  7. 【招聘(广州)】-年薪30W起-自助打印领域业内第一
  8. Codeforces Round #636 (Div. 3) D. Constant Palindrome Sum 思维 + 差分
  9. Mac下svn搭建和使用方法
  10. python做统计_利用 Python 进行统计
  11. sar分辨率公式_对PAR DAR SAR的理解
  12. [expimp]imp导入笔记
  13. 集群中运行Tachyon(译)
  14. 走近源码:Redis的启动过程
  15. Atitit 项目范围管理 目录 1. 应该包含下面过程:启动、范围计划、范围定义、范围核实及范围变更控制 1 1.1. 项目范围管理的五个过程 1 2. 启动过程 1 2.1. 项目章程(如质量、
  16. 在linux内核中修改TCP MSS值
  17. 电阻阻值标准以及选择参照表
  18. CCSK认证,提升云安全专业技能,助力职业生涯发展
  19. signature=cc1c224e1386c7abfb9e93371b44eda6,Ultrafast hot-carrier-dominated photocurrent in graphene
  20. 配置hMailServer成功,完成邮件异步群发

热门文章

  1. 构建根文件系统_Linux之构建文件系统
  2. python验证码校验代码_python 图片验证码代码
  3. 一个小故事读懂Memcached漏洞
  4. 去掉Eclipse插件Aptana启动显示My Aptana
  5. [.NET] 《Effective C#》快速笔记(四)- 使用框架
  6. UT源码+105032014036
  7. 2、深入理解 Laravel Eloquent(二)——中间操作流(Builder)
  8. 網站滲透測試實務入門--工具清單
  9. Debian系、红帽系、Arch Linux系如何选择安装包
  10. pytorch中torch.max和F.softmax函数的维度解释