序言
计算机是20世纪最伟大的科学技术发明之一。从第一台电子计算机ENIAC于1946年在美国宾夕法尼亚大学诞生至今,计算机技术经历了从电子管到晶体管、从集成电路到大规模集成电路、从单机到互联网、从桌面到云端的跨越式发展。如今,计算机的运行速度越来越快,功能越来越强大,形态也越来越丰富——从超级计算机到智能手机,从物联网设备到可穿戴装置,计算机已经渗透到人类社会的每一个角落。
然而,伴随技术进步的是日益增长的复杂性。计算机各个领域的书籍汗牛充栋,新技术层出不穷,更新换代的速度令人目不暇接。面对浩如烟海的知识,“该如何高效地学习计算机知识?“成为摆在每一位学习者面前必须优先思考的重要问题。对于这个问题,每个人都会有自己的回答。而本书给出的回答是:学习计算机底层的原理,以不变应万变。本书将分上、中、下三卷,共七十二篇(美其名曰“七十二变”),以简要、有趣的文字,由浅入深地讲解计算机的核心原理,并辅以Rust语言的实战代码,帮助读者在理解原理的同时掌握实践技能。
内容概要
全书分为三卷,每卷聚焦计算机科学的不同维度,层层递进,环环相扣:
上卷 数据与编码
上卷主要介绍常见的几种重要数据是如何通过编码构建计算机的数字化世界的。从最基本的数字、字符、字节出发,逐步扩展到时间、图片、条码、二维码、音频、视频等复杂数据类型,最终探讨序列化、网络协议和压缩算法等高级主题。上卷共十三章:
- 第一 数字:探索整数、浮点数在计算机中的表示方式,理解精度、溢出等核心概念。
- 第二 字符与编码:从ASCII到Unicode,从UTF-8到UTF-16,梳理字符编码的发展脉络。
- 第三 字节:字节是计算机存储的基本单位,深入理解字节序、字节操作及其应用。
- 第四 时间:时间的表示与存储,时间戳、时区、闰秒等问题的处理。
- 第五 图片:位图与矢量图,常见图像格式的编码原理与Rust中的图像处理。
- 第六 条码:一维条码的编码规则与识别原理。
- 第七 二维码:QR Code的编码机制、纠错能力与实际应用。
- 第八 音频:声音的数字化过程,采样、量化、编码与常见音频格式。
- 第九 视频:视频编码原理,帧、关键帧、压缩与主流视频标准。
- 第十 万物皆可编码:将编码思想推广到更广泛的领域,理解“一切皆可表示为数据“的哲学。
- 第十一 序列化与反序列化:数据持久化与跨系统传输的核心技术。
- 第十二 网络协议:HTTP、TCP/IP等协议的数据封装与解析。
- 第十三 压缩算法:无损与有损压缩,经典算法的原理与Rust实现。
中卷 运算与算法
中卷主要介绍各种数据是如何通过运算与转换,解决现实世界的各种问题的。从基础的算术、关系、逻辑、位运算出发,逐步深入到排序、搜索、哈希等经典算法,再扩展到人工智能、代数、几何、微积分、概率论、神经网络、自然语言处理、计算机视觉、强化学习和生成式AI等前沿领域。中卷共二十七章:
- 第十四 算术运算:加减乘除背后的计算机实现,溢出处理与高精度计算。
- 第十五 关系运算:比较操作的底层原理与优化。
- 第十六 逻辑运算:与、或、非、异或,布尔代数与数字电路的桥梁。
- 第十七 位运算:移位、掩码、标志位,高效编程的利器。
- 第十八 交换/反转/旋转:数据重排的基本操作及其应用。
- 第十九 类型转换:安全与危险的类型转换,Rust的类型系统优势。
- 第二十 哈希:哈希函数、哈希表、一致性哈希与分布式系统。
- 第二十一 打包/拆包 压缩/解压:数据结构的紧凑表示与空间优化。
- 第二十二 查询/检索/搜索:线性搜索、二分搜索、字符串匹配与信息检索。
- 第二十三 排序算法:从冒泡到快排,从比较排序到非比较排序的全景梳理。
- 第二十四 Lambda演算:函数式编程的数学基础,从丘奇到现代编程语言。
- 第二十五 人工智能:AI发展简史,从符号主义到连接主义。
- 第二十六 算法:算法复杂度分析,经典问题与解题范式。
- 第二十七 代数:群、环、域,抽象代数在计算机中的应用。
- 第二十八 几何:计算几何基础,图形学中的数学工具。
- 第二十九 行列式:矩阵的行列式及其在几何与代数中的意义。
- 第三十 矩阵:矩阵运算、线性变换与Rust中的矩阵库。
- 第三十一 向量:向量空间、点积、叉积与机器学习中的向量表示。
- 第三十二 函数:函数的数学定义、高阶函数与闭包。
- 第三十三 微积分:极限、导数、积分,连续世界的离散化计算。
- 第三十四 概率论:随机变量、分布、期望,不确定性世界的建模工具。
- 第三十五 离散数学:图论、组合数学、数理逻辑,计算机科学的数学语言。
- 第三十六 神经网络:从感知机到深度学习,神经网络的原理与Rust实现。
- 第三十七 自然语言处理:文本处理、词向量、Transformer与语言模型。
- 第三十八 计算机视觉:图像识别、目标检测、卷积神经网络。
- 第三十九 强化学习:智能体与环境的交互,奖励机制与策略优化。
- 第四十 生成式AI:GAN、VAE、扩散模型,创造新内容的AI技术。
下卷 秘密与密码
下卷主要介绍如何通过密码技术实现数据的安全存储、传输等一系列问题。从最基本的口令和随机数出发,逐步深入到对称密码、非对称密码、哈希函数等核心密码学 primitives,再扩展到身份认证、授权访问、PKI、TLS、区块链、零知识证明、同态加密、量子密码等高级主题,最后以“无敌密码“和“终极密码“作为全书的哲学升华。下卷共三十二章:
- 第四十一 口令:密码的存储、强度评估与破解防护。
- 第四十二 随机数:真随机与伪随机,密码学安全随机数生成器。
- 第四十三 密钥管理:密钥的生成、分发、存储与生命周期管理。
- 第四十四 对称密码:AES、ChaCha20等对称加密算法的原理与Rust实现。
- 第四十五 非对称密码:RSA、ECC等公钥密码体系的数学基础与应用。
- 第四十六 不可逆密码:哈希函数、HMAC、数字签名与完整性验证。
- 第四十七 身份认证:我是谁?如何证明?认证协议与多因素认证。
- 第四十八 授权访问:权限模型、访问控制列表与OAuth等授权框架。
- 第四十九 PKI:公钥基础设施,证书、CA与信任链。
- 第五十 TLS:传输层安全协议,HTTPS背后的密码学握手。
- 第五十一 区块链:分布式账本、共识机制与加密货币的密码学基础。
- 第五十二 零知识证明:证明者如何在不泄露秘密的情况下证明知晓某事。
- 第五十三 同态加密:在加密数据上直接计算,隐私计算的圣杯。
- 第五十四 量子密码:量子密钥分发与后量子密码学。
- 第五十五至第七十(预留):为密码学前沿发展预留空间。
- 第七十一 无敌密码:探讨是否存在绝对安全的密码系统。
- 第七十二 终极密码:从密码学上升到信息安全哲学,思考安全的本质。
附录
- 附录一 问题:常见问题解答与疑难解析。
- 附录二 程序员:关于程序员职业发展的思考与建议。
- 附录三 符号表:全书数学符号与术语速查。
- 附录四 百宝箱:常用Rust库、工具与资源汇总。
- 附录五 实战:综合实战项目与案例分析。
- 附录六 游戏:以游戏化的方式巩固所学知识。
全书章节总览
| 卷 | 章节范围 | 主题 | 章节数 |
|---|---|---|---|
| 上卷 | 第一至第十三 | 数据与编码 | 13 |
| 中卷 | 第十四至第四十 | 运算与算法 | 27 |
| 下卷 | 第四十一至第七十二 | 秘密与密码 | 32 |
| 附录 | 附录一至附录六 | 补充资料 | 6 |
全书共七十八章(含附录),覆盖数据表示、计算理论、密码安全三大核心领域,形成完整的计算机底层知识体系。
标准、规范、协议是计算机、互联网的基石
如果将0、1比作沙子,那么该如何使用这些沙子高效地构建整个计算机、互联网世界的大厦呢?很显然,沙子太小而大厦则相对大得多,直接使用沙子来建设大厦简直是天方夜谭。唯一可行的做法就是:先使用沙子制作砖块、混凝土、玻璃等最基本的材料(实际上需要的材料还有很多,比如钢铁、木材),然后根据施工标准,采用恰当的构建方法,按照一定的步骤一步步构建起最终的大厦。
计算机、互联网世界也是如此。就软件而言,0、1二进制首先构成了各种编程语言的类型系统中的各种类型数据:整数、浮点数、字符串、数组、队列、堆、栈、文件等等。这些类型的各种方法实现了类型的各种计算、转换等逻辑,而我们常说的软件、代码则是使用编程语言(当然编程语言本身也是代码)表达的一定业务逻辑的符号系统。可以看出,在构建整个大厦的过程中,沙子、砖块、混凝土等等都是最基础的材料,然后更为重要的是加工、制造这些材料的方法,以及经过大量实践证明、被大多数人遵循和采用的经验总结,进而上升为各种标准、规范、协议。
从TCP/IP协议栈到HTTP协议,从JPEG图像标准到MP3音频编码,从Unicode字符集到TLS安全协议——这些标准、规范、协议构成了现代数字世界的“交通规则“,让来自不同厂商、不同国家、不同年代的设备和软件能够无缝协作。理解这些标准,就是理解计算机世界的运行法则。
制定标准、规范、协议是实力与话语权的象征
“无规矩不成方圆”,社会生活中,为了规范每个人、各种社会组织、团体的行为,保持社会稳定,我们制定了各种规章制度、法律法规、民俗公约。计算机、互联网世界则是各种标准、规范、协议。从ASCII (American Standard Code for Information Interchange,美国信息交换标准代码)开始,在不到一百年的时间里,计算机世界里出台了成百上千的标准、规范、协议,而且还处在不断新增、完善的过程中。这些极大地促进了计算机的应用和发展。
美国最早发明了计算机、互联网,同时也是众多标准、规范、协议的制定者,体现了其强大的科技创新实力与话语权。“海到无边天作岸,山登绝顶我为峰”,每个希望变得强大且愿意为全人类做贡献的国家、组织,都应该在各个行业、各个领域努力做到最好,推动制定相关领域的标准、规范、协议,共同推动全人类的发展与进步。
在密码学领域,这一趋势尤为明显。从DES到AES,从SHA-1到SHA-3,国际密码学标准的演进反映了全球科研实力的此消彼长。今天,随着中国、欧洲等国家和地区在量子计算、后量子密码等前沿领域的投入,密码学标准制定的格局正在发生深刻变化。掌握标准制定权,就是掌握技术发展的方向。
为什么学习、使用Rust?
对公司而言,使用Rust更省钱、更省心、更省事
性能卓越,更省钱
云计算时代,CPU、内存、网络(流量、带宽)就如城市中的水和电一样,都可以轻易获得,但大规模使用的成本不容忽视。看看各大云服务商的数据中心,仅仅耗电一项就是巨大开支。Rust凭借优异的性能,能够大幅减少CPU运行的时间,同时消耗较少的内存,这就意味着消耗更少的电力——对于老板而言,这意味着做同样的事情花费更少的成本。当前全球经济形势不容乐观,开源节流、降本增效成为大多数公司的一致选择。另一方面,消费降级成为主流,质优价廉的商品更受市场青睐。如何在降低成本的同时提供优质产品和服务,成为企业必须认真思考的问题。
Energy Efficiency across Programming Languages: How Do Energy, Time, and Memory Relate?这篇论文详细比较了各种编程语言的能耗、运行时间、内存消耗。
【Rust生态观察】Rust实现的事件处理引擎tremor-runtime已经在美国最大家具电商公司Wayfair生产环境跑了三年
内存安全,更省心
在数据安全以及隐私越来越受重视的今天,安全漏洞造成的损失和影响都将是巨大的。Java开源库接连爆出重大漏洞,影响极大。Rust通过所有权(Ownership)、借用(Borrowing)和生命周期(Lifetime)机制,在编译期就消除了空指针、数据竞争、缓冲区溢出等内存安全问题,让“Heartbleed“级别的漏洞在Rust代码中几乎不可能发生。
系统健壮,更省事
系统稳定运行意味着后期维护时,再也不用担心服务随时可能宕机了。Rust的健壮性为系统稳定运行奠定了坚实的基础。Rust的“零成本抽象“理念让开发者既能享受高级语言的表达能力,又能获得接近C/C++的运行效率,同时避免了C/C++中常见的未定义行为。
对个人而言,学习Rust是一个十分明智的选择
Rust渐成主流
Java内卷太严重,我要学习Rust。在国内,Java绝对是大部分企业的主力开发语言。Java程序员需求量大,相关的职位也最多。随着高薪的吸引,大量科班、非科班的就业人群涌入IT、互联网行业,Java行业的内卷(竞争)程度也越来越激烈。Golang、Rust等新兴编程语言经过多年的快速发展,在国内也逐渐成为主流。
Rust已经连续多年被Stack Overflow开发者调查评为“最受喜爱的编程语言“。从Linux内核到Windows驱动,从Firefox到Cloudflare,从Discord到Dropbox,Rust正在渗透到底层系统的每一个角落。掌握Rust,就是掌握未来十年系统编程的通行证。
重剑无锋,大巧不工
Rust就好比一柄“锈迹斑斑“的玄铁重剑。Rust拥有令人望而却步的学习曲线,初学者刚开始学习使用时非常吃力。所有权系统、生命周期标注、 trait 系统——这些概念对于习惯了垃圾回收语言的开发者来说确实需要一段时间适应。值得庆幸的是,在人工智能的辅助下,将大大加快学习的速度。开发者一旦掌握了就可以轻松应对各种复杂的编程任务,就能充分利用Rust在效率、稳定性、安全性方面的优势,可以保障系统的稳定运行和数据的安全性。
AI助力,迎刃而解
AI工具的普遍使用,使得学习Rust更加高效、便捷。现代AI编程助手可以帮助开发者快速理解复杂的编译错误信息、生成符合Rust idioms 的代码、解释所有权和生命周期的微妙之处。在AI的辅助下,Rust的学习曲线变得平缓了许多,而掌握Rust后获得的系统级编程能力将成为开发者职业生涯中的核心竞争力。
本书特色
本书力求在以下三个方面做到有机结合:
原理为先:每一章都从底层原理出发,讲解“为什么“而非仅仅是“怎么做“。理解原理才能举一反三,面对新技术时才能快速上手。
代码为体:所有核心概念都配以Rust代码实现。代码不仅是理论的验证,更是实践的起点。读者可以直接运行、修改、扩展这些代码,在动手实践中深化理解。
实战为要:每卷末尾和附录中设有实战项目,将分散的知识点串联成完整的解决方案。从编码一个二维码生成器到实现一个简单的加密通信系统,实战项目让知识真正转化为能力。
阅读建议
适合人群
- 有一定编程基础的开发者:了解至少一门编程语言,希望深入理解计算机底层原理。
- 系统编程爱好者:对操作系统、网络、密码学等领域感兴趣,希望用Rust进行系统级开发。
- 计算机专业学生:作为课堂学习的补充,通过实战代码加深对理论知识的理解。
- 技术管理者:了解技术趋势,评估Rust在团队中的适用场景。
阅读顺序
顺序阅读:对于希望系统学习的读者,建议从上卷开始顺序阅读。三卷之间存在逻辑递进关系——先理解数据如何表示,再学习如何运算处理,最后掌握如何安全保护。
按需查阅:对于有经验的开发者,可以根据兴趣直接跳读到特定章节。每章尽量保持相对独立,交叉引用会标明相关章节的编号。
结合实践:强烈建议读者在阅读时打开Rust开发环境,亲手运行和修改书中的代码示例。本书的代码示例均使用最新稳定版Rust编写,可在Rust Playground或本地环境中直接运行。
预备知识
阅读本书前,建议读者具备以下基础:
- 基本的编程概念(变量、函数、条件、循环)
- 对二进制、十六进制有初步了解
- 高中水平的数学知识(代数、几何基础)
不具备Rust基础的读者也不用担心——本书会在必要时解释Rust特有的语法和概念,但建议同时参考Rust官方文档进行系统学习。
致谢
本书的完成离不开开源社区的支持。感谢Rust核心团队和所有贡献者打造了这样一门卓越的编程语言;感谢crates.io上无数开源库的维护者,他们的工作让Rust生态日益繁荣;感谢Stack Overflow、Rust用户论坛等社区中的热心回答者,他们的经验分享解决了本书写作过程中的诸多技术难题。
感谢所有为计算机科学奠定基础的前辈们——从图灵、香农到里斯特、汤普森,从迪杰斯特拉到科克,正是他们的智慧结晶构成了我们今天所站立的巨人肩膀。
参考资源
- The Rust Programming Language - Rust官方教程
- Rust by Example - 通过示例学习Rust
- Rustlings - Rust小练习
- Crypto101 - 密码学入门
- 3Blue1Brown - 数学可视化
- Computerphile - 计算机科学视频
愿每一位读者都能通过本书,在Rust的世界里习得七十二般变化,在计算机科学的道路上越走越远。