加载中...

本篇要回答的问题:从一堆没人看得懂的 0101,到能反复修改迭代的程序,中间发生了什么?"程序员"这个职业是怎么诞生的?

上一讲解剖了地基冯·诺依曼体系。本讲沿大厦往上爬第一步——聊编程语言的起点。程序是计算机的灵魂;指令序列的可能性无穷,程序的可能性就无穷。那么软件工程师最初是怎么写程序的?

编程的史前时代

第一门面向程序员的语言出现前,人们只能理解 CPU 指令的二进制表示,把程序以二进制数据刻录到存储(ROM 或硬盘)上。

史前时代的特征 后果
想法要先翻译成比特、再刻录 表达极其困难,修改迭代更难
软硬件边界模糊 写程序还涉及硬件电气操作
还不存在"程序员"这个职业 写程序不是纯软件行为

为解决编程效率,汇编语言(+ 编译器)诞生:编译器把汇编程序翻译成 CPU 指令序列,保存到外置存储。一条汇编指令基本与一条 CPU 指令一一对应

与机器对话

汇编的出现是分水岭——它让编程成为纯软件行为,"程序员"这个分工的标志由此诞生。汇编做的核心优化,全是用**文本符号(symbol)**替代物理细节:

用符号表达 替代了什么 解放了什么
指令助记符(如 add CPU 指令的二进制 不用背 0101
变量名(variable) 内存物理地址 不用关注数据放在哪
函数名(function) 函数地址(CPU 里函数只有地址没有名字) 复用机器指令的扩展
标签(label) 跳转目标地址(jmp/je/jne 专注逻辑而非跳转地址

本质:汇编在指令能力上和机器指令并无二致,它只是把人从物理硬件地址中解脱出来,专注于程序逻辑的表达。但这一步解放的生产力是惊人的——毕竟没人愿意用 0101 表达思想。

可自我迭代的计算机

本专栏目的不是还原真实历史,而是从架构设计角度想:若信息科技一切尚不存在,怎样从工程上高效完成从 0 到 1 的构建?

最早的输入输出不是键盘+显示器,而是打孔卡 + 打印机

IBM 制造的打孔卡

设想第一台键盘+显示器的现代计算机出现后,一个最小功能集的 ROM 启动程序该刻上什么?本质是要实现一个最小化的、计算能力可自我迭代的计算机

没有操作系统时 BIOS 应包含 作用
键盘、显示器驱动 基础交互
外置存储设备驱动 读写程序
汇编编辑器 读取/修改/保存汇编代码
汇编编译器 把汇编编译成机器代码
执行外置存储中机器代码的能力 运行程序

汇编语言的出现早于操作系统——操作系统的核心目标是软件治理,只有在需要管理很多任务时才需要它。

关键洞见:有了这个 BIOS,计算机就发展起存储能力——程序源代码可以迭代演进了。

计算机存储能力的重要性,如同人类发明了纸:纸让知识被存储、一代代传递并不断发扬光大;有了存储能力的计算机,软件程序也得以不断传承、演进。

总结

本讲回到编程的史前时代,回溯了编程语言诞生的历史。为了不再用 0101 表达思想,人们创造了汇编——这一步让编程成为纯软件行为,“程序员"由此诞生;再设计出 MVP 版"可自我迭代的计算机”,软件得以不断演进。

先把"是什么"回答清楚

概念 一句话说明
汇编语言 用文本符号替代物理地址,与机器指令一一对应
symbol 指令助记符 / 变量名 / 函数名 / 标签
BIOS 没有操作系统时的最小启动程序
可自我迭代的计算机 具备存储与编辑编译能力,源代码可迭代演进

一句话速记

汇编的能力等同机器码,价值在于把人从物理地址解放出来;而"可迭代的存储"之于软件,如同纸之于人类知识。

架构上的思考题

假设要实现一个最小化、计算能力可自我迭代的计算机,它的变化点和稳定点分别是什么?为此你会设计出哪些子系统,每个子系统的规格是什么?扩展性上有哪些考虑?

公告栏
这是我的个人知识库。
记录技术,也记录生活 —— 读过的、试过的、想明白的,都堆在这儿。
最新文章
网站资讯
文章数目 :
5
已运行时间 :
本站总字数 :
15.7k
本站访客数 :
本站总访问量 :
最后更新时间 :
全局知识图谱
当前页面 已访问 文章 标签
ESC 关闭 · 滚轮缩放 · 拖拽移动 · Ctrl+G 开关