一、最早的程序员,真的是在“操作机器”
10110000 01100001机器下一步应该做什么?
MOV AX, BXADD AX, 1
解决复杂问题,不一定要让人变得越来越像机器,也可以在机器之上建立一个新的抽象层。
二、高级语言出现:程序员第一次开始远离机器
total = price * quantity;数据怎么从 A 地址搬到 B 地址?
我要计算订单金额。
每当底层复杂度被封装起来,人类就可以开始解决更上一层的问题。
三、面向对象和设计模式:复杂的已经不再是机器,而是软件本身
如何让一个人能够理解几十万行,甚至几百万行代码?
如何控制复杂度。
四、DDD:软件工程开始真正面对“现实世界”
createOrder()把程序员的注意力,从代码结构进一步推向业务世界本身。
这个类应该怎么设计?
这个业务世界到底应该怎么被理解?
五、微服务:技术边界,本质上开始追随业务边界
如何把一个过于复杂的系统,拆成若干人能够独立理解和演进的部分?
控制代码复杂度↓控制系统复杂度↓控制业务复杂度
六、AI Coding:抽象层又一次发生跃迁
calculate_discount(user, order)“给会员系统增加一个支持等级权益和过期续费的能力,并补齐测试。”
人的意图↓设计↓代码↓编译器↓机器
人的意图↓领域模型 / 约束↓AI↓代码↓机器
如果 AI 越来越擅长实现,那么软件工程师还负责什么?
七、软件工程师的第一性原理:不是写代码,而是管理复杂度
不断建立更好的抽象,管理越来越大的复杂度,并最终解决现实世界的问题。
面对一个混乱的世界,建立一个足够简单、又足够准确的模型。
写在最后
理解复杂世界,建立抽象,然后让机器替我们解决问题。
夜雨聆风