程序员惶恐?GPTs 大火,AI 编程不会成为主流?
近年来大火的 AI 编程,无疑是受到了 ChatGPT 的影响,特别是在 OpenAI 的新一届开发者大会上推出的全新 GPTs ,让人只需要动动嘴皮子就可以构建属于自己的独特应用。发布会过后,宛如雨后春笋般地冒出了 2000 多个 GPTs 应用,就是此事最好的证明。
那么,我们可以尝试讨论一下,AI 编程或者说自然语言编程有望成为未来主流的编程方式吗?
先说结论,我认为不太可能。因为自然语言的最大缺点就是它的准确性不够,无法描述过于复杂的逻辑。
编程本身是一个建模的过程,更准确点说,是用计算机的算力来建模的过程。而程序(Programming)就是“通过计算机的算力来构造具体问题的解决模型”。
自然语言本身,就像是一些更粗糙、更“大块”的建筑材料,不能搭建起一个精细的模型,因为它的语义有太多模糊,含义更不确定,对于很多逻辑的表达太过繁琐,对于复杂的编程任务,自然语言编程没有办法提供足够的精确控制和灵活性。
我们可以以下面一个编程的例子,来说明自然语言编程和纯代码编程的区别和局限性。
比如我们要创建一个任务: 编写一个程序,计算从 1 到 10 的所有整数之和。
在自然语言中, 你可能会这样表达这个任务:“计算 1 到 10 的数字之和。” 这个指令简单、直观,但它留下了一些歧义。比如,它没有明确指出要使用哪种编程语言,也没有指定求和的方法(是用循环还是数学公式?),这可能导致自然语言解析引擎在转换为实际代码时产生误解或错误。
而用代码编程会怎样?这里以 python 为例:
这段代码使用了 Python 编程语言,通过一个明确的 for
循环来累加从 1 到 10 的所有整数,并打印出结果。它具有高度的精确性和明确性,没有留下歧义的空间。
在这个例子中,传统的代码编程提供了更明确、精确的控制方式。程序员需要明确指定每一步的操作和逻辑,因此最终的代码完全符合预期行为。而自然语言编程虽然在表达上更加简洁、直观,但由于其高度概括和可能的歧义性,它可能在转换为实际的代码时产生误差,特别是在复杂的逻辑处理上。
之所以存在这种差别,是因为信息压缩中存在一个基本原理:在进行数据或信息压缩时,通常很难(或不可能)保持百分百的原始内容或意义。
简单说,就是一串信息不太可能在被压缩的同时保证百分之百的原义
自然语言的高度概括性的特点,既是它的优点,也是它的缺点,因此我们不太可能完全通过自然语言编程的方式来完成编程,而只是将其作为一种辅助手段,来提高编程的效率。因此,在需要高度精确性和复杂逻辑表达的场合,传统的代码编程仍然具有不可替代的优势。
那么,编程作为一种已经存在 70 多年的人机交互方式,就没有其他更有效率还不会降低信息量的压缩方式吗?
图形化编程就有可能实现这个愿望,这里的“图形化编程”不是像 Scratch 那样专门提供给儿童的编程玩具,而是比较成熟、稳定的专业编程方式,比如国外的 Outsystems、Mendix,国内的 iVX 牛刀等,更通俗易懂的说法可能是“低代码”。
仔细研究后,我发现它们的编程方式很有特点,它们不同于自然语言编程,可以做到无损压缩语义,只是将偶然复杂度降低,自身是通过封装不同的功能,来实现少写代码、甚至是不写代码的方式实现编码。通俗的说,就是将某个功能模块完整打包好,需要的时候直接调用。
当然,这种方式也有弊端,比如你功能模块实现的颗粒度越大,你的灵活性就越小,而要实现这种颗粒度较小的封装方式,对厂商的技术要求就很高,这也是低代码发展至今,只有少数几个厂商表现较为亮眼的原因,比如说上述的 Outsystems、Mendix, iVX 等至少在这方面做了有十几年,才有现在这个水平。
我认为,图形化的编程方式,相较于自然语言编程,更贴近编程的本质,因为它需要构建逻辑和组件,进行完整具体的逻辑表达,这是自然语言编程永远达不到的精度。
另一方面,图形化的编程方式降低了写代码的要求和门槛,从效率和理解难度上是一种更优的表达方式。最近几十年来,文本编程从最初代的 0101110 这种二进制模式,经过一代代程序大佬的改造,逐步从汇编的低级语言转向 Java、C++、JavaScript、python、C#等这种适用于不同场景的高级语言,整体上,编程语言的发展在向着一个“抽象程度更高、代码量更少、学习难度更低、开发效率更高”的方向上演进。
因此,我认为未来的编程方式,自然语言编程会成为一种辅助形式,而以低代码为主的图形化编程有望成为未来编程的主流方式,同时,纯代码编程也会继续以不同的姿态活跃在社会中。
未来的低代码和纯代码,可能就会像现在的视频和书本一样,虽然都是承载信息的载体,但是更简单、更通俗易懂的媒体形式会成为主流(如短视频),而信息密度更高、阅读难度更大的书本将继续存在,只是地位相对小众,成为一种更专有的、定制化的表达方式。
评论