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

*续 第八章 注重实效的项目

 

1. 无处不在的自动化

文明通过增加我们不假思索就能完成的重要操作的数目而取得进步。

无论是构建和发布流程、是书面的代码复查工作、还是其他任何在项目中反复出现的任务,都必须是自动的。人工流程不能保证一致性,也无法保证可重复性,特别是在不同的人对流程的各个方面有不同解释时。使用shell脚本、批处理文件来处理流程,它们能以相同的次序反复执行同样的指令,还能被置于源码控制之下,定时调度工具也很有帮助。

 


 

 

2. 全都是写

a) 要把文档当做整个开发过程的完整组成部分加以接受。文档和代码可以紧密结合起来,作为同一模型的两个视图对待。

 

b) 内部文档包括源码注释、设计与测试文档等;外部文档是发布到外界的任何东西,比如用户手册。但不管受众是谁、撰写者是谁,文档都应该是代码的反映。

 

c) 代码中的注释

注释应该讨论为何要做某事、它的目标等。代码已经说明了它是怎样完成的,所以再为此加注释是多余的,而且也违反了DRY原则。

注释中也适合记录工程上的权衡、为何要做某些决策、放弃了哪些替代方案等等。

变量名应该精心选择,并且有意义。匈牙利命名法(包括了变量类型信息)在面向对象的系统中并不合适。

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

代码应该有代码作者、版权信息等内容,这些可以让编辑器自动生成。

 

d) 任何形式的文档都只是快照,可能刚刚发布出来就会过时,最好能采用自动化的方法及时更新。

文档和代码是同一底层模型的不同视图,视图是唯一应该不同的东西。不要让文档变成二等公民,被排除在项目主要工作流之外,对待文档要像对待代码一样用心。

 


 

 

3. 极大的期望

在现实中,项目的成功是由它在多大程度上满足了用户的期望来衡量的。不符合用户期望的项目注定是失败的,不管交付的产品在绝对意义上有多好。要温和地超出用户的期望。要做到这一点建议做如下工作:

a) 交流期望。

用户在一开始会有一些关于自己所需要的东西的想象,它们可能不完整、不一致或在技术上不可能做到,但那时他们的,他们也在其中投入了一些感情,不能简单地忽视。

交流的目的是达成对开发过程和最终产品、以及他们尚未描述出来的期望的共同理解。如果团队能与外界畅通地交流,这个过程几乎是自动的。曳光弹、原型可以促进这一过程。

 

b) 额外一英里。

在与用户紧密协作的过程中,用户会及时了解项目的进展,那么当项目交付时就不会有多少让人吃惊的事情了。这是一件糟糕的事情,要设法让你的用户惊讶(高兴),给他们的东西要比他们期望的多一点,比如友好的帮助系统、快捷键、自动化安装等等,通过这些让用户看到:开发团队想要开发出了不起的系统。但不要因为增加的新特性而破坏系统。

 


 

 

4. 傲慢与偏见

a) 在你的作品上签名。

 

b) 过去的手艺人为能在他们自己的作品上签名而自豪,你也应该如此,我们在负责一项设计,或是一段代码,我们是在做可以引以为傲的工作。

 

c) 但不要因为所有权而产生“地盘”意识:怀有偏见,只欣赏自己的代码,排斥自己的同事。我们不应该怀着猜忌心理阻止别人查看自己的代码,同样应该带着尊重对待别人的代码。

 

d) 匿名可能会为邋遢、错误、懒惰和糟糕的代码提供繁殖地。

 

e) 我们想要看到对所有权的自豪:“这是我编写的,我对自己的工作负责”,你的签名应该被视为质量的保证,当人们在一段代码上看到你的名字时,应该期望它是可靠的,用心编写的、测试过的和有文档的,一个真正的专业作品,由真正专业人员编写——一个注重实效的程序员。

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flutter image boxfit

直接从官网文档中复制记录,方便以后查看contain → const BoxFitAs large as possible while still containing the source entirely within the target box.const BoxFit(1)cover → const BoxFitAs small as possible while still covering the entire target box…

rvm RuvyGem Cocoapods brew

开始的时候,我仅想升级一下cocoapods的版本,因为我xcode报三十多个相似警告,说第三方找不到相应文件,我看cocoapods版本有1.0.1,而我使用的依旧是1.0.0的老版本。当我升级cocoapods时,需要使用gem来更新coc…

Linux系统目录说明

以前稍稍接触过Linux系统,现今,因工作需要要更进一步学习Linux系统的相关程序开发。因此对于目录(路径)的了解及很重要了。/bin:是Binary的缩写,这里保存了一百多个Linux下常用的命令、工具;这是…

const常量用法

目录定义语法特点优点定义 常量就是在使用过程中不会变化的量叫做常量。 语法 const int A 100;//常量不允许改变特点 常量必须在声明时初始化;常量的值必须在编译时就定义好;常量总是隐式静态的; 优点 易读,易于程序修改&…

斯坦福大学机器学习——高斯判别分析

转自 http://blog.csdn.net/linkin1005/article/details/39054023 同朴素贝叶斯一样,高斯判别分析(Gaussian discriminant analysismodel, GDA)也是一种生成学习算法,在该模型中,我们假设y给定的情况下,x服…

嘉实多RO150合成齿轮油

Optigear ™合成 RO 是一个特殊的高性能,长期多级油特别为齿轮 轨道交通,机械工程应用中,一个极端的气候条件和长期使用。 “ Microflux 跨的添加剂组合是免费的固体润滑剂,甚至适应迅速变化的环境和积极…

线程队列-queue

使用队列的目的:解耦,使程序之间实现松耦合;提高处理效率FIFO 先进先出,first in first outLIFO 后入先出,last in first out生产者消费者模型使用方式1 import queue 2 3 #创建队列对象,设置队列大小ma…

MapGIS转Shp文件的单位问题

MapGIS转Shp文件的单位问题 原文:MapGIS转Shp文件的单位问题在MapGIS浏览查看一下数据,各种不习惯;用mapgis自带的转shp功能,属性表会出错;利用名为map2shp的试用版软件可将mapgis格式的数据较为良好转成shp格式。但经常会遇到一个…

halcon2D Metrology测量算子,卡尺测量算子,持续更新

目录2D Metrology1. add_metrology_object_circle_measure2. add_metrology_object_ellipse_measure3. add_metrology_object_generic4. add_metrology_object_line_measure5. add_metrology_object_rectangle2_measure6. align_metrology_model7. apply_metrology_model8. cle…

项目经理的职责

项目经理的职责: 1、项目范围的定义 2、项目计划的制定、分解、分配、协调、汇报 3、项目质量控制 4、项目需求变更配置 工作职责: 1、负责产品的研发任务的立项计划及实施; 2、负责收集统计各项资料数据,完成自主研发部…

显示/隐藏Mac系统中所有的隐藏文件

显示: 在终端输入:defaults write com.apple.finder AppleShowAllFiles YES隐藏: 在终端输入:defaults write com.apple.finder AppleShowAllFiles NO然后重启Finder即可(先点击左上角的苹果图标,再选强制退出,然后选中Finder,点击…

机械零点、MAM 文件 、 EMT标定原理

 机械零点、MAM 文件、EMT标定原理。 可调节的机械零点,不需要MAM文件,使之成为90度。 不可调节的机械零点,需要MAM文件修正,使之成为90度。 带负载的偏移补偿、带负载的偏移补偿mastering。做过带负…

智慧城市的互联网大脑架构图:大社交网络与智慧城市结合是关键

从本质上讲智慧地球和智慧城市还是互联网发展到一定程度,向城市建设蔓延和深入的结果。因此建设智慧城市就不能不忽略互联网的发展趋势和进化规律。 而越来越多的迹象表明“互联网正在向着与人类大脑高度相似的方向进化,它将具备自己的视觉、听觉、触觉、…

halcon1D测量算子,持续更新

目录1D Measuring 1D测量1.close_measure2. deserialize_measure3.fuzzy_measure_pairing4.fuzzy_measure_pairs5.fuzzy_measure_pos6.gen_measure_arc7.gen_measure_rectangle28.measure_pairs9.measure_pos10.measure_projection11.measure_thresh12. read_measure13.reset_f…

20145227鄢曼君《网络对抗》Web安全基础实践

20145227鄢曼君《网络对抗》Web安全基础实践 实验后回答问题 1.SQL注入攻击原理,如何防御? SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要…

[转]Xvid参数详解

众所周知,Mencoder以其极高的压缩速率和不错的画质赢得了很多朋友的认同! 原来用Mencoder压缩Xvid的AVI都是使用Xvid编码器的默认设置,现在我来给大家冲冲电,讲解一下怎样使用Mencoder命令行高级参数制作Xvid编码格式AVI影片。经…

常用的Meta标签写法和作用

页面关键词  <meta name"keywords" content"your tags" />  页面描述  <meta name"description" content"150 words" />  搜索引擎索引方式  <meta name"robots" content"index,follow"…

从库存管理系统,体验活字格强大的移动端应用开发能力

活字格&#xff0c;开放易用的 Web 应用生成平台 随着移动互联网时代的来临&#xff0c;企业在移动端管理和运营的需求急剧增加&#xff0c;这就要求企业应用系统要能做到工作流程自动规范、移动端操作流畅便捷、协同办公快速高效、业务流程高度自定制、需求变更随时修改等。 活…

Xvid编码器流程(基于xvid1.1.0)

调用Xvid编码器流程(基于xvid1.1.0) 编者按&#xff1a;本文为Xvid最新源代码V1.1.0版本的学习笔记&#xff0c;内 部资料&#xff0c;仅供学习参考&#xff0c;未经授权&#xff0c;不得转载 xvid有两种编码方式&#xff1a;single pass和twopass single pass模式编码简…