《Thinking in Python》
文章摘要
这是 Bruce Eckel 的新书《Thinking in Python》的官方站点。副标题是「Fluency, Types, and Design(流利度、类型与设计)」。书在网上完全免费阅读,同时提供 PDF、EPUB 以及专为电子墨水阅读器优化的 EPUB 三种下载格式,书中示例与练习答案托管在 GitHub 上。版权信息为 © 2026 Bruce Eckel,采用 CC BY-NC-ND 4.0 许可——可自由在线阅读,未经许可不得复制发行。
Bruce Eckel 这个名字对很多程序员来说意味着一段编程教育史:他是《Thinking in Java》和《Thinking in C++》的作者,前者的第一版出版于四分之一个世纪之前,是无数人入门 Java 的书。这本 Python 版本是他多年前动笔、后来一度放弃的项目,最近用 Claude 把旧材料整理清洗后完成。书明确以 Python 3.15 及以后版本为目标。
全书目录规模相当可观,共 47 章,分为五大部分(外加第 1 章引言):
第一部分·基础:Tour(导览)、容器、控制流、函数、模块与包、类、静态类型、类属性、清理(Cleanup)。
第二部分·技术:测试、把数据类当作类型、模式匹配、装饰器、上下文管理器、推导式、元编程、性能、并发。
第三部分·模式:重新思考对象、模式的概念、数据传输对象、迭代器、单例、模板方法、代理(Surrogate)、工厂、函数对象、改变接口、观察者、状态机、多重分派、访问者、组合与解释器、享元、备忘录、模式重构、模拟、模式目录。
第四部分·函数式编程:基础、工具箱、错误处理、保障(Assurance)。
第五部分·效应(Effects):效应管理、生成器、无状态、无状态的实践。
从目录结构就能看出这本书的野心和它与普通 Python 入门书的差别:设计模式部分占了整整 20 章(这是 Eckel 一贯的风格,与《Thinking in Java》一脉相承),而最后两部分——函数式编程和效应管理——在 Python 图书里相当少见。
作者在书中关于 AI 使用的自述被 HN 用户完整引用出来,是这本书最受关注的部分之一。他坦承:「我知道有些人不喜欢 AI。没有它,这本书不会存在。这本书是免费的,所以如果 AI 让你困扰的程度超过了这本书可能给你带来的好处,请忽略它。」他接着说,用 Claude 让他意识到自己过去在写书时做过多少妥协:他会冒出一个好想法(比如自动把带注释的输出交织进代码清单里),但要么实现不了,要么觉得太难就放弃了。「有了 AI,我可以探索并且经常能实现每一个突发奇想,从看似简单的插入一个新章节,到像那套注释输出系统那样令人望而生畏的事情。结果比我过去做出来的任何东西都好得多。我会一直改下去,直到把每一个我能想到的地方都调好为止。」
HN 评论精华
这条帖子拿到 305 分、约 46 条评论。讨论量相对不大,主要围绕三条线:对 Bruce Eckel 这个名字的集体怀旧、这本书「用 AI 写成」引发的价值判断、以及少数人真正读了内容后给出的技术评价。
- ra 一句「我 2000 年就是从 Bruce Eckel 的《Thinking in Java》学的 Java」开启了怀旧支线,jkaplowitz 说自己早一年、「一部经典」,sakesun 说 2004 年做硕士论文时读的是《Thinking in C++》。adellsworth 问有没有类似的 clang 的书,kitd 回答 Eckel 也写过《Thinking in C++》。
- pjacotg(提交者)交代了来源:他是在 Bruce Eckel 主持的播客 Happy Path Programming 第 121 集里听说这本书的。他早就知道 Eckel 开始写又中途放弃了这本书,所以听到他用 Claude 把旧材料全部清理出来时非常兴奋。
- codethief 提供了全帖最有价值的一条内容评价,因为他真的读了:他只是粗略翻了翻,即便明显是借助 AI 写成的,书里也有一些非常好、且对 Python 世界而言相当新颖的东西。他特别喜欢第 44 章「效应管理」,并说自己非常认同作者关于「妥善管理效应是未来」的观点,还引用了书中的一段论述——编程的历史是一部不断突破规模障碍的历史,每一次模式都相同:某样程序员靠手工追踪的东西在小程序里工作良好,系统不断增长直到手工追踪失效,解决方案是把这项追踪工作转移到语言或工具链中,一代人之后就没人能想象还要靠手工做了;而「效应」正是我们此刻身处其中的那道障碍,这也是它难以被看见的原因。
- janpeuker 给出了最直接的负面内容评价:格式排版很不错,但「这本书似乎没有哪一部分是关于『思考』的。它基本上是一份写给 C++ 背景读者的带注释的语法指南?」
- bigcat12345678 说他确实觉得这个站点的排版质量出众,并完整引用了作者关于 AI 的那段自述。xtiansimon 由此产生了一个「有力的误读」:他一开始以为作者是说用 AI 帮忙写那些自己过去写不出来的章节(这让他觉得奇怪,一个 Python 书作者怎么会写不出 Python),接着他顺势提出了一个更有趣的设想——按需定制章节呢?这肯定是 AI 能轻松做到的。「在合适的价位上,我很想要一种对这本书的非线性阅读方式,以及一切能让我终于搞懂钩子和回调是怎么回事所必需的东西。」
- jdw64 提出了本帖被讨论最多的观点:「我认为人们所说的『AI slop』大概只是未经编辑的内容。我其实挺喜欢这个内容的。比起它是不是 AI 做的,我认为重要的是它是否准确符合规格。」saidinesh5 补充说不只是未经编辑,还有一种「信息密度低」的感觉——比如用单个提示词生成整份文档(「写一份如何实现这个的文档」)与给出约束条件和已有方案的做法,产出质量完全不同,然后还要验证生成的文字、去掉无用的幻觉,甚至用同一个 AI 来验证输出。jdw64 反过来提出了一个有意思的论点:GPT 生成的文本难道不是比人类写作信息密度更高吗?AI 与人类写作的差别在于密度,问题在于密度被引向了哪里——说「自动写一篇博客」会产出低密度啰嗦文字,说「基于这篇和那篇论文找出反例」则会生成高度密集的句子。dragonwriter 指出这取决于是哪批人:对相当大一群人来说,「slop」描述的是所有 GenAI 输出,与其说是对质量特征的评估,不如说是对使用这项技术的道德评论——实际上是在声明「使用 AI 让人在道德上无法接受,连考虑它的特征都不行」。
- a2ff6eeb0 提出了一个很多人觉得有意思的设想:既然这是自动生成的,有没有可能随着新版 Python 发布而自动更新?「那会很酷。看着这种东西自己展开成一本书会很有意思。」他还问喂给 LLM 后是否会改善它输出的代码质量。skeledrew 泼了冷水:「这是自动生成的」之后还经过了作者多轮大量编辑,并没有什么自动更新机制能造出类似的东西。a2ff6eeb0 表示失望:「我们应该能够拿解释器代码,把它变成一本书,然后让 LLM 读它来改进人们写的代码。」thewhitetulip 补充说 Streamlit 库就有一个 skill 直接从 Python 库里的 DOCSTRING 注释读取内容。
- roelschroeven 提出了一个技术性疑问:「本书面向 Python 3.15 及以后版本」——这有点奇怪,3.15 都还没正式发布。rented_mule 给出了准确的解释:3.15 确实还没正式发布,但已进入预发布阶段,其定义是「第一个 beta 之后不再加入新特性,但接受特性修复(包括对新特性的重大改动)、错误修复和安全修复」,所以这是一个相当明确的目标;而且 Bruce Eckel 在四分之一世纪前就出版了这本书的第一版,他对 Python 的演进节奏有很好的把握。
- JLO64 提供了最实用的一条信息:网页版看着不错,但他只在 Kindle(配 KOReader)上读书,好在只要 clone 源码仓库(github.com/BruceEckel/ThinkingInPython)然后运行
make epub就能得到格式良好的文件。文件偏大(7.4MB),但「乞丐没有挑剔的余地」——他随后想到主要是因为封面图有 6MB,打算提个 PR 把它压小。ptx 提醒想下载 epub 的人可以再等等:按 README 的说法,作者还处在修订 AI 所写内容的早期阶段;不过 CC BY-NC-ND 4.0 的许可条款和仓库里的 LICENSE.md 都同意分发 epub 是可以的。ptx 还做了考古,找出了最后一个「前 AI 版本」的提交(76a1310d),但指出那个版本里还残留着 Java 版书稿的痕迹,比如在测试章节里讨论可见性修饰符。 - enygmata 问哪里能买到纸质版,alecsm 回答:没有纸质版。
- runningmike 从许可证角度提了意见:很高兴看到这本书,但他个人更偏好 CC BY-SA 而不是 CC BY-NC-ND,不过这肯定比 100% 保留所有权利好得多;他多年来维护着一份没有访问壁垒(不强制注册账号、无侵入式网页追踪器)的 CC BY-SA Python 书籍清单。
- andai 提醒不要与另一本同样优秀的书混淆:Allen Downey 的《Think Python》。neves 简短地说 Think 那本是前 AI 时代的书。
- grandimam 分享了一段创业经历:他做过类似的东西——一个让开发者深入理解 Python 的平台,想看看这类内容有没有市场。「我意识到的是,即使有了 AI,这类东西也需要有分发渠道才能获得关注。」
- epgui 贡献了本帖最刻薄的一句玩笑:「我只会把这种事希望在我的敌人身上……看在上帝的份上,如果你要用一门编程语言思考,挑一门有严格引用透明性的。」izdubar 则针对书中「Python 存在是为了提升你的生产力,语言的目标是尽可能帮助你、尽可能少地妨碍你,它不强加任意规则」这句话吐槽:「只不过一切都需要被具体化成一个有唯一名字的顶层类,哪怕它只是传进/传出单个函数的一小块数据。还有,空白字符有意义。」hetman 反驳说没看懂他的意思——你可以返回无名的列表、字典、数字或它们的组合,加一点语法糖甚至能让返回元组看起来像返回多个值;他也不确定该把「空白即语法」称为任意,虽然它确实很有主见,「但我承认,在我克服了自己对空白即语法的狂热敌意之后,它开始让我觉得省时间了」。
- conmod278 提出了对整个讨论区的元批评:「为什么这些低努力、毫无内容的帖子会被顶上来?」
- 帖子里还出现了一条政治色彩浓厚的离题长评:wqlander(一个新账号)声称自 2020 年以来整个 Python 生态是一个「只服务于一个老男孩俱乐部、维持他们在业内高薪职位」的严密等级结构,建议改学 C++。smitty1e 只回了句南方式的礼貌反讽「Bless your heart」,chirau 说「我明白你为什么要用小号了」。但 throwaway330935 给出了一条更严肃的回应:他从 90 年代末就在使用 Python 并参与社区,「我真希望我能说你完全说错了,但是……这比我希望的更接近事实。Python 社区里有一部分我深爱着,但这些年来 Python 领导层的主体让我不太愿意再参与其中。也许这只是时代变迁、领导层服务的是一个与我记忆中很不同的社区——如果是这样也没问题。但我不完全确信故事仅止于此。」