索引 / 001 ZH-TW
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 頁面下載程式碼,與自己的版本對照。