前言

这本书的奇怪的历史

1999年一月,我准备在Java编程入门班教课。我之前教了三次,越教越感到沮丧。挂科率太高了,而且,即使稍有学成的学生,成绩整体水平也太低。

我发现教材里存在着问题。他们的范围太广泛了,有太多不必要详细了解的Java细节,也没有足够高层次的指导原则。他们都受陷阱所影响:他们会开始容易,循序渐进,然后在学到第5章的后半部分会直接阵亡。学生们需要在太短的时间里学会太多新知识,而我也必须在学期剩下的时间不断帮助学生拾起这些内容。

开学的第一天,两个星期前,我决定写自己的书。我的目标是:

  • 尽量使它简短。学生们会更倾向于阅读10页不是读50页。
  • 小心词汇量。我尽力将术语和定义减到最少。
  • 逐步建立知识结构。为了避免陷阱,我挑选出最困难的话题,并且他们分成一系列的小步骤。
  • 将注意力集中于编程,而不是编程语言。我尽量精简地挑选Java中有用的部分,并将其他舍去。

我需要一个标题,所以我选择了 怎样像计算机科学家一样思考。我的第一个版本是粗糙的,但它起作用了。学生们去阅读了并且能够明白,我可以将课堂时间花在更难的、更有趣的话题上,最重要的是,还有时间可以让学生练习。

我将这本书发布在GNU自由文档许可之下,它允许用户自由复制、修改,和自由发布这本书。

接下来发生的事情是很 cool 的一部分。Jeff Elkner,在弗吉尼亚州的一所高中的老师,采用我的书并且翻译成 Python。他送我一本他的翻译的副本,并且使我在阅读我自己的书的时候也有一些独到的 Python 学习体会。通过 Green Tea Press ,我在2001年出版了第一个以 Python 为主要语言的版本。

在2003年,我开始在奥林大学任教,那也是我第一次开始教 Python。Python 和 Java 的对比是十分明显的。学生不需要像Java那样努力地学习,却学到了更多,做了更多的有趣的项目,并且逐渐有了更多的乐趣。

在过去的九年里,我继续修订这本书,纠正错误,加入一些例子和材料,特别是练习。结果是,现在这本书有了一个不那么浮夸的名字 Think Python 。书里的一些变化有:

  • 我在每章节的最后都加入如何调试的部分。内容是这些章节发现和避免 bug 的一般方法,并对 Python 的坑做出警告。
  • 我增加了更多的练习,从对短测试的理解,到一些真实的案例操作。并且我写了关于他们的解决方案。
  • 我添加了一系列案例研究的例子和练习实践、解决方案,和讨论。有些是基于 Swampy ,这是一组我写的用于课堂的 Python 程序,Swampy,代码的范例,和一些解决方案都可从 http://thinkpython.com 网站中找到。
  • 我扩展了对程序开发方案和基本设计模式的探讨。
  • 我添加了一些附录,内容是关于调试、算法分析以及使用 Lumpy 帮助建立UML图表。

我希望你喜欢这本书,并用它帮助你学习编程和思考,至少有那么一点点,像一个计算机科学家一样思考。