《星际迷航:下一代》一直吸引我的一点是没有软件开发人员。有医生、工程师和科学家,但没有人的工作仅仅是开发软件。不知怎么的,即使是克林贡战士伍夫中尉,也许他更出名的是他的威胁的皱眉和蝠刃技能,而不是他的智力,也可以很容易地编程全息甲板和光子鱼雷来执行他的命令。
随着大型语言模型(LLMs)和GitHub CoPilot等工具的出现,我认为我们离这种任何人都可以创建软件的世界又近了一步。事实上,我的同事布拉德·迈尔斯(Brad Myers)研究终端用户编程已有数十年,他认为CoPilot是自谷歌搜索以来编程领域最大的变化。我认为这可能低估了一些事情。我们将看到一波基于llm的新型软件编程工具,它们将改变开发人员构建和评估计算机系统的方式。
对于开发者来说,CoPilot就像是一个智能的自动补全功能。您开始输入一些代码,它会根据附近的其他代码、其他注释或您最近输入的代码为您提供建议。一个常见的场景是,输入你想要做的事情的注释,几秒钟后,CoPilot就会建议几行代码来完成这个任务。Parth Thakkar对CoPilot的工作原理进行了很好的分析,该分析基于对某些代码的逆向工程https://thakkarparth007.github.io/copilot-explorer/posts/copilot-internals.html).
与我交谈过的人对CoPilot的普遍看法是,它感觉就像能读懂你的思想。有一次,我试图使用一个相当令人困惑的API。我疑惑地盯着这个函数调用,然后CoPilot提出了一个代码注释,这让我笑了出来:// TODO这是什么意思?“对我来说,使用副驾驶就像拥有了超能力。大约有一半的时间,它能正确地猜出我想要什么样的代码,有时甚至还能提出我没有考虑过的问题和极端情况。
我发现副驾驶也有很多有趣和愚蠢的行为。我需要一个url列表来测试,于是副驾驶开始推荐YouTube视频链接,其中包括一个著名的Nyan猫(https://www.youtube.com/watch?v=QH2-TGUlwu4如果你想听一些甜美的音乐,看到彩虹的颜色)。我的一个同事给了它一个TSA禁飞名单泄露版本的URL,并促使副驾驶填写了一份禁飞名单。它没有返回个人姓名,但在某种程度上有用地返回了“枪支、刀具、爆炸物”。你也可以通过输入别人的名字来获得乐趣。我有“比尔·盖茨”说我们应该这么做,“理查德·斯托曼。是JS错误的一个很好的测试用例吗和“杰夫·迪恩”浏览器是获取DOM的最佳方式".
虽然我不像Matt Welsh那样愿意宣称编程的末日即将来临(请参阅1月份的ccacm文章)//www.eqigeno.com/magazines/2023/1/267976-the-end-of-programming/fulltext),在不久的将来,我们仍会看到编程方面的重大变化。也许我们在未来看到的最确定的变化是编程将从编写代码转变为交互式地指导、阅读和检查代码。
阅读和检查代码尤其重要,这也是为什么计算机科学程序或编程在至少一二十年内不太可能消失的原因之一。虽然副驾驶有时很神奇,但它也会提供奇怪的建议。我看到的一些例子是建议硬编码目录名,其中包含其他人的用户名,或者连接到不存在的api或常量。即使副驾驶的正确率从50%提高到95%,也总是会有一些极端情况。还有代码可维护性、配置、兼容性和版本控制等问题,这些问题给开发人员带来了很多麻烦。
因此,我不建议新手程序员使用CoPilot。新手一般都没有足够的理解代码的经验,更不用说阅读和审查了。此外,当前版本的CoPilot只建议添加代码,而不是删除、简化或重构代码。新手开发人员最终可能会得到大量残留的代码,这只会使软件变得一团糟。
如果我可以为CoPilot及其未来变体提供一个短期愿望清单,第一项将是帮助开发人员更多地考虑代码中的安全性。如果你提示副驾驶,它实际上可以帮助你的安全。例如,我想检查一个URL是否有效,当我开始评论我试图实现的目标时,CoPilot有用地提出了一些我没有考虑过的情况。但是,它只在明确提示的情况下提供安全建议。
愿望清单上的第二项是关于删除、简化或重构代码的建议,如前所述。CoPilot目前只在秒或分钟的时间尺度上帮助即时和近似的任务,而不是长期的问题,如健壮性或可维护性,这些可能是小时或天的数量级。
如果CoPilot能够提供一套折衷方案,帮助开发者在不同的约束条件之间进行有意义的选择,那将是非常有用的。例如,在Android中,一般有三类标识符:硬件id(如MAC地址或IMEI)、广告id(有点像Android的浏览器cookie)和应用程序id(可以由开发者以任何方式创建)。出于隐私原因,不建议使用硬件id,因为它们不能更改。然而,我和同事在过去的研究中发现的一个问题是,开发人员倾向于进行搜索,然后复制粘贴他们在StackOverflow上找到的第一个解决方案,这通常使用硬件标识符,并且在隐私方面不是最优的。帮助开发人员理解这些权衡不仅能开发出更好的应用程序,还能让开发人员受到更好的教育。
从长远来看,像CoPilot这样的工具最重要的问题可能是对其生成的代码有保证或担保。今天,我们几乎不了解llm,并深深与偏见和人们所说的幻觉反应问题作斗争。目前还没有简单的方法来指定行为的硬约束,这使得很难理解和评估生成的代码是否符合功能需求,更不用说跨越整个应用程序的非功能需求了,比如安全性、安全性、隐私性和可用性。
然而,有一件事是确定的。GitHub CoPilot只是软件开发新领域的开始。系好安全带,这将是一次有趣的旅程!
Jason I. Hong他是卡内基梅隆大学计算机科学学院和人机交互研究所的教授。
没有找到条目