前几天Stability AI的CEO刚刚放下豪言,说AI在5年内将会彻底取代人类程序员。

今天「求生宝典」就来了!

国外网友梳理总结了程序员如何跑赢生成式AI的一些技巧,包教包会,拿来就用!

赶快学起来!拒绝AI取代,从我做起。

基础知识学习和实践两手抓

虽说有无数基于AI的编码助手可以帮助程序员们生成代码,但编程的基础仍然存在——阅读和推理自己和他人的代码,以及理解编写的代码如何适应更大的系统。

这些能力亘古不变,是编程的地基。

Priyan Vaithilingam是哈佛大学工程与应用科学学院的一名博士生,他主要研究人机交互和编程语言的交叉领域。

他表示,「我相信AI可以显着提高软件开发人员的生产力,但软件工程不仅仅是生成代码——从用户需求到调试、测试等等,都是他们的工作。」

实际上,任何技能落实到最后都是四个字:解决问题。

而如何找到问题所在(这个问题并不是某个具体的问题,而是抽象的需求),如何找到最佳的解决方案,仍然是人类程序员的核心竞争力。

Python软件基金会研究员、软件公司Explosion联合创始人兼CEO Ines Montani表示,解决问题的许多技能比实际的语言或工具更重要。

「程序员们应该专注于AI和自然语言处理的开发工具,但不要陷入将自己与AI进行比较的陷阱,作为开发人员,我们的工作并不仅仅是写代码这么简单。」

此外,有效率的软件工程实践比以往会更加有价值。

这些实践包括规划系统设计和软件架构,这些实践可以给基于AI的工具提供良好的环境,更有效地预测接下来需要完成那些代码。

「人类程序员必须弄清楚一段代码的结构、组织代码的方式,以及满足不同的要求。这些才是软件工程的核心,而这并不会很快被AI取代。」

找到符合需求的工具

第二,对于人类程序员来说,找到适合自己的AI编程工具非常重要。

每个工具都有自己的交互方式,并且可以通过不同的方式将每个工具合并到的程序员的开发工作流程中,无论是自动创建单元测试、生成测试数据还是编写文档,都是如此。

例如,GitHub Copilot和其他AI编码助手可以增强编程能力,在开发者写程序的时候提供建议。

而ChatGPT和Google的Bard更像是对话式的AI程序员,可用于回答有关 API(应用程序编程接口)的问题或生成代码片段。

而想要找到适合自己的工具,关键就在于实践。

对于开发者来说,应该广泛试用AI工具,体会不同工具的工作原理,评估输出的质量,同时对其它工具保持开放的态度。

而且,快速适应新出现的AI编程工具的能力同样非常重要。

清晰准确的对话是关键

在用AI工具辅助编程的时候,开发人员应该详细、清晰、严谨地输入需求,把这个不断调整输出内容的过程视为一种迭代。

专家建议,编写注释会非常有用。

而对于对话式AI程序员来说,程序员需要知道构建prompt的最佳方式。

这里建议的一种方法是「思想链提示」。这涉及到一种分而治之的策略,将问题分解为多个步骤并解决每个步骤,从而解决整个问题。

一口气让模型在同一时间内完成太多任务反倒会导致结果一团乱麻,更可取的方式是一步一步来,从生成一个个代码块开始。

例如,不要要求AI编程工具从头开始一口气编写整个程序,而是考虑程序试图完成不同的细分任务。

专家给出了这么一个类比,把AI编程工具当作一个实习生,他可能在知识层面差不了太多,但在经验层面还有不少欠缺。

此外,精确度和清晰度对于快速实现需求至关重要。

「你需要非常清楚地询问模型你想要什么,非常准确地说明你要求它做什么,并确保你在一步步跟进整个落实的过程。」

学习AI和机器学习的基本概念,以及了解大型语言模型的工作原理及其优缺点也很有价值。

为了帮助开发者快速入门,Abraham推荐了OpenAI的Cookbook,其中包含有关提示库和工具、提示指南和视频课程的部分,而Vaithilingam则建议阅读Illustrated Transformer,以了解有关模型和机器学习基础知识的更多信息。

保持批判态度并了解工具的风险

最后,开发人员应该对大型语言模型的输出持辩证的态度,首当其冲的就是幻觉问题。显然,一味听信AI编程工具的输出结果总有一次会捅大篓子。

这就是为什么检查生成的代码至关重要。

在检查的过程中,开发人员可以按以下这几个问题来审视初步的输出结果:

该模型是根据哪些数据进行训练的?

有哪些内容被过滤掉了,且没有包含在该数据中?

训练数据的时间有多长,模型训练时使用的编程语言、软件包或库的版本是什么?

还有一个不容易注意到的细节——版权。

原创性非常重要,开发人员应该在检查AI输出的结果时关注有没有哪部分是专用代码。

最后就是安全性问题。

抛开幻觉不谈,输出的代码可能有不少bug。这就需要输出审查,以及测试管道等方式来进行妥善解决。

有经验的人类程序员可以快速识别出常见的bug,以及代码中薄弱的部分。这种直觉就来自实践。

总而言之,对待任何新兴事物都应该以一种积极的心态去面对。

对于人类程序员来说,在被有可能的取代之前,利用AI编程工具提升自己的工作效率、提高工作质量才应该是首要考虑的目标。

希望以上内容对大家能有所帮助。