自从有了AI,用AI写代码,替代这个替代那个的论调就越来越多了,给人的感觉是程序员很不值钱——确实啊,要是值钱怎么能叫“码农”呢!我自己编程水平有限,平时也大量用AI写代码,所以我应该是AI的受益者而不是受害者,是AI让我变得更值钱了。但是我也觉得,AI替代一切、低代码开发这类论调,言过其实。与其考虑AI能替代什么,不如考虑作为开发者,最不能被AI替代的东西是什么。
首先我觉得第一个层级的不可替代性,是判断力。众所周知,现有的AI模型是一个黑箱。我们在数学上可以通过严密的逻辑推导,证明一个命题的真假。但是据我了解,AI模型是通过概率推算的方式,得到一种“最可能的结果”。固然这个正确率会很高,但是即便是99.99%,也是和逻辑推导有本质区别的。“像”和“是”是完全不同的两个概念。所以AI如果按照现在的这种模型进行发展,那永远都可能出现错误的结果。这时候只能依赖开发者进行判断。
一些重复性的工作、简单的工作、答案很明确的工作,确实没必要身体力行。直接交给AI就能做,而且说不定还是最佳实践。但是不写不代表不会看。双手解放出来,大脑还得工作。这就像AI写小说,本质上,我脑子里想好一个情节和中心思想,交给AI,它就能帮我完成一部小说。只是文笔和细节上会很差,但是我相信它会越来越好。前提是我自己首先是一个懂文学的人,不然我怎么判断他写的符不符合要求呢?写代码同理,开发者可以不关心AI的实现方式,但是起码要清楚它的意图,能看到全局。这就要求开发者具备高水平的判断力。
但是一些极力推崇Vibe Coding而贬低开发者的人,恰恰没有认识到这一点,所以他们认为程序员没有必要存在,自己不会编程也可以做出好的产品。实际上他们也落入了一个经济学概率的陷阱,那就是他们在做的实际上不是真正的开发,而是一种商业投机或管理,这是完全不同的两个领域。他们所做的实际上只是雇人帮他们写代码做了一个产品,只是员工是按token计费的便宜的AI模型。而程序员却要对代码的整体质量负责,还要关注DevOps等等方面的问题,这些事情没有一定的开发知识是完全无法解决的。
一开始人们打孔;嫌打孔太慢,就写汇编;嫌汇编太慢,就写高级语言……今天有人说打孔的人很蠢、写汇编的人很蠢,但是当时的硬件条件和需求就是那样。会打孔的人肯定会汇编,会汇编的人肯定会高级语言。一言以蔽之,工具的高级性掩盖不了它的工具性。来来回回折腾到今天,发现贯通“古今”的核心能力,还是判断力和系统思维能力,这是真正属于人的主体能力。
将来的AI或许也会出现这种能力,那时候人类的思维想必也会来到更高的一个层次,思考一些我们今天想象不到且将来的AI也不能思考的问题。
这就将我们引入第二个层级的不可替代性,那就是元认知的能力。我们总是在考虑AI替代程序员,可曾设想,我们发明计算机是为了解决问题,将来即便AI真的替代了程序员,我们的问题却不完全需要由计算机来解决?虽然计算机神乎其技,但是推而放诸人类历史,它也只是一个重大事物。将来会不会有超级计算机、超超级计算机,乃至全新的计算形态?那时候现有的AI还能处理这些事务吗?考虑到这些问题,我们说,那么好,AI替代程序员,就让它替代吧,因为我们有更深奥的问题要研究。
程序员——或者更广义的计算机科学研究者——在我不成熟的思考下,至少有这样两个不可替代性,其实也就是进化性。