• 有关技术管理经理的一些思考
    时间:2013-10-27   作者:佚名   出处:360doc.com

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

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

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

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

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

    为什么要加班

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

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

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

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

    我所理解的“沟通能力”

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

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

    少开会

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

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

    关于结对编程

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

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

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

    不要以加班为荣

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

    网友留言/评论

    我要留言/评论

    相关文章

    如何成为一位优秀的创业CEO:做创业公司的 CEO 可以说是世界上最有挑战性的事情之一。你得让客户喜欢你的产品,得组建团队,还要想办法从客户、合作者和投资者那里拿到资金;并且要指导整个工作流程的优化。
    关于独立游戏开发5个过程的相关建议:作为一名独立游戏开发者,在制作游戏过程中尽量多学些东西这一点极为重要。我认为这一过程包含以下几个步骤:1.想法 2.原型 3.迭代 4.测试 5.完工。我希望针对这个过程的每个阶段提供一些对你们有所帮助的建议,以便你们加快开发速度,提升游戏质量。
    代码审查:好事?坏事?:在软件开发领域,代码审查看起来是一个少有争议、相当平和的话题。
    如何避免重构带来的危险:重构代码很危险,它会给测试工作增加巨大的负担。除非你的程序需要重构,一定不要轻易重构代码。我这里所说的并不是把一个for循环改成while循环,或把一个StringBuffer改成StringBuilder,我说的是大动作,例如重写一个方法,一个函数,甚至整个类或包。如果你缺乏对一个方法或一个类的了解,那你重构它的条件就不充分。即使你有一个天才的计划,你也需要和团队一起设计其中重大的修改。
    Facebook如何提高软件质量?:刘彪是微软测试技术团队的一名软件设计工程师,他在自己的博客上分享了Facebook如何提高软件质量的原则、手段和背后的原因。
    程序员如何保持优秀:优秀便接近成功,金钱和名望比较难以控制。
    关于实施有效站会(Stand-Up Meeting)的三个技巧:通常的站会(tand-Up meetings)的形式总是让我感觉有点怪怪的。它有时会造成一些并不期望的效果。这篇文章里,我将向大家介绍一些在我们blossom公司里经过修改后的站会措施。
    软件项目管理中的“免坑”指南:“谁也无法改变现状,唯有无数程序员血洒大地,才能使项目重建天日。”这一点也不夸张,软件项目做烂了就是个坑,参与者也不过是填坑的。就像是在魔兽世界战场遇到国家队一样,你赢也赢不了,出也出不去。
    如何有效地报告Bug?:自由软件开发者Simon Tatham针对如何有效地报告Bug发表了自己的看法,他列举了一系列拙劣Bug报告的例子,并提出了改正建议。
    项目相关的10点感悟:作过也参与过一些项目,有成功的,有失败的,以下是在我眼里,认为比较重要的一些点,分享出来,也帮自已理理思路!