读书笔记:Practices of an Agile Developer - Working in the Real World

《高效程序员的45个习惯 – 敏捷开发修炼之道》

英文原书名 《Practices of an Agile Developer : Working in the Real World》

“选定了要走的路,就是选定了它通往的目的地。”

Harry Emerson Fosdick (美国基督教现代主义神学家)

“即使你已经在正确的轨道上,但如果只是停止不前,也仍然会被淘汰出局。”

Will Rogers (美国著名演员)

“百言不如一行,千虑不如一动”

1、态度决定一切

将注意力集中在处理做事上。
处理问题时要对事不对人:否定他人无助于事;尊重他人,提出疑虑并进行讨论。

2、唯一不变的就是变化

“唯有变化是永恒的”

赫拉克利特

3、把握开发节奏

随意安排的工作计划,没有任何规律,让人根本不知道明天会发生什么。

控制时间,保持开发节奏,是为了避免问题堆积,防止所有事情同时发生。

4、让设计指导而不是操纵开发

当前阶段的设计只是基于你目前对需求的理解,一旦开始编码,一切都会改变。

设计可以分2个层面:战略与战术。
前期的设计属于战略,通常只有在没有深入理解需求的时候需要这样的设计。
它应该只描述总体的战略,不应该深入到具体的细节。

“如果你自己都不清楚所谈论的东西,就根本不可能精确的描述它。”

约翰.冯.诺依曼

一个故事
在1804年,Lewis和Clark进行了横穿美国的壮举,他们的“设计”就是穿越蛮荒。
但是,他们不知道在穿越殖民地时会遇到什么样的问题。他们只知道自己的目标和约束条件,但是不知道旅途的细节。
软件项目的设计也与此类似。在没有穿越殖民地的时候,你不可能知道会出现什么情况。
所以,不要事先浪费时间规划如何徒步穿越河流,只有当你走到河岸边的时候,才能真正评估和规划如何穿越。
只有到那时,你才开始真正的战术设计。

“好的设计应该是正确的,而不是精确的。”

“计划是没有价值的,但计划的过程是必不可少的。”

艾森豪威尔(美国总统)

5、使用短迭代,增量发布

软件开发不是精细的制造业,而是创新活动。规划几年之后客户才能真正使用的项目,注定是行不通的。

软件在被开发出来之前是不确定的,在开发过程总是存在着变化,
短迭代可以防止在错误的道路上走的太远,这样可以及时发现错误并进行纠正。

短迭代让人感觉非常专注且具效率。你能看到一个实际并且确切的目标。
严格的最终期限迫使你做出一些艰难的决策,没有遗留下长期悬而未决的问题。

如果每个迭代的时间不够用,要么是任务太大,要么是迭代的时间太短。

6、敏捷协作:定期安排会面时间

也许你个人很讨厌开会,但是沟通是项目成功的关键

立会:站着开的会议。这可以保证会议快速进行,大部分人不喜欢站着进行长时间的谈话。

定期例会的好处:

  • 让团队成员知道项目其他部分的进展。
  • 帮助团队识别是否在某些事情上进行了重复劳动。
  • 鼓励向前的动力:看到比尔报告的进度都在前进,会对彼此形成激励。

7、敏捷协作:架构师必须写代码

一个设计要解决的是眼前面临的特定问题,随着设计的实现,对问题的理解也会发生改变。

设计会随着时间而演进

8、敏捷协作:及时通报进展与问题

接受一个任务,也就意味着做出了要准时交付的承诺。
不过,遇到各种问题而导致延迟,这种情况并不少见。
如果等到截止时间才发布坏消息,这就等于是为经理和技术主管提供了对你进行微观管理的机会。
他们会担心你再次让他们失望,并开始每天多次检查你的工作进度。

及时通报进展与问题,有情况发生时,就不会让别人感到突然,并且他们也很愿意了解目前的进展状况。
他们会知道何时应提供帮助,而且你也获得了他们的信任。