《程序员修炼之道》读书笔记②

概述

花了几天时间看完了程序员修炼之道,有很多感悟,记录于此,供自己开发时参考,相信对其他人也有用。

值得一提的是,这本书写的非常好,很多大牛在走了很多弯路之后再读这本书都很感慨没有早些读。

《程序员修炼之道》读书笔记①

弯曲,或折断

  • 解耦与得墨忒耳法则

1.函数的得墨忒耳法则规定,某个对象的任何方法都应该只调用属于以下情形的方法:它自身;传入该方法的任何参数;它创建的任何对象;任何直接持有的组件对象。

2.委托服从得墨忒耳法则,从而减少了耦合。

  • 元程序设计

1.元数据是关于数据的数据;要用元数据描述应用的配置选项。

2.有些配置是只在程序启动时扫描的,因此如果这些配置发生了改动,那么程序就需要重启来更新这些数据。

  • 时间耦合

1.事务处理系统就是一个时间解耦的系统,也就是安排事物并发运行的系统。

2.我们可以用事件把某个对象的状态变化通知给可能感兴趣的其他对象。这样使用事件使得那些对象之间的耦合得以减至最少——事件发送者不需要对接收者有任何明确的了解。

3.为什么要使用树视图。因为树视图与解耦有很深的关系。

  • 黑板

1.这是我唯一存在疑惑的地方,黑板系统在编程中到底是个什么样的系统。

当你编码时

  • 靠巧合编程

1.只要你在制作代码,你就应该记住,有一天你必须对其进行测试,要让代码易于测试,这样你将增加它实际通过测试的可能性。

  • 算法速率

1.某个O(n^2)算法可能比另一个O(n^2)算法要快1000倍,但你从表示法上却看不出来。

2.对于较小的n值,简单的O(n^2)循环的性能可能会比复杂的O(nlg(n))算法更好,特别是当O(nlg(n))算法有昂贵的内循环时。

3.如果你不确定代码需要多少时间,或是要使用多少内存,就试着运行它,变化输入记录的数目,或可能影响运行时间的无论什么东西。随后把结果绘制成图。

  • 重构
  • 易于测试的代码

1.我们喜欢把单元测试视为针对合约的测试。

2.测试时的热键虽然不会透露给最终用户,但这对于客户服务人员却非常方便。

  • 邪恶的向导

1.我们虽然在使用向导,但是我们也要理解它制作出的所有代码。

在项目开始之前

  • 需求之坑

1.在讨论用户界面时,需求,政策和实现之间的区别可能会变得非常模糊:“系统必须能让你选择期限”是对需求的陈述;“我们需要一个列表框,以选择期限”可能是,也可能不是。如果用户一定要有列表框,那么他是需求。相反,如果他们是在描述选择能力,但只是用列表框做例子,这个陈述就可能不是需求。

2.你的开发必须解决他们的商业问题,而不只是满足他们陈述的需求。

3.成功的工具会适应使用它们的双手。

  • 解开不可能解开的谜题

1.当你认为你的问题是“不可能解决的”时候,问自己这些问题:有更容易的方法吗?你是在设法解决真正的问题,还是被外围的技术问题转移了注意力?这件事情为什么是一个问题?是什么使它如此难以解决?它必须以这种方式完成吗?它真的必须完成吗?

  • 等你准备好

1.作为开发者,你在整个职业生涯中都在做同样的事情。你一直在试验各种东西,看哪些可行,哪些不可行。

  • 规范陷阱
  • 圆圈与箭头

1.计算技术从来都不缺少意图使程序设计更像工程的方法。

2.形式开发方法只是工具箱里的又一种工具,不要成为方法学的奴隶。

3.注重实效的程序员批判地看待方法学,并从各种方法学中提取精华,融合成每个月都在变得更好的一套工作习惯。

注重实效的项目

  • 注重实效的团队

1.确保每个人都主动地监视环境的变化。可以指定一个“首席水情监测员”。

2.杰出的项目团队有着截然不同的个性,人们希望与他们一同开会,因为他们知道自己将看到准备良好,会让每个人都感到愉悦的演出。

3.有一个简单的营销诀窍,能帮助团队作为整体与外界交流:创立品牌。

4.按照对你的授权,你越接近用户,级别就越高。

5.项目至少需要2个“头”:一个主管技术,另一个主管行政。

6.找一找成功的团队,他们成功的原因是什么?

  • 无处不在的自动化

1.你可以决定创建一个shell脚本来完成一些烦人的工作,但你仍然要记得在需要时运行这个脚本。

  • 无情的测试

1.使用自动测试的团队成功的机会要大得多。

2.代码在它通过所有可用的测试之前,你不能声称它已经可供使用。

3.一旦你有了可执行的用户界面或原型,你需要回答一个最重要的问题:用户告诉了你他们需要什么?但那是他们需要的吗?

4.性能测试,压力测试或负载测试也可能会是项目的一个重要方面。

5.回归测试把当前测试的输出与先前的值进行对比。

6.你编写了一个测试,你还要故意引发bug,并确定测试会发出提示。

7.覆盖分析工具会在测试过程中监视你的代码,追踪哪些代码执行过?哪些没有?

  • 全部是写

1.写注释或文档——把英语当做又一种编程语言。

2.比无意义的名称更糟糕的是误导人的名称。

3.在源文件里应该出现的最重要的信息之一是作者的姓名。

4.现在大多数完善的字处理器都有宏语言,尝试用下宏语言。

5.现在许多技术作者使用DocBook来定义他们的文档。DocBook是一种基于SGML的标记语言。

6.项目的成功是由它在多大程度上满足了用户的期望来衡量的。

  • 极大地期望

1.管理期望:主动控制用户对他们能从系统中得到什么应该抱有的期望。

2.随着项目的进展,听取你的用户的意见,了解什么特性会使他们真的高兴。

  • 傲慢与偏见

1.我们想要看到对所有权的自豪。“这是我编写的,我对自己的工作负责”。你的签名应该被视为质量的保证。

原文地址:https://www.cnblogs.com/yangzhou33/p/8407427.html

时间: 2024-10-22 18:12:16

《程序员修炼之道》读书笔记②的相关文章

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

在<程序员修炼之道>一书中,Dave和Andy告诉我们以一种我们能够遵循的方式编程.本书中提出了许多著名的哲学理论,总结如下: 不要容忍破窗户 当一个街区的某个窗户破碎,而且长时间没人修理时,那么其他窗户也会相继破碎,从而整个街区更甚整个城市都会被侵蚀.这就是有名的"破窗户理论".做软件也如此,如果出现问题而不及时修正,那么整个软件就会随之恶化.所以,不能容忍破窗户,没发现一个bug就得及时改正.即使没有足够的时间去修理,也要用木板钉住,将BUG代码注释,采取这些行动阻止进

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

投资知识财产       我们喜欢把程序员所知道的关于计算机技术和经验视为他们的知识资产,你的资产是有时效的资产,会随着新技术,语言和环境的出现而变得过时. 多交流且会交流       在与他人交流时,一定要了解听众,他们对你讲的什么感兴趣,他们想要什么.遇到程序bug时,不要一味的职责,而是修正问题,解决问题. 维持正交性        正交就是两个事物中一个发生变化,对另一个无影响,这就是所谓的正交性.正交的好处有两个,一个是提高生存率,另一个则是降低风险.让代码维持正交性,可以消除无关事物

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

这几天开始看<程序员修炼之道>,也许不少人看了书的标题,第一时间会觉得这是鸡汤一类的书.但至少以我自己的感受来看,这是很棒的书,现代人文主义不是提倡自我意识嘛,自己感觉好的就是好的.况且人家也是经过了时间和口碑的双重考验的,真心值得好好阅读. 作者在再版的序中写道: 写完<程序员修炼之道>至今已有十年.在这十年中,软件产业发生了翻天覆地的变化.--从表面上看,软件世界似乎陷入了疯狂的状态.但如果你深入繁杂表象的背后,会发现变化其实并不大.1999年的那些通用开发原则,在2009年同

程序员修炼之道阅读笔记之二

在<程序员修炼之道>一书中,Dave和Andy将告诉我们怎样以一种我们能够遵循的方式编程.他们何以能这样聪明?他们不也是和其他程序员一样,专注于各种细节而已吗?答案是他们在做某件事情时,会把注意力投注在他们在做的事情上——然后他们会试着把它做得更好. 设想你在参加一个会议.或许你在想,这个会议没完没了,你还不如去写程序.而Dave和Andy会想,他们为什么在开会,他们想知道是否可以通过另外的方式取代会议,并决定是否可使某样事情自动化,以使开会的工作推后.然后他们就会这样去做. 这就是Dave和

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

终于开始读<程序员修炼之道>这本书了,初看这本书的名字,有点以前的道士修炼法术的意思,觉得很是好奇,作为一名程序员,该如何修炼我们自己呢? 这本书涵盖的主题从个人责任.职业发展,直到用于使代码保持灵活.并且易于改编和复用的各种架构技术.利用许多富有娱乐性的奇闻轶事.有思想性的例子 以及有趣的类比,全面阐释了软件开发的许多不同方面的最佳实践和重大陷阱. 编程技术就是程序员的手艺,你的程序就是你的艺术品.时刻关注自己的技艺,保持热情.保持好奇,争取做到富有专长而又多才多艺.有人说过这样一句话:“

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

在<程序员修炼之道>这本书里,我也了解到了不一样的知识.对于前面一部分的阅读让我受益匪浅,也加深了我继续阅读下去的渴望.然而在对注重实效的途径这部分内容阅读的时候,我也发现很多东西令我把握不了,它出现了非常多的术语,这对于我这样的菜鸟来说,无意识非常致命的.所以我只能对这部分的内容加以了解,而不能完全理解与消化.下面就是我对所读部分的内容(注重实效的途径)做出的简单总结. 1.不要重复你自己. don't repeat yourself; 系统中的每一项知识都必须具有单一.无歧义.权威的表示:

程序员修炼之道阅读笔记之一

书中提到有关调试的问题: 读书的时候学习编程,觉得和其他人最不一样的地方在于两点,一是自己思考程序的流程,写下代码之前,知道代码将要(预期)执行的顺序逻辑,二是会调试代码,出现错误时不像一般人完全不知道该如何是好,而是去调试来寻找出错的原因.我相信,现在还是有不少工作了的程序员,不习惯去调试,他们期待的是自己的代码都是一次编写就能正确无误的执行,如果不行,那么别人大概可以帮忙解决.  一直以来,一直觉得,一个程序员的经验丰富情况很大程度依赖于他遇到的bug并解决的数量,所以一个人代码写的越多,解

《程序员修炼之道》笔记(三)

第四章 注重偏执的实效 "你不可能写出完美的软件",我们要把这句话视为生活的公理,并接受它.拥抱它. 但同时,有一些方法可以尽量把这个事实转变为有利条件 作者用开车来类比写程序:每个人都知道只有他们自己是地球上的好司机,于是我们防卫性地开车,小心谨慎以避免麻烦发生,预判意料之外的事,尽量不让自己陷入无法解救自己的境地.编码也类似,我们不断地与他人的代码结合--可能不符合我们的高标准的代码--并处理可能有效也可能无效的输入.所以,我们要防卫性地编程.使用断言检测坏数据,检查一致性并在数据

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

第二章 注重实效的途径 1. 重复的危害 a) DRY-Don't Repeat Yourself.系统中的每一项知识都必须具有单一.无歧义.权威的表示. b) 重复是怎样发生的 Imposed Duplication强加的重复.开发者觉得他们无可选择-环境似乎要求重复. Inadvertent Duplication无意的重复.开发者没有意识到自己在重复信息. Impatient Duplication无耐心的重复.开发者偷懒,因为重复似乎更容易. Interdeveloper dumplic

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

第八章 注重实效的项目 随着你的项目开动,我们需要从个体的哲学和编码问题转向讨论更大的.项目级的问题.我们将不深入项目管理的具体细节,而是要讨论能使项目成功或失败的几个关键区域. 1. 注重实效的团队 书中前面的内容都是帮助个体成为更好的程序员,这些方法在对团队来说仍然有效. a) 不要留破窗户.质量是一个团队的问题.最勤勉的开发者如果被派到不在乎质量的团队里,也会发现自己很难保持修正琐碎问题所需的热情.团队作为一个整体,不应该容忍破窗户--那些小小的.无人修正的不完美. b) 煮青蛙.在项目开