本书的奇特历史
1999年,我正在为一门Java的编程入门课程备课。这门课我已经教过3个学期,感到有些灰心。课程的不及格率太高,即使是那些及格的学生,也只获得了很低的成就。
我发现问题之一是教材。它们太厚,有太多冗余的细节,而针对编程技巧的高阶的指导却很不足。并且学生们都受着“陷阱效应”的苦恼:开头时很容易,也能循序渐进,但接着在第5章左右,整个地板就突然陷落了。新资讯来得太多、来得太快,以至于我必须花费一学期剩下的全部时间来帮助他们拾回丢失的片段。
开课前两周,我决定自己来编写教材。我的目标有以下几个。
尽量简短。学生读10页书,比不读50页书要好。注意词汇。我尝试尽量少用术语,并在第一次使用它们时做好定义。循序渐进。为了避免陷阱效应,我抽出了最困难的课题,并把它们划分成更细的学习步骤。专注于编程,而不是编程语言。我只注意包涵了Java的最小的可用子集,而忽略掉其他。我需要一个标题,所以心血来潮选择了How to Think Like a Computer Scientist。
第一版教材很粗糙,但确实有效。学生们读完课本,懂得了足够的基础知识,以至我甚至可以利用课堂时间和他们一起讨论更难、更有趣的话题,并且(最重要的是)可以让学生们有足够的时间在课堂上做练习。
我将这本书按照GNU自由文档许可协议(GNU Free Documentation License)发布,让用户可以复制、修改和分发本书。
接下来发生了最酷的事情。Jeff Elkner,弗吉尼亚州的一位高中老师,使用了我的书,并且将其翻译成Python语言的版本。他寄给我他的翻译副本,于是我有了一次很奇特的经历——通过读我自己的书来学习Python。通过绿茶出版社(Green Tea Press),在2001年我出版了第一个Python版本。
2003年,我开始在欧林学院(Olin College)教学,并第一次需要教授Python语言。和Java的对比非常惊人。学生们困扰更少,学会得更多,从事更有意思的项目,总的来说得到了更多的乐趣。
结果就产生了本书,并使用了不那么宏伟堂皇的书名:Think Python。部分改动如下所述。
我在每章的结尾添加了一节关于调试的说明。这些章节描述寻找和避免bug的通用技巧,并警示Python中容易出错的误区。我增加了更多的练习,小到简短的理解性测试,大到几个实际工程。并且编写了大部分练习的解答。我添加了一系列案例研究——较长的示例,包括练习、解答以及讨论。其中有些是基于Swampy——我为Python课程所写的一套代码。Swampy、代码示例以及它们的解答,可以在http://thinkpython.com上找到。我扩展了关于程序开发计划和基础设计模式的讨论。我增加了关于调试、算法分析和使用Lumpy画UML图的附录。我希望你喜欢这本书,并希望它至少能提供一点帮助,助你学会像计算机科学家那样编程和思考。
—— Allen B. Downey
Needham,MA
第1章 程序之道第2章 变量、表达式和语句[第3章 函数3.1 函数调用](https://yq.aliyun.com/articles/96133/)3.2 类型转换函数3.3 数学函数3.4 组合3.5 添加新函数3.6 定义和使用3.7 执行流程3.8 形参和实参3.9 变量和形参是局部的3.10 栈图3.11 有返回值函数和无返回值函数3.12 为什么要有函数3.13 使用from导入模块3.14 调试3.15 术语表3.16 练习[第4章 案例研究:接口设计4.1 乌龟世界](https://yq.aliyun.com/articles/96213/)4.2 简单重复4.3 练习4.4 封装4.5 泛化4.6 接口设计4.7 重构4.8 一个开发计划4.9 文档字符串4.10 调试4.11 术语表4.12 练习第5章 条件和递归第6章 有返回函数第7章 迭代第8章 字符串第9章 案例分析:文字游戏第10章 列表第11章 字典第12章 元组第13章 案例研究:选择数据结构第14章 文件第15章 类和对象第16章 类和函数第17章 类和方法第18章 继承第19章 案例研究:Tkinter附录A 调试附录B 算法分析附录C Lumpy译后记
相关资源:敏捷开发V1.0.pptx