Jiang's C++ Space

创作,也是一种学习的过程。

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
写下这个标题,说实在我心里有些沉重,在当今这个团队精神一次一次地被提到重中之重的时代,我却感觉高度依赖脑力活动的软件开发工作其实几乎不可能真正的有团队合作。这是我从事了五年多一线开发(快六年了)之后的高度总结,也是要从事所谓“管理”工作最需要关注的一句话,请忘记“合作”!

为什么?俗话讲,一山不容二虎,如果这是一份高度依赖脑力运动(我用运动,不用劳动)的工作,这两个聪明人你说谁会听谁的呢?他们能否强强联合,1+1=2那样创造出更好的东西?110%,1+1不会等于2,120%,1+2不会大于2,那就只有小于2啰?一点没错!而我的经验告诉我,90%的情况,1+1<1。如果你有幸作为握大权的管理者,请把这两个聪明人分开,让他们干不同的事情,根据他们的兴趣,爱好,去干不同的事情,如果实在找不到不同的事情,就让他们干一样的事情,但不是合作,而是各自单干,然后从他们各自生成的最终软件产品中,择优录取,这也总比让他们合作好。

在热力学中,有个概念叫“熵”,它是个能量概念,但却不表示“能”,而表示“不能”,假想一个孤立系统有两个物体,一个物体的温度很高,一个很低,它们的总的热量是100,然后你把这两个物体合在一起,高温物体的温度降低了,而低温物体的温度升高了,它们的总体热量是多少?孤立系统,注意,没有任何对外热传递,所以热量还是100,但由于这么一合,无论是高温物体,还是低温物体都没了温差,没了温差就不能利用这个热量做功,而做功能力的损失,就是熵。也许你感觉这段文字比较晦涩,没关系,通俗说,两个聪明人的聪明才智由于“合作”,都用于内耗上了,完了之后两个人一样是聪明人,但没有“工作”的能力了,或效率低下。

这种事情了屡见不鲜了,例子我想我无须多举,大家身边比比皆是,只要你是做软件开发的。也许你要问了,没有合作,如何开发大型软件?好问题,我也从事过大型软件的开发,但我现在回头看看,那根本不是什么合作,而我当时也不是一个真正意义上的“开发者”,我仅仅是个编码者和单元测试者,我有设计这个软件吗?我有在软件中体现出我的思想了吗?甚至,问得残酷点,我有知道我在实现什么业务逻辑吗?——答案全是No,这就是软件外包的典范,别人把软件设计好,详细到伪码级别了,我只是来做最低级的实现而已。也或许,这是一种“合作”的途径,铁打的营盘流水的兵,那些在底下干活的人永远不要问“为什么”,机械式的工作,流水线式的工作,这还需要有个前提,他们不能有太多的想法,比如我,实在是想法太多,那种地方自然就不欢迎我了,不久后卷铺盖走人。

我以前有个朋友无意中说了句话,他说:“公司本来就不需要那么多聪明人。”这话还真的如此,一带多的“合作”模式是有的,就是一个牛人,带着几个小弟,完成某个项目,但我想真正的开发者,是那个牛人,几个小弟可以做做外围,周边,比如机械式的测试,对,测试是保证软件质量的重要手段,需要大量,反复。如果不幸的是这几个小弟也是很聪明的人,那就比较难办些,这个牛人就得很牛,以绝对的技术和人格魅力优势“压倒”这几个小弟,“折服”他们,这就是德能兼备,试问这种牛人多么?再说了,真有这种牛人的话,让他独自完成一个大的项目,我想更为可靠,而不是外加几个捣蛋的聪明人。

熵,产生于艰难的内部交流,产生于公司庞大而迟缓的官僚系统,产生于自我独大的个人思想,与其打破这些障碍,不如设法让这些“合作”尽量减少?

当我们还没有适应Visual Studio 2005的时候,Visual Studio 2008就出来了,版本众多,让我们有点无所适从,Visual Studio 2008还没装好的时候,Visual Studio 2010蓄势待发,一个比一个强,利用个Wizard,圈圈点点几下,一个外观花哨的应用程序就生成了,而且还貌似Outlook,抑或IE,随便你,你一行代码不用写,这叫“先进工具”,但提高了生产力了吗?我想没有,你能圈圈点点几下生成的花哨程序,别人也行,程序虽然花哨,但换种角度说,其实你什么都没干,软件的灵魂在于设计者的思想,理解这个得费点心思,或者这样说吧,利用现在的技术,你也可以轻松拥有一幅达芬奇的《蒙娜丽莎》的油画,但这仅仅是个复制品,你能这样,别人也行,你拥有的这幅画没有什么价值,而达芬奇的《蒙娜丽莎》的价值在于这位大师在这幅画中融入的他的思想以及他的劳动,这是任何技术,或“先进工具”都无法替代的,永远无法替代。这段算是我讲的一点题外话,和《人月神话》中“没有银弹”的观点接近。

软件开发是一项高度依赖脑力的劳动,开发者的思想融汇其中,是真正类似艺术创作的工作。考虑“合作”,不是不可以,但无非是这两种情况:一是我技压群雄,以德服人,号令群英;二是把前一句的“我”换成别人,让我心服口服当他小兵。
posted on 2009-05-14 09:16 Jiang Guogang 阅读(2363) 评论(13)  编辑 收藏 引用 所属分类: Thinking/Other

评论

# re: 五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作 2009-05-14 10:44 Sunshine Alike
非常有同感,呵呵
虽然我还没有工作过  回复  更多评论
  

# re: 五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作 2009-05-14 13:17 Brandon
很值得探讨的一个问题  回复  更多评论
  

# re: 五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作 2009-05-14 14:56 cppexplore
我的经历也是如此,也思考过原因:
(1)公司不重技术、重市场。而开发的直接领导也是同样的浮躁心态。
(2)开发团队没有技术积累、没有统一认可的基础架构。
(3)开发人员由于不同的开发经历,各自有自己的基础模块实现、对系统有自己的认知。

改善这个情况,开发人员的角度 也只能是多沟通、互相分享知识、定期分析已有系统的架构、争取能对同类型的应用应该使用的最佳设计达成共识。
根本解决还在领导层对技术的重视,重视基础模块积累、重视对系统框架的探讨分析,重视团队技术上的可持续成长。  回复  更多评论
  

# re: 五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作 2009-05-14 17:01 万连文
阿弥托福,老衲已返璞归真一年有余,早已远离team,不知何时再入俗沾尘重回team,轮回一次。善哉善哉!  回复  更多评论
  

# re: 五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作 2009-05-14 17:18 tiny
不同意,没看完你的文章。因为你没理解真正的协作。矛盾是进步的源泉,并不一定,观点完全是你提出的,完全就是你一个人的战场。战场上除了需要纯粹浴血奋战,还需要战略方针,衣食住行,甚至敌我间谍。
队伍不能协作好,只可能是水平参差不齐,目标不统一,内忧外患。  回复  更多评论
  

# re: 五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作 2009-05-14 21:24 宇驰
怎么说呢,其实软件开发不是脑力劳动,而是体力劳动。软件开发是一个合作进行的过程,但是这个过程是不简单的组合,小集体领导大集体(有点中国的政治制度:党中央委员会领导全国人民)。
小集体是做设计的(俗称:设计师),不敲代码。定义好各个模块、接口、调用方法、使用约束。
大集体再分小组去实现这些个模块(不要求你有创意,按步就班就行,而且必须)。你小组可以无视其他小组的存在。(只要大家伙按制定好的约束来实现就成)。然后再把他们组合到一起,OK,软件完成。

软件开发1+1什么时候>2,要看小集成的领导能力啦。但是,客观的肯定是>2的。  回复  更多评论
  

# re: 五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作[未登录] 2009-05-15 09:08 raof01
社会化大生产的方式决定了不可能把每个人都发挥到极致的,而是选取每个人的特长来进行组合。

很多好的软件,不是天才的设计,便是经验老道的设计。初出茅庐的,可能还在技术细节层面纠缠呢。不妨问自己:我是天才吗?我经验足够吗?

“别人把软件设计好,详细到伪码级别了,我只是来做最低级的实现而已。”楼主意识到这个并开始有想法是好的,只不过别太着急了。

最后,两个聪明人合作会使事情变糟,那是因为他们不够聪明,或者说光有智商没有情商。解雇之。宁要情商,不要智商。古往今来成功人士,智商高的有多少不好说,但情商绝对都是咣咣的。  回复  更多评论
  

# re: 五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作 2009-05-15 09:32 陈梓瀚(vczh)
一堆聪明的人在一起,要有一个更加聪明的人来领导才行。  回复  更多评论
  

# re: 五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作 2009-05-22 17:22 kuber
你觉得仅仅是软件开发不可能有协作还是所有的创造性工作都不可能协作呢? 探讨一下, 这仅仅是因为方法上的问题, 还是创造性工作的本质决定的.  回复  更多评论
  

# re: 五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作 2009-05-25 14:38 Jiang Guogang
大家好,我是博主,就各位的问题作一些回答:

to cppexplore,你分析得很好,你的策略需要领导重视和长时间的积累。

to tiny,呵呵,没看完就开始不同意了?

to 宇驰,我文中反映出这么种观点,软件开发是脑力运动,如果不同意,你偏认为机械重复的coding和test过程也算合作(如一些外包项目)的话,就代表我们理念和基本出发点不一致,接下去的讨论都是无意义的。

to raof01,我想你理解我意思了,所以我提出观点把聪明人分开让他们各自做自己的事情,是一种比较人性化的,而且又快速有效的办法。

to kuber,我想你可能有比我更深刻的思考,聪明人往往意味着高智商高自尊,容易互不相让,不光是软件开发,只不过软件开发可能更明显一些,因为这种脑力运动比较纯粹,“合作”往往会遇到障碍,你应该听说过中国的团队特别难带吧。

如果领导重视+时间允许,慢慢的积累,用科学的办法培养出优秀的团队,这也未尝不可,但谈何容易,谈何容易……优秀的团队和顶级的大牛一样可遇不可求,大多数时候,我想我们得做一些我提出来的变通。  回复  更多评论
  

# re: 五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作 2009-07-02 14:43 wangok
聪明人 什么是 聪明人?

不懂合作的 没有执行力的人就不是聪明人。

这山看着那山高, 你想设计 行啊。给个理由先!

不想写代码?想写代码的人多的是。解雇你一个影响不了大局 ,不信你试试!

一个公司 很多时候是 2/8 法则,真正起很大作用的是20%的人。



  回复  更多评论
  

# re: 五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作[未登录] 2009-11-29 14:04 henry
合作不可能将每个人的能力都发挥出来。从这个角度1+1<2;但是要考虑到合作会做成每个个体不可能独立完成的事情,这时1+1有可能大于2。  回复  更多评论
  

# re: 五年多一线开发经历告诉我:软件开发——几乎不可能cooperate的工作 2010-01-16 12:03 xiaojie123415
我最近正在带一个团队做一个项目,当初组队的时候,我也想过问题,但是我觉得这个问题要看管理者的协调团队对和管理团队的能力。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理