索引 / 001 ZH-CN
Python计算和编程导论 cover

计算机科学

计算机科学

Python计算和编程导论

John V. Guttag

英文原名: Introduction to Computation and Programming Using Python

使用Python的计算和编程的全面介绍,融合基础概念、数据结构和高级应用,强调实际实现、计算建模和数据分析。

难度等级
入门
学术层次
本科
编程基础Python编程计算思维数据结构软件开发

01 / 导读

导读

引用

Guttag, J. V. (2021). Introduction to Computation and Programming Using Python: With Application to Computational Modeling and Understanding Data (3rd ed.). The MIT Press.

章节概要

本书共 26 章,另有一份 Python 3.8 速查表。前半部分讲授编程和算法基础,后半部分用 Python 为数据建模并解读数据。

第1–3章:Getting Started(入门);Introduction to Python(Python 简介);Some Simple Numerical Programs(几个简单的数值程序)

开篇几章把计算看作解决问题的过程,区分陈述性知识与命令式知识,并介绍 Python 的基本类型、运算符和控制流。第3章把这些内容用于简单的数值程序,通过穷举枚举、近似和二分查找来求得答案。

第4–7章:Functions, Scoping, and Abstraction(函数、作用域与抽象);Structured Types and Mutability(结构化类型与可变性);Recursion and Global Variables(递归与全局变量);Modules and Files(模块与文件)

函数与作用域被当作抽象的工具来介绍。随后讲授元组、列表和字典,并关注可变性,再讲递归和全局变量,最后是把代码组织成模块以及读写文件。

第8–10章:Testing and Debugging(测试与调试);Exceptions and Assertions(异常与断言);Classes and Object-Oriented Programming(类与面向对象编程)

这几章讲授系统的测试与调试、异常处理与断言,然后是类与面向对象编程。

第11–13章:A Simplistic Introduction to Algorithmic Complexity(算法复杂度的简化介绍);Some Simple Algorithms and Data Structures(几个简单的算法与数据结构);Plotting and More about Classes(绘图与类的更多内容)

先非正式地介绍算法复杂度,再讲查找和排序等简单算法与数据结构。第13章把绘图与对类的进一步使用结合起来。

第14–15章:Knapsack and Graph Optimization Problems(背包与图的优化问题);Dynamic Programming(动态规划)

优化问题以背包问题和图问题的形式提出,随后是一章动态规划。

第16–19章:Random Walks and More about Data Visualization(随机游走与更多数据可视化);Stochastic Programs, Probability, and Distributions(随机程序、概率与分布);Monte Carlo Simulation(蒙特卡罗模拟);Sampling and Confidence(抽样与置信度)

后半部分转向随机性:随机游走与可视化、概率与分布、蒙特卡罗模拟,以及抽样与置信区间。

第20–22章:Understanding Experimental Data(理解实验数据);Randomized Trials and Hypothesis Checking(随机试验与假设检验);Lies, Damned Lies, and Statistics(谎言、该死的谎言与统计)

这几章把概率知识用于解读实验数据、在随机试验中检验假设,并认识统计如何误导人。

第23–26章:Exploring Data with Pandas(用 pandas 探索数据);A Quick Look at Machine Learning(机器学习速览);Clustering(聚类);Classification Methods(分类方法)

最后几章用 pandas 探索数据,然后介绍机器学习,包括聚类和分类。

核心概念

第1–10章

  • 陈述性知识与命令式知识:全书的起点,区分描述“什么是真的”与描述“如何计算”。
  • 抽象与可变性:函数、作用域和结构化类型被当作控制复杂度的手段,而可变性则是微妙行为的来源。
  • 测试与异常:系统的测试、调试、异常处理和断言。

第11–15章

  • 算法复杂度:非正式地推理运行时间如何增长。
  • 动态规划:通过复用子问题的答案来求解背包等优化问题。

第16–26章

  • 蒙特卡罗模拟:通过重复随机试验估计某个量。
  • 抽样与置信度:判断样本结果可以在多大程度上被信任。
  • 聚类与分类:最后几章涉及的两类机器学习任务。

评析

优点

  • 编程与数据分析合于一书。 出版社介绍说,本书用 Python 以及 numpy、matplotlib、random、pandas 和 sklearn 等库讲授计算性问题求解,并包含用于建模和解读数据的数据科学技术。
  • 面向初学者。 出版社称本书把几乎没有编程经验的学生引入计算性问题求解。
  • 弧线完整。 算法、复杂度、模拟、统计和机器学习出现在同一本书里,因此一本教材即可支撑一门延伸到数据分析的入门课程。
  • 代码与勘误在线提供。 书中全部代码和勘误表都可在 MIT Press 的网页上获得。

局限

  • 后面的章节重广度而非深度。 机器学习占三章(速览、聚类、分类),统计相关内容分散在若干章里,因此这些部分属于入门介绍。
  • 节奏。 全书用 26 章从基本的 Python 语法讲到分类方法,所以后面的主题只能简要介绍;机器学习一章的标题本身就是“速览”。
  • 与 Python 绑定。 对类型、可变性和库的讲解都与 Python 3.8 相关,书末的速查表也是针对该版本编写的。

在课程中的定位

在本课程的入门编程书中,How to Design Programs 在 DrRacket 环境里讲授系统的设计流程,Structure and Interpretation of Computer Programs 强调抽象、高阶过程和解释器。Python Crash Course 是一本实用的 Python 入门书,以较大的项目收尾;Think Python 是清晰实用的 Python 编程与计算机科学入门。The C Programming Language 是面向系统级编程的简洁经典。

Guttag 的这本书适合作为较平缓的入门书之后的第二步,也适合习惯数学的读者作为第一本书,因为它从编程一路走向算法、模拟和数据分析。与 Python Crash Course 相比,它较少以项目驱动,更侧重计算思维;与 SICP 相比,它使用主流语言,并且没有关于构建解释器的章节。

如何使用本书

本书面向几乎没有编程经验的读者,适合作为计算的第一门课程,尤其是通向数据分析的课程。不要求事先学过 Python。

第1–10章是第一门课程的核心,第11–13章讲复杂度和基本算法。第14–15章对关注优化的读者是不错的可选步骤。第16–22章适合想学模拟与统计的读者,第23–26章适合想学数据处理与机器学习的读者。请亲手输入并运行每章的代码,并从 MIT Press 页面下载代码,与自己的版本对照。