三座编程大山剥夺了你的编码自由


《编程范式的血泪史:这些年我们踩过的坑》
今天我要讲点不一样的编程世界观。咱们程序员有三座大山:
  1. 结构化编程(军训式编程)
  2. 面向对象编程(乐高式编程)
  3. 函数式编程(佛系编程)

这些范式说白了就是代码界的"交通规则"。它们不给你发新车,反而给你的破拖拉机装上限速器——专门告诉你哪些骚操作不能玩!

而且我敢打赌,这辈子都不会有第四座大山了。不信往下看。

军训式编程(结构化编程)
很久很久以前,有个叫Dijkstra的编程老法师发现:程序员写的代码就像宿舍脏袜子,堆着堆着就臭不可闻。于是他搬来了数学证明这把尚方宝剑:

  1. 先证明小代码块绝对靠谱
  2. 像拼乐高一样组装成大代码块
  3. 只要拼接正确,整体就稳如老狗

重点来了!老法师发现某些goto语句就像教室后门的逃课通道,会让代码逻辑变成一团乱麻。
但有些goto其实就相当于现在的if/else和while循环。

于是他一拍大腿:把那些妖艳的goto统统封杀!这就是结构化编程的真相。

简单说:禁用goto,只用if/else和while = 结构化编程。
看,这哪是给你新能力?明明是没收你的作案工具!

乐高式编程(面向对象OOP)
OOP说白了就是把函数调用时的临时小仓库(栈帧)变成永久储物柜(堆内存)。于是:

  • 函数 → 升级成类构造函数
  • 局部变量 → 变身对象属性
  • 嵌套函数 → 进化成方法
虽然OOP常吹什么"模拟现实世界"三大法宝(封装继承多态),但其实这些在C语言就能玩。


划重点:OOP没发明多态,只是给野路子套上紧箍咒!

☯️ 佛系编程(函数式FP)
FP的核心就一句话:万物皆永恒!变量一旦出生就不能改,要"变"就只能生个新的。这样:

  • 线程安全?自动达成!
  • 死锁?不存在的!
  • 数据竞赛?想吵都吵不起来!
虽然纯FP语言(Haskell)像修仙,但现代语言都偷师FP:
  • Java的final/record
  • TypeScript的readonly
  • Rust默认不可变
  • Kotlin的val/var区分
最佳实践比如事件溯源(Event Sourcing),其实就是把FP"数据不可变"的思想用到架构设计。

范式进化论看出规律了吗?
编程范式就是不断给我们戴枷锁:

  1. 结构化:没收goto
  2. OOP:没收函数指针
  3. FP:没收变量改写权

这50年我们终于明白:真正的自由不是为所欲为,而是知道哪些坑不能踩!
所以第四范式?不存在的!goto/指针/赋值都禁完了,难道要禁止写代码吗?
(注:所有范式在1970年代前就出道了,之后都是排列组合)