十月 30th, 2010 @ 10:55 上午 

终于把这本书读完了,读了之后觉得这书确实是本好书,虽然有些“习惯”还体会不太深,但是能吸收的还是很多的。
如同译者序中说的那样:“武功者,包括内功、外功、武术技击之总和”,这本书写的就是内功,习武方要内外兼修。然,习得盖世武功还不足以雄霸天下,团队合作才是真正制霸武林的密宝。再好的程序员也敌不过一个好的团队,这本书讲的也是一个好的团队成员应具备的素质。

下面就是学习时做的笔记了。

1.做事

指责不能修复bug。

2.欲速则不达

修复代码时杜绝+-1,保持代码易读性。

3.对事不对人

要对自己说的话负责任。

4.排除万难,奋勇前进

要敢于进行代码重够,那是一件好事情。

5.跟踪变化

如果你一直在学习,恭喜你,你已经把昨天的技术学会了。

6.对团队投资

团队中只有自己优秀,实际上对自己和团队都是损失。

7.懂得丢弃

乐于学习新东西,并丢弃阻碍前进的东西。

8.打破沙锅问到底

这是个好习惯,往往能够找到问题发生的根源。问提要有质量,别纠缠没水准的问题。

9.把握开发节奏

注重节奏和循环,理解时间盒,并保持事件之间稳定重复的间隔。

10.让客户做决定

充分了解用户的想法和需求及时跟用户沟通,做用户想要的软件,开发者不应想当然的做。

11.让设计指导而不是操纵开发

设计就是战略,满足实现即可,不要过于详细。

12.合理地使用技术

不要开发能下载到的东西,也不要乱使用”技术”,使用新技术前应权衡利弊。

13.保持可发布

对于自己修改过的代码应保证可以正常编译运行并不影响其他人。确保程序可持续发布。

14.提早集成,频繁集成

不要等到都”所有”的工作都做好了才开始merge,也不要改一点整合一次系统。

15.提早实现自动化部署

工欲善其事,必先利其器。提早实现自动安装部署,方便给测试成员或者用户进行演示,并方便产品在其他机器上安装部署。(我能想到小的东西是Makefile,大的就是安装和维护脚本了)

16.使用演示获得频繁反馈

定期给客户演示交流,获得最准确和最新的需求,避免后期返工或者不能交付的问题。

17.使用小迭代,增量发布

对付大项目,最理想的办法就是小步前进,这也是敏捷方法的核心。不应该期望一下子做出最完美的软件,迭代尽快完成必要的功能才能保证程序开发平稳进行。迭代让人感到专注和效率。

18.固定的价格就意味着背叛承诺

产品价格和开发时间的评估对于没很多经验的团队来说是个难事,为了避免出现问题,可以同客户一起迭代,迭代评估,迭代开发,迭代付款,从而积累评估经验,保障对客户的承诺。

19.守护天使

自动化单元测试!key Word:桩程序,就是一些用来查看运行状态的代码行。单元测试:运用单元测试可以快速的找到问题出现的位置以及原因。

20.先用它再实现它

好的设计并不意味着需要更多的类,先“向后“做测试再实现。Key Word:TDD(Test Driven Development)。

21.不同环境,就有不同问题

所开发程序的兼容性问题,在其他环境下可能不会如预期一样工作,通过持续集成工具便会快速找到问题所在。

22.自动验收测试

对于测试的数据可以用一些易于修改的文本文件或者excel导入,来简化测试过程。

23.度量真实的进度

不要用不恰当的度量来欺骗自己或者团队。要评估那些需要完成的待办事项。对自己的任务进行时间估算,在估算后对自己的评估进行评价,计算评估系数(完成时间/估算时间)。在下一次估算的时候可以考虑将估算的时间*估算系数。这样时间久了,估算的会越来越准(除非是异常情况)。

24.倾听用户的声音

没有愚蠢的客户,只有愚蠢自大的开发人员。当用户遇见问题时应积极配合,找出出现问题的真正原因,即使不是程序的bug,也可能是文档或者使用的bug。

25.代码要清晰的表达意图

PIE原则,代码要清晰的表达意图,不要用int result = val << 1;来代替 int result = val * 2;这种小聪明。用枚举来代替状态值是个好主意。要编写清晰的代码而不是讨巧的代码。应该让自己或团队的任何其他任何人可以读懂自己一年前写的代码,而且只读一遍就知道它的运行机制。

26.用代码沟通

好的命名可以让人们更好的阅读代码,甚至可以不用注释都能让人读懂程序。好的代码胜过好的注释。

27.动态评估取舍

不单单是编程,平衡是一个非常重要的东西。

28.增量式编程

不要长时间出于编写代码状态,要时不时编译测试一下,保证自己不会偏离终点太远。要休息的话,就要好好休息。休息时请远离键盘。

29.保持简单

让人看过代码之后觉得简单不是件坏事,做同样的事情,如果简单的方法和代码能够达到效果那是件好事。开发可以工作的、最简单的解决方案。

30.编写内聚的代码

不要把所有的东西都写到一个类里,也不应该把每个东西都写一个类。

31.告知,不要询问

不要抢别的对象或是组件的工作。告诉它做什么,然后盯着你自己的职责就好了。Key Word:命令与查询相分离模式(command-query separation)

32.根据契约进行替换

要遵守Liskov替换原则,相对基类的对应方法,派生类服务(方法)应该不要求更多,不承诺更少;要可以进行自由的替换。针对is-a关系使用继承;针对has-a或uses-a关系使用委托(聚合)

33.记录问题解决日志

daylog:问题发生解决后,更新一篇日志,方便日后查找。日志不宜过长(时间最好不要超过解决问题用的时间)

34.警告就是错误

有些时候犯的错误不是语法错误,很可能是语义错了。不应忽略警告的重要性。

35.对问题各个击破

识别复杂问题的第一步,是将他们分离出来。

36.报告所有的异常

不要给使用者留下什么麻烦,报告所有的异常。

37.提供有用的错误信息

错误信息一方面要提供给用户清晰、易于理解的问题描述和解释,另一方面还要提供具备关于错误的详细技术细节给用户,这样方便开发人员找代码中真正的问题所在。(错误类型:程序缺陷、环境问题、用户错误)

38.定期安排会面时间

立会可以让团队达成共识。保证会议短小精悍不跑题。

39.架构师必须写代码

优秀的设计从积极的程序员哪里开始演化。不要使用不愿意编程的架构师——不知道系统的真实情况是无法展开设计的。

40.实现代码集体所有制

保证公司内的任何代码有2个以上人了解。任何一位团队成员,只要理解某段代码的来龙去脉,就可以对其进行处理。如果某一段代码只有一位开发人员能够处理,项目的风险无形也就增加了。

41.成为指导者

赠人玫瑰,手有余香。在分享知识的同时往往能给自己新的灵感,并且提高了团队的实力,增加团队的氛围。

42.允许大家自己想办法

基于上一习惯,作为指导者,应该鼓励、引导大家思考如何解决问题,而不是直接给出你的答案。如果有人提出来某些想法,不妨帮他们分析每种想法的优劣之处,从而采纳最下的方案,这对双方来说都是个学习的机会。

43.准备好后再共享代码

不该提交未完成的代码(无法编译,功能未完,携带bug等),这会对使用版本库的其他团队成员造成很大的影响。

44.做代码复查

对于提升代码质量和降低错误率来说,代码复查是无价之宝。代码复查的三种方式:通宵复查、捡拾游戏、结对编程(推荐)。

45.及时通报进展与问题

及时汇报自己的进度,不论是快了还是慢了,让负责人有个合理的期望,对全局有个有效的控制。

等以后经验多了,还要拿这本书出来再钻研一下才是。

作者: Sunny
原创文章: 转载请注明出自 Sunny Way.
最后编辑: 十月 30th, 2010 @ 12:21 下午
Email永久链接
Tags


 

这篇日志的回复 » (没有回复)

 
发表回复

提示: 您可以使用以下标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tags
Comment Meta:
回复RSS
引用URI


 最近 50 篇日志
 后退
切换主题...
  • 访问 » 8663
  • 日志 » 59
  • 回复 » 77
切换主题...
  • VoidVoid
  • LifeLife
  • EarthEarth
  • WindWind « Default
  • WaterWater
  • FireFire
  • LightLight

留言板



    No Child Pages.