最近ChatGPT引发了AI写代码的热潮。很多人在讨论AI会写代码了,程序员要大规模失业了,那么,AI到底会不会写代码?
先说结论:AI目前还不会写代码。以后会不会,不好说,但肯定不是写Java代码,也不是C++代码,也不是任何高级语言代码。
为什么这么说,咱还是举例子。
就拿前端常见的网页布局来说,现在越来越多的网站支持响应式布局,啥意思呢?就是你屏幕宽,多显示点内容,屏幕窄,看到的内容自动变细长条。
随便找个网站,就微博吧,把浏览器拉大,正常显示:
把浏览器拉小到一定程度,得,右边栏消失了:
再继续缩小,LOGO只剩图标了,能不显示文字的地方都省了:
实际上这种响应式布局就是把屏幕宽度像素按576px、768px、992px以及1200px划分为xs(Extra Small)、sm(Small)、md(Medium)、lg(Large)、xl(Extra Large)等规格, 不同的规格对应不同的CSS布局,这样就实现了响应式布局。
如果是AI来实现响应式布局,它应该怎么做?
它不需要按照正常前端开发人员的思维去定义这几种规格。
我们想想,如果划分更细点,比如0~100px,100~200px,200~300px,300~576px,……是不是会有更精细的布局?然而定义100种屏幕规格,就需要编写100套布局,但人类开发人员无法同时掌控这么多布局,这意味着大量的精细调整和巨大的工作量。
然而AI可以。如果屏幕分辨率最高是1920px,那么AI完全可以定义1920种布局,反正对它来说5种、50种和1920种都是一样的,花费0.00001秒和0.01秒没有区别,因此,AI可以直接拿到一个屏幕大小值,然后根据该大小直接实现特定布局。
我们再继续深入讨论一下代码编写。对于人类来说,如果代码长度超过1000行,则很难阅读并理解该代码的意图,必须拆分为更小的函数。一个函数命名为createButton,另一个函数命名为setText,仅仅是便于人类记忆。对于AI来说,命名毫无意义,因为函数在内存里仅仅是个地址,AI知道0x80C4A5
是创建按钮的函数,0x1C07E2
是显示文字的函数,它不需要先定义名字,再由编译器分配地址,它可以直接分配地址。
类似的,高级语言的语法仅仅是为了便于人类理解。比如,把一个字符重复5次放入数组,不同的高级语言有不同的写法:
JavaScript写法:
Array(5).fill('A')
=> [ 'A', 'A', 'A', 'A', 'A' ]
Python写法:
['A' for i in range(5)]
=> ['A', 'A', 'A', 'A', 'A']
对于AI来说,定义这些语法是没有意义的,因为重复5次直接生成5条指令即可(此处不考虑实际指令集):
PUSH 'A'
PUSH 'A'
PUSH 'A'
PUSH 'A'
PUSH 'A'
下次要重复500次无非就是500条指令而已。
有人可能会觉得人类编写的代码是否更优化?简洁是肯定的,但论速度,肯定是AI生成的指令更快:没有判断,没有循环,顺序执行,完美贴合现代CPU的流水线,无非内存占用大了点。
可见,高级语言的本质是一组约定了语法的文本,它便于人类阅读和修改,并通过编译器生成并执行代码。而这些语法和编译器对于AI毫无意义,因为它本来就可以直接生成代码。
AI写代码,它根本不需要人类为了方便人类自己开发的各种高级语言、编译器、自动化脚本等工具链。
《流浪地球》里的550超级AI,它生成操作系统并不需要先生成C语言再编译,因为给人类看C语言的代码毫无意义。550生成的操作系统,就是一串0101...
的机器码。
总之,如果AI真的会写代码,而不是生成文本形式的高级语言代码来帮助人类减轻工作量,那么人类现有的编程不但毫无意义,人类本身有没有意义都应该认真讨论了,人类文明也正式进化为AI文明。