程序员如何在AI时代保持核心竞争力
IEEE文章提出程序员面对生成式AI浪潮的应对策略。强调持续学习、理解AI原理、专注创意工作成为新的职业必修课。
IEEE文章提出程序员面对生成式AI浪潮的应对策略。强调持续学习、理解AI原理、专注创意工作成为新的职业必修课。
Rina Diane Caballar 是一名贡献编辑,报道科技及其与科学、社会和环境的交集。
人工智能,特别是由大型语言模型(LLM)驱动的生成式 AI,可能会颠覆许多编码人员的生计。但一些专家辩称,AI 不会立即取代人类程序员。
加州大学戴维斯分校生物医学工程博士、医学 AI 研究中心 MedARC 首席执行官 Tanishq Mathew Abraham 表示:"你需要担心的是那些使用 AI 的人会取代你。"
那么,软件开发人员如何才能在看似即将到来的以 LLM 为中心的编程时代中让自己更有用和相关性呢?以下是一些提示和技巧,帮助编码人员在生成式 AI 时代中生存和繁荣。
虽然众多基于 AI 的编程助手可以帮助代码完成和代码生成,但编程的基础仍然存在:阅读和推理自己和他人代码的能力,以及理解你编写的代码如何融入更大系统的能力。
哈佛大学约翰·A·保尔森工程与应用科学学院的博士研究生 Priyan Vaithilingam 从事人机交互和编程语言交集的研究,他表示:"我认为 AI 可以大幅提高软件开发人员的生产力,但软件工程远不止代码生成——从获取用户需求到调试、测试等等。"
最重要的编程技能之一仍然是人类编码人员的领地:问题解决。分析问题并为其找到优雅的解决方案仍然是高度推崇的编码专业知识。
Python 软件基金会研究员、专门从事 AI 和自然语言处理开发者工具的软件公司 Explosion 联合创始人兼首席执行官 Ines Montani 表示:"这其中有创意成分,而处理问题的很多技能比实际的语言或工具更重要。不要陷入将自己与 AI 进行比较的陷阱,AI 在本质上是大型模型的统计输出。开发人员的工作和模型输出之间存在差异——作为一名开发人员远不止编写任意行代码。"
此外,良好的软件工程实践被证明比以往更加有价值。这些实践包括规划系统设计和软件架构,这为基于 AI 的工具提供了良好的上下文,使其能更有效地预测你接下来需要的代码。
麻省理工学院计算机科学与人工智能实验室副主任兼首席运营官、该实验室计算机辅助编程小组负责人 Armando Solar-Lezama 表示:"人类编码人员仍然是必须确定代码结构、围绕其组织的正确抽象以及不同接口要求的人。这些都是软件工程实践的核心,在短期内不会消失。"
找到正确的基于 AI 的工具是必不可少的。每个工具都有自己的交互方式,将每个工具纳入开发工作流程的方式也各不相同——无论是自动化单元测试的创建、生成测试数据还是编写文档。
例如,GitHub Copilot 和其他 AI 编程助手可以增强编程,在你编码时提供建议。而 ChatGPT 和 Google 的 Bard 则更多地充当对话式 AI 程序员,可用于回答有关 API(应用程序编程接口)的问题或生成代码片段。
诀窍是尝试。尝试一下 AI 工具,了解它的工作原理,考虑其输出的质量——但要对其他工具保持开放的心态。Abraham 表示:"AI 是一个发展极其迅速的领域。你不会想只是选择一个工具然后在你的余生中使用它,所以你需要快速适应新工具。"
也要考虑适当的用例。生成式 AI 工具可以为学习新编程语言或框架提供快速的途径,它们也可以更快地启动小项目和创建原型。
使用 AI 编程助手时,要详细说明你的需求,并将其视为一个迭代过程。Abraham 建议写一个注释,解释你想要的代码,以便助手可以生成满足你要求的相关建议。
对于对话式 AI 程序员,你需要知道如何最好地组织你的 prompt。这正是 prompt 工程派上用场的地方。
Abraham 提出的一种方法是链式思维 prompt。这涉及一种分治策略,你将问题分解为多个步骤,并逐一解决以解决整个问题。他表示:"一次性要求模型做太多事情会导致灾难。你希望它能够处理可管理的信息块并生成可管理的代码块。"
例如,不是要求 AI 程序员从头编写整个程序,而是考虑程序要完成的不同任务。进一步细分这些任务,要求模型为每个任务编写特定的函数。你可能需要与模型进行推理,讨论它需要采取的步骤来完成任务,这会导致来回对话。
Abraham 表示:"把它当作一个在某个主题方面知识渊博但经验不足的聪明实习生来对待。"
在 prompt 工程中,精确性和清晰性至关重要。Abraham 表示:"你需要非常清楚地告诉模型你想要什么,非常精确地说明你要求它做什么,并确保你进行后续跟进。"
学习人工智能和机器学习的基本概念,以及了解大型语言模型的工作原理及其优缺点,也可能很有价值。你不需要深入研究,但拥有一些基本知识可以为你的结果提供重要的背景。
为了帮助你入门,Abraham 推荐了 OpenAI Cookbook,其中有关于 prompt 库和工具、prompt 指南和视频课程的部分,而 Vaithilingam 建议阅读《Illustrated Transformer》了解更多有关模型和机器学习基础的信息。
软件工程师应该对大型语言模型的输出持批判态度,因为它们往往会产生幻觉并生成不准确或错误的代码。Vaithilingam 表示:"当盲目使用 AI 生成的代码时,很容易陷入调试的兔子洞,微妙的 bug 很难被发现。"
这就是为什么检查生成的代码至关重要,尽管这增加了一个额外的步骤,可能弊大于利地影响生产力。但 Abraham 辩称:"在某些情况下,验证代码比从头开始编写代码更容易,而且生成然后验证再合并到你的代码库中是一种更快的方法。"
值得思考模型输出,提出以下问题:这个模型是在什么数据上训练的?在那些数据中过滤掉了什么?训练数据有多旧,模型是在什么版本的编程语言、软件包或库上训练的?这些问题的答案可能会影响结果并为其提供更多背景。
开发人员还应该谨慎将专有代码输入这些模型。一些公司(如 Tabnine)提供其 AI 编程助手的企业版本,提供隐私保护,同时仍然学习组织的编码模式和风格。
版权是另一个需要考虑的因素,尽管如果你使用这些工具来完成几行代码或为常见或平凡的任务生成代码,相比生成更大块的代码,这不太令人担忧。
Solar-Lezama 表示:"程序员应该了解他们尝试做的事情有多独特,以及在多大程度上它是他们语境中特有的。如果模型生成的是一个相当独特的代码片段,在将其放入生产代码库之前保持怀疑和持批判的态度是很重要的。"
一个更大的问题是安全性,因为这些模型可能生成包含漏洞的代码。据 Vaithilingam 所述,代码审查和强大的测试流程等软件开发最佳实践可以帮助防止这种风险。
Solar-Lezama 表示:"更有经验的软件工程师带来的一个优势是意识到代码中最常见的漏洞以及代码容易被利用的最常见方式。他们对什么值得关注和什么会引起警觉建立了直觉。向前看,这些类型的技术将成为软件工程组合中更重要的部分。"
对于程序员在生成式 AI 时代生存,他们需要将 AI 作为一种工具,将 AI 纳入自己的工作流程中,同时认识到这些工具的机会和局限——并仍然依靠他们的人类编码能力来蓬勃发展。