西门子工业电源中国授权一级总代理
的的策略来解决它,那我们认为这个任务是稳定的。而不稳定的任务,则是用不同的方法来解决的。当确,一位大型软件开发公司的人事经理曾表示,如果有机会试用一种科学验证过的测试来度量编程能力的话,预测编程职员工的编程技能,你想要用尽可能少的时间。因此,测试任务需要比在正常工作中遇到的任务小很多。快的程序员,学习是通过反思实践完成的,但一旦她有了程序员,她不希望他们反思,因此她不希望他们学习。我把这称为不思考的、被时间所困的人事经理的悖论。
事实上,这位人力资源经理并不是完全不思考的。她知道智力起一定作用。也许她已经阅读了这章所引用的一些文献。但她或许没有读到智力有益于获取知识,而不是预测已知的技能。智力不仅仅指智商(智商只是智力的一方面)。阅读科技文献时很容易遗失细节,这不会是次。软件工程里有这样一个传说:Royce在他的文章[70]中反对瀑布模型,但业界未能翻到下一页,在那里他说道,前一页的模型是不被推荐。这样一知半解的例子在从业者和研究者中一定还有很多。当在基于证据做出决定时,请先更全面地了解你的证据。
让我们回到本章开始提出的三个问题。个问题有关是否可以定义怎样是的软件开发人员。对于软件开发的某些任务(例如,编程),我们可能很快就会得出一个定义。对于其他任务(例如,软件工作量估算),
浔之漫智控技术(上海)有限公司(w)
是中国西门子的合作伙伴,公司主要从事工业自动化产品的集成,销售和维修,是全国的自动化设备公司。
公司坐落于中国城市上海市,我们真诚的希望在器件的销售和工程项目承接、系统开发上能和贵司开展多方面合作。
以下是我司主要代理西门子产品,欢迎您来电来函咨询,我们将为您提供优惠的价格及快捷细致的服务!
则很难定义。你也许会反对说,一个的工作量估算者不就是以正确的信心指数准确可靠地做出估算吗。但在这之前,请记住我们这一章所赋予个问题的意义远远不止于此。定义一个出色表现者意味着把任务和任务所需的技能定义到如下的程度:新手怎样才能成为专家,专家怎样才能成为更好的专家。
对第二个问题的回答与个问题类似。对于某些任务,我们能度量技能和任务难度,但对其他任务我们还不能这么说。请注意,我们需要有效的方法来确定一定程度的技能,即:无需观察很长一段时间的表现。因此,这包括预测未来的表现。
本章所涉及的两个主要任务——编程和软件工作量预估本质上很不同:一个涉及规划,另一个涉及执行。而我们对前两个问题的答案似乎扩大了这一鸿沟。但是仅仅因为我们开始对一个任务有了解,而对另一个任务没有了解,并不意味这两个任务无关。相反,人们很自然地会询问,它们之间的表现会不会有相互联系。
当前说来,编程技能、预测的准确度、完成自身任务的可靠度是正相关的,这与人们通常认为的“即使是好的程序员也不能估算自己的工作量”的认识相反。如果正相关性被证明是真实的,你就可以让你好的程序员估算工作量,并根据实际完成这项工作的程序员的水平来校正预估。相对当前使用的与技能无关的补偿因素来说,这是一个巨大的进步。这里使用一个概念替代另一个概念的方法,是一个有趣的前景。例如,你可以通过提高编程技能来间接提高估算的准确度
第三个问题,如果不能可靠地确定技能,是否应侧重于工具。如果能明白任务和所需的技能,那么我们肯定应该更多地专注于技能。因为大量的研究表明,增加组织机构几个百分点的技能,就能提高它的商业价值。但显然,Glass的观点只有在你知道如何识别程序员的技能时才会起效。当你不了解技能,以及不知道如何发展它时,另一种方法就是依靠环境和发展辅助环境的工具和技术。然后相关技能就变成了对于辅助环境的工具和技术的掌握。可能这是把“定义不明”的任务(比如软件工作量估算)至少转换为“不稳定”任务(如果做不到“稳定”的话)的方法。编程能力正变得可度量。这意味着我们能更好地领会编程任务本身以及专家程序员意味着什么。我们在建构效度上已经取得了进展(也就是我们的度量方法一直能反映编程技术和任务的难度),而且也正在提高根据Sternberg的理论,智力充分体现在生存能力和适应能力上。适应行为包括解决实际问题的能力,口头表达能力和社会竞争力。后者包括接受他人的本质,承认错误以及显示对广义世界的兴趣等。这些对协作来说都是无价的东西。
适应性行为也是Gerd Gigerenzer和“适应性行为和认知研究小组”的信条。当面对复杂的任务时,西方科学和工程学科通常教我们如何分析并获得所有相关因素,之后采取适当的行动。然而,许多任务,尤其对于没有明确定义的任务,如软件工作量估算,我们无法得到所有相关因素然后进行全面彻底的分析。凭借我们投入的努力,我们可能认为得到了很多相关因素,但我们也很可能错失了更多的因素。因此,有观点认为,这种分析方法是必然达不到目的的。人类已经在复杂环境下适应并生存了下来,靠的不是彻底分析,而是剔除无关因素,关注少数的内容效度和效标效度(我们正致力于提高对编程技能和任务难度概念的科学把握,并通过实际编程中的成功来验证建构)。这使得建立和改善程序员的培训计划变得可能。
软件工作量估算却并非如此。预测一个团队或者一个项目需要多大的工作量来开发系统的一些部分,总的来说还不在我们所理解的范围内,也没有到达可以可靠地度量任务难度和估算技术的程度,这也意味着我们还不知道如何培训人们提高这方面的表现。
但我们知道,改善环境是有帮助的。这里有几个例子:从需求文件中删除无关内容,不让不确定的基础估算影