对于软件项目管理的一些思考

开发 项目管理
项目管理中,如何让大家更高效的工作,避免懒惰情绪的发生是每个项目经理头疼的事情。本文给大家一些小思考,希望有所帮助。

这些天里工作的环境发生了一些微小的变化,可能以后对基层开发的程序员也会有更加具体的影响。上周参加 Open Party 时,重点听了《那些失败的项目们》,分析了一个项目的提出、实施,直到***失败的过程。我也在想一个技术团队究竟应该用怎样的一种管理方式,才能让技术团队的效率达到更优。

  我分了几个小主题,下面一一讲来。

  一个程序员一天有多长时间在高效率地工作?

  虽然现在绝大部分 IT 公司都声称是 8 小时工作制,但作为开发一线的程序员们一天里真正在高效工作的时间,绝少能超过 4 个小时,甚至一般只有两个小时左右。这是我这两年半以来对我自己和跟一些朋友交流得到的结论。而对于一个有经验的程序员来说,高效率时段和心不在焉的情况下,工作效率可以差上10倍或者20多倍。我曾经有过用两个多小时的时间把半个星期的任务都完成的经历。

  因为真正高效的时段非常少,所以加班在我看来是根本不必要的。如果团队里的人个个都精力十足,能力超群,一天能高效工作4个小时,那是非常了不起的。不过这样就引出了下一个问题,既然加班是不必要的,那为什么会时常不得不加班呢?

  为什么要加班

  一句话来概括,之所以需要加班,是因为白天的时候程序员们都没有好好干活。

  那些主管、老板们听到这话时先不要着急去找程序员算账,先想想自己的管理方式有没有问题。程序员们的工作特点是,他们要面对各种细节问题、权衡各种实现方案、测试已实现的功能。这是一种很需要细心和耐心的工作,典型的脑力劳动。要让程序员们进入这种状态,你需要为他们提供必要的条件。在我看来,这条件是如此地简单,那就是:不去打扰他们。

  当你全神贯注地做一件事的时候,有人跑过来问了你一个问题,你花了5分钟去给他讲,等你讲完时,却发现很难再进入到刚才那种全神贯注地状态了。有些程序员们对这种事情极为反感,有些则是会用极简洁的语言给对方讲,因为一旦啰嗦起来,程序员们可能就再也做不下去了。也因此,这些人经常会被人认为是“缺乏沟通能力”。依我看,这不是沟通能力的问题,这反而是对工作负责任的态度。

  做为程序员的上司,应该想想,在你的公司里,程序员的工作是支持别人(为别人答疑解惑),还是开发产品。如果是后者,你是否又过于强调了沟通能力?要知道如果程序员的工作是做出高质量的软件产品,那你就应该让他专心做好这一件事,别让他又写代码又当客服。程序员不专心,白天的沟通太多,就不能做完工作。只好等到晚上加班,别人都走了,他在没有干扰的情况下才有可能进入高效的状态(注意我说的是有可能)。

  我所理解的“沟通能力”

  我不认为仅仅能够耐心地给别人讲问题就算是沟通能力强。我认为对于程序员来说,沟通能力首先表现在你写的代码要容易读懂,当别人接手你的代码时,不至于让对方过于旨解。同样地,你也要善于读懂别人的代码,程序员的思维、设计全部都体现在代码里。可以说,只要你有代码,你就应该尽量自己弄明白原作者的意思,尽可能不去动不动就问别人。理由同上面所说,减少对他人的干扰。

  其次,沟通能力还应该体现在所写的文档中。如API接口文档,把每一个API的功能、参数类型、返回值类型、异常情况等等都用简洁的、没有歧义的语言描述出来。这样让后来的人有据可查,不用到处咨询他人就可以在你的基础上开发。对于程序员来说,文档不要求生动形象,但必需要没有歧义。有这样的文档,当有人再来回跑来跑去问你问题时,你可以直接让他去看代码或者文档,你需要专心地做手头上的工作。

  少开会

  我曾经参加过一个兼职的项目,项目的负责人找来的几个人也都是兼职的,在不同的公司工作。有一次商量设计方案,负责人说要聚在一起讨论,也就是开会。对于我们这些人来说,从不同的地方坐半天地铁跑到一块,就为了开一个1小时的会,这实在太不合算了。我当时说其实根本没有必要让大家抽出晚上的时间跑过来,直接在网上说就足够了。不过那个负责人说面对面的沟通效率高。呃……我为了过来和你面对面的沟通1小时,要花1个半小时的时间在路上,反正我是不相信这种方式的效率会高……

  在《Rework》里看到一种观点,说你把10个人叫到一块,开了1个小时的会,就相当于浪费了10个小时。其实远不止10个小时。参会的人要准备,听会的人被打断工作,加起来有可能浪费超过20个小时。

  关于结对编程

  结对编程是在敏捷开发中提到的一种编程方法,即两个人共用一台电脑,一个人写代码,另一个人对他的代码实时检查。我一向不主张这种做法,在我看来,这种做法有两个弊端:

  首先是违背了我前面所说的,不要去打扰工作中的程序员。结对编程恰恰是对工作中的程序员不停的打扰。试想一下,当你在实现一个比较复杂的逻辑时,你旁边的人不停地在说“可能有更好的办法……”、“变量名写错了”之类的话,你还能专心地写下去吗?反正我是觉得不能了。我甚至感觉,如果在我写程序的时候背后有人在盯着我,我都没办法写下去。

  另一个弊端是,在旁边监督的人往往不如亲自写代码的人想得仔细,因为他不写代码,没有亲自参与到开发一线中去,就不会很专心,容易形成敷衍于事的情况。搞结对编程,不仅极大降低了其中一个程序员的开发效率,还几乎白白浪费了另一个程序员的人力。

  不要以加班为荣

  领导往往容易认为,肯加班的员工就是好员工。要我说,完全不是这回事。首先加班是不必要的,前面已经说过。如果出现了不得不加班的情况,那就是领导没当好,程序员没几个愿意晚上加班的。恰恰相反,如果一个员工很少加班的话,说明他的效率高、能力强,反而应该给予奖励。而目前的薪酬制度,使得加班多的能多拿加班费,受到领导的重视;而真正的高效率员工往往被视而不见,只能拿基本工资。加班干活的员工不一定是好员工(但加班自学深造的一定是好员工)。

原文链接:http://www.cnblogs.com/ggggqqqqihc/archive/2011/07/31/2122696.html

【编辑推荐】

  1. 新手软件项目经理该如何入门
  2. 项目经理的力量应该从哪里来?
  3. 当你从程序员变为项目经理
  4. 软件测试项目为什么会失败
  5. 项目管理之CVS与SVN日常使用总结
责任编辑:彭凡 来源: 博客园
相关推荐

2009-06-25 09:50:32

JSF

2018-07-11 14:06:04

数据质量数据治理数据清洗

2020-02-03 16:03:36

疫情思考

2011-11-30 15:57:18

2011-01-19 10:50:31

软件设计师

2017-09-01 12:48:34

DevSecOps安全运维

2020-07-14 09:23:49

安全运营甲方乙方

2019-09-17 09:21:01

2017-12-21 07:54:07

2021-06-10 10:02:19

优化缓存性能

2018-06-14 09:35:35

2021-01-14 23:24:38

incaseforma蠕虫病毒

2013-04-19 10:01:19

jQueryJS

2011-09-13 09:41:59

Python

2024-10-28 09:02:12

2018-07-23 12:03:01

2012-12-19 09:36:49

测试自动化测试

2009-08-27 11:02:22

JavaScript事

2020-08-20 10:16:56

Golang错误处理数据

2009-08-27 10:06:15

Scala的构造方法
点赞
收藏

51CTO技术栈公众号