西门子TP900人机界面
者和研究者中一定还有很多。当在基于证据做出决定时,请先更全面地了解你的证据。
让我们回到本章开始提出的三个问题。第一个问题有关是否可以定义怎样是**的软件开发人员。对于软件开发的某些任务(例如,编程),我们可能很快就会得出一个定义。对于其他任务(例如,软件工作量估算),则很难定义。你也许会反对说,一个**的工作量估算者不就是以正确的信心指数准确可靠地做出估算吗。但在这之前,请记住我们这一章所赋予第一个问题的意义远远不止于此。定义一个出色表现者意味着把任务和任务所需的专业技能定义到如下的程度:新手怎样才能成为专家,专家怎样才能成为更好的专家。
对第二个问题的回答与第一个问题类似。对于某些任务,我们能度量专业技能和任务难度,但对其他任务我们还不能这么说。请注意,我们需要有效的方法来确定一定程度的专业技能,即:无需观察很长一段时间的表现。因此,这包括预测未来的表现。
本章所涉及的两个主要任务——编程和软件工作量预估本质上很不同:一个涉及规划,另一个涉及执行。而我们对前两个问题的答案似乎扩大了这一鸿沟。但是仅仅因为我们开始对一个任务有了解,而对另一个任务没有了解,并不意味这两个任务无关。相反,人们很自然地会询问,它们之间的表现会不会有相互联系。
当前说来,编程技能、预测的准确度、完成自身任务的可靠度是正相关的,这与人们通常认为的“即使是好的程序员也不能估算自己的工作量”的认识相反。如果正相关性被证明是真实的,你就可以让你**的程序员估算工作量,并根据实际完成这项工作的程序员的水平来校正预估。相对当前使用的与技能无关的补偿因素来说
一个巨大的进步。这里使用一个概念替代另一个概念的方法,是一个有趣的前景。例如,你可以通过提高编程技能来间接提高估算的准确度吗?
第三个问题,如果不能可靠地确定专业技能,是否应侧重于工具。如果能明白任务和所需的专业技能,那么我们肯定应该更多地专注于专业技能。因为大量的研究表明,增加组织机构几个百分点的专业技能,就能提高它的商业价值。但显然,Glass的观点只有在你知道如何识别程序员的专业技能时才会起效。当你不了解专业技能,以及不知道如何发展它时,另一种方法就是依靠环境和发展辅助环境的工具和技术。然后相关技能就变成了对于辅助环境的工具和技术的掌握。可能这是把“定义不明”的任务(比如软件工作量估算)至少转换为“不稳定”任务(如果做不到“稳定”的话)的方法。编程能力正变得可度量。这意味着我们能更好地领会编程任务本身以及专家程序员意味着什么。我们在建构效度上已经取得了进展(也就是我们的度量方法一直能反映编程技术和任务的难度),而且也正在提高根据Sternberg的理论,智力充分体现在生存能力和适应能力上。适应行为包括解决实际问题的能力,口头表达能力和社会竞争力。后者包括接受他人的本质,承认错误以及显示对广义世界的兴趣等。这些对协作来说都是无价的东西。
适应性行为也是Gerd Gigerenzer和“适应性行为和认知研究小组”的信条。当面对复杂的任务时,西方科学和工程学科通常教我们如何分析并获得所有相关因素,之后采取适当的行动。然而,许多任务,尤其对于没有明确定义的任务,如软件工作量估算,我们无法得到所有相关因素然后进行全面彻底的分析。凭借我们投入的努力,我们可能认为得到了很多相关因素,但我们也很可能错失了更多的因素。因此,有观点认为,这种分析方法是必然达不到目的的。人类已经在复杂环
并生存了下来,靠的不是彻底分析,而是剔除无关因素,关注少数的内容效度和效标效度(我们正致力于提高对编程技能和任务难度概念的科学把握,并通过实际编程中的成功来验证建构)。这使得建立和改善程序员的培训计划变得可能。
软件工作量估算却并非如此。预测一个团队或者一个项目需要多大的工作量来开发系统的一些部分,总的来说还不在我们所理解的范围内,也没有到达可以可靠地度量任务难度和估算技术的程度,这也意味着我们还不知道如何培训人们提高这方面的表现。
但我们知道,改善环境是有帮助的。这里有几个例子:从需求文件中删除无关内容,不让不确定的基础估算影响思考;估算*可能的工作量之前先估算理想工作量[48]。这些措施都是为了改变判断(即估算)发生的环境,其目的是为了减少人们在做判断时已知的心理偏见。其他环境措施包括:团体估算,一般比单个估算更准确;使用适当的过程模型,迭代开现在我们转到本章开始时的第三个问题。我们现在可以把它表达得更**一点了。如果知道了不容易度量软件开发人员的专业技能的话,你应该专注于工具和技术吗?想象一个政策制定者,她需要负责减少道路碰撞事故的数量和严重程度。道路事故是导致全世界10岁至19岁儿童死亡的主要原因,在美国可预防的死亡原因中排名第六。她应该优先考虑提高司机的驾驶技术和意识,还是应该花更多的钱建立环境保障措施,如改善道路标准,降低车速限制,或者争取在汽车上增加更安全的功能呢?你可能说这两种都需要做,但在有限的预算下呢,每项要做多少呢?
道路交通碰撞事故的研究还算处于一个幸运的位置:全球有巨大的数据可供分析。因此
切证明了,对于获取技能来说,智力是一笔财富。如果你希望找到**的程序员,而且必须要测试他们的智力,那就测试吧,别犹豫;但是,可别忘了,*重要的是首先一定要测试他们的编程技能。编程任务不同,并不是估算软件开发工作量次数越多,就会做得越好。有证据表明,对估算精度的在职反馈(无论是被动的、历史数据形式的,或是主动的、直接管理评估形式的)并不能改善过于乐观、过于自信或估计不可靠的问题。根据经典学习理论,这表明需要更**的反馈和更积极的技能培训(所谓的刻意练习)。换言之,需要有意识、有目的地训练估算技能。
但问题是:这可能吗?针对性的培训要求知道针对的目标是什么。换言之,一个人需要知道什么是估算的专业技能。但是,当涉及软件项目工作量估算时,专业技能的本质似乎在躲避着我们,它不容易被观察到,因为有经验的项目经理并没有比没有经验的估算者好多少,并且专业技能的理论基础没有明确告诉我们这里的专业技能到底是什么。此外,软件工作量估计属于所谓的“定义不明”的任务。它们的成功策略甚至都难以定义,这一点仅比“不稳定”任务强一些。无论是软件工作量估算这项任务本身,或是做好这项任务所需的
成功既需要智力也离不开技能。这样把智力与专业技能放在一起来看待能够把注意力吸引到好的方面,让人更加关注问题本身,而污辱性也更小。事实上,人们正努力把智力与专业技能合并为一个统一的理论,见下面的“合并智力和专业技能”。这里的共同点是在大脑中的认知结构。它们有些是稳定的,有些随着年龄而退化,有些通过有意的练习能得到改但是,你怎么能确定