导语:人工智能配对编程可能是程序员的梦想,也可能是正在形成的噩梦。我们采访了九名开发人员,让他们谈谈如何使用生成式人工智能。
生成性人工智能抓住了大众的想象力,并开始了新的科技淘金热。虽然人们一直关注产生自然语言散文和视觉艺术的人工智能工具,但在科技界,人工智能对其编码能力越来越感兴趣。您可以向AI聊天机器人描述您想要的程序,它会在几秒钟内将可执行代码返回给您,这既会吸引普通程序员,也会让普通程序员感到不安。
人工智能驱动编程的前景导致了对软件行业未来的一些相当宏伟的预测,特别是来自高管高管、顾问和关注他们的专家。但是,每天使用人工智能工具的程序员和经理呢?我们询问了少数使用生成人工智能编程的人,到目前为止,它对他们来说是如何运作的。我们了解到,人工智能确实正在改变人们的工作方式——但机器不会很快取代人类编码器。
人工智能如何帮助程序员
与我们交谈的开发人员最常用的两种生成性人工智能工具是ChatGPT(OpenAI广为人知的人工智能聊天机器人)和GitHub Copilot,后者集成到Visual Studio和其他IDE(集成开发环境)。虽然这两个工具都可以基于自然语言查询生成代码,但Copilot及其实验性继任者Copilot X可以超越对话模型一步,作为一种增强的IDE自动完成工具,可以预测开发人员正在做什么。
Croquet.io的联合创始人兼首席架构师Vanessa Freudenberg表示,她在Visual Studio Code的日常编码中使用GitHub Copilot。她解释了它是如何运作的。
如果我写一行:
let x = this.leftMargin + this.width / 2;
它将自动建议下一行:
let y = this.topMargin + this.height / 2;
它知道它需要将“宽度”和“左”替换为“高度”和“顶部”。这节省了我很多打字的时间。
NetBeez的联合创始人兼首席技术官Panickos Neophytou表示,他每次编码时都使用Copilot X和ChatGPT。他描述了使用这些工具超越自动完成的两种不同方法。第一个是系统性的。他说,描述一个定义非常明确的函数,包括特定的输入、预期输出示例以及所涉及的数据模型,其中包括具有隐式关联的数据库表。“人工智能通常可以推断出这些关联。要求它以特定语言和特定方式实施它。项目管理工具中定义的“任务”应该被定义为这种提示。
Neophytou还认为,更随意和对话的技术可以产生良好的效果。在这种模式下,他说:“在执行任务时,你会问一些关于如何做某些事情的问题。这就像有一位经验丰富的工程师在你身边回答你的问题,并指导你完成任务。”
无论你使用什么技术,学习正确提示人工智能都是一门艺术。软件提供商CodeSee的创始人兼首席执行官Shanea Leven说,我使用思想链提示来确保我得到正确的动词来开始和完善我的提示。选择正确的动词和描述性对于创造一个好的提示真的很重要。(正因为这个原因,Prompt工程正在成为一门热门学科。)
人工智能的编码优势
我们交谈的开发人员提供了各种用例,其中人工智能工具帮助他们完成工作。这就是脱颖而出的。
从代码生成文档
软件文档是一种相当结构化的格式,这是人工智能蓬勃发展的领域。网络咨询公司Love2Dev的创始人Chris Love说,我喜欢使用ChatGPT的东西是在我的代码中编写文档[或]评论。“用手做需要很多时间。但是,一旦我有一个完整的函数,我可以给它这个功能,并在一两秒钟内写出价值不错的文档。我喜欢那个!”
从文档中生成代码
人工智能还可以根据评论或文档生成代码。Croquet.io的Freudenberg给出了一个Copilot仅从一个评论行生成代码的简单示例,其中以下注释:
// get file name from our url
产生了这个输出:
let fileName = window.location.pathname.split("/").pop();
她说,我可能会以不同的方式写这篇文章——我是一个普通话女孩——但这是一个完全简单且可以说更易读的解决方案,所以我会接受它。这不仅节省了大量时间,有时它还教会了我我可能没有发现自己的成语。
解决问题的解决方案
开发人员知道,编程的一部分正在不断重塑轮子。处理一个你认识的某个地方已经解决的问题可能会令人沮丧。软件开发公司Rise8的工程实践负责人Jeff Wills认为这是一个适合人工智能援助的领域。“假设我提出了一种计算球体上两点之间距离的方法,”他解释道。副驾驶将自动出去,找到Haversine算法并生成所有代码。
Wills发现,在AI生成代码的替代方案是向他的应用程序添加一个大型库的情况下,这个用例特别方便。他解释说,说我不想把整个几何库带入我的代码,并膨胀代码库。“我真的只需要那个算法。我可能会自己写并包括它——或者使用ChatGPT或Copilot来帮助我制作它。这就是现在人工智能的面包和黄油。”
更新或清理代码
Love2Dev的Chris Love发现ChatGPT对于更新他已经编写的代码特别有用。他说,我已经解决了更新我没有更新的旧Node.js模块的问题,只是因为键入代码所需的时间比它的价值要长。“我寻找的最常见的情况是将旧的基于promise的函数转换为使用async/await。后者是一个更清晰的语法,但当我编写模块时并不那么常见。我还让它使用更现代的语法,如解构和将变量声明从var转换为const和let。”
更快的编码(也许)
与我们交谈的许多开发人员表示,与Copilot或ChatGPT合作让他们觉得可以更快地完成工作,尽管他们承认他们不一定能量化这一点。Love说,我认为它最终会帮助我更快地编写更好的代码。很难说快多少百分比,但对我来说是有形的。
Rise8的遗嘱说,我觉得我可以更快地通过可能的解决方案进行遍默。“从理论上讲,这应该会加快我的速度——但也许我正在寻找更多可能的解决方案!因此,也许我没有及时得到回报,而是在质量上得到回报,因为我能够更多地进行一再的回报。”
牢记安全
任何用于编写代码的新技术都不可避免地会以难以预测的方式向恶意行为者打开攻击面,生成性人工智能也不例外。在最近的一个例子中,安全研究人员发现,ChatGPT幻觉可能包括不存在的npm软件包——攻击者可能会预测这些软件包名称,创建它们,并用恶意代码填充它们。
DeepIdea Lab的创始人Surya Sanchez表示,打击此类攻击的方法是“在本地运行代码,识别错误,并了解人工智能生成的代码指的是不存在的软件包。在这种情况下,我们手动重写代码,提供更清晰的说明,以专注于特定部分,而不是整个代码。”桑切斯还建议您“避免共享秘密或API密钥,因为人工智能可能会被第三方审查。我们希望确保与生产相关的敏感信息保持安全。”
在某些方面,人工智能的当前局限性至少目前是内置的安全功能。Love说,在我看来,令牌或提示/响应大小限制可以让你警惕恶意代码。它迫使你小块地查看所有内容。
学校和工作中的人工智能工具
作为一名在阿姆斯特丹大学与计算机编程学生一起工作的教师,Max van der Broek对崭露头角的程序员如何思考人工智能有着某种独特的视角。他最近进行了一项调查,发现他项目中超过一半的学生正在使用ChatGPT进行编码。(这比那些用它来写作业的人的百分比要高。)调查的一个有趣的结果是,学生想要使用ChatGPT的指导方针,并发现当前的政策既不清楚又过于严格:他们希望允许一些用途,但不是全部。范德布罗克说,我可以想象,在你学习基础知识的第一年使用生成性人工智能是非法的,在以后的几年,当你创建更大、更复杂的项目时,它作为副驾驶是允许的,”范德尔布罗克说,并补充说,“我们现在拥有的最佳实践明年肯定会过时。”
工作场所的开发人员也想知道他们如何以及何时在工作中使用人工智能,因此经理们必须开始弄清楚规则——因为很可能他们中的一些人已经在这样做了。在Rise8上,Wills说,使用人工智能既是自上而下的现象,也是自下而上的现象。Wills说,我们的创始人Brian Kroger非常感兴趣。“他喜欢了解最新的技术,所以他在我们的工程渠道中提出问题,让我们思考这个问题。但与此同时,当ChatGPT真正爆炸时,人们立即作为早期采用者出现,并开始使用该资源来查看它产生了什么,以及他们如何将其整合到他们的日常工作流程中。”
Wills还表示,Rise8有预算资金,开发人员可以用它来支付他们认为有帮助的工具。许多人选择为访问ChatGPT-4付费,他说,这比免费的ChatGPT-3.5能产生更好的结果。
未来会怎样?
生成人工智能所引发的最大焦虑之一,便是其可能取代包括编程在内的数十种看似难以自动化的人类工作。尽管未来难以预测,但与我们交流的开发人员和经理大多对此持保留态度。Brain Jar的Surowski表示:“人工智能能够编写大段代码,这确实令人印象深刻。但它无法将代码转化为插件、进行测试并解决问题,这正是开发人员的工作。我们的角色远不止于代码编写者,事实上,这只是我们工作中的一小部分,却是人工智能目前唯一能提供帮助的部分。”
总体而言,CodeSee的Leven认为,确实会有公司选择缩减其工程团队规模,但“具有前瞻性和一流水平的公司不会这样做。他们将保持自己的竞争力,以超越对手并赢得市场份额。这样的公司仍然需要优秀的开发人员,因为现实是,人工智能目前还无法进行推理、权衡复杂因素或处理任何非线性或复杂问题。因此,除非你正在构建简单的东西,否则它的帮助是有限的。我们已经看到,同时利用人类和人工智能的公司取得了最佳成果。”
编译:卢敏
参考链接:https://www.infoworld.com/article/3700771/coding-with-ai-developer-tips-and-best-practices.html