《编程范式的血泪史:这些年我们踩过的坑》
今天我要讲点不一样的编程世界观。咱们程序员有三座大山:
- 结构化编程(军训式编程)
- 面向对象编程(乐高式编程)
- 函数式编程(佛系编程)
这些范式说白了就是代码界的"交通规则"。它们不给你发新车,反而给你的破拖拉机装上限速器——专门告诉你哪些骚操作不能玩!
而且我敢打赌,这辈子都不会有第四座大山了。不信往下看。
军训式编程(结构化编程)
很久很久以前,有个叫Dijkstra的编程老法师发现:程序员写的代码就像宿舍脏袜子,堆着堆着就臭不可闻。于是他搬来了数学证明这把尚方宝剑:
- 先证明小代码块绝对靠谱
- 像拼乐高一样组装成大代码块
- 只要拼接正确,整体就稳如老狗
重点来了!老法师发现某些goto语句就像教室后门的逃课通道,会让代码逻辑变成一团乱麻。
但有些goto其实就相当于现在的if/else和while循环。
于是他一拍大腿:把那些妖艳的goto统统封杀!这就是结构化编程的真相。
简单说:禁用goto,只用if/else和while = 结构化编程。
看,这哪是给你新能力?明明是没收你的作案工具!
乐高式编程(面向对象OOP)
OOP说白了就是把函数调用时的临时小仓库(栈帧)变成永久储物柜(堆内存)。于是:
- 函数 → 升级成类构造函数
- 局部变量 → 变身对象属性
- 嵌套函数 → 进化成方法
划重点:OOP没发明多态,只是给野路子套上紧箍咒!
☯️ 佛系编程(函数式FP)
FP的核心就一句话:万物皆永恒!变量一旦出生就不能改,要"变"就只能生个新的。这样:
- 线程安全?自动达成!
- 死锁?不存在的!
- 数据竞赛?想吵都吵不起来!
- Java的final/record
- TypeScript的readonly
- Rust默认不可变
- Kotlin的val/var区分
范式进化论看出规律了吗?
编程范式就是不断给我们戴枷锁:
- 结构化:没收goto
- OOP:没收函数指针
- FP:没收变量改写权
这50年我们终于明白:真正的自由不是为所欲为,而是知道哪些坑不能踩!
所以第四范式?不存在的!goto/指针/赋值都禁完了,难道要禁止写代码吗?
(注:所有范式在1970年代前就出道了,之后都是排列组合)