谈到快速开发,我发现,要想让传统的软件开发手段和快速的开发取得成功,其实都需要高度仰仗于熟练的开发人员。这也就难怪人们将寻找的重点放在那些最棒的开发人员身上,因为,具有同样经验的开发人员完成的工作也会有很大的差别。
很多开发仍然按照所谓的“英雄模式”,也就是软件的诞生是由一位开发人员或者一个小组来完成的。显而易见,拥有优秀的开发人员是非常重要的,但问题是,你从哪里获得他们?
根据我多年的招聘经验,我可以肯定地说,最好的开发人员是存在的,但找到他们是一个困难的过程,甚至你阅读完1千份简历,你才可能发现一两名最好的人才。
所以说,为你的工程找到最有才能的开发者的最好方法应该是去培养现有的、有潜力的技术人员,而不是用金钱去购买他们。
怎样的开发者才优秀?
显然,这个问题比较的主观。快速开发与传统的开发技术手段都需要开发人员具备一个素质:思考。
在认知技能的教育目标当中,知识是一个最基本的要素。这是一个数据或者信息回想或者识别的过程。放在开发当中,这就是对C#语言的认识,或者执行一个循环的语句纠正。
在这之上便是整合和评估。整合是要有能力将不同的要素组合进一个全新的解决方案当中。评估是判断理念、途径或者要素的价值的一种能力。开发人员需要不断地将这种认知的能力应用到他们的工作当中去。
对开发的理念思考越多,开发人员获得的好处就越多。
在我们完全打消招聘到最好的开发人员的念头之前,让我们先通过检验技术技能来评估招聘流程。对于那些开发岗位的应聘人员,我一般会给他们一个语言开发测试。因为大部分的开发人员都需要和数据库打交道,我问他们一个简单的问题:给一个具有客户ID和名字的表单,一个有订单ID的命令头的表单,以及其他细节,你如何返回一个没有订单的客户列表?
对我而言,如果回答不上这道问题就说明应聘者对SQL需要的逻辑知识缺乏完全的理解。这是一个良好的开发者应该具备的基本技能。
另外一个我喜欢问的问题是:你最喜欢微软.NET的什么?
显然,你可以说任何你喜欢的技术。这些答案可以反映开发人员的思维。如果一个开发人员说他喜欢IntelliSense(帮助你记住对象界面的视觉工作室),我就知道他喜欢将编程的工作交由编辑器来完成,这不是一个良好开发人员应该有的思维。
我希望应聘者说他们喜欢文本编辑器以外的答案。我希望他们回答说:“有能力编写灵活的编码。”这些答案表明他们对自己做的工作具有很深的理解,而这对于他们成为一名最好的开发人员至关重要。
同样,问“你最不喜欢的东西是什么?”也可以了解面试者的情况,如果有人说,他最不喜欢在C#当中忘记分号时,我就知道这位面试者对他的工作缺乏正确的思考。
虽然诸如“你最喜欢/最不喜欢”这样的问题要好过考察SQL技能的问题,但这个手段仍然不是灵丹妙药。在我面试过的开发人员当中,有超过70%的开发人员回答的都是一些无关紧要的东西。另外有10%的人的答案表明他们的水平比较低。
由此可见,招聘一名最好的开发人员是一件很困难的事情,我个人认为其难度要比培养一个优秀的开发人员要大很多。
培养更好的开发人员
在招聘过程中,很难发现开发人员的一些潜在的素质。例如有些开发人员非常热爱学习,也许他们还不懂关系数据库,但他们非常愿意学习。
但是在大部分的公司里面,这种学习的热情被顺从的文化给压抑住了。“我们总是这么做”的理念将任何试图将事情做得更完美的努力给消灭。
但是,你可以做一些事情来鼓励新的开发人员不被压制。
指导给开发人员配备一名顾问。
这个人应该是高级开发人员、开发领导,或者关心提高团队的架构师。这个人不应该是开发人员的直接上级主管或者经理。指导的交流内容应该围绕开发人员的期望展开,而不是企业想让开发人员做什么这些事情。
检查代码。
检查代码是提高开发人员水平的一个有效途径。大部分的公司在这方面做得不好。即使做了,也没有成为开发人员学习的一个机会,而往往成为打击开发人员的一个机会。检查代码,将它看成是培训开发人员的机会,而不是打击的机会。
经验的提高。
为那些想要提高的开发人员布置额外的任务。从长期来看,这可能是最难做的事情。
除了布置额外工作的方法外,利用竞争机制促进开发人员尽可能地学习也是一个很好的途径。