软件的第一性原理
速览
本文从第一性原理探讨软件的基本构建块和底层逻辑,分析其核心设计原则。这种思考方式有助于理解软件的抽象与实现之间的关系,对软件开发实践具有指导意义。
AI 深度解读
背景
当我们使用智能手机或笔记本电脑时,很容易忘记其底层物理现实的荒谬之处。在那无缝体验的背后,凝聚了物理学家、化学家、数学家、工程师、程序员和设计师数百年的努力。设备内部是一块经过近乎完美提纯并刻有微观电路的岩石切片。通过控制这些电路中电子的流动,我们能令岩石为我们计算、记忆和思考,从而节省脑力劳动。一次操作耗时不足一纳秒,让你在眨眼间就能完成数十亿次计算。这一切如此天衣无缝,作为用户,我们无需面对所有复杂性,只需专注于手头的任务。
然而,尽管我们可以忽略底层的工作原理,但随着软件主导我们生活的方方面面,这一点变得越来越困难。事实上,数字世界现在对我们日常决策的影响丝毫不亚于物理世界。正如我们学习物理或生物基础来理解物理环境一样,理解软件已成为驾驭数字环境的关键。缺乏这种基本素养,我们就有可能被设计来攫取时间和注意力的系统被动管理或利用,这些系统会利用我们因不了解其工作原理而产生的焦虑。而拥有这种理解和清晰的认知,我们就能获得更好的能力:更好地使用技术、对数字安全做出明智的决策,甚至为自身特定需求构建软件。
本文的目标是剥离软件和计算机中的“魔法”,表明理解其工作原理并非计算机科学学位才能享有的特权。为此,我会尽量避免使用专业术语,只引入必要的概念,并运用第一性原理思维逐步构建。在引擎盖下,计算并非枯燥的技术规格列表,而是一个关于人类 ingenuity 和实际问题解决的迷人故事,每一层新的抽象都建立在前一层之上。跟随这个故事,你可以构建清晰的思维模型,更清楚地了解使用设备时后台发生了什么。你不仅能理解技术如何运作,还能看到内置的隐形安全防护措施。我尽量使本文简洁,只保留必要的历史背景,以展示这些思想是如何形成的。
核心内容
操纵物理世界来完成数学计算
世界上大多数问题解决都涉及数学计算,无论是预测天气、计算飞机航线,还是检查桥梁的结构完整性。最初,“计算机”只是一屋子手动执行这些计算的数学家,有些计算需要数天时间。在战争和太空竞赛期间,赌注更高了:计算弹道导弹和太空火箭的轨迹需要求解数千个复杂方程。即使一个微小的误差也可能导致火箭爆炸、导弹偏离目标或桥梁倒塌,因此这些计算必须反复验证。这个过程非常缓慢、昂贵且容易出错。
迫切需要一种能够可靠且快速地执行计算的机器。科学家们寻找可以模拟计数的物理过程,早期的尝试之一是机械计算器,由互锁的齿轮和杠杆构成。但它自身也有问题:机械部件会随时间磨损、需要持续维护,而且本质上速度很慢。
下面的模拟器演示了机械计算器的基本构建块:一排编号的轮子,每个数位一个(百位、十位、个位),就像汽车里的里程表。加1会使个位轮向前转动一位数字。当它从9翻转到0时,一个进位销会接合,并将十位轮向前推一位。如果十位轮本身也在9,它自己的进位销也会接合,以同样的动作拖动百位轮——每个通过进位销啮合的轮子一起转动。注意,这些轮子并不像普通齿轮那样持续接触(那样会迫使它们以相同速度旋转);进位销只在每转十次的那个短暂瞬间伸入并接合下一个轮子。我们可以通过增加更多的轮子来支持更大的数字,也可以想象通过改变旋转方向或添加更多机械部件来进行其他计算。
真正的飞跃是从机械部件转向电力,使用电子开关作为基本构建块。这里说的不是家中的物理电灯开关,而是通过施加电压自动控制的开关。一个电子开关有两种状态:断开(无电流,表示0或false)和闭合(有电流,表示1或true)。
通过以不同方式将这些开关连接在一起,我们可以进行逻辑决策。最基本的配置称为逻辑门:
- AND 门(串联):如果将两个开关一前一后放置,只有开关 A 且 开关 B 都闭合时,电流才会流过。
- OR 门(并联):如果将两个开关并排放置,只要开关 A 或 开关 B 闭合,电流就会流过。
- NOT 门:一种设计为“常闭”(默认允许电流通过)的开关,只有当对其施加电压时才断开并切断电流。
我们可以使用这三种门的组合来构建任何逻辑规则,无论多复杂。将任何逻辑规则想象成一个表格,将输入组合映射到输出(ON 或 OFF)。要用硬件重建这个表格,我们只需关注那些输出为 ON 的行。
要为任何 ON 行构建电路,我们使用一个 AND 门来检测该精确输入组合。如果某行中某个输入应为 OFF,则先将其通过 NOT 门。这会将 OFF 信号翻转为 ON,满足 AND 门的要求(AND 门只有在所有输入均为 ON 时才触发)。最后,由于整体输出在符合第一个目标组合 或 第二个组合时应为 ON,我们将所有行检测 AND 门的输出送入一个 OR 门。
因为每个逻辑规则都可以表示为表格,并且任何表格都可以用这种方法构建,所以 AND、OR、NOT 三者在数学上是完备的——能够表示任何可以想象的逻辑规则。
为了演示,下面的模拟器构建了 XOR(异或)规则,它只在输入不同时输出 ON。正如我们将在下一节看到的,这正是执行二进制加法所需的逻辑。
由于开关只有两种状态,我们无法用通常的十位数字(0到9)来表示数字。相反,我们使用二进制(基数为2),它完全依赖0和1(每一位称为一个 bit,即二进制数字的缩写)。
二进制计数的工作原理与机械齿轮计数器完全相同,但只有两个数字。在我们熟悉的十进制(基数为10)系统中,加1会迫使从9滚到0并产生一个进位,形成10。在二进制(基数为2)中,由于1是最高数字,加1会立即从1滚到0并产生进位。1 + 1 写作 10(代表十进制数2)。
为了看到这些开关如何执行数学运算,让我们看看两个单比特数 A 和 B 相加时会发生什么:
- 0 + 0 = 和 0,进位 0
- 0 + 1 = 和 1,进位 0
- 1 + 0 = 和 1,进位 0
- 1 + 1 = 和 0,进位 1
注意模式:
- 和位仅在只有一个输入为 ON 时为
1(即两个输入不同)。这正是 XOR(异或)门的行为。 - 进位位仅在两个输入都为 ON 时为
1。这正是 AND 门的行为。
下面的模拟器将你刚刚构建的 XOR 电路与一个 AND 门连接起来,组成这个半加器:切换 A 和 B,观察和位与进位位如何一起更新。
(原文至此被截断,后续内容涉及更复杂的加法器构建,但核心原理已清楚呈现。)
关键要点
- 计算机的底层是物理实在:经过提纯的硅片和微电路,通过控制电子流动实现计算,一次操作仅需纳秒级。
- 早期计算依赖机械部件(如齿轮计数器),但机械方式存在速度慢、易磨损等局限。
- 电子开关(晶体管)替代机械部件后,计算速度与可靠性大幅提升。开关有两个状态(开/关),对应二进制位 0 和 1。
- 三种基本逻辑门(AND、OR、NOT)在数学上是完备的:任何逻辑规则都可以通过组合这三种门来实现。具体方法是:将规则表示为真值表,针对每个输出为真的行,用 AND 检测该组合(若输入为假则先取反),最后用 OR 聚合所有行的结果。
- 二进制加法中,半加器由 XOR 门(计算和位)和 AND 门(计算进位位)构成,可以直接用逻辑门实现数学运算。
- 理解这些基础原理并非计算机科学专业专属,任何人都可以通过第一性原理思维剥去“魔法”,获得对数字世界的掌控力。
意义与影响
本文以第一性原理的方式,从物理基础开始逐步演示了计算机如何从简单的开关演变为能够执行复杂逻辑运算的设备。其核心意义在于:
- 赋权用户:当
