为什么开发实践不反映研究证据?

时间:2009-10-30 02:54:34

标签: language-agnostic

这是格雷格威尔逊"bits of evidence"演讲提出的主要问题。我在这里解释我的问题,所以请阅读演示文稿了解所有细节。

我还想知道你是否不同意这个问题的前提,即你认为当前的开发实践实际上反映了证据。

4 个答案:

答案 0 :(得分:3)

大多数严格的编程实证研究(通过有意识的,设计的实验,而不仅仅是对发生的事情的观察),考虑到可能影响结果的所有变量,将是可怕的代价。

例如,就像在实验心理学中一样,但更重要的是,许多这样的实证研究(例如Prechelt,在演示文稿中引用)是基于志愿者的(并且任何统计学家都可以告诉你完全使用自选样本偏倚结果并使整个研究基本无用)和/或学生(并且可能5年,10年或20年的专业经验值不会对结果产生巨大影响 - 即,可以盲目地认为经验是无关紧要的,这样专业人员可以从中学到任何可能影响结果的东西吗?)。

寻找具有代表性的随机样本对于大多数研究人员来说都是充满希望的 - 例如,即使您可以为参与者提供每小时40美元,对于大多数体面大小的研究而言,这是一个可怕的高额(就研究参与者人数而言)你可以将你的样本偏向失业或中低薪程序员,这种系统偏见可能会影响你的结果。

可以在一个具有强制性能力的结构中做到这一点(得到一个随机样本) - 当随机选择作为样本的一部分而拒绝参与研究的结构可以进行报复(大多数公司将处于这样的位置,而且肯定会如军事编程服装那样。你可能会得到一些抱怨,而不是真正愿意的参与者,但这或多或少是不可避免的。例如,一个拥有1000名程序员的公司可能会随机抽取其中100名参与者进行为期两天的研究 - 这对于某些研究来说已经足够了,尽管对于那些被引用的研究中的许多最有趣的研究来说都是如此(例如,关于开发周期不同阶段的影响),以及目前在该公司工作的程序员人口的代表性样本。

公司的成本(考虑到满负荷的员工和基础设施成本)可能是100,000美元。该公司的投资将如何偿还?除非研究结果可以有效地保密(不太可能涉及这么多人,研究人员不想发表? - ),“提高程序员的工作效率”(通过根据研究改变一些实践)并不是真正的答案因为所有公司的竞争对手(至少具有类似程序员人口和实践的竞争对手)都可以轻松模仿任何成功的创新。 (我确实希望并相信这样的结果可以获得专利! - 。)。

所以,基于学生和/或志愿者的研究,非常短的研究,以及纯粹的观察 ! - ),是大部分的东西。如果你不清楚观察与经验之间的区别:对于大多数人类的历史,根据观察证据,人们确信重物会下降得更快;它是故意的实验(由Galileo设置,比较下降速度,同时试图减少伽利略实际上无法严格处理的某些影响),即经验证据,以改变对该主题的看法

这并非完全没有价值的证据,但 有点弱 - 一组半令人信服的数据指出了许多决策经理必须权衡,但只有一点。假设这项研究是基于某个地方的学生,或来自网络的志愿者,甚至是100人的适当样本...来自一家公司,该公司的软件与我的完全不同,在我看来雇用平庸的程序员;我应该如何权衡这些研究,与我自己的观察证据相比较,这些证据是基于对我的公司正在处理的特定部门,技术和人员的准确了解? “有点”似乎是在这里使用的合理副词; - )

答案 1 :(得分:2)

由于...

  • 经验“证据”难以衡量且生产成本高昂
  • 产生此类证据的研究通常会受到商业问题或其他特定动机的污染。
  • 在软件开发环境中系统可重复性的想法部分存在缺陷

披露:上述断言本身就是我自己分析的产物,主要基于个人经验和很少的科学数据来启动。 ;-)从来没有更少的细节有点支持这些断言。

关于任何复杂系统的

相关指标很难找到。这是因为复杂系统的众多部分提供了更多数量的可能参数来测量,断言,比较。它也可能主要是因为这些不同指标之间的高度相关性。软件设计也不例外,有数以千计的技术产品,数百种语言,十几种方法论以及许多因素都在学科之外,很难找到有效的指标。此外,许多因素在本质上是离散的/定性的,因此不太容易受到数值积分的影响。难怪“代码行数”仍然备受关注; - )

很容易找到许多特定研究(或者某些“咨询实体”的特定报道)在特定产品或特定产品的背景下赞助的情况业即可。例如,与整体开发时间等相比,销售调试工具的人倾向于高估花在此功能上的时间百分比等。销售分析器的人...

让软件开发过程采用与大规模生产相关的方法相同产品的前提下(至少有两个幻灯片以汽车装配线为特色并非巧合),在我的意见,大有瑕疵。可以肯定的是,过程中的各个步骤可以而且应该自动化并产生可预测的结果,但总的来说,有太多的因素和太少的项目/产品实例来寻求大规模生产行业的合理化。 / p>

Greg本身的演讲评论
一般来说,我发现幻灯片是一个愉快的阅读,幽默和所有,但有点让我渴望实质和相关性。能够激励人们努力实现基于证据的流程是一件好事,但应该在软件工程领域进行实际观察,以帮助概述这一领域的障碍和机遇。

我个人长期倡导使用基于证据的任何东西,我很高兴生活在一个将在线技术,计算能力和一般数学框架融合在一起的时代在各个领域提供许多机会,包括但不限于软件工程领域。

答案 2 :(得分:0)

因为做出违背传统智慧的决策是有风险的。

当一个经理违背公认的做事方式时,他就把工作放在了一线。这是一个更加安全的决定,只要坚持人群的智慧。

答案 3 :(得分:0)

有趣的演示!

进行足够大且足够真实的对照实验对于从业者而言,实在是非常困难(并且成本非常高)。当我们真正需要测量经验丰富的开发人员在不同条件下在相同任务上工作几周或几个月时,你会倾向于在几个小时内完成涉及20名研究生的小型实验(见幻灯片12) 。当然后面的研究非常昂贵。

虽然较小的研究可能具有启发性,但真正的发展组织无法从中得出许多真正的结论。我认为更有效的团队主要是从经验中学习,而不是经验过程。如果某些东西运作良好,它将继续进行到下一个项目,如果出现问题,下次将尝试不同的方法。将开展小型试点项目,试用新技术,并与其他组织的同事进行比较。

所以我会说(非功能失调的)开发组的行为或多或少都是理性的,但他们确实可以使用来自更雄心勃勃的实验的证据。