-- AI 率 0% -- 考虑一个软件系统是如何构建和迭代的,它可以被抽象为以下的一个 Loop: 需求建模 A->代码编写 A->需求反馈 A->需求建模 B->代码编写 B->需求反馈 B...... 那么,我们如何定义一个完美的系统?给定系统 S ,用户需求的形式化描述为 R,对于所有针对系统的动作 A 的反馈,其不确定性都为 0(预期返回正确),这里可以用条件熵来表示:∑H(R|S(A_i)) = 0 。
而需求反馈本身则扮演了优化函数的作用,它的作用本身是引导条件熵 ∑H 向 0 优化,优化的过程则是降低各个流程的不确定性。编程语言的演化,本质上是不断提高抽象程度,把越来越多的实现细节从程序员转移给编译器,编程语言是一种对于信息的 encoder 。
现代语言使程序员用更少的描述表达所需行为,并把更多实现选择交给系统,失去了对底层代码的控制,引入了更多的不确定性(信息熵)。如果要加强对底层的控制,则需要用更底层的语言和更长的描述长度降低不确定性。
即便是 AI Coding 也无法违背信息论的规律。程序员对系统的描述越短,系统的不确定性就更高,无法通过建立一个万能的预测器无尽地压缩描述来无损地描述系统本身,其存在一个理论下界,也就是柯氏复杂度; 这一点在需求建模流程也广泛存在着,用户的需求往往是在多轮迭代、描述、交互中产生的,需求方依旧是人,那么需求拆解、编写是一个无法避免的过程。
回过头来表达我的观点: 1.把复杂需求的实现寄希望于许愿式编程是不现实的,消除需求的不确定性和编码的不确定性是一个永恒的问题 2.AI Coding 时代,程序员可能会消失,但软件工程不会因为代码生成变得廉价而消失,反而会更重要。