前几天看了一篇帖子
《五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作》
链接:[url]http://www.cppblog.com/guogangj/archive/2009/05/14/82909.html[/url]
[quote]写下这个标题,说实在我心里有些沉重,在当今这个团队精神一次一次地被提到重中之重的时代,我却感觉高度依赖脑力活动的软件开发工作其实几乎不可能真正
的有团队合作。这是我从事了五年多一线开发(快六年了)之后的高度总结,也是要从事所谓“管理”工作最需要关注的一句话,请忘记“合作”!
为什么?俗话讲,一山不容二虎,如果这是一份高度依赖脑力运动(我用运动,不用劳动)的工作,这两个聪明人你说谁会听谁的呢?他们能否强强联合,1+1=2 那样创造出更好的东西?110%,1+1不会等于2,120%,1+2不会大于2,那就只有小于2啰?一点没错!而我的经验告诉我,90%的情况,1+1<1。如果你有幸作为握大权的管理者,请把这两个聪明人分开,让他们干不同的事情,根据他们的兴趣,爱好,去干不同的事情,如果实在找不到不同的事情,就让他们干一样的事情,但不是合作,而是各自单干,然后从他们各自生成的最终软件产品中,择优录取,这也总比让他们合作好。[/quote]
谈点自己的看法
几十年来软件开发者前赴后继的想寻找人月神话中的“银弹”,但所有人最终的结果都是一样的“没有银弹”!软件开发是一个智力摩擦,思想碰撞的十里洋场,远不同于机械,建筑等可以协同工作的行业。软件开发者常常用计算机的思维考察现实问题,比如协同工作的问题,每个人的大脑里都有一个进程空间,在人与人之间仅仅只有眼耳舌鼻等外部接口的情况下这个进程空间相对内聚,要想在软件设计中共享大量的信息,创造性的想法等,无法避免的需要进行人脑中的“进程切换”而人的大脑,和计算机系统又有异曲同工之妙,那就是存在核心态程序—用户态程序,对应人的潜意识—意识。前者告诉运转,后者低速但是可以与外部交换信息,而“进程切换”是相当费时费力的。像unix系统中实现进程的“锁”都是一个非常复杂的过程,常常需要1000个CPU时钟周期才能完成。所以,在软件设计的核心问题上,如果是人与人需要协同设计,那么大量的时间就要用于交流,最终达到1+1<1的效果
《五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作》
链接:[url]http://www.cppblog.com/guogangj/archive/2009/05/14/82909.html[/url]
[quote]写下这个标题,说实在我心里有些沉重,在当今这个团队精神一次一次地被提到重中之重的时代,我却感觉高度依赖脑力活动的软件开发工作其实几乎不可能真正
的有团队合作。这是我从事了五年多一线开发(快六年了)之后的高度总结,也是要从事所谓“管理”工作最需要关注的一句话,请忘记“合作”!
为什么?俗话讲,一山不容二虎,如果这是一份高度依赖脑力运动(我用运动,不用劳动)的工作,这两个聪明人你说谁会听谁的呢?他们能否强强联合,1+1=2 那样创造出更好的东西?110%,1+1不会等于2,120%,1+2不会大于2,那就只有小于2啰?一点没错!而我的经验告诉我,90%的情况,1+1<1。如果你有幸作为握大权的管理者,请把这两个聪明人分开,让他们干不同的事情,根据他们的兴趣,爱好,去干不同的事情,如果实在找不到不同的事情,就让他们干一样的事情,但不是合作,而是各自单干,然后从他们各自生成的最终软件产品中,择优录取,这也总比让他们合作好。[/quote]
谈点自己的看法
几十年来软件开发者前赴后继的想寻找人月神话中的“银弹”,但所有人最终的结果都是一样的“没有银弹”!软件开发是一个智力摩擦,思想碰撞的十里洋场,远不同于机械,建筑等可以协同工作的行业。软件开发者常常用计算机的思维考察现实问题,比如协同工作的问题,每个人的大脑里都有一个进程空间,在人与人之间仅仅只有眼耳舌鼻等外部接口的情况下这个进程空间相对内聚,要想在软件设计中共享大量的信息,创造性的想法等,无法避免的需要进行人脑中的“进程切换”而人的大脑,和计算机系统又有异曲同工之妙,那就是存在核心态程序—用户态程序,对应人的潜意识—意识。前者告诉运转,后者低速但是可以与外部交换信息,而“进程切换”是相当费时费力的。像unix系统中实现进程的“锁”都是一个非常复杂的过程,常常需要1000个CPU时钟周期才能完成。所以,在软件设计的核心问题上,如果是人与人需要协同设计,那么大量的时间就要用于交流,最终达到1+1<1的效果