一项研究发现,Java开发人员每6分钟回溯一次,这意味着他们将代码恢复为以前的状态(例如,通过单击撤消或按Ctrl-Z)。 1这些撤消操作会突然爆发,并且通常后面是连续的重做操作。实际上,另一项研究的一名参与者在5分钟内使用了40次撤消/重做! 2当被问到为什么要这样做时,他们透露他们正在尝试查看更改中间代码的某些中间状态。
为什么在更改过程中5分钟前很难看到代码?
撤消和重做对于回溯的小片段非常有用。但是,存在一些问题:(1)如果进入先前状态然后进行新更改,则无法再进行重做并且所有这些更改都将丢失。 (2)您看不到先前版本和最新版本的并排比较。 (3)没有视觉指示符指示您在撤消/重做历史中所处的位置。 (4)有些代码编辑器使用全局撤消堆栈,而有些代码编辑器为每个打开的文档使用撤消堆栈,这可能会干扰您执行操作顺序的思维模型。 (5)我发现代码编辑器中有很多动作没有添加到撤消堆栈中(例如,更改调试器选项),这在烦人的bug中给我带来了问题。 (6)没有迹象表明“大”是什么步骤。或多久以前发生的事情。 (6)一次回退一小步很麻烦。
现在是通常有人打扰的时间,为什么您要依靠撤消/重做呢?版本控制解决了所有这些问题!
我将逐步说明版本控制为何无法在此处节省时间的一些原因。当开发人员对代码进行更改时,他们可能直到几分钟才意识到自己想要某种中间版本,直到他们深深地进行更改并陷入困境。我们在研究中反复看到了这一点。这就引入了一个过早承诺3的问题,该问题迫使开发人员在他们拥有做出决定所需的信息(无论是否需要)之前决定保存一个中间版本(或不保存它)。除非您每隔几分钟将代码提交到git存储库中,无论工作与否,版本控制都不会在这里为您提供帮助。
开发人员通常对找到所需信息过于自信,并且大大估计了获取信息所需的工作量。 4
是否想知道我们看到开发人员在做什么?在更改过程中,他们要么复制代码文件,要么拍摄相关代码的屏幕快照。甚至我以前也做过类似的事情:我要把它弄乱了……我会先将Ctrl-A和Ctrl-V组合成一个新的标签,然后再将它弄得一团糟,然后我可以把编辑器旁边的窗口用作参考。我什至观察到有20年经验的专业开发人员!
回到问题,为什么在变更过程中5分钟前的代码如此困难?为什么代码编辑器不能更好地支持这种行为?
早在2015年,我在美国国家仪器(National Instruments)时就开始草拟设计方案,这些设计方案可为开发人员提供所需的信息,而工作量却较小。它可以并排查看版本,同时自动记录“重要”信息。变化。由于可以访问LabVIEW代码编辑器的源代码,因此为启用了功能的LabVIEW实验版本创建了一个分支。尽管LabVIEW是一种可视化的拖放语言,但该思想仍然适用于传统的代码编辑器。然后,我将其演示给数十位开发人员,经理和其他LabVIEW用户,以获取反馈并进行迭代。
介绍Yestercode。它使您可以在时间轴上浏览代码历史记录,就像YouTube视频一样。进行编辑时,它会汇总它们,并在该版本的时间轴上显示一个档次。然后,您可以使用时间轴转到先前的版本,并与当前版本的代码并排查看。以前的版本是只读的,但仍允许从其复制和粘贴。它还显示注释,以便您知道在更高版本中(已与diff比较)进行了哪些更改。
几年前,我花了一些时间将其重建为Atom插件,以证明它对传统的文本代码也很有用。
我们不必在那里停下来。我想要一个工具来比较几乎所有文件的版本,甚至包括Word文档,电子表格和PDF。所以我也做了原型: