关注软件开发项目中的人[节选]
本文为《程序员》10月份稿件,先贴出部分,以吊胃口:)
全文将在《程序员》发稿后贴出,请勿转载。
从1995年我开始带领3个人的软件团队起,到现在也10多年了。一直以来我都在思考,如何才能确保一个软件项目能够顺利,成功的开发完成。而我能够得到的最为重要经验是:“决定一个项目成败的最关键的因素,是人!”
软件是人开发出来的,而且到目前为止,也只可能是人开发出来的。但是,在通常的,对于软件项目、软件工程的讨论中,关于人的讨论,往往被淹没在对于技术、方法、框架、过程等等话题的讨论之中。
这次正好有这样一个机会,可以把我长久以来的思考,整理出来,和大家一起探讨一下,软件开发项目中的人。这篇文章的预定读者,是项目经理,或者再高一级的 技术部门经理。一个项目组里的人是什么样子,或者最后这些人会变成什么样子,大部分是由这个项目的头是个什么样的人来决定的。
一、选人
每个软件公司都在招人,或者曾经、或者将要招人。但是,有多少软件公司,能够招到自己满意的人才呢?大家都在说现在人才难找。问题在于,有多少软件公司,懂得如何招人呢?当一个人才来你们公司应聘,你们能够发现他,而不是错过他、赶走他吗?
有些公司,根本不知道自己需要什么样的人才,于是就到网上去搜索一把,找来一堆自己都没有看过的题目。然后交给来面试的人做。绝大多数这种问题,要么特别 变态,要么特别刁钻,要么毫无意义,要么只会让人觉得可笑。现在都什么时代了,还要求我们的程序员,拿着一支笔,对着一张纸来做题目?写错了一个字符,就 会被扣分。拜托,现在的Google已经能够查到绝大多数问题的答案了!现在的IDE已经能够发现绝大多数的语法错误了!你们还在出这种遍历二叉树的题 目?
如果你们一定要笔试,请不要出这种毫无意义的编程题行吗?
如果是我来出笔试题,我会通过笔试,考察一个程序员的描述能力,也就是把一个问题、一件事情,通过一段文字,干净利落的描述出来的能力。比如:请通过纯文 字(不含任何UML图),描述一个ATM取款机的人机交互过程,以及可能出现的异常现象。通过这样的笔试,我可以考察一个应聘者的顺序思维的能力,因为纯 文字的描述是线性的,通过线性的文字,描述复杂的事物,需要有一个整体性的思维,然后才能写出由上而下,层层分解的清晰描述。还可以考察的一点是:有没有 错别字,这一点也许有点奇怪,但是,真的有很多程序员,不注意自己的书写,有没有错别字。这也是严谨性的一部分。
再来说说面试,据说,越是大公司,面试的次数越多。据说,面试一般在笔试之后。据说,面试能够考察很多方面的能力。事实上,大多数面试者并不知道如何面试,他们看起来煞有介事,其实也忐忑得很。
在我看来,面试主要考察的,是两个方面,沟通与表达能力,还有就是一个人的个性。通常我面试别人,都会提同样的一个问题:“说说你最近做过的一个项目,技 术方面的,管理方面的。”我最希望听到的,是一个人带着非常投入的语气,像描述一场战役一样,描述他们所面临的技术挑战和管理挑战。有些人比较专注于技 术,他们对于解决问题很有兴趣,因此描述起自己的那些光荣成绩来,总是很有热情。有些人比较专注于业务,他们会相当细致的分析那些具体的业务逻辑,讲解其 中的复杂之处。有些人比较专注于管理沟通,如何保证项目顺利的完成,他们有很多心得。这些都很好。但是呢,往往也会听到抱怨,比如团队的沟通不好呀,人家 的技术差要他帮忙呀,客户的需求没有逻辑呀,领导的管理比较混乱呀等等等等。还有些人比较注重反省,最近的这个项目,所得所失,他都会认真的、甚至是反复 的去想,去总结。听这些叙述,就可以初步了解一个人:兴趣何在,是否愿意并善于沟通,是不是勇于承担自己的责任,还是动辄怨天尤人?通常,愿意反省自己的 人,都会更快的进步,这是非常难得的优秀品质。
笔试、面试。其实都不足以全面的了解一个人,前者容易受困于标准答案,后者容易被当时的谈话氛围所左右。而我最推崇的判断一个程序的水平的方式,是看代 码。给他几天的时间,让他去了解一个以前从来没有涉足过的技术领域,然后写一个简单的demo交上来。这样我可以考察他的:
快速学习的能力:一个全新的领域,能够在多少时间里初步掌握。
在开发速度与功能设计方面的权衡的能力:完全由他自己决定开发什么功能,什么时侯开发完成可以交给我。
代码的编写能力:代码是否好懂,这是一个重要的考察点。
以及编程的严谨性:是不是没有bug,或者足够少。
说得不客气一些,大多数公司,根本没有这样的能力,来以这样的方式招聘程序员。因为他们负责招聘的人,已经好多年都不写,不看代码了。更不要说分辨代码质量的高低了。
二、看人与用人
没有一个办法,能够保证招到合格的员工。哪怕是像我这样,通过代码来考察程序员,也难免走眼。所以,才会有通行的试用期制度。在试用期间,公司需要仔细的 观察已经招聘进来的员工,是否达到要求,有没有看走眼?我遇到过许许多多的程序员,人与人之间的差别真是太大了。在这里就简单聊聊我所见识到的不同类型的 程序员吧。
1、独当一面型
在我的开发生涯中,曾经有幸与这样的同事一起共事过,他们能够搞定一切,不但快,而且好。他们能够完成任务,而且往往比要求的做得更多,考虑得也更多。合 理的要求,他们都会坚决的执行,而不合理的要求,他们也不会一味的盲从。就像三国里说的:“卧龙、凤雏,得一而可以安天下。”基本上这样的人才是可遇而不 可求的。这样的人才该怎么用?分配的任务,越是有挑战性,他们就越是喜欢。然后尽一切可能,保证他们心情舒畅,不受无聊的干扰,专心做事就行了。
2、胜任愉快型
这一类程序员,更加懂得生活,他们能够完成给定的任务,不多,也不少,不快,也不慢。因为生活可不仅仅是编程那么枯燥的事情,还有许多值得花时间去玩玩弄 弄的东西。那些没有眼光的老板,光看到他们准点下班,甚至晚来早走,却没有发现他们已经搞定了工作,早就不想蜷缩在电脑面前了。要用这样的人,其实挺难 的,尤其是当你想榨取人家更多的剩余价值的时候,会遭到顽强的抵抗。合理的,可持续的“使用”,才是双赢的方案。
3、信心不足型
这类程序员其实相当的罕见,大多数我所遇到的程序员,都非常的自信,甚至过分自信的都不少。难得遇到过几个信心不足的,水平其实都挺不错的,反倒总觉得自己无法胜任手头的工作。遇到这样的朋友,通常还是以鼓励为主,实在不行,也就只能放弃了。
4、任劳任怨型
每一个团队,都需要有一个或者一些这样的“老黄牛”。一个项目组里个个都是天才,不见得就是什么好事。软件项目开发,总会有很多琐碎的,点点滴滴的小事, 得有人愿意干。有些时候,项目组会受气受委屈,得有人情绪平和,不冲动、抱怨。总之,要想培养出一种成熟、稳健的团队文化,这样的员工,就会必不可少。问 题在于,老黄牛可能会能力不足,还可能会倚老卖老,这个时候,就需要权衡利弊了。
5、夸夸其谈型
他们很关心趋势、潮流、技术走向、最新名词,该听说过的,他们肯定都听说过。说起来也是头头是道。模式啊、框架啊、架构啊,也是张嘴就来。但是大多数他嘴 里的技术,却根本没有深入的了解和思考,经不起深入的追问。不过这种人,也是人才,不过不适合开发程序,而是去做售前工程师之类的工作。要能够唬住用户, 正是他们所擅长的。
6、快枪手型
我最初就是个快枪手,能够快速的完成主线功能,但是却从来不考虑例外情况。完成了给定的功能需求,但是代码却只有我自己才能看懂(1天之内)。新的技术, 我也是很快就能上手,“Hello World”转眼就能跑出来。但是要再进一步深入专研,我的兴致就不高了。一个团队有一个这样快枪手,真是要非常的小心,才能用好。你可以分派给他各种类 型的任务,但最好不要给他太关键的功能点。因为究竟会不会出bug,他是无法保证的。要花更多的时间,并且更加频繁的检查他的工作,以确保他不仅仅是完成 了表面工作。更为重要的是,要不断的敲打他,督促他,逼他更加用心,努力提高。一个快枪手,也是有可能成长为独当一面的将才的。
(待续...)
0 Comments:
Post a Comment
<< Home