AI本该助力新人,为何反而让高手更强?

“AI会不会彻底取代程序员?”类似的问题已经被问烂了,人们不断地尝试给出答案。虽然这个话题已经不新鲜,但我还是想分享一些自己的观察和思考。

起初,许多人都相信,未来公司会减少对高级工程师的依赖。毕竟,有了AI,初级程序员也能创造出高质量的代码——至少坊间流传的故事是这样的。然而现实却截然不同。AI并未如宣传中那样神奇,最终真正有效的组合,不是“新人 + AI”,而是“高手 + AI”。

为什么会这样?

我们来仔细看看,在代码编写上,AI到底哪里强、哪里弱。

AI擅长的事:

• 快速生成大量样板代码(boilerplate)和脚手架(scaffolding)。

• 自动化重复、枯燥的任务。

• 尝试多种不同的实现方式。

• 借助快速迭代,迅速验证想法。

• 在需求清晰的前提下,快速交付功能。

这些特性帮助了谁?显然更利于高级工程师。对新人来说,想把AI的这些能力真正变成实际价值,要难得多。

AI出问题的地方:

• 代码审查(Code review):

AI无法真正“理解”代码。审查时可能有些帮助,但一旦涉及边缘情况(edge cases)——而AI生成的代码通常有更多边缘情况——最终还是需要资深工程师出马。

• 不好的指令(Bad prompts):

能写出高质量提示词的人,必须是那些真正懂得自己要做什么的人。如果使用者缺乏深入理解,即使AI看起来产出还行,实际也只是给项目埋下了无数隐患。

• 架构设计(Architecture):

没有扎实的架构,软件很快就会失去价值。当前AI并不擅长设计优秀架构,虽然表面上看起来似乎可以,但实际上,这种复杂推理仍然依赖人类。许多以弱架构起步的项目,最终深陷技术债(technical debt)泥潭。

• 代码质量(Code quality):

选择恰当的抽象层次、正确运用设计模式、保持代码的干净清晰,这些都是AI目前的短板。

• 安全性(Security):

新手搭配AI的组合更容易出现漏洞,就像盖一座房子忘了装门锁。虽说漏洞无处不在,但高级工程师至少能提高警觉和谨慎。

• 错误学习(Wrong learning):

新人如果不能正确判断AI产出的代码好坏,就会潜移默化地吸收错误知识。在公司里,这意味着制造的是损害而非价值。

以上这些问题,概括起来就是:AI暂时对高级工程师并没有威胁,甚至反而让他们更加强大。这里不是在批评新人,而是强调不应对他们抱有不切实际的期望,把他们扔到充满风险的环境中。

我们真正该如何用AI?

• 快速原型开发(Fast prototyping):

想快速尝试新想法时,AI再适合不过。

• 加速重复任务(Speeding up routines):

AI最重要的用途,就是自动化那些你已经非常熟悉并经常重复的工作。

• 跨领域协作(Multi-disciplinary work):

AI可以弥补你知识上的短板,建议有用的函数库或方法,帮你快速连接不同领域的知识点。

• 功能测试(Function tests):

简单重复、风险较低的测试代码,AI可以帮你快速生成,并且容易进行人工复核。

从我的角度来看,这就是AI目前的现状。AI写的每一行代码,我们依然需要逐行审阅。它远远称不上完美:没有自我意识,只会模仿人类的推理,生成结果不可控(non-deterministic),所以我们才依靠确定性的东西,比如单元测试。可是,你真的放心让AI自己编写测试,来验证它自己的代码吗?

我想起我曾发过的一条推特,有个提示词可以让AI在“不懂时回答‘我不知道’”,我评论道:“即使AI回答‘我不知道’,你也不能确定它到底知不知道自己不知道。”

确实,“新人 + AI”的模式很诱人,看起来成本低廉,还迎合了人们“AI将抢走我们工作”的恐惧。但当你把软件开发和其他行业作比较,就会发现软件行业仍然不够成熟。在建筑行业,建筑师专注于设计;但在软件领域,即使是“架构师”,也仍在不断地亲手“砌砖”,编写底层代码。我们还远没有实现真正的分工和专长化,成本优先的思维主导市场,这只会贬低工作价值,让人疲惫不堪。

因此,AI目前非但没有让编程变得更加民主化,反而更集中地将能力交给了那些资深工程师。现实与预期产生了错位。未来会如何发展,谁也说不准。我对AI的长期发展依然乐观,但短期内,我们最好重新校准自己的期待,别再让不切实际的想法越走越偏了。

原文链接:https://elma.dev/notes/ai-makes-seniors-stronger