编者按:随着ChatGPT的推出,市面上涌现出一批人工智能代码生成助手。生成式人工智能炙手可热,已渗透到人类生活的方方面面,AI真的会取代人类程序员吗?对于程序开发人员而言,如何在在ChatGPT世界中生存发展呢?本文将分享4个小技巧,帮助人类程序员领先于生成式AI。文章来自翻译,希望能对你有所启示。
图片来源:由无界 AI 生成
人工智能,尤其是由大型语言模型(LLM)驱动的生成式人工智能,可能会颠覆整个程序员行业。但一些专家认为,人工智能不会取代人类程序员,至少不会立即取代。
加州大学戴维斯分校生物医学工程博士、医疗人工智能研究中心 MedARC 首席执行官塔尼什克·马修·亚伯拉罕(Tanishq Mathew Abraham)说:“你将不得不担心那些使用人工智能取代自己的人。”
那么,在 LLM编码时代即将到来之际,软件开发人员如何才能让自己变得更有价值、更有用呢?以下是编码员在生成式人工智能时代生存和发展的一些提示和技巧。
坚持基本原则和最佳实践
虽然众多基于人工智能的编码助手可以帮助我们编写代码和生成代码,但学会编程的基本能力依然要具备,即需要具备阅读和分析代码的能力,以及理解所编写的代码如何适用于大型系统。
哈佛大学约翰·A·保尔森(John a . Paulson)工程与应用科学学院从事人机交互与编程语言交叉研究的博士生普里扬·维斯林格姆(Priyan Vaithilingam)表示:“我相信人工智能可以极大地提高软件开发人员的生产力,但软件工程不仅仅是生成代码,还包括从出用户需求、调试及测试等更多内容。”
其中最不可或缺的编程技能之一仍然是人类编码员的专长领域:问题解决。分析问题并为其找到合适的解决方案仍然是备受推崇的编码专长技能。
“编程有其创造性的一面,而解决问题的那些技能比实际的编程语言或工具更为重要。不要执着于与人工智能做比较,AI或多或少只是一个大型语言模型的统计输出。开发人员所做的与模型输出的是有区别的,作为开发人员,除了编写代码,还有更多其他的工作。”Python/ target=_blank class=infotextkey>Python 软件基金会研究员、Explosion 公司联合创始人兼首席执行官 Ines Montani 说道。
此外,良好的软件工程实践比以往任何时候都更有价值。这些实践包括规划系统设计和软件架构,程序员可以利用人工智能工具更有效地预测接下来所需的代码。
麻省理工学院计算机科学与人工智能实验室副主任兼首席运营官阿曼多·索拉·莱萨马(Armando Solar-Lezama)是该实验室计算机辅助编程小组的负责人,他谈道:“程序员必须弄清楚一段代码的数据结构、组织代码的正确抽象,以及不同界面的要求。所有这些都是软件工程实践的核心,而且未来很长一段时间内都不会消失。”
找到满足你需求的工具
找到合适的人工智能工具至关重要。每种工具都有自己的交互方式,并且可以以不同的方式将每个工具融入到开发工作流程中,无论是自动创建单元测试、生成测试数据,还是编写文档。
例如,Github Copilot 和其他人工智能编码助手可以增强我们的编程能力,为我们提供编码建议。另一方面,ChatGPT 和谷歌的 Bard 更像是会话式人工智能程序员,可用于回答有关 API(应用程序接口)的问题或生成代码片段。
关键在于实验。尝试使用人工智能工具,熟悉它的工作原理,考虑其输出质量,同时也要对其他智能工具保持开放的心态。亚伯拉罕说:“人工智能领域发展瞬息万变,你不可能永远只使用某一种工具,所以你需要快速适应新的工具。”
此外,还要考虑适当的使用案例。生成式人工智能工具可以帮助我们快速学习一门新的编程语言,也可以短时间内实现创建项目原型。
清晰和精确的对话至关重要
在使用人工智能编码助手时,需要详细阐述你的需求,并将其视为一个更新迭代的过程。亚伯拉罕建议编写一段用于解释代码的注释,这样助手就能根据注释生成符合你要求的代码。
对于会话式人工智能程序员来说,你需要知道如何以最佳方式设置提示,这就是提示工程的作用所在。
亚伯拉罕建议采用思维链提示法。这种方法其实涉及到一种“分而治之”的策略,即把问题分解成多个步骤,然后逐一解决,最终解决整个问题。“要求模型在特定时间内做太多事情反而效果不佳。它要做的是能够处理可管理的信息块,并生成可管理的代码块。”他说。
例如,与其要求人工智能程序员从头开始编写整个程序代码,不如认真考虑一下程序需要完成的所有任务。进一步划分这些任务,要求模型为每项任务编写特定的函数,这就需要与模型来回探讨实现某项任务所需采取的步骤。
亚伯拉罕说:“将其视为一个了解某个主题知识但经验不太丰富的聪明实习生。”
提示工程的精确性和清晰性非常重要。亚伯拉罕提到:“你需要非常清楚地告诉模型你想要什么,非常准确地告诉它你要求它解决什么问题,并确保你在一直跟进。”
学习人工智能和机器学习的基本概念,以及了解大型语言模型的工作原理和优缺点也很有价值。你需要深入研究,但掌握一些常识对于判断结果至关重要。
为了帮助你快速入门,Abraham 推荐,其中包含有关提示库和工具的章节内容、提示指南和视频课程等,而维斯林格姆则建议阅读《图解转换器》,以了解更多有关模型和机器学习的基础知识。
保持批判态度,并关注风险
软件工程师应对大型语言模型的输出结果持批判态度,因为它们往往会产生幻觉,生成虚构、不准确甚至是错误的代码。维斯林格姆说:“盲目使用人工智能生成的代码很容易陷入死胡同,而且很难发现其中细微的错误。”
维斯林格姆说道,"这就是为什么检查生成的代码至关重要,尽管这会增加一定的工作量,但对于提高工作效率可能弊大于利。但亚伯拉罕认为,"在某些情况下,验证代码比从头开始编写代码要容易得多,而且先生成代码,然后进行验证,最后再整合至现有的代码库中是一种更快的方法"。
我们不妨对这些模型的输出结果进行分析,并提出以下问题: 这个模型是根据什么数据训练的?哪些数据被过滤掉了,哪些数据没有包括在内?训练数据的历史有多长?模型是在什么版本的编程语言、软件包或库上训练的?这些问题的答案可能会影响结果并提供更多相关信息。
开发人员还应该警惕在这些模型中输入专有代码。一些公司,如 Tabnine,提供企业版的人工智能编码助手,在提供隐私的同时还能学习企业的编码模式和风格。
版权是另一个需要考虑的因素,不过如果你使用这些工具来完成几行代码或为普通琐碎的任务生成代码,那么与生成大段代码相比,版权问题就不那么令人担忧了。
"程序员应该对自己所要做的事情的独创性有一定的认识,以及这种独创性在多大程度上符合他们的环境,"莱萨马说。"如果模型生成的代码具有一定的原创性,那么在将其放入代码库之前,一定要保持怀疑和猜忌的态度"。
一个更大的问题是代码的安全性,因为这些模型可能会生成包含漏洞的代码。维斯林格姆认为,软件开发的最佳实践,比如代码审查和强大的测试流水线有助于防范这种风险。
莱萨马说:"更有经验的软件工程师能够带来的一种意识是,代码中最常见的漏洞和代码容易受到攻击的最常见方式。"他们会建立一种直觉,知道哪些地方需要注意,哪些地方会引起警觉。今后,这类技术将成为软件工程组合中更重要的组成部分。”
程序员要想在生成式人工智能世界中生存下去,就需要将人工智能视为一种工具,并将其融入到工作流程中,同时认识到这些工具的机遇和局限性,并且依靠人类的编码能力来发展壮大。
译者:Araon_