开发人员工具可以是魔法,而是收集灰尘

2021-03-30 00:23:46

我在9年前开始研究高级开发人员工具。当我开始时,“编程工具”意味着文件格式查看器,编辑器,以及Grep的变种。我提到了一个深刻的问题,例如推断一组变化的潜在意图,并了解它如何比较以找到和替换。

时代已经改变了。当我遇到已经听说过程序合成的程序员或甚至尝试验证工具时,它不再令人震惊。现在有几个基于高级工具研究的流行产品,并且AI一般都更改了期望。 Facebook一家公司甚至在内部部署了自动化程序维修。

尽管如此,工具研究仍然在部署的内容之前仍然很轻而出广播。读取一个20岁的纸张并不罕见,通过经验证明的工具可以在任务中更快地制作方案,以及仍然被锁定在学术界的潜在想法。

我想品尝到高级工具的期望 - 以及我们推回的方式。我现在将在过去的30年中展示我最喜欢的3个工具,所有这些工具都尝试使用,其中没有一个目前运行。

我们经常在组件方面想到软件。对于操作系统,它可能是:文件系统,硬件接口,过程管理器。项目上的经验丰富的工程师要求将某些文件写入磁盘更快,将确切地知道在代码中的位置;新人将看到源文件的无定形斑点。

1995年,作为华盛顿大学的年轻毕业生,Gail C.墨菲以一种学习称为反射模型的码级的新方式。

首先,您提出了对您认为组件的粗略假设以及它们如何互动:

然后,您通过代码并记下每个文件对应于组件的方式。

现在,该工具运行,并计算文件的实际连接(例如:类继承,呼叫图)。你将它与你的假设进行比较。

武装新的证据,你会改善你的假设,使你的精神模型越来越详细,更好,更好地与现实保持。

在这段时间内,微软的一个团队正在做一个实验,看看他们是否可以重新设计Excel代码库来提取一些高级组件。他们需要一个非常强烈的对码比的理解,但取得它不会那么容易,因为他们是不同的建筑中的不同团队。其中一个人看到了Gail关于反射模型的谈话并喜欢它。

在一天,他创造了他的首次削减了Excel的反射模型。然后他在接下来的四周内善待它,因为他更熟悉代码。这样做,他达成了一定程度的理解,他估计会割下他2年。

今天,Gail的原始RMTool正在互联网上。来自AT&amp的C ++分析工具是基于,CIAO,甚至更加互联网。他们后来写了一个Java版本,但它只适用于旧版本的Eclipse,具有完全不同的API。代码是用Java 1.4编写的,并且不再是句法正确的。我很快就会起来试图让它运行。

大约10年后,在Carnegie Mellon的人机互动学院,Amy Ko正在考虑另一个问题。调试就像是一个侦探。为什么程序在做提取后没有更新缓存?在这里做的负数是多少?为什么它有很多工作要回答这些问题?

艾米对一个称为越橘的工具有一个叫做越橘的工具,你可以在那里提出“___为什么发生的原因?”在互动调试器中?她为Alice建立了一个原型,CMU的图形编程工具,让孩子制作3D动画。人们印象深刻。

他们的成功,艾米,现在是一位教授,花了另外几年,建立了这项技术为Java做到这一点。

他们跑了一项研究。要求20个程序员在Argouml,一个150k行Java程序中修复两个错误。其中一半被给予了Java Whyline的副本。与村底的程序员比没有那些的人成功4倍,并迅速工作。

几年前,我试图使用Java Whyline。当面对现代的Java字节码时,它会崩溃。

2008年,我的顾问Armando Solar-Lezama在一次手工恢复计划综合领域之后刚刚到达麻省理工学院。他主要专注于小型系统中的复杂问题,例如优化物理模拟和位拖延。现在他想解决大系统中的简单问题。这么多的编程正在写作“胶水代码”,拍摄一个大型的标准组件,并弄清楚如何将它们栓在一起。它可能需要数周的挖掘文档来弄清楚如何在复杂的框架中做某事。可以合成技术帮助吗?哈萨克天才kuat yessenov被任务弄清楚了。

胶水代码通常是一个弄清楚使用什么类别和方法的游戏。有时猜测并不难:例如,在Android中放置窗口小部件的方式,例如,具有容器的addview方法。通常它不那么容易。在编写DACTAX突出显示的Eclipse插件时,您需要一个四个类链以将TextEditor对象与RuleBasedScanner连接。

class userconfiguration扩展sourceviewerconfiguration {ipresentationreconciler getpresentationreconciler(){presentationreconciler condencer = new presentationreconciler(); RuleBasedScanner UsersCanner = New UsersCanner(); defaultdamagerrepairer dr = new defaultdamagerrepairer(userscanner);和解。 setRepairer(destry_content_type dr);和解。 setDamager(Dram,default_content_type);回归和解; }}类UserEditor扩展AbstractTextEditor {UserEditor(){userconfiguration = new userconfiguration(); SetSourceViewerConfiguration(用户配置); }} versientscanner扩展了RuleBasedScanner {...}

如果您可以弄清楚功能的两个端点,那么使用它的类和哪个类提供,他推理,那么你可以要求一台电脑弄清楚之间的内容。还有其他程序在那里实现了您正在寻找的功能。通过运行它们并分析迹线,您可以找到负责“连接”这两个类(作为指针引用链)的代码。然后,您将参考程序置于齐全的代码 - Voila,教程! Matchmaker工具出生。

在该研究中,要求8个程序员才能为Eclipse构建一个简单的语法荧光笔,以新语言突出显示两个关键字。其中一半是给予MatchMaker的媒体和一条简短的教程。是的,有多个教程如何执行此操作,但它们包含太多信息并没有帮助。对照组挣扎,平均100分钟。 Matchmaker用户快速了解他们在寻找什么,只需50分钟。不太糟糕,考虑到有5年经验的日食专家完成了16分钟。

我实际上确实可以使用Matchmaker,看到我被要求在毕业生学校的第一个月工作。很不错;我很乐意看到它搞砸了,为Android工作了。唉,我们正在推回来。几年后,我的顾问聘请了一个夏天实习生在赛马制造商上工作。他瞬间跑进了一个障碍:它不适用于Java 8。

第一课是我们使用的工具被杰出人的选择严重。 Reflexion模型是模糊的原因,而Mylyn是最受欢迎的Eclipse插件,因为盖尔C.墨菲,反射模型的创造者,决定进入学术界,而她的学生Mik Kersten,Mylyn的创造者进入工业。

编程工具不是域名的域名“时间已经到来的想法”。当有很多人致力于类似的想法时会发生这种情况;如果一个人没有得到他们的想法,那么别人会几年后。在编程工具中,这种竞争很少见。为了说明:着名教授继续休假,以启动建立一个制作网站工具的公司。我问他为什么,如果他的想法将击败以前的所有这样的工具,它就没有完成。他的答案是“因为它需要只能建造的技术。”

第二课是,我们如何构建编程工具有问题。计算机科学的其他领域似乎没有在研究人员和从业者的成就之间具有如此巨大的裂痕。我曾在此之前争论是因为建筑工具的难度更多地取决于编程语言的复杂性(这是非常复杂的;只是看到C ++)而不是在这个想法上,直到这种变化,没有足够的工具销售额支付大规模建筑物的固定成本。这就是我的pH值。D. D.致力于使工具更容易构建。这也是为什么我部分地通过免费但不足的工具的扩散令人沮丧:它会在市场的底部徘徊,使这些固定成本更加困难。

但第三课是,我们作为开发人员可以从我们的工具中需求得多。如果您曾经考虑过构建开发人员工具,那么您有很多令人印象深刻的努力才能绘制。如果您渴望更好的工具,这就是您所期待的。

1我列出了一些,但我不想玩最爱。 我只是提到码分,这是非常高级的,不需要吹捧。