一个月前,GitHub CEO Thomas Dohmke 为自家的 AI 辅助编码工具GitHub Copilot X 站台,在全球网络峰会现场,亲自下场体验了一把,最终用 18 分钟编写出了一款贪吃蛇游戏。
整个编码过程速度之快,似有让人人成为“10 倍开发者”的趋势。
不过,近日,Twitter 上一名技术人分享了他监督的一个事件,即拥有 19 年编码经验、会 100% 手写代码的程序员最终败给一位仅有 4 年经验、却善用 Copilot、GPT-4 的后辈,后因不愿拒绝使用辅助代码工具,只想写可控的代码,惨遭面试淘汰,而后者轻松拿到了全职 Offer。
当「拒绝使用 Copilot、GPT-4 等编码工具,即使有多年编码经验,还是会被淘汰」这样太过绝对性的后果照进现实时,引发不少程序员热议——编码是否可以作为衡量程序员的唯一标准?辅助编程工具对于当代程序员而言,究竟是可选项还是必选?凭什么拒绝使用 AI 辅助代码编程工具后,经验丰富的程序员就没有了优势?它是否真的能够提升效率?
透过这一事件,本文也邀请了几位一线的开发者来谈一谈。
事情起因于一位名叫 Ab Advany 的技术人在 Twitter 上的分享,两周前,他帮助在代理机构的一个朋友去监督一个项目,期间聘请两名程序员来创建最简可行性产品(Minimum viable product,简称 MVP)。
他和两位程序员都有过合作,所以也知道他们相应的背景:
其中一位是来自德国的 Alex。平时会 100% 的手写代码。19 年的编码经验。
另一位是巴基斯坦的 Hamid。他擅长编写代码,也会使用 Copilot、GPT-4 辅助代码工具,以及无代码开发。拥有 4 年的开发经验。
让他们各自去创建 MVP,你觉得会发生什么。
需要提前注明的是,这两位程序员都收到了 Figma 详细的规格说明。另有一位设计师协助他们提供所需的资产,还有一些需要整合的现有代码。
一周时间之后,先来看看善用 AI 辅助编程工具的 Hamid 的情况。
Hamid 率先完成了 MVP 的第一个版本,以及完成 100% 的代码测试覆盖率和无代码部分的端到端测试。整体来看,MVP 的 95% 工作似乎已经完成,甚至乍一看这款产品可以工作......
具体来看,Hamid 先是借助无代码应用程序开发平台 Bubble 构建了 UI 和前端,使用 GPT-4 生成 Cloudflare Workers,使用 Copilot 集成现有代码,并使用 GPT-4 (playwright/ava) 生成测试。
整体成本:
GPT-4:211 美元
Copilot:20 美元
Cloudflare:5 美元
无代码平台 Bubble:134 美元
薪酬:2460 美元(工作 41 小时)
托管/运行成本:139 美元/月
与之形成对比的是,手敲代码、拥有 19 年开发经验的 Alex 的最新进展:
Alex 一周共计完成了大约 7% 的任务。
整体成本:
托管服务 Vercel:20 美元
薪酬:3500 美元
估计用于开发所有内容:45,000 美元。并预计 11,000 美元用于添加测试。
托管/运行成本:20 美元/月
起初,Ab Advany 和他的朋友都认为 Hamid 会在 8-10 周内完成 MVP 的构建,而 Alex 会多花一两周,但结果让他们都感到吃惊。
带着这样的结果,Ab Advany 的朋友与 Alex 进行了交谈。
不过,Alex 坚持认为,运行自己开发的这个应用程序会便宜得多,而且一切都可以在掌控之中。
Ab Advany 则在 Twitter 上点评道,”Alex 不理解产品发布速度慢 13 倍和开发成本高 25 倍之中蕴藏的机会成本。“
最终因为只想自己”手动编码“而不信任无代码/AI,Alex 被解雇了。
Ab Advany 表示:
”我朋友的开发机构有 100 多个像 Alex 这样的开发人员。现在他要用 Hamid 这样的开发人员重新培训或替换他们......
我认为像 Hamid 这样的人五年后仍将有工作,而像 Alex 这样的人将不得不寻找其他工作/职业。你怎么认为?“
对于这一观点性言论,随即便有开发者表达了不满,称:“如果把编码能力和效率作为衡量一个程序员的标准,那么首先就错了。实际上,完成代码是业务成功中最不重要的部分。对于代码,迭代很重要。而迭代对于商业成功又很重要。公司应该找一位已经知道这些权衡的工程师,而不是复制粘贴者。事实上,当世界上的 Hamids 接管 AI 的 MVP 时,公司对工程师的需求只会更大。”
针对这一事件,CSDN AI 研发总监范飞龙表示,Hamid 的成本一般是得由公司承担的,分摊到个人没那么多。按理来说,Alex 作为程序员,一般也不会拒绝使用工具,毕竟程序员都是使用工具解决问题的。在两种程序员都有工具的时候,Alex 的生产力可能是 10x,Hamid 生产力可能只有 1.5x,差距还是巨大的。
这也引发了许很多人好奇,为什么 Alex 就是不能学学使用 Copilot、ChatGPT 这些工具呢,明明是加分项。
作为这一事件观察者的 Ab Advany,在 Twitter 解释其中的原因:
一是,当前的 AI 有上下文限制。因此,要使其工作,开发者需要进行函数式编程。
二是,你需要保持代码的可读性,即使是初级程序员也能理解它(即使它正在做的事情非常复杂)。
这让许多高级程序员的编程变得乏味。他们喜欢复杂的代码,会使用 100 种模式。
因此,他们不愿放弃挑战高难度的代码,也不愿使用 AI 辅助编程工具走“捷径”。而作为商业化公司而言,在权衡是录用快速开发、与时俱进还是稳扎稳打、出高质量代码的新老程序员方面,往往会选择前者。
那么,放眼国内开发环境中,一线资深开发者是否也会抗拒 Copilot、GPT-4 这类的 AI 工具?在生产环境中,AI 辅助编程工具真的能提升效率吗?带着这几个问题,我们问了问身边的开发者们。
问:你是否会在编程过程中使用 Copilot、GPT-4 等辅助编程工具?
他们这样说:只要能够负担得起,必须要去尝试一下;虽然担忧过数据安全问题,但是并没有完全地抗拒,而是小心试探,再到深入使用。
CSDN AI 研发总监范飞龙:程序员群体是一个不断创造先进的工具,使用先进工具通过编程等工作解决问题的一个群体。AI 工具,包括 Copilot、ChatGPT、GPT-4 本身也是先进工具,在有条件使用的场景肯定会用来辅助编程。具体是否使用 Copilot、ChatGPT、GPT-4 取决于工具的价格在工作环境和个人环境下是否能承担得起。目前,个人用 ChatGPT 比较多,有条件的情况下,这些都希望尝试。
资深开发者苏洋(https://github.com/soulteary):之前顾虑数据安全一直使用和推荐自动补全的编码插件 Tabnine 来做本地离线代码补全,全面转 Copilot 其实是这半年的事情。尤其是 OpenAI ChatGPT 推出之后,GitHub Copilot 的演进速度和用户期待值都涨得非常快。
目前多数还没有使用的同学顾虑的数据安全问题,早期用户踩坑都踩过了,官方去年年底也正式推出了商业版本的。所以,我现在不仅会用这类的工具,也会推荐身边的朋友用,可以偷不少懒。
问:会在业余项目中使用,还是会在生产环境中使用?
苏洋:最开始,我只在 side project(业余项目、副业、小项目)中使用,因为我的 side project 比较多,所以很快验证差不多了,就不分环境和项目都用了。
不过,纯离线环境,我还是会使用 Tabnine 做一些基础补全,使用了两三年,喂出了 1G 的本地模型,直接扔掉,还是比较可惜的。
范飞龙:AI 编程工具作为辅助工具,并不存在在生产/业余环境下使用的问题。我个人的话,只要 AI 编程工具能辅助编程过程中的问题解决,都会使用的。但是使用目标会有所不同:
在生产环境下主要以解决工作目标为主,例如写代码:
某个辅助函数的编写,这种 GPT 技术已经可以很方便地合成;
某个常用的代码片段例子,以往需要搜索的场景,直接让 GPT 合成后程序员再调整后集成到项目中;
某种需要多个类编写的场景,是一种常见的套路,可以让 GPT 合成脚手架再修改;
某些算法问题,经过抽象后,将描述告诉 GPT 输入和输出,要求过程包含的步骤,AI 可以合成足够好用的实现;
做一些重构工作等。
需要说明的是,现代 IDE 本身也支持上述操作的各种场景,只不过 AI 编程工具可以做得更智能。
但是程序员解决问题中更多的时间是花在诊断问题上,这种时候不是直接的写代码工作,而是分析工作,此时如果利用 GPT,需要的能力是,将问题抽象成问题之间关系的描述,再用这样的描述问 GPT,让 GPT 揭示可能的问题,辅助程序员诊断问题,这也是一种常见的场景。
在业余环境中使用,则适用的场景广很多:
学习 GPT 已经训练过的知识,但是个体还未熟悉的「新的旧知识」,通过 GPT 可以有几十倍的掌握新知识和技能的效率,从这个角度来说,主动学习能力的人使用 GPT 会有极大的放大效应。
通过 GPT 的专家能力系统而深入的掌握日常不怎么操作但是感兴趣的领域,这会改变人才的知识结构,成为复合型人才过程中的学习机会成本会被极大的降低。
其他更多,我们说动手能力重要,新工具的使用也体现这点:不要等,有什么新工具就立刻拥抱使用它,先进工具就是先进的生产力。
问:作为亲身实践者,Copilot、GPT-4 辅助编程工具真的能提升效率吗?
苏洋:目前的版本答案,显然是:Yes!
而且,并不仅限于工作,对于编程学习来说,Copilot 和 ChatGPT 都是好老师,尤其是最近推出还在小规模测试范围的 Copilot Chat,只要你有问题,模型就会耐心的帮助你、辅导你纠正代码、改进代码,甚至教你如何运行代码。而且水平下限极高,上限取决于你选择的代码块和打开的文件和问题的关联性(上下文),以及你提问的清晰程度。
我日常中还会高频的用它来完成单元测试,原本枯燥,但是非常重要的一个环境,有自动补全之后,极其省心和放心。
范飞龙:辅助编程工具能提升效率,但是对于不同的人有着不同的效果:
初学者:可以极大的提高学习效率,前提是 Ta 能便利地随时可以使用工具,以及有主动使用工具学习的意识。工具一开始可能起到的还有吸引效应:还可以这样?
成长期:但是知识是有掌握成本的,并非所有初学者的进步都会一样,和其他所有方向一样,在这个过程中真正喜欢做编程这个工作的人,可以进一步通过辅助编程工具提高效率。但是理解和掌握知识和技能,还是要靠扎实的原理学习,否则会有「每一个字都认识,放在一起就不认识」的效果,那么再好的工具也帮不了。
成熟期:即使进入 AI 编程时代,具体工作还是需要解决各种具体的问题,对于组合爆炸的编程现实,核心还是要有靠谱的人来解决问题。工具可以极大地提高效率,但是解决问题通常是分层的,机器解决越来越多的自动化,但是中/高层的问题还是要靠人来分析、计划、执行、测试、形成反馈循环。
总的来说,编程辅助工具能提高效率。但是通过编程创造软件,通过软件提供产品和服务,解决用户的问题,软件获得成功,编程辅助解决问题是其中一环,作为职业工程师要看到全局。
问:有人说,“也许人工智能会帮助你工作。但更有可能的是,你会为 AI 工作。”一方面,正如上文所述,当前的 AI 有上下文限制,要让代码在生产环境中工作,我们需要进行函数式编程。另一方面,AI 生成的代码,安全性存疑。你怎么看?
范飞龙:目前,使用 AI 辅助编程,还是要靠人的经验来对代码「负责」,你可以越来越多的将生成具体代码的“低阶”工作交给 AI,但是理解代码做了什么,是否是人想要的,这是人要负责的。一般来说,中/高阶程序员的经验、知识和技能需要足以对 AI 生成的代码理解、识别和判定。
事实上,可能会有某些允许出错或者出错没什么代价的场景,AI 自动来做决定,但是目前这个比率还是很低的,我们可以期待 AI 编程的持续进化。
我认为,AI 编程释放了一部分“低阶”的编程工作,同时也会创造出一部分新的”编程“工作。
苏洋:对于安全顾虑,感觉大可不必,目前还只是初期,还会有很多变化,包括产品形态,后续可能的分工模式,开发协作模式。
个人觉得开放心态,接受它,用好它就行了。作为一个从初中开始 coding,目前码龄快满二十年的人来说,如果我能够从一开始入门就有这个神器,将能够节约至少 60% 的时间。
最后,要说 Alex 这样经验丰富的老程序员被善用 AI 辅助编程工具的新程序员取代掉,未免言之尚早。与其说 Alex 败给了 Hamid 的效率,倒不如说适应新技术的不灵活性才是他被替代的关键原因。
参考:https://twitter.com/advany/status/1664451798793584642
本文来自微信公众号 “CSDN”(ID:CSDNnews),作者:屠敏,36氪经授权发布。