跳至内容

The Wikibooks community is developing a policy on the use of generative AI. Please review the draft policy and provide feedback on its talk page.

Think Python/前言

来自 Wikibooks,开放世界中的开放书籍

第 0 章:前言

[编辑 | 编辑源代码]

这本书的奇特历史

[编辑 | 编辑源代码]

(本节由 Allen B. Downey[1]编写)

1999 年 1 月,我正在准备用 Java 教授一门入门编程课程。我已经教过三次了,我感到很沮丧。这门课的失败率太高了,即使是那些成功的学生,他们的整体成就水平也太低了。

我发现其中一个问题是教材。它们太大了,包含了太多关于 Java 的不必要的细节,而关于如何编程的高级指导却不够。而且它们都存在“陷阱效应”:一开始很简单,然后逐渐变得复杂,然后在第 5 章左右,底线就会掉出来。学生们会得到太多新的内容,而且太快了,我会花一学期的剩余时间来弥补。

在开学前两周,我决定自己写一本教材。

我的目标是

  • 保持简短。学生读 10 页比读 50 页更好。
  • 注意词汇。我尽量减少术语,并在首次使用时定义每个术语。
  • 逐步构建。为了避免陷阱,我将最难的话题分成一系列小步骤。
  • 专注于编程,而不是编程语言。我包含了 Java 的最少有用子集,省略了其余部分。

我需要一个标题,所以一时兴起,我选择了《像计算机科学家一样思考》。

我的第一个版本很粗糙,但它起作用了。学生们阅读了教材,并且他们理解得足够多了,我可以在课堂上花时间讲解难点、有趣的话题,以及(最重要的是)让学生练习。

我根据 GNU 自由文档许可证发布了这本书,该许可证允许用户复制、修改和分发这本书。

接下来发生的事情是最酷的部分。弗吉尼亚州的一位高中老师 Jeff Elkner 采用了我的教材并将其翻译成 Python。他给我寄了一份他的翻译稿,我也有幸通过阅读自己的教材来学习 Python。

我和 Jeff 修改了这本书,加入了 Chris Meyers 的案例研究,并在 2001 年发布了《像计算机科学家一样思考:用 Python 学习》,同样是在 GNU 自由文档许可证下。作为 Green Tea Press,我出版了这本书,并开始通过 Amazon.com 和大学书店销售实体书。Green Tea Press 的其他书籍可以在 greenteapress.com 上找到。

2003 年,我开始在奥林学院任教,我第一次有机会教授 Python。与 Java 相比,结果令人惊叹。学生们挣扎更少,学得更多,参与了更多有趣的项目,而且总体来说乐趣更多。

在过去的五年里,我一直在不断完善这本书,纠正错误,改进一些例子,并添加新的内容,尤其是习题。2008 年,我开始着手进行一次重大修订——与此同时,我收到了剑桥大学出版社一位编辑的来信,他有意出版下一版。真是天时地利人和!

最终出版了这本书,现在标题改成了更低调的《Think Python》。一些变化包括

  • 我在每章的末尾添加了一个关于调试的部分。这些部分介绍了查找和避免错误的一般技术,以及关于 Python 陷阱的警告。
  • 我删除了最后几章关于列表和树的实现部分。我仍然很喜欢这些主题,但我认为它们与这本书的其余部分不一致。
  • 我添加了更多习题,从简单的理解测试到一些大型项目。
  • 我添加了一系列案例研究——更长的例子,包含习题、解决方案和讨论。其中一些基于 Swampy,这是我为课堂使用而编写的一套 Python 程序。Swampy、代码示例和一些解决方案可以在 thinkpython.com 上找到。
  • 我扩展了对编程开发计划和基本设计模式的讨论。
  • Python 的使用更加地道。这本书仍然是关于编程的,而不是关于 Python 的,但现在我认为这本书从语言中获得了更多价值。

我希望你喜欢使用这本书,并且它能帮助你学习编程,以及至少在一定程度上像计算机科学家一样思考。

Allen B. Downey
马萨诸塞州尼德姆

Allen Downey 是弗兰克林 W. 奥林工程学院的计算机科学副教授。

鸣谢

[编辑 | 编辑源代码]

首先也是最重要的是,我要感谢 Jeff Elkner,他将我的 Java 教材翻译成 Python,这开启了这个项目,并且让我认识了最终成为我最喜欢的语言。

我还要感谢 Chris Meyers,他为《像计算机科学家一样思考》贡献了一些章节。

我还要感谢自由软件基金会开发了 GNU 自由文档许可证,它使我和 Jeff 以及 Chris 的合作成为可能。

我还要感谢 Lulu 的编辑们,他们为《像计算机科学家一样思考》付出了努力。

我感谢所有使用早期版本教材的学生,以及所有发送了更正和建议的贡献者(列在下面)。

我还要感谢我的妻子 Lisa,感谢她为这本书做出的贡献,以及 Green Tea Press,以及其他所有事情。

贡献者名单

[编辑 | 编辑源代码]

在过去的几年里,超过 100 位眼光敏锐、思想深邃的读者提出了建议和更正。他们的贡献和对这个项目的热情对我们帮助很大。

如果你有任何建议或更正,请发送电子邮件至feedback@thinkpython.com. 如果我根据你的反馈进行了修改,我会将你添加到贡献者名单(除非你要求省略)。

如果你至少包含错误出现的句子的一部分,这将使我更容易搜索。页码和章节号也可以,但不太容易使用。谢谢!

  • Lloyd Hugh Allen 纠正了第 8.4 节中的一个错误。
  • Yvon Boulianne 纠正了第 5 章中的一个语义错误。
  • Fred Bremmer 提交了第 2.1 节中的一个更正。
  • Jonah Cohen 编写了 Perl 脚本,将这本书的 LaTeX 源代码转换为漂亮的 HTML。
  • Michael Conlon 在第 2 章中提交了一个语法更正,在第 1 章中提交了一个风格改进,并且他发起了关于解释器技术方面的讨论。
  • Benoit Girard 纠正了第 5.6 节中一个幽默的错误。
  • Courtney Gleason 和 Katherine Smith 编写了horsebet.py,它在早期版本的教材中被用作案例研究。他们的程序现在可以在网站上找到。
  • Lee Harr 提交了比我们这里有空间列出的还要多的更正,事实上,他应该被列为文本的主要编辑之一。
  • James Kaylin 是一名使用这本书的学生。他提交了许多更正。
  • David Kershaw 修复了损坏的catTwice第 3.10 节中的函数。
  • Eddie Lam 提交了第 1、2 和 3 章中的许多更正。他还修复了 Makefile,以便它在第一次运行时创建索引,并帮助我们建立了一个版本控制方案。
  • Man-Yong Lee 纠正了第 2.4 节中示例代码中的一个错误。
  • David Mayo 指出第 1 章中“无意识地”这个词需要改为“潜意识地”。
  • Chris McAloon 提交了对第 3.9 和 3.10 节的几个更正。
  • Matthew J. Moelter 是一位长期贡献者,他为这本书提交了大量的更正和建议。
  • Simon Dicon Montford 报告了一个丢失的函数定义和第 3 章中的几个错别字。他还发现了第 13 章中increment

函数中的错误。

  • John Ouzts 纠正了第 3 章中“返回值”的定义。
  • Kevin Parks 提供了宝贵的评论和建议,关于如何改进这本书的发布。
  • David Pool 发现第 1 章术语表中有一个错别字,以及友好的鼓励。
  • Michael Schmitt 纠正了关于文件和异常的章节中的一个错误。
  • Robin Shaw 指出第 13.1 节中存在一个错误,其中 printTime 函数在没有定义的情况下被用在一个示例中。
  • Paul Sleigh 发现了第 7 章中的一个错误,以及 Jonah Cohen 的 Perl 脚本(用于从 LaTeX 生成 HTML)中的一个错误。
  • Craig T. Snydal 正在德鲁大学的一门课程中测试教材。他贡献了一些宝贵的建议和更正。
  • Ian Thomas 和他的学生正在一门编程课程中使用教材。他们是第一个测试本书后半部分章节的人,他们做出了大量的更正和建议。
  • Keith Verheyden 提交了第 3 章中的一个更正。
  • Peter Winstanley 让我们知道第 3 章中存在一个长期存在的拉丁语错误。
  • Chris Wrobel 更正了关于文件 I/O 和异常的章节中的代码。
  • Moshe Zadka 为这个项目做出了宝贵的贡献。除了编写关于字典的章节的第一稿之外,他还

在本书的早期阶段提供了持续的指导。

  • Christoph Zwerschke 发送了几个更正和教学建议,并解释了 gleichselbe 之间的区别。
  • James Mayer 给我们发送了一大堆拼写错误和排版错误,包括贡献者名单中的两个错误。
  • Hayden McAfee 发现两个示例之间可能存在一个令人困惑的不一致。
  • 安吉尔·阿纳尔是国际翻译团队的一员,负责西班牙语版本的文本翻译。他还发现了英语版本中的一些错误。
  • 陶希杜尔·霍克和莱克斯·别列日尼创作了第 1 章的插图,并改进了许多其他插图。
  • 米歇尔·阿尔泽塔博士在第 8 章中发现了一个错误,并针对斐波那契数列和“老处女”游戏提出了了一些有趣的教学意见和建议。
  • 安迪·米切尔在第 1 章中发现了一个拼写错误,在第 2 章中发现了一个示例错误。
  • 卡林·哈维建议在第 7 章中进行澄清,并发现了一些拼写错误。
  • 克里斯托弗·P·史密斯发现了一些拼写错误,并帮助我们准备更新 Python 2.2 版本的书籍。
  • 大卫·哈钦斯在前言中发现了一个拼写错误。
  • 格雷戈尔·林格尔在奥地利维也纳的一所高中教授 Python 语言。他正在进行德语版本的书籍翻译,并发现了第 5 章中的一些严重错误。
  • 朱莉·彼得斯在序言中发现了一个拼写错误。
  • 弗洛林·奥普里纳提交了对makeTime函数的改进,对printTime函数的更正,以及一个不错的拼写错误修正。
  • D.J.韦伯建议在第 3 章中进行澄清。
  • 肯在第 8 章、第 9 章和第 11 章中发现了一堆错误。
  • 伊沃·韦弗在第 5 章中发现了一个拼写错误,并在第 3 章中建议进行澄清。
  • 柯蒂斯·扬科建议在第 2 章中进行澄清。
  • 本·洛根提交了一些拼写错误,以及将书籍翻译成 HTML 的问题。
  • 杰森·阿姆斯特朗发现了第 2 章中缺少的单词。
  • 路易斯·科迪埃在第 16 章中发现了一个代码与文本不匹配的地方。
  • 布莱恩·凯恩建议在第 2 章和第 3 章中进行一些澄清。
  • 罗伯·布莱克提交了一堆更正,包括一些针对 Python 2.2 的更改。
  • 巴黎中央理工学院的让-菲利普·雷提交了一些补丁,包括一些针对 Python 2.2 的更新和其他深思熟虑的改进。
  • 乔治·华盛顿大学的杰森·马德尔提出了一些有用的建议和更正。
  • 简·冈托夫特-布鲁恩提醒我们,“a error”本身就是一个错误。
  • 亚伯·大卫和亚历克西斯·迪诺提醒我们,“matrix”的复数形式是“matrices”,而不是“matrixes”。这个错误已经在书中存在了好几年,但两位同名首字母的读者却在同一天报告了它。真是奇怪。
  • 查尔斯·塞耶建议我们删除一些语句结尾处的分号,并清理我们对“参数”和“参数”的使用。
  • 罗杰·斯佩伯格在第 3 章中指出了一个扭曲的逻辑。
  • 萨姆·布尔指出了第 2 章中一个令人困惑的段落。
  • 安德鲁·张指出了两个“使用前定义”的例子。
  • C. 科里·卡佩尔发现了第三个调试定理中缺少的单词,以及第 4 章中的一个拼写错误。
  • 亚历山德拉帮助澄清了一些关于“海龟”的困惑。
  • 维姆·香槟在字典示例中发现了一个错误。
  • 道格拉斯·赖特指出了arc.
  • 函数中地板除法的一个问题。
  • 贾里德·斯宾多在句末发现了一些残留物。
  • 林佩亨发送了一些非常有帮助的建议。
  • 雷·哈格特维特提交了两个错误和一个不算错误的错误。
  • 托尔斯滕·许布什指出了 Swampy 中的不一致。
  • 英格·佩图霍夫修正了第 14 章中的一个例子。
  • 阿内·巴本豪瑟海德发送了一些有帮助的修正。
  • 马克·E·卡西达很擅长发现重复的单词。
  • 斯科特·泰勒填补了一个缺少的单词。然后提交了一堆修正。
  • 戈登·谢泼德提交了一些修正,都分别在不同的电子邮件中。安德鲁·特纳发现了第 8 章中的一个错误。
  • 亚当·霍巴特修正了arc.
  • 函数中地板除法的一个问题。达里尔·汉蒙德和莎拉·齐默曼指出我过早地使用了math.pi。
  • 乔治·萨斯在调试部分发现了一个错误。
  • 布莱恩·宾厄姆建议了练习 11.9。
  • 莉娅·恩格尔伯特-芬顿指出我使用了tuple作为变量名,违反了我自己的建议。然后发现了一些拼写错误和一个“使用前定义”的错误。
  • 乔·冯克发现了一个拼写错误。
  • 曹超在斐波那契数列示例中发现了一个不一致。
  • 杰夫·佩恩知道空格和垃圾邮件的区别。
  • 鲁博斯·平特斯提交了一个拼写错误。
  • 格雷格·林德和阿比盖尔·海斯霍夫建议了练习 14.6。
  • 马克斯·黑尔佩林指出了 Python 3.0 中即将发生的变化。马克斯是杰出的书籍《具体抽象》的作者之一,在你读完这本书之后,你可能想读一下这本书。
  • 乔蒂帕特·波纳瓦莱在错误消息中发现了一个错误。
  • 斯坦尼斯瓦夫·安托尔发送了一份非常有用的建议清单。
  • 埃里克·帕什曼发送了第 4-11 章的一些更正。
  • 米格尔·阿泽维多发现了一些拼写错误。
  • 刘建华提交了一份很长的更正清单。
  • 尼克·金发现了一个缺少的单词。
  • 马丁·祖特发送了一份很长的建议清单。
  • 亚当·齐默曼在我对“实例”的“实例”中发现了一个不一致,以及其他几个错误。
  • 拉特纳卡尔·提瓦里建议用脚注解释退化三角形。
  • 阿努拉格·戈尔建议了 is_abecedarian 函数的另一种解决方案,并发送了一些额外的更正。他还会拼写简·奥斯汀的名字。
  • 凯利·克拉泽发现了其中一个拼写错误。
  • 马克·格里菲斯指出了第 3 章中一个令人困惑的例子。
  • 罗伊丹·翁吉在我的牛顿法中发现了一个错误。

这本书的更多奇异冒险

[编辑 | 编辑源代码]

2008 年 9 月,Whiteknight 将绿茶出版社[2] 的“Think Python” 的 HTML 版本转换为[3] 上的维基文本版本。现在,任何人都可以改进文本。

参考文献

[编辑 | 编辑源代码]
  1. "这本书的奇特历史" 由艾伦·B·唐尼著
  2. "Think Python" 在绿茶出版社
  3. : Think Python
取自 "https://wikibooks.cn/w/index.php?title=Think_Python/Preface&oldid=3595023"
华夏公益教科书