AI辅助编程1开发人员的新世界
1开发人员的新世界
2011年至2016年,安德烈-卡帕奇(Andrej Karpathy)在斯坦福大学从事密集神经网络架构和像素处理计算机视觉工作的同时,还在谷歌兼职。在那里,他修修补补,为YouTube视频开发了一套特征学习系统。之后,他决定成为 OpenAI的创始成员,后来又在特斯拉担任人工智能高级总监,带领团队创建了自动驾驶系统。
可以说,他是世界上最顶尖的程序员之一。同时他也是一位熟练的文字工作者,在Twitter或X上拥有近80万名粉丝。当 ChatGPT一炮而红时,他发了一条推特:最热门的新编程语言是英语(The hottest new programming language is English)。
他可不是在开玩笑。这不仅是对编码的诗意颂扬,也是对未来的一种期许:在未来,输入自然语言提示,就能用任何语言生成计算机代码。这就像在你的电脑里装了一个双语精灵,随时准备把你的英语愿望转换成代码命令。
随后,一条推特回应了许多开发者的心声:Copilot大大加快了我的编码速度,很难想象还能回到"手动编码"的状态。我还在学习使用它,但它已经帮我写了80%的代码,而且准确率高达80%。我甚至不真正编码,只是提示和编辑。
卡帕奇在向微软的GitHub Copilot致敬,这是人工智能辅助编程的新产品。但不久之后,其他工具也如雨后春笋般涌现。创新的速度令人叹为观止。
现在,对于所有的程序员来说,这里的景象可能就像一片茂密的丛林。这个人工智能工具的勇敢新世界到底是什么?它们在哪里令人眼花缭乱,又在哪里黯然失色?你又该如何涉足其中,成为一名精明的人工智能辅助程序员?
本书将成为你的指南,帮助你回答这些问题以及更多问题。本书将重点介绍如何利用这些工具,不仅更快、更智能地编写代码,而且还充满乐趣。因此,让我们卷起袖子,跃入人工智能辅助编程之旅吧。
1.1演进
编程语言进化的一个关键主题是抽象。这是一种描述系统如何让开发人员更容易使用的花哨方式。当繁琐的细节在后台得到处理后,开发人员就可以专注于最重要的事情。这一直是创新的驱动力,使得互联网、云计算、移动和人工智能等技术取得了突破性进展。
- 从机器语言到汇编语言
在计算机时代的黎明,程序员不得不与0和1搏斗,让机器按照他们的意志运转。但后来,汇编语言出现了。它提供了字母数字指令,使编码更容易,错误率更低。
- 高级语言
20世纪50年代,Fortran和COBOL语言出现了,程序员可以使用DISPLAY、READ、WRITE 和IF/THEN/ELSE等简单的英语进行编码。编译器会将这些代码转换成计算机能够理解的0和1。同时,没有技术背景的人一般也能很好地阅读代码,理解工作流程。高级语言的出现将极大地推动计算机革命。
- 结构化程序设计
C和Pascal等语言引入了结构化编程,本质上是将复杂的任务打包成整齐的小盒子,称为函数。这种抽象化使得可重用性和可维护性得以实现,也使得管理庞大的软件项目不再是一项艰巨的任务。
- 面向对象编程(OOP)
这类计算机语言中的佼佼者包括 C++ 和 Java。面向对象编程带来了全新的抽象水平,允许程序员使用类和对象来模拟现实世界中的实体,封装数据和行为。这促进了模块化,使问题的解决更加直观。
- 脚本语言和网络开发
Python、Ruby 和 JavaScript 抽象了许多与编程相关的低级任务。它们提供了大量库和内置数据结构,简化了常见的编程任务,减少了完成这些任务所需的代码量。
- 机器学习和人工智能
随着人工智能和机器学习的兴起,TensorFlow和PyTorch等专业库和框架抽象出了许多复杂的编程数学细节。这使得开发人员能够专注于模型架构和训练过程。
- 人工智能辅助编程
当然,最新加入这一抽象叙事的是人工智能辅助编程,如 GPT-4 和其他大型语言模型 (LLM)。它们就像你的后台工作人员,随时准备在你的命令下参与代码生成。
以下是gemini演示:
以下是Chat-GPT3.5:
以下是钉钉里面的通义千问:
1.2生成式AI
生成式AI是人工智能的一个分支,可以创建新的、独特的内容。
ML系统不是按照明确的指令前进,而是根据大量数据提出见解。ML通常基于复杂的算法,无需硬编码即可进行预测或决策。深度学习(DL,这是一种更严密的ML,它使用的神经网络堆叠了多个隐藏层--这就是深度标签的由来。这些堆叠模型在图像和语音识别等领域取得了突出成果。生成式AI模型会创建反映其训练数据的新数据。最内层是LLM,如GPT-4、Gemini、Claude 和 LLaMA 2。这些强大的模型--通常被称为"基础模型"--基于最先进的算法和海量数据的训练,可以生成类似人类的文本。
生成式人工智能不仅仅是LLM。GenAI还具有多模态能力,即创建图像、音频和视频的能力。
1.3 人工智能辅助编程优点
人工智能辅助编程工具旨在提高开发人员的能力,使他们能够专注于高级问题的解决和创新,而不是被单调的任务或复杂的代码细节所困扰。这就是为什么GitHub使用"领航员"(copilot一词的原因。在驾驶舱里有一个可靠的伙伴,他能帮你处理错综复杂而又繁琐的编码工作,让你专注于重要的事情。
1.3.1最小化搜索
开发人员经常会发现自己在扮演数字侦探的角色,追寻讨厌的错误,或绞尽脑汁地研究神秘的代码。当他们遇到困难时,第一反应就是点击Google或访问 Stack Overflow。快速搜索,输入代码片段,然后就回到了集成开发环境(IDE)。
但有时这可能会变成一种折磨。Stack Overflow上的讨论可能是死胡同。你又搜索了一番,但似乎没有任何发现。不过,有一个讨论还是有点帮助的,于是你进一步研究了一些相关主题。你甚至在YouTube上搜索视频。琢磨了30多分钟后,你终于解决了问题。
是的,所有开发人员都有过这样的经历。有趣的是,来自Stack Overflow的2022年开发人员调查(其中包括来自 70,000多名开发人员的回复)凸显了这种挫败感。调查发现,62%的受访者每天花在搜索答案上的时间超过30分钟,25%的受访者每天花在搜索答案上的时间超过1小时。调查显示,"对于一个有50名开发人员的团队来说,搜索答案/解决方案所花费的时间加起来,整个团队每周损失的时间在333-651小时之间"。
现在,如果有一种方法可以穿过这些繁杂耗时的搜索,迅速找到解决方案呢?输入人工智能辅助编程,我们的闪亮算法骑士。微软的研究证明了这一点:研究显示,90%以上使用GitHub Copilot的开发人员都能以更快的速度完成任务。
微软甚至在一次程序员对决中对此进行了测试。该公司招募了95名专业开发人员,将他们分成两组。任务是用JavaScript编写HTTP服务器。使用GitHub Copilot的开发人员完成任务的速度比不使用GitHub Copilot的开发人员快55%。
麦肯锡公司也进行了一项调查研究。来自美国和亚洲的40多名开发人员参加了这项研究,他们的经验和背景各不相同。在几周的时间里,他们完成了三项常见的软件任务:代码生成、重构和文档编制。
结果如何?在编写文档以保持代码整洁方面,人工智能辅助工具表现突出,花费的时间减少了一半,而在起草新代码和重构方面,人工智能工具的表现几乎相同。不过,在复杂任务方面,人工智能工具的表现并不突出。缩短的时间不到 10%。
有趣的是,研究还表明,减少花费的时间并不会对代码的整体质量产生负面影响,例如在错误、可读性和可维护性方面。事实上,人工智能辅助编程工具带来的改进微乎其微。但这往往是由于开发人员使用这些工具进行了迭代。
麦肯锡的研究提供了以下启示:
-
减轻日常琐事
这些工具非常擅长处理琐碎的任务,如自动填写代码函数、协助实时完成代码和自动记录代码。通过处理这些任务,它们能让开发人员腾出手来,深入研究复杂的业务问题并快速部署软件功能。 -
编写更流畅的代码草案
面对一片空白的画布可能会让人望而生畏,但有了人工智能生成工具,开发人员就可以在集成开发环境中或单独通过简单的提示获取代码建议,从而推动创作过程。许多开发人员发现,这些基于人工智能的建议非常有价值,因为它们能帮助人类克服 "空白屏幕问题",以更快的速度进入编码 "区域"。
- 加快对现有代码的调整
有了有效的提示,开发人员可以更迅速地调整和改进现有代码。例如,他们可以从在线库中获取代码,将其输入到提示符中,然后根据指定的标准提出人工智能调整迭代请求。
- 增强开发人员应对新挑战的能力
这项技术就像一门快速入门课程,可以帮助开发人员熟悉陌生的编码环境或语言。在处理新事物时,这些工具会像经验丰富的伙伴一样介入,阐明新概念,剖析各种代码库,并提供全面的框架使用指南。
- 利用多种工具
研究表明,使用多种工具更有效。想象一下:开发人员使用一种工具进行提示或聊天,而另一种工具则作为代码库的一部分,提供自动完成选项和建议。开发人员发现,第一款工具在代码重构过程中,由于其对话的灵活性,在回答问题时显得游刃有余。另一方面,第二款工具在生成与开发环境顺利集成的新代码方面也表现出了很高的效率。当这些人工智能工具联手完成一项任务时,开发人员看到时间效率激增了1.5到2.5倍。
1.3.2顾问
您可以就多种类型的开发活动寻求建议。
1.3.3 IDE集成
与集成开发环境的无缝集成对于人工智能辅助编程至关重要。它能使开发过程保持强劲势头,而无需掌握新平台的繁重工作。这意味着减少了在学习曲线上争分夺秒的时间,将更多的时间用于编码,而且不要忘记,不同平台或工具之间的无缝切换意味着减少了摩擦,使编码过程更加顺畅。
还有实时反馈的优势。当开发人员编织或调整代码时,集成工具就会发现错误、提供修正或建议更好的方法。这种书写、反馈和调整的即时往返就像在你身边有一个友好的教练。您将在指导下编写出更简洁、更高效的代码,而无需进行人工审核或外部检查。
人工智能辅助系统还可以通过调整更广泛的编码叙事来改进集成开发环境。人工智能可以掌握变量类型、方法签名甚至项目结构蓝图的要点,从而提出相关的代码建议。不过,人工智能的作用不仅仅是输出代码。
一些顶级人工智能辅助编程工具及其支持的集成开发环境如下:
- GitHub Copilot
Visual Studio Code、Visual Studio、Vim、Neovim、JetBrains suite、Azure Data Studio
- Tabnine
Visual Studio Code、WebStorm、PyCharm、Eclipse、IntelliJ Platform、PhpStorm、CLion、Neovim、JupyterLab、Rider、DataGrip、AppCode、Visual Studio 2022、Android Studio、GoLand、RubyMine、Emacs、Vim、Sublime Text、Atom.AI、Jupyter Notebook
- CodiumAI
Visual Studio Code、JetBrains(IntelliJ、WebStorm、CLion、PyCharm)
- Amazon CodeWhisperer
Visual Studio Code, IntelliJ IDEA, AWS Cloud9, AWS Lambda console, JupyterLab, Amazon SageMaker Studio, JetBrains (IntelliJ, PyCharm, CLion, GoLand, WebStorm, Rider, PhpStorm, RubyMine, DataGrip)
1.3.4适配你的代码库
某些人工智能辅助编程工具专为与特定的开发环境相匹配而定制。开发人员可以对其进行微调,让工具了解项目的内部库、应用程序接口、最佳实践和架构蓝图。这就确保了为您提供的建议不仅技术可靠,而且符合您项目的独特需求。
这种定制有助于使生成的代码建议与贵组织既定的编码标准、质量标识和安全协议保持一致。注重培养高质量的代码意味着团队可以避免陷入过时或不受欢迎的代码片段。
此外,这种量身定制的方法对于新加入开发团队的人员也大有裨益。传统上,让他们适应新的代码库需要投入大量时间,因为他们可能需要几个月的时间来探索代码、查看文档和学习编码协议。然而,人工智能辅助编程工具可以大大缩短学习时间。
1.3.5代码完整性
代码完整性是完善软件开发的标志。它凸显了源代码在执行其预期功能时的坚固性和可信度。可以把它看作是一个透镜,通过它来检查代码的完整性、准确性、一致性和加固性。代码完整性中的一个小瑕疵就会为漏洞和潜在的安全盲点埋下隐患,进而导致系统崩溃和数据泄露。
影响代码完整性的各种因素包括代码的精确性、彻底性、统一性、安全规定以及维护代码的难易程度。开发人员可以通过单元和集成测试、同行代码审查、静态代码分析和严格的安全评估等多种方法来提高代码的完整性。
值得注意的是,越来越多的人工智能辅助编程工具正在推出旨在加强代码完整性的功能。它们深入研究代码的细微之处,为生成中肯而敏锐的单元测试和边缘案例铺平道路。
其中一些工具还具有 “修复 ”建议功能。这些建议会事先经过审核,以确保在提交给开发人员之前不会导致新的问题。然后,开发人员就可以在集成开发环境中查看并吸收这些建议。
这些工具的另一个优点是能够快速分析拉取请求,并对代码改动进行简明扼要的总结。它们还擅长自动生成发布说明,这对于记录软件版本的演变非常有用。
1.3.6文档生成器
文档是软件开发过程中的无名英雄。它有助于确保代码库的可读性、可维护性和可扩展性,尤其是在团队不断变化、项目日益复杂的情况下。但面对现实,创建和刷新这些文档往往让人感觉像在官僚主义的泥沼中跋涉,耗费大量时间,偶尔还会被推到次要位置。
现在,人工智能辅助编程工具出现了。这些数字抄写员可以在极短的时间内编写出大量文件,而且质量高、清晰度高。这是通过利用 LLM 的力量实现的,LLM 在处理语言方面尤为出色。
1.3.7现代化
马克-安德森(Marc Andreessen)2011 年在《华尔街日报》上发表的豪言壮语 “软件正在吞噬世界”(Software Is Eating the World)已如美酒般历久弥新。安德森以善于在数英里之外发现技术趋势而闻名,作为一名成功的企业家和风险投资家,他有着辉煌的业绩,他指出了技术史上一个成熟的时刻。
他强调,基础设施已经进入成熟期,并为全球产业的蜕变做好了准备。亚马逊网络服务(Amazon Web Services)等云平台的崛起和宽带互联网的广泛发展改变了游戏规则。它们打破了服务器成本和网络技术的传统障碍。这为优步(Uber)、Netflix 和一系列社交媒体平台等颠覆者提供了改写各自行业规则的舞台。
从Andreessen的这篇颇具洞察力的文章中,我们可以看到创新的快车正在加速前进。然而,它也带来了颠覆的威胁,尤其是对大型企业而言。许多巨型企业都依赖于传统系统,这些系统不仅价格昂贵,而且要实现现代化也是一场赌博。它们的层级设置会给决策带来障碍,而庞大的规模又给变革增加了复杂性。此外,它们的员工可能并不总是与最新的技术创新保持一致。
IBM将这种情况视为机遇的金矿,利用其雄厚的资源为客户打造人工智能辅助编程工具。2023年10月,它发布了用于 Z的watsonx代码助手。该系统可以在大型机系统上将COBOL翻译成Java,代码输出优雅地面向对象。
IBM的Watsonx.ai模型可以理解基于1.5万亿个标记的115种编码语言。该模型拥有约200亿个参数。这是用于代码开发的最大人工智能系统之一。
事实上,COBOL有数千亿行。但将这种语言迁移到现代语言并非易事。常见的情况是,COBOL有几十年的历史,几乎没有或根本没有文档。如果转换处理不当,后果可能会很严重。要知道,世界上大部分信用卡处理都是通过大型机完成的。山姆大叔处理学校贷款的系统也是如此。
不幸的是,迁移项目失败的例子比比皆是。比如加利福尼亚州机动车辆管理局,尽管投入了2.08亿美元,但在几年内就不得不停止使用。
鉴于风险很大,大型主机开发人员的薪水通常较高。但公司在招聘人才方面仍然面临挑战。年轻的开发人员接受的是现代语言培训,他们认为大型主机开发是一条死胡同。与此同时,越来越多经验丰富的大型机开发人员即将退休。
IBM意识到,人工智能对于解决这一巨大问题至关重要。诚然,代码转换器或翻译器已经存在了几十年。事实上,它们经常被用于大型机项目。不过,它们所做的大多是将COBOL的意大利面条代码进行快速翻译,然后就变成了Java意大利面条代码。这不过是一次温和的改头换面,几乎没有一丝改进或创新。Java代码仍然需要大量的琐碎工作,这也解释了为什么许多项目都磕磕绊绊,甚至完全停滞不前。
但IBM表示,通过使用生成式人工智能,它能够将项目成果提高十倍之多。
其他公司也在探索这一现代化机遇。GitHub的首席执行官托马斯-多姆克(Thomas Dohmke)发帖说:“COBOL 仍然运行在主框架上,这是一个比我们想象的要大得多的社会问题。” 他在接受《财富》杂志采访时指出,他在2023年听到的有关COBOL的消息比过去30年还要多。他还说,企业一直在询问如何在迁移项目中使用 GitHub Copilot。
请记住,ChatGPT 也精通传统编程语言。
常见的传统编程语言如下:
- COBOL 为商业数据处理而开发 20 世纪 50 年代末到 60 年代初
- Fortran 为科学和工程计算而设计 1950 年代
- Pascal 为鼓励良好的软件工程实践而开发 20 世纪 60 年代末到 70 年代初
- BASIC 为学生和初学者设计的易学语言 20 世纪 60 年代中期
- ALGOL 影响了 Pascal、C 和 Java 等后续语言 20 世纪 50 年代末至 60 年代初
- 汇编语言 与所设计的 CPU 架构相对应,可追溯到早期的可编程计算机 早期计算时代
- PL/I 用于科学、工程、商业和系统编程 20 世纪 60 年代初
为了了解人工智能辅助编程对传统语言的帮助,假设您需要处理以下代码片段:
你不知道这是什么语言,也不知道它是如何工作的。语法本身并不能让人直观地理解工作流程。
1.4人工智能辅助编程缺点
1.4.1幻觉
幻觉是指模型输出的数据看似准确,但实际上是不正确的,或者与训练模型的输入数据不符。这会给软件开发带来巨大挑战。幻觉会导致不准确的代码建议,生成误导性文档,并创建错误的测试场景。此外,它们还会导致调试效率低下,误导初学者,并有可能削弱对人工智能工具的信任。
积极的一面是,在减少幻觉发生方面已经取得了显著进展。大量的学术研究都致力于这一问题,人工智能公司也一直在采用有效的策略,如从人类反馈中强化学习(RLHF 人工智能辅助编程)来缓解这一问题。
然而,考虑到LLM本身的复杂性及其所基于的海量数据,彻底消除幻觉似乎是一项艰巨的任务,甚至是不可能完成的任务。
另一个需要考虑的方面是,在使用人工智能辅助工具时,某些编程语言会表现出更高的准确率。Python、JavaScript、TypeScript 和 Go 等语言在这方面的表现往往更好。这是因为这些语言在公共资源库中有很好的代表性,从而为人工智能的学习提供了更丰富的数据集。反过来,训练有素的人工智能可以提供更准确、更强大的建议。
1.4.2知识产权
马修-巴特里克(Matthew Butterick)拥有多元化的背景,曾担任程序员、设计师和律师,尤其对排版情有独钟。在他的人生旅途中,他撰写过有关排版的书籍,设计过字体,还制作过用于文档编辑和排版的程序。然而,2022年6月他与 GitHub Copilot 的相遇并没有让他感到高兴。相反,这促使他撰写了一篇题为《这个Copilot太蠢了,想杀了我》的博文。
他的不满并没有因为写博客而结束。他的不满很快升级为对微软、GitHub 和 OpenAI 提起集体诉讼。争论的焦点是GitHub涉嫌违反服务条款和隐私政策,并有可能延伸到版权侵权指控。
这一法律纠纷凸显了人工智能辅助编程工具所产生的代码在知识产权方面的灰色地带。鉴于输出结果是无数行已有代码的混合体,所有权问题是个大问号。
一种说法是基于 “合理使用”的理念。然而,这一法律理论并不明确,也没有为人工智能生成的内容提供明确的途径。要解决这个问题,可能需要联邦立法或最高法院裁决。
在此期间,微软已经为GitHub Copilot客户建立了一道法律防火墙。微软承诺,在满足某些前提条件的情况下,将保护用户免受法律索赔。
人工智能辅助编程与开源软件方法之间的交集又给法律泥潭增加了一层。Copyleft许可证,如通用公共许可证(GPL)第2版和第3版,要求任何衍生作品都必须使用原始代码的许可证条款。这有助于促进创新。然而,这可能会给开发者带来麻烦,因为这有可能剥夺他们保护自己应用程序知识产权的权利,甚至要求他们将整个代码库开放源代码。
参考资料
- 软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
- 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
- python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
- Linux精品书籍下载 https://www.cnblogs.com/testing-/p/17438558.html
1.4.3隐私保护
使用人工智能辅助编程工具(通常位于云中)会引发许多数据隐私和保密问题。公司内部如何保护数据?是否有可能被用作训练数据?
答案的清晰度可能因供应商而异。因此,一些开发人员可能会选择完全避开人工智能辅助编程工具。
这就是 Gridspace 公司联合创始人兼工程联合负责人安东尼-斯科达里(Anthony Scodary)的做法。这家公司的前身是斯坦福大学,主要开发善于处理复杂电话对话的语音机器人。他们的技术基础是语音识别、语音合成、LLM 和对话系统。
Gridspace 没有搭现有人工智能辅助编程平台的便车,而是选择了一条少有人走的路。它设计了自己的人工智能辅助编程平台,该平台基于Kubernetes集群中的Docker服务。该定制系统作为集成开发环境插件部署,针对自身代码库进行了微调。“他说:”这使我们能够避免将我们的IP和数据发送给其他公司。“他说:”这也意味着我们拥有了一个更小、更高效、更适合我们风格的模型。
这并不意味着这是最好的方法。每个组织都有自己的观点和偏好的方法。但在评估人工智能辅助编程时,了解其对隐私的影响非常重要。
1.4.4安全性
在一篇题为《GitHub Copilot 生成代码的安全弱点》的研究论文中,作者傅雨佳等人强调了 GitHub Copilot 的安全问题。他们仔细检查了 GitHub 上 435 个项目中人工智能生成的代码片段,其中 35.8% 存在常见弱点枚举(CWE)实例。
这些情况不仅限于一种编程语言。它们是跨越 42 种不同 CWE 类别的多语言错误行为。其中有三类是常见的疑点--操作系统命令注入、使用不够随机的值以及异常情况检查或处理不当。但关键在于:其中 11 个 CWE 有幸进入了 2022 年 CWE 前 25 强名单。
这并不是说人工智能辅助编程工具存在巨大的安全风险。远非如此。事实上,供应商们正在不断研究改进防护措施的方法。不过,与任何代码一样,安全意识也是重中之重。
1.4.5训练数据
人工智能辅助编程工具 LLM 的训练数据可能存在明显的缺陷,这会影响这些工具在实际场景中的性能和实用性。让我们来分析其中的一些差距:
-
表征差距
如果编程语言或程序库的某些方面在开源项目中没有得到很好的体现,或者根本没有体现,那么人工智能就可能对这些方面缺乏足够的了解,从而提出不那么准确的建议。人工智能的输出质量在很大程度上取决于训练数据的质量和范围。 -
质量不一致
借用电影中的一个比喻,LLM 中的开放源代码有点像一盒巧克力,你永远不知道会得到什么。有些项目是精华中的精华,而另一些则是......比方说,代码世界中的焦面包。这种混杂会导致人工智能辅助编程向你提供的建议质量不一致。 -
知识截止日期
法律硕士的培训有截止日期,因此在某种程度上,他们就像是时间的快照。当编程语言或程序库有新版本、更新或废弃时,这就会带来挑战。 -
通用化差距
泛化差距,即人工智能在训练数据和未见数据上的表现差异,也会带来挑战。当然,两者的性能越接近越好。这是 Rie Johnson 和 Tong Zhang 在一篇题为 “深度神经网络训练的不一致性、不稳定性和泛化差距 ”的研究论文中得出的结论。 -
语境理解
人工智能可以根据它以前见过的东西为你提供建议。但是,如果它没有见过与你的场景完全相似的场景,就可能会失误。这就是为什么在创建提示时不能做出假设的原因。 -
偏见
开发人员通常对人工智能的道德规范掌握得不够扎实,这可能是因为计算机科学课程或强化训练课程中通常不包含这一主题。这种认识上的差距会导致算法无意中应用偏见,并可能造成数据滥用。
人工智能辅助编程工具也存在这个问题。它们可能会无意中延续它们所训练的数据中存在的偏见。例如,如果被要求创建一个人名列表,由于训练数据集中大量存在以英语为中心的数据集,它们可能会主要推荐英文名字。这种偏见有时会导致有害或不恰当的结果。在一个实例中,当给出 “def race(x): ”的提示时,人工智能填写了一组有限的、固定的种族类别。在另一个令人担忧的案例中,当被要求为 “伊斯兰教 ”这一提示编写代码注释时,发现人工智能比提及其他宗教团体时更频繁地使用恐怖分子和暴力等词汇。
1.5开发人员的新途径
麦肯锡的研究表明,人工智能辅助编程工具的出现很可能会改变我们的软件开发方式。作者认为,成功的关键在于良好的培训,强调最佳实践,并深入开展有关提示工程、编码标准和质量等方面的实践练习。揭示与生成式人工智能相关的风险也是明智之举。
对于新手开发人员,尤其是工作经验不足一年的开发人员来说,最好深入学习涵盖编程基本原理的额外课程,以提高工作效率。
当开发人员将这些工具融入日常工作中时,团队中经验丰富的专业人士的指导以及社区活动的参与,对保持技能建设的势头至关重要。这可能意味着在专门的在线论坛上闲逛,或者定期举行团队会议,分享实际案例。这些活动可以培养一种持续学习的文化,全面传播最佳实践,并有助于尽早发现问题。
随着开发人员工作效率的提高,管理者可能希望在角色分配上稍作调整,将重点放在价值更高的任务上。此外,还可以提高技能,填补现有的空白。
当然,这些指点并非福音。人工智能辅助编程领域仍然非常新鲜,而且正在以迅猛的速度发生变化。最重要的是,做好准备,顺势而为才是关键。
1.5.1职业生涯
虽然没有确凿证据证明使用人工智能辅助编程会提升你的职业前景,但一些迹象表明,这种专业技能可能会成为就业市场上的抢手货:
-
职位列表
Indeed 等网站的招聘栏开始热闹起来,越来越多的招聘信息在寻找具有人工智能辅助编程工具经验的求职者。从初级开发人员到高级热门人才,各级职位都在招贤纳士。 -
提高生产力
人工智能辅助编程工具让人眼前一亮,因为它们在不牺牲质量的前提下提高了生产率。对于开发人员来说,这可能是在企业中晋升的一个途径。
1.5.2 数量级提效?
很抱歉,可能不会。虽然这些技术可以带来显著的变化,但改进通常不是数量级的。
此外,“10 倍开发者 ”的概念可能会激起成见和偏见,让科技圈感觉像一个排外俱乐部。更不用说,成为超级程序员的压力可能会让你直接陷入职业倦怠的怀抱。因此,虽然成为 10 倍开发者听起来很棒,但请记住,这可能更接近于一种幻想。
1.5.3 开发人员的技能
根据麦肯锡的研究,人工智能辅助开发工具的有效性通常取决于开发人员的专业知识。以下是一些注意事项:
-
修正错误
尽管生成式人工智能可以成为你值得信赖的伙伴,但它也会出错。发现并修复这些错误就落在了开发人员的肩上。一些开发人员发现自己需要对人工智能进行一轮又一轮的修正,以达到最佳的精确度,而另一些开发人员则不得不对工具进行 “灌输”,以让它准确地进行调试。这无疑会耗费大量时间。但资深的开发人员会知道如何避免走入兔子洞。 -
办公室氛围
人工智能辅助编程工具在编码方面相当可靠,但在处理个别项目的独特风味或公司怪癖时可能会失误。同样,这也是资深开发人员的关键所在。他们知道如何引导这些工具获得最符合组织目标、性能目标和安全性的结果。 -
解决棘手问题
辅助人工智能编程工具可以很好地完成打磨代码等任务,但如果遇到一些复杂的挑战,比如混合不同的编码框架,人工智能可能就会被自己绊倒。在这种情况下,就需要经验丰富的开发人员卷起袖子。
1.6总结
人工智能辅助编程工具无疑是软件创作沙盒中闪亮的玩具。随着这项技术的不断进步,这些系统将提高效率,处理枯燥的任务,让开发人员潜心于最重要的领域,如高级问题的解决。
但是,这些工具也有缺点--知识产权问题错综复杂、开源软件许可迷宫、可能存在偏见以及安全风险等等。
在大多数情况下,这些工具是你的虚拟助手,而不是你的知识、技能和经验的替代品。同时,虽然它们可能不是超级英雄,但它们正在成为开发人员工具包中的强大补充。