[阅读笔记]程序员修炼之道

一、注重实效的哲学

1.负责。准备告诉别人什么做不到前,先演练一遍,他人可能会说:试过这个吗?提供选择和解决方案,

而不是借口,需要重构,建立原型,测试,别的资源?提出要求和寻求帮助

2.软件的熵。杜绝破窗户,一个破窗会让优秀的系统加速腐烂。

3.石头汤的故事,设计合理的需求目标系统愿景,团结一切力量,大家都觉得参与正在发生的更容易成功。

“我们要增加点。。。可能更好”并假装这不重要。

防止被温水煮青蛙,时刻关注周围的变化。

4.质量与需求之间的权衡。让用户及早的反馈并改良软件。

5.投资自己,提高价值。每年学习一门新语言,每季度阅读一本技术书籍,还有非技术书籍,参加组织打听别人在干什么,

试试不同的开发环境,跟上潮流。

6.交流。没有有效的交流,一个好想法就只是一个无人关心的孤儿。了解用户需求,设计文档,提案和备忘录以申请资源,

报告状态。大部分的时间需要花在交流上。

知道你要说什么?规划,写出提纲,提炼知道准确为止,问自己“这是否讲清楚了我要说的内容?”

了解听众的需要,兴趣,能力,避免枯燥让人厌烦的空谈。针对不同的人,投其所好,让听众感到兴奋。

选择时机。风格文档美观。让听众参与,做倾听者,及时回复。

二、注重实效的途径

1.避免重复。开发者之间的重复,安排项目资料管理员,促进交流,存放实用例程和脚本。

2.正交性。组件高内聚,低耦合。

 可以提高生产率:容易测试,复用。可以降低风险。

项目团队分工明确,降低重叠。看一看每个需求改动时涉及多少人就可以判断正交性。

设计,模块化、组件、分层设计。“如果显著的改变某个特定功能背后的需求,有多少模块受影响?”正交系统中应该是1个。

编码,得墨忒耳法则(Law of Demeter),如果要改变对象的状态,让对象替你去做。

3.曳光代码,先构建简单能工作能演示的系统,再依次完善各个组件的功能,完成连接,逐步达到目标。

4.原型与便笺,制作架构原型

主要组件的责任是否得到了良好的定义?

组件之间的协作是否得到了良好的定义?

耦合是否得以最小化?

能否确定重复的潜在来源?

接口定义和各项约束是否可以接受?

每个模块在执行的过程中能否访问到所需的数据?是否能在需要时进行访问?

三、工具

纯文本,shell,用好一种编辑器,源码控制,调试就是解决问题,文本操纵语言

1.代码生成器

被动代码生成器,只运行一次,生成的结果一直使用。创建带注释的源文件,生成查找表。

主动代码生成器,每次需要结果时就运行。

不要太复杂,本质上是printf语句。

四、注重实效的偏执

早崩溃,如果它不可能发生,用断言确保它不会发生。

异常  异常应保留给意外事件,把异常用于异常的问题。

资源分配与释放,要有始有终。

五、弯曲或折断

1.解耦与得墨忒耳法则

耦合的症状:

这样的C/C++大型项目:用于链接某个单元测试的命令比测试程序自身还要长。

对某个模块“简单”的改动会传遍系统中的一些无关模块。

开发者害怕改动代码,因为他们不清楚哪些代码会受影响。

与性能的权衡,大量包装的方法也会带来运行时开销和空间开销。

2.元程序设计

让代码可配置----容易适应变化

使用元数据描述应用配置选项:调谐参数,用户偏好,安装目录等。

为一般情况编写程序,把具体情况放在别处----编译的代码库之外。将抽象放进代码,细节放进元数据。

3.时间耦合   并发与次序

分析工作流,以提高并发性

使用黑板协调工作流

六、当你编码时

1.不要靠巧合编程,要深思熟虑的编程

依靠可靠的事物,不要依靠巧合或假定,如果无法说出各种特定情形的区别 ,给以最坏的假设。

不要做历史的奴隶,如果已有代码不适用,抛弃它进行重构。

2.算法估算

3.重构

重复。违反了DRY原则

非正交的设计。你发现有些代码或设计可以变得更为正交

过时的知识。事情变了,需求转移了,你对问题的了解加深了。代码需要跟上这些变化

性能。为改善性能,你必须把功能从一个区域移到另一个区域

提示:不要试图在重构时增加功能。重构前确保拥有良好的测试,尽可能经常运行这些测试,这样一旦有破坏就能马上知道。

采取短小,深思熟虑的步骤,并在每个小步骤后测试。

原文地址:https://www.cnblogs.com/mlj318/p/6277282.html