Learn Python the Right Way
副标题:How to Think Like a Computer Scientist(像计算机科学家一样思考)
一本基于 GNU Free Documentation License 发布的开源 Python 入门教材,由 Ritza 出品,前身是 Allen B. Downey 经典的 How to Think Like a Computer Scientist。David Beazley 作序。
核心定位
- 不是语法手册,是思维训练——以 Python 为载体,教读者”像计算机科学家一样思考”
- 平衡实用性与概念深度:Python 语法简单,初学者能快速做出东西,同时逐步引入抽象、数据结构、OOP 等 CS 核心概念
- 教学法特色:每章配 Glossary(术语表)+ Exercises(练习题),附录有调试指南和常见错误集
- 完全开源:GNU FDL 1.3 许可,可自由复制、分发、修改
全书结构(28 章 + 5 附录)
第一部分:编程基础(Ch 1-7)
| 章节 | 主题 | 核心概念 |
|---|---|---|
| 1 | The way of the program | 程序是什么、三类错误(语法/运行/语义)、实验式调试、形式语言 vs 自然语言 |
| 2 | Variables, expressions and statements | 值与类型、变量命名、关键字、表达式求值、运算符优先级、字符串操作、输入 |
| 3 | Hello, little turtles! | 海龟图形(turtle)、for 循环、实例化 |
| 4 | Functions | 函数定义与调用、执行流、局部变量、参数与返回值 |
| 5 | Conditionals | 布尔类型、比较运算符、逻辑运算符(and/or/not)、短路求值、真值表、布尔代数化简 |
| 6 | Fruitful functions | 返回值的函数、增量式开发、单元测试、组合 |
| 7 | Iteration | while 循环、for 循环、牛顿迭代法、枚举、break/continue |
第 3 章的 turtle 是亮点:用图形化反馈让初学者立即看到”代码运行的结果”,比纯文本输出更有成就感。
第二部分:数据类型(Ch 8-14)
| 章节 | 主题 | 核心概念 |
|---|---|---|
| 8 | Strings | 字符串是序列、索引、切片、遍历、字符串方法、字符串是不可变的 |
| 9 | Tuples | 元组打包/解包、不可变性、元组作为返回值 |
| 10 | Event handling | 事件驱动编程、回调函数、GUI 交互基础 |
| 11 | Lists | 列表是可变序列、列表方法、列表遍历、嵌套列表、列表与字符串互转 |
| 12 | Modules | 模块导入、命名空间、标准库、random/math/turtle 等常用模块 |
| 13 | Files | 文件读写、文本行处理、异常处理初步 |
| 14 | List Algorithms | 搜索(线性/二分)、排序、列表推导、归并、去重 |
第三部分:面向对象(Ch 15-17, 22-24)
| 章节 | 主题 | 核心概念 |
|---|---|---|
| 15 | Classes and Objects — the Basics | 类与实例、属性、方法、__init__ 构造函数 |
| 16 | Classes and Objects — Digging deeper | self 参数、特殊方法(__str__ 等)、运算符重载 |
| 17 | PyGame | 用 Pygame 做游戏:精灵、碰撞检测、游戏循环 |
| 22 | Even more OOP | 类变量 vs 实例变量、私有属性、静态方法 |
| 23 | Collections of objects | 对象集合、聚合关系 |
| 24 | Inheritance | 继承、多态、方法重写、super() |
PyGame 一章是本书特色:把 OOP 概念落地到游戏开发实践,学生可以做出可玩的东西,比纯理论讲继承更有体感。
第四部分:进阶 + 数据结构(Ch 18-21, 25-28)
| 章节 | 主题 | 核心概念 |
|---|---|---|
| 18 | Recursion | 递归思想、基线条件、递归 vs 迭代、分形 |
| 19 | Exceptions | try/except、异常类型、自定义异常、防御式编程 |
| 20 | Dictionaries | 字典的键值对、哈希、字典方法、用字典计数 |
| 21 | A Case Study: Indexing your files | 实战:用字典做文件索引(倒排索引思想) |
| 25 | Linked lists | 链表实现、节点类、遍历、插入/删除 |
| 26 | Stacks | 栈的 ADT、push/pop、括号匹配、中缀转后缀 |
| 27 | Queues | 队列的 ADT、enqueue/dequeue、环形缓冲区 |
| 28 | Trees | 树的结构、前/中/后序遍历、表达式树、动物识别树 |
附录
- A: Debugging — 分场景调试指南(语法错、运行错、语义错、死循环、无限递归等)
- B: Workbook — 五大能力维度、发邮件、写 Web 服务器、数据库等扩展实践
- C: Ubuntu Python 开发环境配置
- D: 如何定制和贡献本书
- E: Tips, Tricks, and Common Errors — 常见错误合集
核心观点摘录
1. 编程的本质是问题求解
“Programming is the art of telling another human what one wants the computer to do.”
(序中引用 Donald Knuth)
程序的首要读者是人,其次才是机器。写代码时要考虑将来读代码的人。
2. 三类错误 & 实验式调试
- 语法错误(Syntax errors):违反语言规则,解释器直接报错
- 运行错误(Runtime errors):语法正确但运行时出问题(除零、索引越界等)
- 语义错误(Semantic errors):程序能跑但结果不对——最难调试的一类
实验式调试方法:提出假设 → 设计实验验证 → 根据结果修正假设。这和科学方法是一样的。
3. 增量式开发(Incremental development)
第 6 章提出的核心方法:
- 从一个能运行的小程序开始
- 每次只加一小段代码
- 加完立即测试
- 重复直到完成
好处:每步都知道错误在哪里,避免面对一个大而全的 bug 无从下手。
4. Python 的设计哲学
- 可读优先:“Pythonic” 的代码首先是清晰的
- ** batteries included**:标准库覆盖大量常用场景
- 多范式支持:过程式、面向对象、函数式都能用
5. 调试附录的金句
“If you have a big hairy expression and it doesn’t do what you expect, break it up into intermediate variables and print them.”
把复杂表达式拆开,中间变量加上 print,比盯着一行长代码猜管用得多。
与同类书的对比
| 维度 | 本书 (Learn Python the Right Way) | 《Python 编程:从入门到实践》 | 《SICP》 |
|---|---|---|---|
| 起点 | 零编程基础 | 零编程基础 | 有一定编程基础 |
| 风格 | 学院派 + 互动练习 | 项目驱动 | 函数式抽象思维 |
| 深度 | 覆盖到数据结构(链表/栈/队列/树) | 覆盖到 OOP + 项目实战 | 递归、高阶函数、解释器 |
| 特色 | turtle 图形 + PyGame 游戏 | 三个完整项目(游戏/Web/数据) | 计算过程的抽象 |
| 适合人群 | 计算机入门课教材 | 自学想快速做出东西 | 想深化编程思想 |
阅读建议
- 初学者:按顺序读,每章做完练习。第 3 章(turtle)和第 17 章(PyGame)是”正反馈节点”,务必动手跑代码
- 有基础者:可以跳过 1-7 章,直接从数据结构部分(25-28 章)或 PyGame 项目开始
- 教学用:这本书天然适合作为大学 CS1 课程教材,每章结构完整(讲解 + Glossary + Exercises)
关联笔记
- 《SICP》-计算机程序的构造和解释-第二版 — 更深入的”像计算机科学家一样思考”
- 《数据结构与算法》-Rust实现-Shieber — 同样讲数据结构,但用 Rust 语言
- English++-计算机专业英语教材 — 英文原版技术书的语言基础