第 1 章 必备基础知识
1、艾伦·图灵
艾伦·图灵(Alan Turing)是计算机科学领域的奠基人,被誉为“计算机科学之父”和“人工智能之父”。英国数学家、逻辑学家、密码学家、理论生物学家。
- 24岁时发表了划时代论文《论可计算数及其在判定问题上的应用》,提出了”图灵机“这一抽象计算模型。该模型用简单的规则模拟了所有可能的计算过程,从数学上证明了通用计算机的可行性——奠定了整个计算机科学的理论基础。
- 他领导英国团队成功破解了德军的”谜”(Enigma)密码系统,研制出名为”炸弹“(Bombe)的破译机器。这一贡献使盟军能够提前掌握德军动向,极大缩短了二战进程,拯救了无数生命。
- 1950年在论文《计算机器与智能》中,他提出了判断机器是否具有智能的著名标准——”图灵测试“:如果一台机器能够在对话中让人类无法分辨它是人还是机器,就应当承认它具有智能。这一概念标志着人工智能领域的正式诞生。
- “图灵奖”:美国计算机协会(ACM)于1966年以其名字设立,是计算机科学领域的最高荣誉,被誉为”计算机界的诺贝尔奖“。
- 1952年,因同性恋行为被英国政府定罪,被迫接受化学阉割(激素注射)以代替监禁。1954年,他食用氰化物浸泡的苹果去世,终年42岁,官方裁定为自杀。2009年,英国首相布朗代表政府正式道歉;2013年,他被女王追授皇家赦免。
2、约翰·冯·诺依曼
约翰·冯·诺依曼(John von Neumann,1903-1957)被誉为”计算机之父“,是20世纪最后一位”全才型”科学家。
- 他的研究几乎遍及所有重要领域:数学:集合论公理化、算子代数(冯·诺依曼代数)、遍历理论、希尔伯特第5问题 物理学:量子力学的数学基础、量子统计力学、流体力学 经济学:博弈论(奠基人之一) 计算机科学:冯·诺依曼架构、细胞自动机、随机计算 统计学:蒙特卡洛方法
- 1944年,冯·诺依曼偶然得知ENIAC计算机项目后迅速加入,并于1945年撰写了划时代报告《关于EDVAC的报告草案》,提出了至今仍统治计算机世界的存储程序原理,五大组成部分:
- 运算器:完成算术和逻辑运算
- 控制器:控制程序执行顺序
- 存储器:存储程序和数据(核心创新)
- 输入设备:将程序和数据送入计算机
- 输出设备:输出处理结果
- 两大设计思想:
- 二进制:采用二进制作为数制基础,利用电子元件的双稳特性
- 存储程序:将程序作为数据存储在内存中,使计算机可通过修改程序执行不同任务
- 1955年,冯·诺依曼被诊断出癌症。病中,他接受了耶鲁大学的西里曼讲座邀请,但身体已无法到场。未完成的手稿于1958年以《计算机与人脑》为名出版,从生物学视角探讨了自动机理论,预示了后来”类脑计算”和人工智能的发展方向。冯·诺依曼在细胞自动机上的研究,通过其学术后代伯克斯→霍兰德→巴托→萨顿的传承,最终催生了强化学习——正是这一技术让AlphaGo击败了围棋世界冠军。
1.1 计算机组成
1.1.1 软件
计算机软件主要分为:系统软件、应⽤软件。

| 类型 | 作用 |
|---|---|
| 系统软件 | 直接管理和控制计算机硬件的软件,为应⽤软件提供运⾏平台,它负责协调硬件资源(如内存、处理器)并提供通⽤服务,例如:⽂件管理、设备控制、任务调度。 |
| 应用软件 | ⽤于执⾏特定任务的软件,满⾜⽤户的具体需求,如:⽂档编辑、数据分析、娱乐等,它依赖系统软件提供的资源和服务。 |
1.1.2 硬件
计算机硬件主要由五个部分组成,分别是:运算器、控制器、存储器、输⼊设备、输出设备。

1.2 计算机语言
1.2.1 计算机语言、代码、程序

1.2.2 计算机语⾔简史
第1代:机器语言
计算机问世的初期,⼈们只能通过『机器语⾔』(⼜称机器码)来操作计算机,所谓机器语⾔,就是 0 和 1 组成的⼆进制内容。⽽且在当时,录⼊和修改信息通常都需要:拨动开关、或插拔连线、或使⽤打孔纸带来输⼊指令。


- 优点:机器可直接执行,速度最快;硬件直接控制
- 缺点:二进制编写,人极难读写和维护;完全依赖硬件,无移植性。
例如:在 x86 的 CPU 架构下,使⽤机器码编写 1 + 1 的运算代码如下:
10110000 00000001 00000100 00000001
第2代:汇编语言
⽤机器语⾔编程,程序员很难理解每⼀条指令的含义,为了解决这个问题,『汇编语⾔』应运⽽⽣,它将机器语⾔中的⼆进制指令,转化为更容易记忆的助记符 (如 MOV 、 ADD 、 LOAD 等),从⽽让程序员能以近似“英⽂简写”的⽅式进⾏编程,简单说 就是:『汇编语⾔』是对『机器语⾔』的“⼈性化翻译”,汇编语⾔显著降低了编程的⻔槛,也为 后续⾼级语⾔的诞⽣,打下了基础。
- 优点:比机器语言易读写;执行效率高;
- 缺点:仍依赖特定CPU指令集;编程效率低;代码量大;
例如:在 x86 的 CPU 架构下,使⽤『汇编语⾔』编写 1 + 1 的运算代码如下:
mov al, 1
add al, 1
⚠️注意:『汇编语⾔』需要翻译成『机器码』,才能交给 CPU 执⾏,因为 CPU 只认⼆进制指 令。
第3代:高级语言
相对『机器语⾔』和『汇编语⾔』⽽⾔,『⾼级语⾔』更接近⼈类的⾃然语⾔,它允许程序员使⽤ 英语来编写程序,并向程序员屏蔽了⼤部分的底层细节,语⾔中的符号和算式,也和⽇常的数学算 式差不多,它更容易被掌握,常⻅的『⾼级语⾔』有:C、C++、Java、PHP、Go、Rust、 JavaScript、Python 等。
- 优点:接近自然语言,易学易用;代码简洁;硬件无关,移植性好;丰富的库和工具
- 缺点:执行需编译/解释,效率较低;对硬件控制能力弱
例如:下⾯的 Python 代码,可以输出 “Hello, world!”
print("Hello, world!")
例如:下⾯的 Java 代码,可以输出 “Hello, world!”
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello, world!");
}
}
⚠️注意:计算机不能直接执⾏『⾼级语⾔』,同样需要将其转换为『机器语⾔』才能被计算机 执⾏。
1.2.3 编译型语⾔与解释型语⾔
对于⾼级语⾔来说,我们会根据其转换成⼆进制指令过程的不同,可将其分为:『编译型』和『解 释型』
编译型语⾔
将程序翻译成计算机能理解的⼆进制内容,并且通常会⽣成⼀个可执⾏⽂件,例如在 windows 系 统上⽣成的可执⾏⽂件是 .exe ⽂件,常⻅的『编译型』语⾔有:C、C++、Go、Rust 等。

- 优势:同⼀运⾏平台,代码只需编译⼀次,且执⾏效率⾼。
- 劣势:跨平台性差,⼤型项⽬编译时间较⻓,开发效率略低。
解释型语⾔
将程序⼀句⼀句的翻译为:计算机可以执⾏的指令,整个过程通常不⽣成可执⾏⽂件,常⻅的解释型语⾔有:Python、Php、JavaScript 等。

- 优势:跨平台性好,⽆需编译,开发调试灵活⾼效。
- 劣势:每次运⾏都需要解释,执⾏效率较低。
编译+解释混合型
Java 是典型的编译与解释混合型语言,这种设计是它“一次编写,到处运行”能力的关键。
简单概括它的执行过程:Java源码 (.java) → 编译 → 字节码 (.class) → 解释/即时编译 → 机器码执行

有人说python也是编译+解释的混合型的?
- Java 通过“先静态编译为字节码,再在JVM上解释/JIT编译执行”的混合模式,完美结合了编译型和解释型语言的优点,目标是平衡启动速度和运行性能。
- Python是一门“先(隐式)编译为字节码,再由虚拟机解释执行”的语言。它没有JIT编译步骤,其“编译”主要服务于语法分析和生成中间格式,而非性能优化。其核心执行模型仍然是解释型的。虽然它确实经历了“编译”和“解释”两个阶段,但我们通常不称之为“混合型语言”,因为它缺乏关键的 运行时编译优化 环节。

| 特性 | Java | Python (CPython) |
|---|---|---|
| 编译产出 | 显式生成 .class 字节码文件 | 隐式生成 .pyc 字节码文件(可缓存) |
| 执行引擎 | 解释器 + JIT编译器(如HotSpot) | 纯解释器(CPython标准实现) |
| 性能核心 | 依赖JIT将热点字节码编译为优化后的机器码 | 依赖解释器直接执行字节码 |
| “混合”含义 | 编译 + 解释 + 即时编译,旨在提升峰值性能 | 编译 + 解释,旨在实现跨平台和开发便利 |
结论:Python是高级语言,是解释型语言。
1.2.4 TIOBE排行
TIOBE 排行榜 是衡量编程语言流行度的一个长期、月度更新的指标。它由荷兰的 TIOBE 公司发布,始于2001年,已成为业界观察语言趋势的重要参考。https://www.tiobe.com/tiobe-index/
核心要义:它衡量的是“流行度”或“关注度”,而非“最好用”或“代码量最多”。 标题 “TIOBE Programming Community Index” 也点明了它反映的是 开发者社区的活跃度和关注度。
TIOBE 采用 自动化算法,主要数据来源于全球主流搜索引擎的查询结果。语言流行度与招聘需求、技术文章、教程数量高度相关,是开发者学习、企业技术选型的“风向标”之一。它衡量的是“讨论热度”,而非“实际代码行数”或“项目数量”。一门成熟语言可能仍在关键系统中大量运行,但讨论度低,排名就会靠后,而新闻事件、大型会议可能导致某个语言的搜索量短期激增。


1.3 Python语言概述
1.3.1 Python的起源
Python 的作者 Guido van Rossum 来⾃荷兰(国内爱称:⻳叔),1982年从阿姆斯特丹大学获得了数学和计算机硕士学位。他发现⽤: C、Fortran 等语⾔写程序太费劲,⽽ Shell 虽然轻松,但功能却很有限。1989 年圣诞节,⻳叔开始动⼿编写⼀种既能像 C 那样全⾯操控系统,⼜能像 Shell ⼀样好上⼿的解释器,并以他喜爱的喜剧 《Monty Python’s Flying Circus》(巨蟒剧团之飞翔的马戏团)为灵感,命名为“Python”。
Python 的设计哲学是“优雅、明确、简单”,Python 提倡:最好只有⼀种⽅法来做⼀件事,它的第⼀个公开版本于 1991 年问世,如今已成为全球最受欢迎的编程语⾔之⼀。

1.3.2 Python的特点
优点:

缺点:

1.3.4 Python版本
Python有2个版本,Python2 和 Python3。
Python 3.x 是现在和未来主流的版本。相对于Python的早期版本是一个比较大的升级,且为了不带入过多的累赘, Python 3.0在设计的时候没有考虑向下兼容,因而许多早期Python版本设计的程序都无法在 Python 3.0上正常执行。但随着Python3使用越来越广泛,大部分新项目开始使用Python3,且大部分三方库已经支持Python3.x,Python3.x已经成为趋势。
- Python 3.0发布于2008年
- 2020年: Python 2 官⽅停⽌维护,Python 2.7被确定为最后一个 Python 2.x 版本。同时 Python 3.9 发布。
- 2021年:Python 3.10 发布。
- 2022年:Python 3.11 发布,平均性能提升 10%-60% 。
- 2023年:Python 3.12 发布,进⼀步优化性能和类型提示。
- 2024年:Python 3.13 发布。
- 2025年:Python 3.14 发布。
- 当前课程使用的版本是Python3.12.8
1.3.4 Python解释器
由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。
- CPython
- 当我们从Python官方网站下载并安装好Python 3.x后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。
- CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。
- IPython
- IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
- CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
- PyPy
- PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
- Jython
- Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
- IronPython
- IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
小结:Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。
1.3.5 Python不是性能最好的,但它是“AI时代的通用语”
1. 生态壁垒:Python拥有绝对的“独有武器” AI的核心是算法,而算法实现高度依赖底层库。
- PyTorch/TensorFlow:这两大框架的前端API全部是Python,虽然底层是C++/CUDA,但研究员调模型只能用Python。Java/Go想接入,只能当“二等公民”。
- CUDA/python绑定:NVIDIA官方对Python的支持最完善,操作GPU几乎无缝。
- 杀手锏:像Hugging Face的transformers库,新模型(如LLaMA、GPT变体)发布几小时内就有Python实现,其他语言要等几个月甚至没有。在AI圈,不用Python就等于“掉队”。
2. 开发效率:动态语言适配“实验”属性 AI是实验科学,不是工程开发。
- 研究员每天要改几十次网络层、换激活函数,Python无需编译、即写即跑,交互式环境(Jupyter)能边写边看数据形状。
- Java/C++改一行要编译几分钟,会打断思维。Python慢的是运行速度,但快的是人的决策速度——而人的时间比机器贵得多。
3. 胶水特性:把“快”留给底层,自己只当指挥家 Python本身慢,但它不干重活。
- 真正的矩阵乘法、卷积,全由底层的C/C++/CUDA执行。Python只负责调库和编排计算图。
- Go虽然并发强,但AI训练是同步大规模矩阵运算,不是高并发网络服务,Go的优势用不上。Java的JVM启动慢、内存占用大,在科研原型阶段太笨重。
- C++:写推理引擎(如TensorRT)、量化算子时必用,负责“让模型跑得快”。
- Go:写AI服务上线后的API网关、微服务治理时常用,负责“让服务稳”。
- Java:在大厂做推荐系统在线服务(高并发预估)时用,负责“让流量扛得住”。