本文经授权转载宝玉老师的个人博客(微博@宝玉xp ),链 接https://baoyu.io/translations/ai/three-types-of-ai-assisted-programmers

责编 | 夏萌
出处 | baoyu.io

人工智能赞助轨范员的三种类型_代码_开辟者 智能助手

图片来源:Alexandra Francis

2023 年初,人们创造像 ChatGPT 这样的大措辞模型 (LLM) 能够编写高质量的代码片段,这在 LinkedIn 上引发了不少热议,许多人误以为这意味着再也不须要那些技能娴熟、态度挑剔、薪水高昂的资深开拓者了,只要有互联网,任何人都可以让 AI 模型来编写下一个热门社交媒体运用,还得用 JavaScript 编写,顺便加上一些区块链技能。

但是,那些承诺中完备由 AI 打造的运用程序大潮并没有真正呈现。
对付这个结果,虽然在某种程度上证明了我的意见,但我只管即便不去表现出幸灾乐祸的态度。

只管如此,将 AI 作为编程工具仍具有吸引力。
代码实质上是面向打算机的措辞,它有限且明确的词汇和严格的语法规则,以模式和重复为根本。
正是这种可预测性,让打算机(以及像我这样的一些人)与之相容。
如果说有谁能写出好代码,那非打算机莫属。
如果天生式 AI 最善于的是仿照和仿制这些模式,从而构建人机之间的流畅接口——正如我此前所述——那么编程无疑是它的空想运用处景。

话虽如此,AI 驱动的编程工具已在编程领域引起了不小的轰动,并且看起来它们不会很快消逝。
然而,不论是对付低级、中级、高等工程师,还是那些贯串衔接构体和墙洞都分不清的人,AI 带来的风险与收益完备取决于个人的履历水平。
AI 可能是你职业生涯的助推器,也可能成为你奇迹道路上的绊脚石。
关键在于不仅要用,更要会用。

让我们一起探索 AI 对付各个阶段的开拓者(以及非开拓者)意味着什么。

无代码创业新潮流

今年,很多人通过与 ChatGPT 的互动,初次体验到编程的魅力。
这种体验极具吸引力:你可以让 ChatGPT 用任何主流编程措辞为你编写运用程序,它能够输出足够编写一个标准教程运用程序的代码量。
在此根本上,你还可以哀求它进行修正和除错,直到你对成品感到满意。
当你将这些代码粘贴进集成开拓环境(IDE),看到它们竟然能够运行,这种觉得就像你揭开了全体行业的神秘面纱。

这种乐不雅观的初体验背后,实在隐蔽着一些问题。
AI 工具是基于成千上万个不同质量和完全性的真实项目代码演习而成的,这意味着这些代码常日能运行,大多数情形下也能完成任务,但偶尔才会真正可靠、易于掩护、安全或无缺点。

研究显示,ChatGPT、GitHub Copilot 和 Amazon CodeWhisperer 这类工具输出的代码在“运行无误”方面的表现约为 90%,在单元测试的通过率大约在 30% 到 65%,而在“安全性”方面的表现约为 60%。
值得一提的是,这些研究是基于履历丰富的工程师编写的精确提示进行的。
提示中细微的说话变革就可能导致代码输出的巨大差异。
而且,这些测试只涉及 AI 输出的大略代码“片段”。
至于 AI 编写像均匀遗留运用程序那样繁芜的运用程序的能力,目前还没有干系数据
事实上,就像 ChatGPT 难以撰写一部完全连贯的小说一样,AI 在这方面可能也无能为力。

那么,对付那些不懂编程的人,AI 可以扮演什么角色呢?

有些人可能认为 AI 在编程领域的运用并不实际。
AI 依赖编程的观点在软件界引发了广泛谈论。
一名程序员实质上该当节制编程技巧。
如果连基本的 if 语句都写不出,还能自称程序员吗?但这种不雅观点忽略了一个重点:像 if 语句这样的编程逻辑,并非上风,而是一种包袱。
空想的代码是完备没有代码的状态,其次才是能办理用户问题的最简代码。
如果有可能不编写任何代码就能构建高品质的运用,那自然没有问题。

但遗憾的是,这目前还不可能,而且可能永久不会实现。
代码,实质上,便是对需求的精确描述。
如果你的 AI 提示足够精准以天生精确的代码,那么你实际上已经在编程了。
但 AI 存在不愿定性;它不总是对同一输入产生相同的输出,这里涉及到一定的随机性。
因此,即便是符合编码标准的提示,也可能是不可预测的代码。
在花费大量韶光细化流程后,最不肯望碰着的便是不可预测性。
长期依赖 AI 提示进行编程的人终极会渴望更直接、更有构造、更稳定的编程办法——他们会渴望利用编程措辞和编译器。

我预测,AI 将成为未来一些程序员的“启蒙工具”。
但它还有一个更主要的用场,这点每每被忽略。

在很多情形下,我们不须要完全的软件,只须要一些代码。
其他行业的专业职员已经在利用 AI 来编写一次性的 SQL 查询和 VBA 宏。
AI 还可以用来创建运用原型、命令行上的观点验证事情流,或是一次性的数据抓取工具。
如果你须要专业的软件办理方案,自然还是要找软件开拓专家。
但如果你只须要一些临时的代码,且能接管一些不完善之处,那么利用 AI 考试测验一下也无妨。

终极,这将不可避免地增加程序员的事情包袱。
AI 在将创意转化为初步方案的过程中发挥着桥梁浸染,这将匆匆使更多处于早期阶段的软件公司呈现。
当这些初创公司进入市场时,他们会创造(有时是在非常紧急的情形下)须要招募工程师加入团队。
但值得把稳的是,对付那些最初资源和资金较为匮乏的公司来说,能够达到这样的发展阶段本身就解释 AI 已经成功地完成了它的义务。

低级工程师的寻衅与机遇

对付新伎俩式员来说,AI 工具既是一种寻衅,也蕴藏着巨大的机遇。

每位低级开拓者在首份事情中都难免感到手足无措,好比学了一年的多邻国后溘然搬到西班牙生活,要花上几个月乃至更永劫光才能适应。
现实中的运用程序与大学末了一年编写的编译器或编程演习营中的展示项目截然不同,它们的深度和繁芜度远远超出你的想象,而且哀求也更为严格。
要记住所有规则,通过资深开拓职员的代码审查彷佛是一个艰巨的任务。

在这种情形下,低级开拓者可能会被诱惑去利用 ChatGPT 来减轻事情压力。
在开始的时候,他们可能能够侥幸成功。
正如之前谈论的,AI 工具在处理根本任务上表现良好,这总比一筹莫展要好。
更主要的是,它们不会让你面对一片空缺和闪烁的光标。

然而,依赖 AI 代码工具终极会有代价。
最大的风险在于,过分依赖这些工具的开拓者可能永久难以成为真正精良的程序员。
如果开拓者习气于利用代码天生器,并且只依赖外部反馈(如代码审查、集成测试、缺点报告等)来创造问题,他们将很难真正理解自己的代码。
这种做法终极会揠苗助长,乃至让工资难。
每个生产运用中都存在关键缺点、潜在的安全漏洞、技能债务等问题,只有真正理解代码的人才能办理。

对付低级开拓职员来说,最安全的选择是阔别 AI 工具。
但这并不是唯一的出路。
如果你用 AI 来匆匆进理解,而不是大略规避问题,它不会成为你的阻碍。

比如,假设你刚写完一个函数,感到有些不愿定。
你反复阅读,修正了一些格式问题,但仍以为它可能不足高效或不足隧道。
在联系同事或提交代码审查之前,你可以考试测验用 AI 得到另一种视角:见告 AI 你的目的,让它写出一个函数,并将其代码与你的进行比较。

要明白,天生式 AI (Generative AI) 实质上是尽可能平庸的,它的输出不可盲目相信。
这项练习的目的不在于直接为你供应更优的代码,而是在于匆匆使你自我反思。
有时候,AI 会用到你可能忘却的标准方法,这有助于更好地表示你的意图。
比如,AI 可能只用一个循环就完成了你须要两个嵌套循环才能处理的数据集。
当然,它也可能没供应什么新颖有趣的东西;如果是这样,那你大概没有遗漏什么主要的点。

此外,当你在某些语法或编程模式上碰着难题时,可以让 AI 天生一些例子帮助理解。
比如,你对空合并运算符 (-coalescing operators) 还不太清楚,就可以让 AI 展示一些详细的利用场景。
虽然天生的代码质量可能不高,但大量的例子是学习的关键。
例如,你在研究适配器模式 (adapter pattern)时,若找不到 Dart 措辞的示例,可以哀求 AI 展示一下。
虽然结果可能只是中规中矩,但详细的示例本身便是一种宝贵的学习资源。

只管如此,你还是该当尽可能地通过官方文档、亲手编写的代码、编程博客和 Stack Overflow 的回答来学习。
毕竟,AI 供应的信息有可能完备缺点。
但如果一段次优的、定制化的代码片段能够帮助你进入下一个学习阶段,那么 AI 无疑是一个很好的赞助工具。

资深工程师

作为一名资深工程师,你或许不会被利用人工智能代替根本技能的想法所吸引,由于你已经节制了这些技能。
可能你乃至不太乐意利用 AI,这是完备可以理解的——选择不该用某一工具并没有错。

很多人好奇,对付履历丰富的开拓者而言,天生式 AI 究竟有什么浸染。
毕竟它有时候产出的是无用之物,有时虽然能写出可用的代码,但质量并不如你亲自编写的。
为何要将事情交给一个表现更差的工具呢?解答这个疑问,我们须要明确自己与 AI 之间的分界。
即便在最佳状态,AI 写出的代码精确实行的几率也只有五成旁边,而且险些无法精确地表达代码在全体运用程序中的浸染。
没错,AI 并不善于编写代码,但它的上风在于速率极快。
这便是你该当对它的期望。
AI 卖力迅速完成任务,而你的职责是确保质量。

编辑和重构代码常日比从头编写来得快速(虽然不总是如此)。
我曾参与 GitHub Copilot 的测试,在个人电脑上进行条约事情时利用它,创造它显著提升了我的开拓速率。
当然,它对我的代码的准确性或可掩护性并无帮助,毕竟那不是它的职责所在。
但是通过供应我大约一半韶光都能利用(只管须要大幅修正)的代码,它在整体上节约了很多韶光。
按小时计费时,韶光节省并不那么主要,但如果你是固定薪资,它可以使你少花韶光在编写常规代码上,而将更多精力投入到开拓流程、代码质量、文档编写等让软件更可持续的方面。

你须要避免的陷阱是利用 AI 来提高事情速率,即交付更多而不是更好的功能。
即便是最精良的团队,事情速率也是一个不切实际、不可靠的指标,人类的表现并不总是同等,AI 的表现则更加不稳定。
如果你让周围人期待你能利用 AI 工具提升开拓速率,你会创造它无法持续保持这样的速率。
AI 在某些任务上表现出色,但在其他任务上却无能为力。
虽然它常日能帮你提速,但很多时候你还是须要自己动脑筋办理问题。

我们再次面临一个界线问题。
AI 的核心在于提速。
如果你把 AI 节省下来的韶光再投入到加速上,而非提升质量,那你就摧残浪费蹂躏了自己作为开拓者的代价。
AI 懂得若何节约韶光,而你懂得如何打造和构建精良的运用程序。

当你须要踏入不熟习的编程领域时,AI 也能供应帮助。
在我的日常事情中,我紧张编写 SQL、C# 和 TypeScript,但有时也须要编写 Groovy、MDX 或 KQL 的代码片段。
熟习一个新措辞至少须要几天韶光,而这紧张是语法上的问题。
像大多数资深开拓者一样,我能通过履历判断代码的好坏——措辞不是紧张的,构造才是关键——但要熟习如何声明常量或精确迭代数组还是须要韶光的。
当你走出自己的舒适区时,AI 可以帮助你更快达到目的。
一段快速天生的代码可能便是你所需,如果它只是临时性的。
如果不是,稍作打磨后,你仍旧可以处于领先位置。

AI 编程的未来展望

人们常说,天生式 AI 还处于初期阶段,并将随着韶光的推移而大幅度进步。
但这个不雅观点须要强有力的证据支持。
一位 OpenAI 工程师曾这样表示,大措辞模型 (LLM) 不过是对它们数据集的一种近似。
而对付这个数据集——全体互联网——我们最多只能希望它不会进一步恶化。
考虑到当前网络的勉励机制(SEO、内容营销、垃圾邮件和广告),它彷佛不太可能变得更好。

我最喜好的一种编程定义是“让打算机重复人类的缺点”。
在天生式 AI 中,这一点表现得尤为明显。
它的演习险些完备基于我们的缺点。
只要我们连续写开源代码让它学习,Copilot 和 CodeWhisperer 就会连续复制我们的缺点,逐渐趋向于完美的、空想的平庸。
AI 将成为宇宙中最普通的程序员,只管它的打字速率可以达到每分钟一千字。

你们中的一些人可能无论如何都不会雇佣一个平庸的程序员。
我对此表示理解。
但如果你的流程中可以融入一大量中等质量的代码,并且你对可能的陷阱保持当心,AI 就可以成为你团队工具箱中的一项强大工具。