有关技术管理的一些思考

标签: 技术 管理 思考 | 发表时间:2011-07-31 13:17 | 作者:Wang Jinbo zhangyijun
出处:http://www.cnblogs.com/

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

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

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

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

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

为什么要加班

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

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

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

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

我所理解的“沟通能力”

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

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

少开会

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

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

关于结对编程

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

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

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

不要以加班为荣

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

 


 

刚从年中会上回来,感触很多。实在太累,不写了。

作者: Wang Jinbo 发表于 2011-07-31 13:17 原文链接

评论: 4 查看评论 发表评论


最新新闻:
· Windows Phone 芒果(7712)支持 SkyDrive 云端音乐播放(2011-07-31 17:24)
· Launchpad Control 为你的 Launchpad 打补丁(2011-07-31 17:21)
· 拿什么给 Android 保驾护航?1030 个专利(2011-07-31 17:19)
· 微软MAC地址数据库惊爆安全门:任何人都可以定位你(2011-07-31 17:11)
· 马云玩手机:抛弃App模式 云应用数量仍太少(2011-07-31 17:09)

编辑推荐:持续集成理论和实践的新进展

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [技术 管理 思考] 推荐:

有关技术管理的一些思考

- zhangyijun - 博客园-首页原创精华区
这些天里工作的环境发生了一些微小的变化,可能以后对基层开发的程序员也会有更加具体的影响. 上周参加 Open Party 时,重点听了《那些失败的项目们》,分析了一个项目的提出、实施,直到最后失败的过程. 我也在想一个技术团队究竟应该用怎样的一种管理方式,才能让技术团队的效率达到更优. 我分了几个小主题,下面一一讲来.

技术管理者的 4 个基本思考点

- - 胖胖的空间
技术团队管理者在日常工作中可能经常会遇到如下一些状况:. 高强度加班后,小伙伴状态不好,导致更多的问题出现. 从第 1 点状况演变成第 5 种状况,第 5 点状况继续推动第 1 种状态的持续加强,从而导致整个团队的状态极差,陷入 BUG 多 –> 延期 –> 加班 –> BUG 更多 –> 更多的延期 的死循环.

管理杂谈·代入式思考和沙盘推演

- - 所有文章 - UCD大社区
    经典段子,大家都应该看过:.     一家三口坐在沙发上看电视,父亲渴了,叫3岁儿子弄杯水来. 儿子从沙发上爬下来,一会儿抱着杯水回来了,父亲接过杯子喝了一口并表扬了儿子.     说明 如果你不知道团队成员如何执行、如何落地,那么你提出的目标或任务最后收获的很可能就是一个笑话.     即使任务本身听上去挺简单的,如果你不了解HOW、WHO、WHEN,它也可能升级为一个Impossible Mission.

管理杂谈·代入式思考和沙盘推演

- - 博客园_旁观者
    经典段子,大家都应该看过:.     一家三口坐在沙发上看电视,父亲渴了,叫3岁儿子弄杯水来. 儿子从沙发上爬下来,一会儿抱着杯水回来了,父亲接过杯子喝了一口并表扬了儿子.     说明 如果你不知道团队成员如何执行、如何落地,那么你提出的目标或任务最后收获的很可能就是一个笑话.     即使任务本身听上去挺简单的,如果你不了解HOW、WHO、WHEN,它也可能升级为一个Impossible Mission.

基于云原生的技术中台规划思考(201008)

- - 人月神话的BLOG
今天谈下基于云原生的技术中台产品规划方面的思考. 自己在前面也写了很多关于SOA,中台,DevOps和云原生的相关技术文章. 在这些文章里面也谈了技术中台或传统我们谈的私有云PaaS技术平台,而云原生解决方案的核心是SOA+DevOps+容器云技术的融合,因此今天重点是谈围绕这三个核心点的技术中台规划.

技术、管理与30岁的槛~

- Amom - 高春辉的 BLOG
原发表在新浪微博: @高春辉 (1)我相信在技术圈里,30 岁以后是不是去做管理的纠结,一定是每个做开发的人都会有的,包括我在内,也和很多人讨论过,但是我还是选择了自己喜欢.

技术管理者标准管理模板

- - 后端技术杂谈 | 飒然Hang
对于公司技术团队新晋升的一些研发Leader、主管等管理人员,即使在大公司具有完善的培训机制,大多数人在一开始还是会手足无措,不能很好地做到从个人贡献者到团队贡献者角色的转变. 于是根据自己以及公司内部很多技术管理者的工作经验梳理出了一些技术管理者的管理模板,可以作为管理工作的实践参考. 基于职责确定团队的使命、目标.

如何更好完成从技术到管理的转变?

- - TECH2IPO创见
编者按:这篇来自《程序员》杂志的文章是写给那些IT公司的内部人员,但同样适用于互联网的创业者们. 这篇文章可以告诉你,技术创业者如何完成从执行者到管理者的角色转变,作者梁景波. IT公司研发部门的管理人员大多是从公司内部的技术人员中提拔的. 在快速发展的公司里,这样的机会更多. 然而这种“半路出家”的转型也给我们带来了很多挑战,其中最关键的部分在于思维方式的转变.

技术管理者应不应该写代码?

- - 灰色的灵魂
我相信所有新晋的技术经理,都做过Team的工期紧张,自己加班动手写Code的事情,这种事情我自己也没少干过,事实上,偶尔我自己仍然会在critical的项目上写一些代码. 相信不少同志们还引以为荣,并且不少技术管理的书上,对于技术管理人员是否应该去写代码也有不同的观点,有些认为不应该写,有些认为一定要写一点避免脱离群众外行指挥内行.