- 浏览: 327654 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (262)
- Java (20)
- 设计模式 (16)
- Oracle (13)
- Struts (1)
- 问题解决 (9)
- ibatis (2)
- Maven (5)
- Git (2)
- 实现原理 (6)
- 敏捷开发 (22)
- Spring (4)
- 算法 (8)
- MySQL (2)
- Java工具箱 (17)
- jQuery (1)
- 英语学习 (8)
- 杂谈 (15)
- 多线程 (15)
- Java解惑 (7)
- Linux (1)
- 重构36计 (6)
- 网络 (4)
- PHP (1)
- Socket (6)
- 面试 (1)
- JVM (14)
- 历史与故事 (5)
- 报表 (4)
- CMS (3)
- Windows (1)
- nginx (5)
- 架构设计 (7)
- RubyOnRails (2)
- Hadoop (8)
- Go (7)
- JS (1)
- Web (1)
- 项目实例 (5)
- ubuntu (4)
最新评论
-
jacking124:
按照你这个配置以后提示这个异常?Exception occur ...
Go语言学习:开发环境搭建及Hello World -
焦志广:
有请看http://jiaozhiguang-126-com. ...
Hadoop白皮书(1):分布式文件系统HDFS简介 -
w156445045:
Hadoop 有没windows环境下的配置呢,
谢谢。非常感 ...
Hadoop白皮书(1):分布式文件系统HDFS简介 -
xiangxm:
学习了。
Java 解惑知多少六 -
焦志广:
xhh_lite 写道怎么少了一个类?恩?不少啊,少那个类啊; ...
易学设计模式四 命令模式(Commond)
团队中常见的一种情况计划、估算、设计的时候大家还在一起,但编程的时候就会分开。分开看似是安全的,但是却充满隐患。
2001年,一位招聘考试前三名(一共120员工)的程序员的两个月的成果被彻底放弃重写,原因是里边包含3000多个常数,而且很难修改(码流参数),重写的人座位距离他只有4米,重写也只花费了2周;2002年,一位月薪7000(那时候北京房价才3000多)的程序员编写了一个月的4000多行代码,在一个下午被重写为50多行,座位距离他只有5米的项目经理疑惑加惊讶地问:“你真的没学过c++ template?”。
这就是团队的距离,即使是高薪聘请来的程序员也难免犯错。难道我们只能避免下一次问题发生,而不能避免这次问题发生?
-----------------------------------------
前检查点
前检查点就是在做某功能的最初一段时间,师傅与徒弟结对编程,完成最初最重要的设计。
“开始做X功能的时候叫我一声,咱们敲定一下具体怎么做。”这个是师傅的前检查点标准语法。尽管在共同估算的时候大家还是略有共识,但是限于计划会的有限时间,徒弟未必真的知道怎么做。在刚开始的一两个小时里边,师傅带领徒弟一起把基本的结构理清楚,最好写上一些基本代码,让徒弟有一个直观的概念。
在上面提到的2周的重写工作中,重写者和被重写者一起工作了1.5天,重新设计了打包类、递归函数等最难缠的部分;被重写者在剩下的两周里边完成了工作,而且很出色。倘若这一切发生在两个月前该多好。那次事故之后,我们订立了更严格的代码审查制度,所有代码均由部门技术最好的人审查后才进代码库;之后再来的新人,均指派师傅,并由师傅保证其代码质量;将人员划分为需指导的/免于指导的/可指导的/可培训的四级(10年后我在NEC参观交流时发现了几乎完全相同的分级制度)。
前检查点的工作作用是打下设计的基础,保证工作顺利进行。如果一切按照前检查点的设计进行,徒弟可以继续独立工作,如果有偏离,要询问师傅。
前检查点的学习作用是显而易见的,师傅平时工作的精华都展示在徒弟面前。而且这种展示是动态的,在结对编程的状态下,徒弟可以完整地看到师傅是怎样入手工作,怎样思考,怎样解决问题的。
后检查点
后检查点就是某事做完后,师傅检查一下徒弟的结果,保证达到验收标准。
曾经分配给我一个刚毕业半年的组员,刚来没多久就经常看到他上网玩,过去一问,原来工作做完了(真的非常快),惊奇之余赶紧看看结果:功能是有了而且实现得也很好,就是总有点瑕疵:要么按钮不正,要么界面上有错字。后来就改成每次任务完成都赶紧喊我去看看,修正后继续下一个。他后来能力超群,在此公司作为“台柱子”10年,现在还在。
其实多数新人在大学中都形成了“能运行就行”的概念,并不懂商业软件开发的标准。本人也一样,毕业5年还不知道delete内存(C++),每次都是多预留点C盘空间,这样程序就能多运行一段时间,下班之后关机重启就可以了……这样的软件肯定无法在服务器上长期运行的。
在后检查点,师傅可以提出改进要求,也可以当场改动。徒弟在此过程中会发现自己和师傅的差距,并因此而得到改进机会。
后检查点的工作作用是可用来进行代码审查,以确保软件产品的质量,之后会提到。
后检查点的学习作用是帮助新人学习商业软件的开发标准,逐步养成好的习惯。
日常工作
除了在任务前后的时间点外,日常8小时也应该保持良好的沟通。在一次极端的环境中,我们曾经将其发挥到极致。
当时我们以很高的日薪临时聘用了两个不错的程序员。他们技术虽然很好,但是却对业务一无所知,也没有提前看过文档。因为总共也没有多少天,当然不能把任何一分钟花费在熟悉业务上,所以……
1. 每天早上(包括第一天)
整个软件被大致分为三类功能区,互相关联。组长(我)也自己编程,负责其中一类功能。
有20分钟的晨会,组长会把一个简单的设计文档的一部分拿出来讲解给两个人,同时指出今天要做的工作要给予其中的哪些内容,他们提问我回答。散会前我们会就每人的工作做一个简单的估算(当年还不会扑克牌估算,太可惜了),确保当日是可以完成的。
晨会会提到技术问题,而不是每日立会中说的只说进度。但技术问题一般只涉及到要求,比如“做分段计价模型的时候,不要在C++里边做For循环,看能不能在SQL里边解决,如果解决不了来找我”“好,我试试。(或)这可能吗?”凡是有问题的就会稍微深入一点;凡是“我试试”的,都放过,但如果试验的结果不通就必须找组长讨论而不能自行解决。
小组加组长只有3个人,所以所有人都参加这个20分钟会,包括肯定不做某任务的人,也听组长和别人的讨论。
2. 每天下午1:30点左右
就是吃饱饭犯困的时候,组长会分别和大家在计算机前碰头一下,主要是看当日的工作是否可能在下班前完成(坚持不加班);另外就是看是否和晨会上预想的一样。
其实就算是短短的半天时间,事情就可能有变。有一次其中一个程序员在一上午写了大约4屏幕的代码(一般每天才写这么多),而功能却遥遥无期。原来他不知道有个函数可以快速实现这些功能,正在自己造轮子,他本应该告诉组长所遇到的困难。
程序员很少在这个时候求助,他们总是相信自己能最终解决问题……因此在转型为自组织团队的时候,担心程序员会偷懒的想法整体上是多余的,更需要预防的是蛮干/过于乐观/激进/需求镀金/消息闭塞/无法互相学习等问题。
3. 每天下午下班前
当时6点钟有《七龙珠》(工作场所有台电视),两位对此都很着迷,所以我们基本到点就看片,看完后散伙回家。
因为也不能让电视台调整播出时间,基本上下午5点就要开始打扫战场:组长分别找两位,看最终结果是否完成,并做一下修改。同时还要做代码审查(请看下一篇详述)。
由于估算不会太准确,我们专门把所有三不管的小功能梳理出来,谁提前做完了,谁就找其中一个把剩下的闲工夫占上,结果其中一位几乎包揽了全部。
4. 晚上
对,组长晚上还要工作。在他们走后组长会在晚上做个集成,把几个人做的功能合成在一起运行。当时也没有持续集成工具,所以只能手工。
在正常项目的正常团队中,这个工作应该在工作时间完成,也就是说或者找专人(或轮流),或者让组长做,或者让自动工具做最好。推荐小组内轮流负责此事,因此可以让大家理解别人的工作、整体的工作,乃至与组外人员的集成工作等内容,为组员成长为组长打下基础。
5. 随时
可能已经注意到我们没有“每日立会”,一则当年还不知道Scrum,二则感觉一个3~5人的团队还要靠开会交流实在迂腐。比如在篇首提到的两次事故中,团队都没有少开会,但都因为缺少随时的沟通而导致大错。
其实任何伸伸懒腰的时间都可以进行沟通。不过一般不要“太随时”,应该以师傅的时间为主,也就是如果徒弟遇到了问题,但可以绕过去先走着,就先来一句“我这有问题,有空帮忙看看”+“好,再过15分钟”。这样既不会让徒弟被卡住,也不会让师傅因为经常被打断而导致无法工作。但师傅可以随时发起交流,因为他们是去帮助徒弟的,聊的也是徒弟的事情,不存在打扰的说法。
在多数情况下无论徒弟学得多好,小组的主要产出仍然可能一大半来自师傅。因此不能把师徒团队变成一个简单的学习团队,而要通过保证师傅的时间,来保证其首先是一个工作团队。
这个工作习惯一直保持到后来我管理一个市场/销售/支持团队的时候:我选择坐在开放空间的最中央的一张大桌上(各部门经理也都在中央桌上而非独立办公室里),如果有人有事来找,都会问:“有空么?”答案是有空,或者某个时间之后。尤其是每天有10个以上不同的人会找你的时候,时间管理方法是很关键的。
注:上述部分内容仅限于特定环境中,但思路很多时候都是可取的。
-------------------------------------------------------
前检查点的基本作用是保证后续工作有大致的方向,而且徒弟能从师傅的设计过程中受益。
后检查点的基本作用是保证完成的工作符合要求,而且徒弟能从师傅做出的改进中受益。
在日常工作中,师傅要经常过问徒弟的工作,但以保证自己的产出为前提。不能因为已经进行了共同设计和估算,或开了例会就放弃日常跟踪,问题往往出在小处。
ref:http://blog.csdn.net/cheny_com/article/details/6590360
2001年,一位招聘考试前三名(一共120员工)的程序员的两个月的成果被彻底放弃重写,原因是里边包含3000多个常数,而且很难修改(码流参数),重写的人座位距离他只有4米,重写也只花费了2周;2002年,一位月薪7000(那时候北京房价才3000多)的程序员编写了一个月的4000多行代码,在一个下午被重写为50多行,座位距离他只有5米的项目经理疑惑加惊讶地问:“你真的没学过c++ template?”。
这就是团队的距离,即使是高薪聘请来的程序员也难免犯错。难道我们只能避免下一次问题发生,而不能避免这次问题发生?
-----------------------------------------
前检查点
前检查点就是在做某功能的最初一段时间,师傅与徒弟结对编程,完成最初最重要的设计。
“开始做X功能的时候叫我一声,咱们敲定一下具体怎么做。”这个是师傅的前检查点标准语法。尽管在共同估算的时候大家还是略有共识,但是限于计划会的有限时间,徒弟未必真的知道怎么做。在刚开始的一两个小时里边,师傅带领徒弟一起把基本的结构理清楚,最好写上一些基本代码,让徒弟有一个直观的概念。
在上面提到的2周的重写工作中,重写者和被重写者一起工作了1.5天,重新设计了打包类、递归函数等最难缠的部分;被重写者在剩下的两周里边完成了工作,而且很出色。倘若这一切发生在两个月前该多好。那次事故之后,我们订立了更严格的代码审查制度,所有代码均由部门技术最好的人审查后才进代码库;之后再来的新人,均指派师傅,并由师傅保证其代码质量;将人员划分为需指导的/免于指导的/可指导的/可培训的四级(10年后我在NEC参观交流时发现了几乎完全相同的分级制度)。
前检查点的工作作用是打下设计的基础,保证工作顺利进行。如果一切按照前检查点的设计进行,徒弟可以继续独立工作,如果有偏离,要询问师傅。
前检查点的学习作用是显而易见的,师傅平时工作的精华都展示在徒弟面前。而且这种展示是动态的,在结对编程的状态下,徒弟可以完整地看到师傅是怎样入手工作,怎样思考,怎样解决问题的。
后检查点
后检查点就是某事做完后,师傅检查一下徒弟的结果,保证达到验收标准。
曾经分配给我一个刚毕业半年的组员,刚来没多久就经常看到他上网玩,过去一问,原来工作做完了(真的非常快),惊奇之余赶紧看看结果:功能是有了而且实现得也很好,就是总有点瑕疵:要么按钮不正,要么界面上有错字。后来就改成每次任务完成都赶紧喊我去看看,修正后继续下一个。他后来能力超群,在此公司作为“台柱子”10年,现在还在。
其实多数新人在大学中都形成了“能运行就行”的概念,并不懂商业软件开发的标准。本人也一样,毕业5年还不知道delete内存(C++),每次都是多预留点C盘空间,这样程序就能多运行一段时间,下班之后关机重启就可以了……这样的软件肯定无法在服务器上长期运行的。
在后检查点,师傅可以提出改进要求,也可以当场改动。徒弟在此过程中会发现自己和师傅的差距,并因此而得到改进机会。
后检查点的工作作用是可用来进行代码审查,以确保软件产品的质量,之后会提到。
后检查点的学习作用是帮助新人学习商业软件的开发标准,逐步养成好的习惯。
日常工作
除了在任务前后的时间点外,日常8小时也应该保持良好的沟通。在一次极端的环境中,我们曾经将其发挥到极致。
当时我们以很高的日薪临时聘用了两个不错的程序员。他们技术虽然很好,但是却对业务一无所知,也没有提前看过文档。因为总共也没有多少天,当然不能把任何一分钟花费在熟悉业务上,所以……
1. 每天早上(包括第一天)
整个软件被大致分为三类功能区,互相关联。组长(我)也自己编程,负责其中一类功能。
有20分钟的晨会,组长会把一个简单的设计文档的一部分拿出来讲解给两个人,同时指出今天要做的工作要给予其中的哪些内容,他们提问我回答。散会前我们会就每人的工作做一个简单的估算(当年还不会扑克牌估算,太可惜了),确保当日是可以完成的。
晨会会提到技术问题,而不是每日立会中说的只说进度。但技术问题一般只涉及到要求,比如“做分段计价模型的时候,不要在C++里边做For循环,看能不能在SQL里边解决,如果解决不了来找我”“好,我试试。(或)这可能吗?”凡是有问题的就会稍微深入一点;凡是“我试试”的,都放过,但如果试验的结果不通就必须找组长讨论而不能自行解决。
小组加组长只有3个人,所以所有人都参加这个20分钟会,包括肯定不做某任务的人,也听组长和别人的讨论。
2. 每天下午1:30点左右
就是吃饱饭犯困的时候,组长会分别和大家在计算机前碰头一下,主要是看当日的工作是否可能在下班前完成(坚持不加班);另外就是看是否和晨会上预想的一样。
其实就算是短短的半天时间,事情就可能有变。有一次其中一个程序员在一上午写了大约4屏幕的代码(一般每天才写这么多),而功能却遥遥无期。原来他不知道有个函数可以快速实现这些功能,正在自己造轮子,他本应该告诉组长所遇到的困难。
程序员很少在这个时候求助,他们总是相信自己能最终解决问题……因此在转型为自组织团队的时候,担心程序员会偷懒的想法整体上是多余的,更需要预防的是蛮干/过于乐观/激进/需求镀金/消息闭塞/无法互相学习等问题。
3. 每天下午下班前
当时6点钟有《七龙珠》(工作场所有台电视),两位对此都很着迷,所以我们基本到点就看片,看完后散伙回家。
因为也不能让电视台调整播出时间,基本上下午5点就要开始打扫战场:组长分别找两位,看最终结果是否完成,并做一下修改。同时还要做代码审查(请看下一篇详述)。
由于估算不会太准确,我们专门把所有三不管的小功能梳理出来,谁提前做完了,谁就找其中一个把剩下的闲工夫占上,结果其中一位几乎包揽了全部。
4. 晚上
对,组长晚上还要工作。在他们走后组长会在晚上做个集成,把几个人做的功能合成在一起运行。当时也没有持续集成工具,所以只能手工。
在正常项目的正常团队中,这个工作应该在工作时间完成,也就是说或者找专人(或轮流),或者让组长做,或者让自动工具做最好。推荐小组内轮流负责此事,因此可以让大家理解别人的工作、整体的工作,乃至与组外人员的集成工作等内容,为组员成长为组长打下基础。
5. 随时
可能已经注意到我们没有“每日立会”,一则当年还不知道Scrum,二则感觉一个3~5人的团队还要靠开会交流实在迂腐。比如在篇首提到的两次事故中,团队都没有少开会,但都因为缺少随时的沟通而导致大错。
其实任何伸伸懒腰的时间都可以进行沟通。不过一般不要“太随时”,应该以师傅的时间为主,也就是如果徒弟遇到了问题,但可以绕过去先走着,就先来一句“我这有问题,有空帮忙看看”+“好,再过15分钟”。这样既不会让徒弟被卡住,也不会让师傅因为经常被打断而导致无法工作。但师傅可以随时发起交流,因为他们是去帮助徒弟的,聊的也是徒弟的事情,不存在打扰的说法。
在多数情况下无论徒弟学得多好,小组的主要产出仍然可能一大半来自师傅。因此不能把师徒团队变成一个简单的学习团队,而要通过保证师傅的时间,来保证其首先是一个工作团队。
这个工作习惯一直保持到后来我管理一个市场/销售/支持团队的时候:我选择坐在开放空间的最中央的一张大桌上(各部门经理也都在中央桌上而非独立办公室里),如果有人有事来找,都会问:“有空么?”答案是有空,或者某个时间之后。尤其是每天有10个以上不同的人会找你的时候,时间管理方法是很关键的。
注:上述部分内容仅限于特定环境中,但思路很多时候都是可取的。
-------------------------------------------------------
前检查点的基本作用是保证后续工作有大致的方向,而且徒弟能从师傅的设计过程中受益。
后检查点的基本作用是保证完成的工作符合要求,而且徒弟能从师傅做出的改进中受益。
在日常工作中,师傅要经常过问徒弟的工作,但以保证自己的产出为前提。不能因为已经进行了共同设计和估算,或开了例会就放弃日常跟踪,问题往往出在小处。
ref:http://blog.csdn.net/cheny_com/article/details/6590360
发表评论
-
测试驱动开发
2012-11-11 14:21 0测试驱动开发的一般流 ... -
Kent Beck : 领导的敏捷潮
2012-10-15 10:29 962Beck全家似乎都弥漫着技术的味道。生长在硅谷, 有着一个对无 ... -
什么是敏捷(下)(无住,不住于空,破空执,非法,非非法)
2012-10-09 14:23 926破除法执之后,很容易 ... -
什么是敏捷(上)(无住,不住于法,破法执)
2012-10-09 14:20 1023所谓无住,包括两个含义:不住于法,不住于空。前者比较好理解, ... -
敏捷开发与本能反应
2012-10-09 14:12 765经常听到有人提到敏捷开发与“本能反应”非常近似,比如凡事都需 ... -
敏捷的未来会怎样?
2012-10-09 13:49 373正法,像法,末法 任 ... -
敏捷开发之大型团队切分
2012-10-09 11:00 1069大型团队的切分 如果 ... -
敏捷开发加班吗?
2012-10-08 17:43 1696问题 敏捷开发加班吗? 楼下有人问到“敏捷和加班有什么关系 ... -
敏捷适合什么类型项目?
2012-10-08 16:44 1441问题 原来问题是这么写的:“一家企业既要过CMMI,又要过I ... -
敏捷开发智慧之:定不定流程和模板?
2012-10-08 15:45 919缘起 (立项时) 甲:“你们的设计文档打算怎么写?” 乙 ... -
敏捷开发智慧之写不写文档?
2012-10-08 15:17 717缘起 “我们产品已经做完了,客户说要补上需求文档,可我们只有 ... -
敏捷开发松结对编程之七问题集锦
2012-10-05 19:06 863人员与结构 在团队中使用层级结构,是否阻碍了个体与外界的沟通 ... -
敏捷开发松结对编程之五代码检查
2012-10-05 18:32 855松结对和紧结对不一样 ... -
敏捷开发松结对编程之三共同估算
2012-10-05 14:58 813估算是经久不衰的管理 ... -
敏捷开发松结对编程之二计划设计
2012-10-03 22:30 746新人其实很少偷懒,因 ... -
敏捷开发松结对编程之一人员结构
2012-10-03 12:11 823传说中的结对编程,大致结构是两个人共用一台电脑,一个开发,一 ... -
敏捷开发心法之共振
2012-10-03 11:42 702共振 共振是以无我、 ... -
敏捷开发心法之无住
2012-10-03 11:33 841无住 在般若敏捷系列 ... -
敏捷开发心法之无我
2012-10-02 21:54 669做敏捷开发时间长了, ... -
敏捷开发松结对编程之六大型团队
2012-09-28 16:49 783松结对编程是小型团队 ...
相关推荐
3. **极限编程(XP)**:一种注重技术实践的敏捷方法,包括持续集成、结对编程、重构等技术手段,旨在提高代码质量和可维护性。 4. **精益开发(Lean)**:源自丰田生产系统,强调消除浪费、优化整体流程。精益开发关注...
- **复杂性**:现代软件系统日益复杂,需要更加灵活的方法来管理和开发。 - **可变性**:客户需求和技术趋势的变化速度加快,要求开发团队能够迅速响应。 - **一致性**:为了保证软件质量和开发效率,需要有一套标准...
#### 四、敏捷开发的应用实践 ##### 4.1 面临的问题 在传统软件开发模式下,项目往往面临诸多挑战: - **需求频繁变更**:特别是在游戏开发领域,由于玩家需求的多变性,导致需求在开发周期内不断调整。 - **时间...
- **内置质量**:如结对编程、持续集成等实践,旨在从开发初期就开始保证软件质量。 ##### 2. 纯软件场景落地实践(GLAP) - **详尽的DoD清单**:DoD(完成的定义)是指团队内部关于软件何时可以发布的一致标准。...
XP则注重编码规范、测试驱动开发、结对编程等实践,以提升代码质量和团队协作。 3. 模式:敏捷模式是解决特定情境下问题的成熟解决方案,比如“用户故事”用于表达用户需求,“站立会议”作为团队每日沟通的手段,...
3. **极限编程(eXtreme Programming, XP)**:这是一种轻量级的敏捷软件开发方法,强调持续集成、结对编程、重构等实践。 4. **自适应软件开发(Adaptive Software Development, ASD)**:该方法强调通过猜测、合作与...
- **XP(极限编程)**:注重编码实践,如持续集成、结对编程等。 - **Crystal系列**:适应不同规模项目的家族式方法。 - **敏捷开发流程**: - **迭代开发**:将项目分成多个短周期的迭代,每个迭代结束时交付...
### 敏捷开发最佳实践:Scrum与XP在项目管理中的应用 #### 一、引言 随着软件行业的快速发展,企业对于项目管理的需求也日益增长。为了满足不断变化的客户需求和提升开发效率,敏捷开发方法逐渐成为业界主流。其中...
2. **敏捷软件工程技巧**(Agile Software Engineering Techniques):采用敏捷工程实践,如持续集成、测试驱动开发和结对编程等,可以提高项目的效率和质量,减少错误,确保团队能够快速响应变更。 3. **团队能力*...
其实践包括结对编程、单元测试、持续集成等,旨在提高软件质量并快速响应变化。 5. 测试驱动开发(TDD):TDD是一种编程实践,要求先编写测试用例,然后编写满足这些测试的代码,以此确保代码质量。红绿重构是TDD的...
- XP(极限编程)实践:包括持续集成、测试驱动开发(TDD)、结对编程等方法,提升开发效率和代码质量。 3. **优化你的架构设计**: - 软件架构模式:介绍常见的架构模式,如分层架构、微服务架构、事件驱动架构,...
2. **结对编程**:两名程序员共同编写代码,一人打字,另一人观察思考,这样可以提高代码质量。 3. **测试驱动开发**:先编写测试案例,再编写满足这些测试的代码,确保代码的质量。 4. **重构**:在不改变外部行为...