公众号旧文
计算机世界的复杂性只是规模的幻觉
计算机显然是一个极其复杂的世界。
有无数语言、框架、协议、软件、系统。
- Python 和 C 完全不同
- Linux 和 Windows 完全不同
- 浏览器和数据库完全不同
- Docker 和 Nginx 完全不同
但计算机本质上只在做两件事:抽象与还原。
所有复杂系统,最终都会不断坍缩成少数几个核心结构。
一、从编程世界开始坍缩
所有人学编程时,都会先接触:
if
for
while
function
游戏引擎很复杂,Web 网站很复杂,AI 还是很复杂。
但无论多复杂的软件,最终都逃不过三种基础结构:
顺序(Sequence)
选择(Selection)
循环(Iteration)
这就是经典的结构化程序设计。
例如:
顺序
a = 1
b = 2
c = a + b
程序一步一步执行。
选择
if score > 60:
print("pass")
else:
print("fail")
程序开始判断。
循环
while True:
work()
程序开始重复。
你会发现,无论是聊天软件,还是游戏,又或者数据库和浏览器。
最终都只是:
执行
判断
重复
在不断嵌套。
复杂软件,只是规模更大的组合。
二、函数,只是折叠复杂度
后来程序员又发明了 函数(function)
函数并没有创造新的计算能力。
它只是把一段复杂逻辑折叠起来。
于是:
send_message()
背后可能有:
- 网络
- 加密
- IO
- 序列化
但对外看,就只剩一个名字。
这就是抽象。
三、操作系统也在做同样的事情
操作系统世界,也在发生同样的坍缩。
表面上:
- nginx
- Python
- Docker
- sshd
千差万别。
但到了 Linux 内核系统调用层(syscall)后,整个世界开始收缩。
四、Linux 世界的坍缩
所有程序,最终都会不断变成:
文件操作
open
read
write
close
进程操作
clone
execve
exit
wait4
网络操作
socket
connect
send
recv
内存操作
mmap
brk
mprotect
于是浏览器、数据库、容器、Shell,这些看似完全不同的东西,最终都只是一群 syscall 的排列组合。
五、从程序继续还原
比如你写:
print("hello")
你以为只是打印一句话。
但实际上它会一路向下坍缩。
第一层:Python
Python 解释器处理:
print()
第二层:C 标准库
最终调用:
write()
第三层:系统调用
进入:
sys_write
第四层:Linux 内核
内核找到:
stdout
对应的 tty。
第五层:驱动
tty driver 开始处理字符。
第六层:硬件
CPU 开始:
- 写寄存器
- 操作缓冲区
- 发送中断
第七层:电子世界
最后,一切又会还原成电压变化、晶体管开关、电子流动。
六、抽象与还原,是同一个过程
计算机最神奇的地方就在这里:
人类不断向上抽象,计算机不断向下还原。
七、真正的复杂,不在规则
最后你会发现:
计算机世界真正复杂的,从来不是基础规则。
因为基础规则少得惊人。
真正复杂的是规模。
就像:
- DNA 规则不复杂
- 神经元规则不复杂
- 晶体管规则不复杂
但当数量巨大后,复杂性就涌现出来了。
所以很多真正学懂计算机的人,最后都会有一种感觉:
整个数字世界,本质上只是极少数简单规则,在无穷递归地组合自己。