人工智能,特别是由大型语言模型(LLM)驱动的生成式人工智能,可能会颠覆许多程序员的生计。但一些专家认为人工智能不会取代人类程序员——至少不会立即取代。
“你将不得不担心那些正在使用人工智能的人会取代你,”塔尼什克·马修·亚伯拉罕(Tanishq Mathew Abraham)博士说。加州大学戴维斯分校生物医学工程博士生,医学人工智能研究中心MedARC首席执行官。
那么,在即将到来的以法学硕士为中心的编码时代,软件开发人员如何才能使自己变得更加有用和相关呢?以下是程序员在生成式人工智能世界中生存和发展的一些技巧和技巧。
坚持基础知识和最佳实践
虽然无数基于人工智能的编码助手可以帮助完成代码和生成代码,但编程的基础仍然存在:阅读和推理自己和他人的代码的能力,以及理解您编写的代码如何适应更大的系统的能力。
“我相信人工智能可以显着提高软件开发人员的生产力,但软件工程不仅仅是生成代码——从引发用户需求到调试、测试等等,”博士 Priyan Vaithilingam说。哈佛大学约翰·A·保尔森工程与应用科学学院的学生,研究人机交互和编程语言的交叉领域。
最不可或缺的编程技能之一仍然是人类程序员的领域:解决问题。分析问题并找到优雅的解决方案仍然是一项备受推崇的编码专业知识。
Python 软件基金会研究员、软件公司Explosion联合创始人兼首席执行官伊内斯·蒙塔尼 (Ines Montani)表示:“它有创造性的一面,解决问题的许多技能比实际的语言或工具更重要。”专注于人工智能和自然语言处理的开发工具。“不要陷入将自己与人工智能进行比较的陷阱,人工智能或多或少是大型模型的统计输出。开发人员所做的事情与模型输出的内容之间存在差异 - 作为开发人员不仅仅是编写任意代码行。”
此外,事实证明,良好的软件工程实践比以前更有价值。这些实践包括规划系统设计和软件架构,这为基于人工智能的工具提供了良好的环境,可以更有效地预测接下来需要什么代码。
“人类编码员仍然必须弄清楚一段代码的结构、组织代码的正确抽象以及不同界面的要求,”副总监兼首席运营官 Armando Solar-Lezama说道。麻省理工学院计算机科学和人工智能实验室的官员,领导该实验室的计算机辅助编程小组。“所有这些都是软件工程实践的核心,而且它们不会很快消失。”
找到适合您需求的工具
找到合适的基于人工智能的工具至关重要。每个工具都有自己的交互方式,并且可以通过不同的方式将每个工具合并到您的开发工作流程中,无论是自动创建单元测试、生成测试数据还是编写文档。
例如,GitHub Copilot和其他人工智能编码助手可以增强编程能力,在您编码时提供建议。另一方面,GPT和 Google 的Bard更像是对话式 AI 程序员,可用于回答有关 API(应用程序编程接口)的问题或生成代码片段。
诀窍是进行实验。试用人工智能工具,感受它的工作原理,考虑其输出的质量,但对其他工具保持开放的态度。“人工智能是一个发展迅速的领域。你不想只选择一种工具,然后在余生中使用它,所以你需要快速适应新工具,”亚伯拉罕说。
还要考虑适当的用例。生成式人工智能工具可以提供学习新编程语言或框架的快捷途径,也可以成为启动小型项目和创建原型的更快方法。
清晰准确的对话是关键
使用人工智能编码助手时,请详细说明您的需求,并将其视为一个迭代过程。亚伯拉罕建议编写一条注释来解释您想要的代码,以便助手可以生成满足您要求的相关建议。
对于对话式人工智能程序员来说,您需要知道构建提示的最佳方式。这就是即时工程的用武之地。
亚伯拉罕建议的一种方法是思想链提示。这涉及到一种分而治之的策略,将问题分解为多个步骤并解决每个步骤以解决整个问题。“要求模型在给定时间做太多事情可能会导致灾难。你希望它能够处理可管理的信息块并生成可管理的代码块,”他说。
例如,不要要求人工智能程序员从头开始编写整个程序,而是考虑程序试图完成的不同任务。进一步划分这些任务,并要求模型为每个任务编写特定的函数。您可能需要与模型推理完成任务所需的步骤,从而导致来回对话。
“就像对待一个聪明的实习生一样对待它,他对某个主题了解很多,但经验不足,”亚伯拉罕说。
精确度和清晰度对于快速工程至关重要。“你需要非常清楚地询问模型你想要什么,非常准确地说明你要求它做什么,并确保你在跟进,”亚伯拉罕说。
学习人工智能和机器学习的基本概念,以及了解大型语言模型的工作原理及其优缺点也很有价值。您不需要深入研究,但掌握一些常识可以为您提供有关结果的重要背景信息。
为了帮助您入门,Abraham 推荐了OpenAI Cookbook,其中包含有关提示库和工具、提示指南和视频课程的部分,而 Vaithilingam 建议阅读Illustrated Transformer以了解有关模型和机器学习基础知识的更多信息。
保持批判态度并了解风险
软件工程师应该对大型语言模型的输出持批评态度,因为他们往往会产生幻觉并产生不准确或不正确的代码。Vaithilingam 表示:“盲目使用人工智能生成的代码时,很容易陷入调试困境,而且很难发现细微的错误。”
这就是为什么检查生成的代码至关重要,尽管它增加了一个额外的步骤,这可能弊大于利。但亚伯拉罕认为,“在某些情况下,验证代码比从头开始编写代码更容易,而且这是一种更快的生成方法,然后在合并到您拥有的任何代码库之前进行验证。”
也许值得正确看待这些模型的输出,并提出以下问题:该模型是根据哪些数据进行训练的?什么被过滤掉并且没有包含在该数据中?训练数据的历史有多长,模型训练时使用的编程语言、软件包或库的版本是什么?这些问题的答案可能会影响结果并提供更多相关背景信息。
开发人员还应该警惕将专有代码输入到这些模型中。Tabnine等一些公司提供企业版的 AI 编码助手,在提供隐私的同时还能学习组织的编码模式和风格。
版权是另一个需要考虑的因素,尽管与生成更大的代码块相比,如果您使用这些工具来完成几行代码或为常见或琐碎的任务生成代码,则不必担心。
Solar-Lezama 说:“程序员应该了解他们正在尝试做的事情有多原创,以及它在多大程度上对他们的环境来说是独特的。” “如果模型生成了一段有些原创的代码,那么在将其放入生产代码库之前保持怀疑和怀疑是很重要的。”
更大的问题是安全性,因为这些模型可能会生成包含漏洞的代码。Vaithilingam 表示,代码审查和强大的测试管道等软件开发最佳实践可以帮助防范这种风险。
Solar-Lezama 表示:“经验丰富的软件工程师带来的好处之一是了解代码中最常见的漏洞以及使代码容易受到攻击的最常见方式。” “他们对应该注意什么以及什么会引发危险信号建立了这种直觉。展望未来,这些技术将成为软件工程组合中更重要的部分。”
对于要在生成式人工智能世界中生存的程序员来说,他们需要将人工智能作为一种工具,并将人工智能纳入他们的工作流程,同时认识到这些工具的机会和局限性,并且仍然依靠他们的人类编码能力来蓬勃发展。