跳到主要内容

保存的帖子

assume

Dave Nicolette |龙头
戴夫尼科尔特 高级顾问
阅读: assume

软件开发

笑话,如在这个博客

一家奶牛场的牛奶产量很低,所以一位农民写信给当地大学寻求帮助。由一名理论物理学家领导的多学科教授组成的团队,进行了为期两周的密集现场调查。然后,学者们回到大学,笔记本里塞满了数据,在那里,写报告的任务留给了团队领导。不久之后,这位物理学家回到了农场,并建议农夫:“我有了解决方案,但它只在真空球形奶牛的情况下有效。”

犹他大学计算机科学教授John Regehr最近由John Regehr提醒了这篇古老的笑话,题为“关闭循环:外部参与计算机科学研究的重要性。”他观察到一个循环,从研究人员丢弃“无关的细节”和研究“抽象问题领域”的想法开始。然后,他们的结果将“适应工程环境”,这样他们就可以应用于“具体问题领域”。学者们观察世界上正在发生的事情,并将这些观察结果反馈给循环系统,删除“不相关的细节”。

学术界和领域之间的反馈循环

Regehr博士从学术的角度观察循环。几年前,我从从业者的角度观察了同样的循环。然而,循环似乎是一个理想的而不是现实;至少,它似乎仅在其潜在价值的一小部分下运行。

当我对这个循环感兴趣时,我很快就跑了学术界的原因。2012年,我写了一个题为题为博客帖子“交付正确的代码”。在本文中,我建议了一些开发人员可以使用的方法,以获得对他们的代码适合发布的高度信心。

你可能会立即发现我的错误。我的非正式用途“可证实正确”术语触发了读者的许多响应。没有一个反应是积极的。他们最有礼貌沿着,“为什么要重新定义这个词证明?“一些不礼貌的例子跑到原始帖子的长度的几倍,如果你读过我的任何写作,你知道这可能相当长。我没有博士学位,但如果我这样做可能会在风袋的领域。

这是咆哮吗?

不,我长期以来一直对学术界和从业者之间反馈回路的潜在价值感兴趣。只要只有很长一段时间,我似乎很沮丧它似乎几乎无法运作。我还在探索这个想法。

它发生在我身上,这两个社区具有非常不同的心态,假设,词汇表和通信风格。当他们谈论软件的“正确性”时,他们正在谈论两个不同的东西。当他们参与讨论时,他们的目标是不同的。

根据我的经验,当实践者进入一个讨论时,他们通常是试图找到一个可行的解决立即问题的方法。他们并没有考虑为一类问题建立一个通用模型。他们会抛出想法并进行尝试,而不会过多担心谁的想法最终可行,只要他们得到了某物在职的。

相反,与学者做什么,我只能通过我所看到和听到的东西,因为我不是自己的学术。当他们讨论某事时,学者似乎互相竞争,让自己听起来比同龄人更聪明。这可能只是他们习惯的互动方式造成的一种印象,但无论是真实的还是感知的,这对从业者来说都是一种厌恶。

因此,有一种自然的通信障碍,使两个社区难以分享知识。

坚定不移地缺少这一点

关于提供正确代码的帖子的第一个回复来自同一John Regehr,其文章重新克服了我的经验记忆。他当时的评论提供了学术思想与实践思维之间的基本鸿沟的良好综述:

Regehr:“……一个问题是(据我所知)从来没有人写过像web服务这样的正式规范。我认为你会注意到你的示例规范和真实世界API的规范之间有很大的差距。”

我:“具体来说,对于Web服务,规范就是WSDL。”

Regehr:“WSDL没有我知道的数学意义。直到它,我们无法做到这一点。“

他是对的。WSDL没有数学意义。从现实的角度来看:那又怎样?

那是鸿沟,就在那里。

当客户要求我写一份服务时,他们没有要求进行数学模型;他们要求工作软件。是一个正式规格的WSDL吗?是的,根据定义,正是如此,它完全足以与现场的真实奶牛一起使用。

这些日子很常见。一个“严肃的,真实的世界API”都没有像数学证据一样。API的目的是不是是一个完美的模型,但是定义服务的请求者和提供者之间的预期交互。是什么意外交互?的范围。对于从业者来说,“真实世界的API”描述了(a)传递给服务的内容和(b)服务期望返回的内容。这是所有。

这是一个完整的模型吗?不。它是否足以让我们为客户提供价值?是的。

这只是两个社区之间沟通难度的一个小例子。似乎经常好像每一个单词被视为不同的方式,需要延长关于定义的对话。我怀疑很少有人有时间或耐心在他们放弃之前沉迷于几次。

现实从研究中出现......还是这样做?

学术观点出现要成为(我可能会读太多的东西)这是一件事情根本不存在除非它已经在学术研究中发表。

当我试图通过参加2007 - 2008年时间框架的敏捷和技术会议的学术赛道,当我试图弥合鸿沟时强烈强烈加强。我想看看我们如何以有用的方式将学术和实践世界系在一起。我惊讶地发现许多学术界在任何实际结果中都是无趣的。

在研究驱动驱动的开发研究中,在博客文章中描述的研究“所有证据都是轶事,”发现TDD可用于控制圈复杂性。

在演讲后的一次非正式讨论中,我了解到研究人员对自己非常满意,尽管他们的结果对我来说似乎是显而易见的。他们相信他们“发现”了一些以前没有人注意到的东西。我认为没有人注意到这种相关性是不对的。我告诉他们,如果实践者没有经历过像TDD那样的好处,他们就不会费事使用TDD。他们说,嗯,没人知道发表它以前。

我认为这不是观看学术工作的有用方式。它本质地将理论上的理论分开在难以克服的基本级别,当我们希望分享两个社区之间的研究发现或实际经验时难以克服。更健康的方法可能是为了他们问自己,“为什么从业者赞成这种技术?它是否有可能衡量的好处?“除非学术已经发表过,除非学术似乎是愚蠢的,否则只是假设没有任何东西。

并非所有研究都相同

在那篇博客文章中,我发现了很多在会议上报告的研究是由(a)没有经验开发软件的学生进行的,(b)没有进行受控研究的经验,(c)没有经验公开演示。他们作为一种方式进行了学业练习技术设置和运行受控研究,编写他们的发现,在公共场合发言。

所有这些技能都很有用,对于学生来说很棒。问题是结果本身通常是废话,但世界上很多人都信任此类研究,告诉他们将为实际项目“工作”或“不起作用”。学生的研究人员对他们观察到的内容缺乏深刻的理解。因此,它们通常会关节实际相关的观察结果,显然是为了使它们能够输入到其分析工具的数据点数。

在与在XP 2008上给出的对编程研究的演示者的对话中,我了解到他们在“对编程”标题下观察到的东西是随机行为,这些行为并不像对编程一样。他们怎么能更好地知道?他们不是专业的软件开发人员,他们在整个研究过程中都很开心。

坊间证据是代码未经证实的废话

有一种普遍的态度,即“轶事”报告不受信任。不知何故,我们的社会已经到了一个人们不信任自己的眼睛并相信最新的“学习”的地方。上周,咖啡对你很糟糕。本周,对你有好处。下周?

对那些贬低真正经验的人,以支持球形奶牛的数学模型。他们使用“轶事”一词作为被动侵略性的佩吉术语。“轶事”听起来像“有人听到朋友叔叔的前妻堂兄的调酒师的朋友。”这不是。这是提供价值的经验。实际经验提供客户支付的价值。在肮脏,臭的场地。真正的奶牛住在哪里。

从业者要求研究,但不要读它们

有时当我在TDD和配对等当代技术的教练队伍时,开发人员将要求看到“证明”技术“的作品”。他们坚持他们不会改变他们的习惯,直到看到这样的研究。他们为什么要从一些陌生人倾听建议?他们做得很好。

我让他们向我展示这项研究,让他们确信他们目前的任何方式工作。在给我打电话给我几个名字后,他们承认他们没有要求他们在学习目前的工作方法时看到任何研究。他们没有依赖一项研究来教导他们如何构建软件。他们听取了一些陌生人的建议。他们正在做得很好。

他们现在要求一项研究作为一种避免学习新的东西。即使我向他们展示了一项研究,他们也会找到拒绝其结论的理由,因为他们已经下定了他们的思想。

研究有多好?

Laurent Bossavit是一位备受推崇的开发商,也在学术界掌握了一群,回应了关于轶事证据的帖子。他写了:

“这并不是说传闻中的证据是好的,而是说研究是坏的。”这不是一个孤立的案例,软件工程中的大多数研究都是可怕的。

“这一领域的研究有两个巨大的问题,相关性和有效性。On relevance, let me just quote the words of one academic who rejected a colleague’s proposal for a workshop on TDD: ‘TDD is of great interest to the software engineering community, but it seems a topic too close to industrial practice to be interesting to a research conference’. (Yeah, I WTFed at that too.)”

是的。

统计信息很有用,但不是“真理”

如果我们在10年内观察100,000名开发人员,我们可以编制关于他们如何构建软件的大量原始数据以及结果如何有价值。我们可以感受到纯粹的信息量的安慰,就像一个厚厚的覆盖物,很多软馅在寒冷的冬天的夜晚温暖我们。

但是,平均和手段以及我们从该数据中提取的均值以及我们无法描述我们可以在地面上使用的方式描述任何单一的现实情况。统计分析提供了有用的线索,也是关于在实践中“工作”的虚假安全感。

为什么?因为情况之间的差异足够重要,因为我们可能所采用的任何和每种技术都必须在任何一个背景下进行调整和定制到“工作”。我们可以尝试尝试蒸馏出常见,当我们这样做时,我们向这样的东西抽象了一种决定的抽象毫无意义。

真空中是一个球形牛。未批准。

一个更实际的研究结果将是关于如何调整实践以适应广泛类别的情况的一般指导方针。最终,从业人员必须使用他们的判断力和创造力来让事情“工作”。

如果我们根本不相信研究,我们的方法将停滞不前。如果我们在研究中相信太多,我们永远不会提供任何东西,因为我们将永远等待完美的模型出现。

我们可以弥漫鸿沟吗?

回到循环博士Regehr描述了:如果学者在行业的需要下是无谓的,那么循环在哪里?两个社区之间的反馈如何流动?随着当今的事情,学者往往会忽视任何从业者提出的,因为它不是基于数学模型,从业者倾向于忽视任何学者发布的东西,因为它没有基于实际现实。

我们可以以一种益处社区的方式弥合学者和从业者之间的差距吗?我有一些想法:

  • 从业者:帮助您的学术朋友了解为什么你以你的方式做事。有什么问题导致你这样做的事情?您使用的方法如何解决或减轻这些问题?我想你会发现,通过考虑如何向想要学习的人解释你的工作会有所帮助理解为什么你以你的方式做事。你可能会发现你在没有真正理解的情况下做出习惯的事情。即使你永远不会与学术与学术交谈,这可能是健康的。
  • 学者:当你看到你不喜欢的一句话时,不要闭上你的思想。它的才有可能误解的医生有一些价值,但不会说你的语言。贬低他们的坚实,真实世界的经历“仅仅是轶事”并没有帮助任何人,并且在很长的长度上竖起错误使用的术语不会让你听起来很聪明。你没有找不到关于什么“有效”的信息比从业者的实际经验更好的来源。
  • 正常的人:不要假设一个软件开发实践在有用之前必须经过学术研究的“证明”。学者只能研究他们自己观察。他们只能观察什么实践者。从业者做一些帮助他们的事情完成工作。当他们尝试某些没有帮助他们的东西时,他们停止这样做。因此,问题是,“这可行吗?””是无效的。如果有足够多的人在做一件事,而学者们已经注意到了它,那么它已经工作,至少在某些情况下。这就是人们正在做的原因,这是事情值得学习的原因。问题“如何这有帮助吗?”或“在什么条件下这可以帮忙吗?“或者“是什么有效的方式要做这个吗?会更有用。

如果您有更多关于如何弥合差距的想法,请分享它们。

下一个>如何创建准备好的定义w / rick austin

发表评论

您的电子邮件地址不会被公开。必需的地方已做标记*