本书以 Python 语言为工具教授计算机程序设计,强调解决问题、设计和编程是计算机科学的核心技能。本书特色鲜明、示例生动有趣、内容易读易学,适合 Python 入门程序员阅读,也适合高校计算机专业的教师和学生参考。
本书具有以下特点:
John Zelle 是美国 Wartburg 大学数学和计算机系教授。他负责教授 Python 程序设计课程,并且结合多年的教学经验编写了本书,在美国高校受到普遍的欢迎。他还从事 VR、AI 等方面的研究,发表了一些机器学习方面的论文。
当出版商第一次发给我这本书的草稿时,我立刻感到十分兴奋。它看起来像是 Python 教科书,但实际上是对编程技术的介绍,只是使用 Python 作为初学者的首选工具。这是我一直以来想象的 Python 在教育中最大的用途:不是作为唯一的语言,而是作为第一种语言,就像在艺术中一样,开始学习时用铅笔绘画,而不是立即画油画。
作者在本书前言中提到,Python 作为第一种编程语言是接近理想的,因为它不是“玩具语言”。作为 Python 的创建者,我不想独占所有的功劳:Python 源于 ABC,这种语言在20世纪80年代初由阿姆斯特丹国家数学和计算机科学研究所(CWI)的 Lambert Meertens、Leo Geurts 等人设计,旨在教授程序设计。如果说我为他们的工作添加了什么东西,那就是让 Python 变成了一种非玩具语言,具有广泛的用户群、广泛的标准和大量的第三方应用程序模块。
我没有正式的教学经验,所以我可能没有资格来评判其教育效果。不过,作为一名具有将近30年经验的程序员,读过本书,我非常赞赏本书对困难概念的明确解释。我也喜欢书中许多好的练习和问题,既检查理解,又鼓励思考更深层次的问题。
恭喜本书读者!学习 Python 将得到很好的回报。我保证在这个过程中你会感到快乐,我希望你在成为专业的软件开发人员后,不要忘记你的第一种语言。
——Guido van Rossum,Python 之父
本书旨在作为大学的一门计算课程的主要教材。它采用相当传统的方法,强调解决问题、设计和编程是计算机科学的核心技能。但是,这些思想利用非传统语言(即 Python)来说明。在我的教学经验中,我发现许多学生很难掌握计算机科学和程序设计的基本概念。这个困难可以部分归咎于最常用于入门课程的语言和工具的复杂性。因此,这本教材只有一个总目标:尽可能简单地介绍基础计算机科学概念,但不是过于简单。使用 Python 是这个目标的核心。
传统的系统语言(如 C++、Ada 和 Java)的发展是为了解决大规模编程中的问题,主要侧重于结构和纪律。它们不是为了易于编写中小型程序。最近脚本(有时称为“敏捷”)语言(如 Python)的普及程度上升,这表明了一种替代方法。Python 非常灵活,让实验变得容易。解决简单问题的方法简单而优雅。Python 为新手程序员提供了一个很好的实验室。
Python 具有一些特征,使其成为第一种编程语言的接近完美的选择。Python 基本结构简单、干净、设计精良,使学生能够专注于算法思维和程序设计的主要技能,而不会陷入晦涩难解的语言细节。在 Python 中学习的概念可以直接传递给后续学习的系统语言(如 C ++ 和 Java)。但 Python 不是一种“玩具语言”,它是一种现实世界的生产语言,可以在几乎每个编程平台上免费提供,并且具有自己易于使用的集成编程环境。最好的是,Python 让学习编程又变得有趣了。
虽然我使用 Python 作为语言,但 Python 教学并不是本书的重点。相反,Python 用于说明适用于任何语言或计算环境的设计和编程的基本原理。在某些地方,我有意避免某些 Python 的功能和习惯用法,它们通常不会在其他语言中使用。市面上有很多关于 Python 的好书,本书旨在介绍计算。除了使用 Python 之外,本书还有其他一些特点,旨在使其成为计算机科学的平台。其中一些特点如下。
本书的第1版已经有些老旧,但它所采用的方法现在仍然有效,就像当时一样。
虽然基本原则并没有改变,但技术环境却变了。随着 Python 3.0 的发布,对原始资料的更新变得必要。第2版基本上与最初的版本相同,但更新使用了 Python 3.0。本书中的每个程序示例几乎不得不针对新的 Python 来修改。此外,为了适应 Python 中的某些更改(特别是删除了字符串库),内容的顺序稍做了调整,在讨论字符串处理之前介绍了对象术语。这种变化有一个好的副作用,即更早介绍计算机图形学,以激发学生的兴趣。
第3版延续了更新课本以反映新技术的传统,同时保留了经过时间考验的方法来教授计算机科学的入门课程。这个版本的一个重要变化是消除了 eval 的大部分用法,并增加了其危险性的讨论。在连接越来越多的世界中,越早开始考虑计算机安全性越好。
本书添加了几个新的图形示例,在第4章到第12章中给出,以引入支持动画的图形库的新功能,包括简单的视频游戏开发。这使得最新的课本与大作业项目的类型保持一致,这些大作业常在现代的入门课程中布置。
在整个课本中还有一些较小的改动,其中包括:
为了保持简单的目标,我试图限制2门课不会涵盖的内容数量。不过,这里的内容可能比较多,典型的一学期入门课程也许不能涵盖。我的课程依次介绍了前12章中的几乎所有内容,尽管不一定深入介绍每个部分。第13章(“算法设计与递归”)中的一个或两个主题通常穿插在学期中的适当时候。
注意到不同的教师喜欢以不同的方式处理主题,我试图保持材料相对灵活。第1章~第4章(“计算机和程序”“编写简单程序”“数字计算”“对象和图形”)是必不可少的介绍,应该按顺序进行说明。字符串处理的第5章(“序列:字符串、列表和文件”)的初始部分也是基本的,但是稍后的主题(如字符串格式化和文件处理)可能会被延迟,直到后来需要。第6章~第8章(“定义函数”“判断结构”和“循环结构和布尔值”)设计为独立的,可以以任何顺序进行。关于设计方法的第9章~第12章是按顺序进行的,但是如果教师希望在各种设计技术之前介绍列表(数组),那么第11章(“数据集合”)中的内容可以很容易地提前。希望强调面向对象设计的教师不需要花费很多时间在第9章。第13章包含更多高级材料,可能会在最后介绍或穿插在整个课程的各个地方。
多年来,我教授 CS1 的方法受到了我读过并用于课堂的许多新教材的影响。我从这些书中学到的很多东西无疑已经融入了本书。有几位专家的方法非常重要,我觉得他们值得特别提及。A. K. Dewdney 一直有一个诀窍,找出说明复杂问题的简单例子。我从中借鉴了一些,装上了 Python 的新腿。我也感谢 Owen Astrachan 和 Cay Horstmann 的精彩教科书。我在第4章介绍的图形库直接受到 Horstmann 设计的类似库的教学经验启发。我也从 Nell Dale 那里学到了很多关于教授计算机科学的知识,当时我是得克萨斯大学的研究生,很幸运地担任了助教。
许多人直接或间接地为本书做出了贡献。我也得到了沃特伯格学院的同事(和前同事)的很多帮助和鼓励:Lynn Olson 在一开始就不动摇地支持,Josef Breutzmann 提供了许多项目想法,Terry Letsche 为第1版和第3版编写了 PowerPoint 幻灯片。
我要感谢以下阅读或评论第1版手稿的人:莫赫德州立大学的 Rus May、北卡罗莱纳州立大学的 Carolyn Miller、谷歌的 Guido Van Rossum、加州州立大学(Chico)的 Jim Sager、森特学院的 Christine Shannon、罗彻斯特理工学院的 Paul Tymann、亚利桑那大学的 Suzanne Westbrook。我很感激首都大学的 Dave Reed,他使用了第1版的早期版本,提供了无数有见地的建议,并与芝加哥大学的 Jeffrey Cohen 合作,为本版本提供了替代的章末练习。Ernie Ackermann 在玛丽华盛顿学院试讲了第2版。第3版是由位于 San Luis Obispo 的加州理工大学的 Theresa Migler 和我的同事 Terry Letsche 在课堂上试讲的。David Bantz 对草稿提供了反馈意见。感谢所有的宝贵意见和建议。
我也要感谢 Franklin, Beedle and Associates 的朋友,特别是 Tom Sumner、Brenda Jones 和 Jaron Ayres,他们把我喜爱的项目变成一本真正的教科书。本版献给 Jim Leisy 作为纪念,他是 Franklin,Beedle and Associates 的创始人,在第3版正要付梓时意外过世。Jim 是个了不起的人,兴趣非常广泛。正是他的远见、指导、不懈的热情和不断的激励,最终让我成为一名教科书作者,让这本书成功。
特别感谢所有我教过的学生,他们在教学方面给我很多教益。还要感谢沃特伯格学院批准我休假,支持我写书。最后但最重要的是,我要感谢我的妻子 Elizabeth Bingham,她作为编辑、顾问和鼓舞士气者,在我写作期间容忍我。
阅读全文: http://gitbook.cn/gitchat/geekbook/5bfbbf2d7d496f13396961e2