当前位置: 首页 > 科技观察

都2021年了,回头看5分钟前写的代码怎么这么难?

时间:2023-03-19 17:40:06 科技观察

写代码的时候,反复修改是家常便饭,修改后忘记之前长什么样子似乎很常见。如何回到被自己覆盖的代码片段?田纳西大学助理教授AustinZ.Henley介绍了他开发的工具Yestercode,它可以让回溯代码像播放视频和拉进度条一样简单。该工具在程序员社区HackerNews上引发了讨论。一项研究发现,Java开发人员在编写代码时平均每6分钟回溯一次,这意味着他们经常需要使用撤消按钮或Ctrl+z将代码恢复到之前的状态。这些撤销动作显然是事先不知道的,以后肯定会被覆盖重写。事实上,在另一项研究中,开发人员在5分钟内执行了40次撤消/重做操作。当被问及为什么这样做时,程序员通常会回答说他们试图回忆被修改代码的某些中间状态。那么问题来了,为什么我之前写的代码这么难看呢?撤消到最后对于代码工作,撤消和重写按钮在设计上总是有意义的。但是这里会出现一些问题:(1)如果回到之前的状态再做新的改变,之前的状态就会丢失。(2)人们看不到变化前后状态的直接对比。(3)没有提示可以直观地指示您在哪里撤消/重写历史记录。(4)一些代码编辑器使用全局撤消堆栈,而一些代码编辑器对每个打开的文档使用一个撤消堆栈,这会干扰您思考操作执行顺序的方式。(5)代码编辑器中还有很多动作不会加入到undo栈中(比如修改调试器选项),在调试bug的时候会很头疼。(6)一步一步退一步,不知道什么时候才能走到尽头。投诉清单可以继续下去。使用版本控制有人说:“为什么很多程序员都使用undo/redo?版本控制可以解决所有问题。”但现实是版本控制是行不通的。当开发人员对代码进行更改时,他们可能会对代码进行大量更改并卡住,然后在一段时间后意识到他们需要某种中间版本。这迫使开发人员保存中间版本,直到他们获得做出决定所需的信息。除非您每隔几分钟将代码放入git存储库,否则版本控制在这里无济于事,无论它是否有效。开发人员在找到他们需要的信息时常常过于自信,而且他们大大低估了找到它所需的努力。复制文件开发者既可以复制代码文件,也可以在更改过程中对相关代码进行截图。他们可能会想,“我要弄乱代码,在我弄乱之前,我要使用Ctrl-A和Ctrl-V将它复制到一个新选项卡中,然后将该窗口放入编辑器中在浏览器旁边,供参考。”即使是从事该行业20年的开发人员也会这样做。回到最初的问题:为什么回头查看5分钟前的代码如此困难?为什么代码编辑器不能更好地强制执行此行为?使用YestercodetoSaveAustinHenley说,他早在2015年就开始草拟一些设计,以通过更少的工作为开发人员提供他们需要的信息。在他的设计中,开发人员可以同时查看新旧版本的代码,同时自动记录重要的更改。自从Henley可以访问LabVIEW编辑器的源代码,他创建了一个启用该功能的LabVIEW实验版本的分支。虽然LabVIEW是一种可视化的拖放语言,但这种设计理念也适用于传统编辑器。Henley随后进行了演示它提供给数十名开发人员、管理人员和其他LabVIEW用户,以获得反馈和迭代。之后,AustinHenley开发了一个名为Yestercode的工具。它可以让你像wa一样在时间轴上浏览代码历史正在播放YouTube视频。追溯编辑完成后,它可以汇总新的更改并在时间线上为此版本创建一个分支。在此之后,您可以使用时间线转到以前的版本并与当前版本的代码并排查看。以前的版本是只读的,但人们仍然可以从中复制和粘贴。最后,此工具还显示注释,以便人们了解对更高版本所做的更改(例如diff)。几年前,Henley花了一些时间将Yestercode变成一个Atom插件,事实证明它对其他类型的代码也很有用。这还不是全部,Henley希望让这样的比较工具接管所有文本版本,包括word文档、电子表格和PDF,目前新工具处于原型阶段。这真的可以吗?一旦它正式上线,我们就可以对其进行判断。