EDU-SIG:教育中的 Python
EDU-SIG:教育中的 Python
越來越多地,Python 在教育的各個層次 取得進展。Python 提供了一個互動式環境,可以在其中探索解決問題的過程式、函式式和麵向物件的方法。其高層次的資料結構和清晰的語法使其成為理想的第一語言,而大量的現有庫使其適合處理幾乎任何程式設計任務。
Edu-sig 透過其 郵件列表,為比較筆記和討論 Python 在教育中的未來可能性提供了一個非正式場所。它的起源可以追溯到 Guido van Rossum 開創性的 人人可程式設計 (CP4E),這是一項被 DARPA 接受的資助提案,並在 1999 年提供了一些資金。
成員包括但不限於在課程中使用 Python 的教育工作者、獨立開發人員和教育材料的作者。討論的重點是 Python 在各個級別的使用,從初級到高階應用程式。
Python 2 還是 Python 3?
幾年前,引入了新版本的 Python (3)。這個新版本與之前的版本有一些小的但重要的變化。對於初學者來說,最明顯的變化是 print,它曾經是 Python 的關鍵字
>>> print "Hello World!" # for Python 2
現在是一個函式
>>> print("Hello World!") # for Python 3
由於這些變化,為 Python 2 編寫的程式很可能與 Python 3 不相容(反之亦然)。你們中的一些人可能無法控制提供給學生的 Python 版本。如果情況如此,如果你們和你們的學生無法訪問最好/最新的 Python 版本,你們不應該太絕望:Python 作為第一語言是一個絕佳的選擇,並且版本之間的相對較小的變化並不會改變這一事實。
如果您對提供給學生的 Python 版本有一些控制權,那麼您需要做出選擇。在這種情況下,我們想提供以下內容
- 如果可以,請使用 Python 3,更具體地說是 3.4 版本,並利用為其提供的越來越多的第三方庫。如果您計劃將 Python 作為入門語言(例如在 CS-1 課程中)進行教學,尤其如此,因為 Python 3 是 Python 的未來。此外,如果您使用非英語的語言教授 Python,其中非 ASCII 字元可以在編寫識別符號時得到很好的利用,那麼 Python 3 絕對應該是您的選擇。
- 如果您需要尚未移植到 Python 3 的第三方模組,請使用 Python 2,更具體地說是 2.7 版本。
郵件列表等
如上所述,Edu-Sig 社群有自己的 郵件列表。另外兩個郵件列表對教育工作者可能感興趣:python tutor 和一般的 python-list。這三個列表都可以在 可搜尋的存檔 中找到,該存檔位於 ActiveState 網站,該網站也託管著著名的 Python Cookbook。python tutor 郵件列表對於學習該語言並尋找程式設計問題答案的初學者很有用;歡迎教育工作者以志願者的身份加入;edu-sig 郵件列表 更適合討論 Python 在教育環境中的使用。
面向教育工作者的免費書籍和教程
有許多免費提供的 Python 教程。例如,Python wiki 上提供了 Python 初學者指南 的集合。此外,以下內容可能對教育工作者特別感興趣
- Think Python,作者 Allen B. Downey,是 How to Think Like a Computer Scientist Learning with Python 的大幅修訂版。它可以以各種格式免費獲得;也可以購買印刷版。
- Python for Informatics: Exploring Information,作者 Charles Severance,是另一本從上面提到的免費提供的 How to Think Like a Computer Scientist Learning with Python 中衍生出來的書。截至 2010 年 1 月,這本書僅部分完成,各章節以 pdf 檔案形式免費提供。
- Dave Kuhlman 的免費書籍 和其他教程集也是教育工作者的一個非常好的資源。
- Andrew Harrington 的實踐教程 適合高中和大學級別的 CS-0 學生。 Harrington 博士 在芝加哥洛約拉大學任教。
教科書和其他非免費書籍
雖然有許多免費書籍和教程可用,但有些人喜歡擁有紙質的實際副本。如果您屬於這一類,您可能會驚訝地發現,已經編寫了近一百本關於 Python 程式設計的書籍。在這裡,我們將僅關注對教授程式設計入門課程的教育工作者可能感興趣的子集。更多書籍可以在 這裡 和 這裡 找到,或者透過網際網路搜尋找到。
為兒童、年輕人和老年人準備
- Python Programming for the Absolute Beginner,作者 Michael Dawson,是為這一受眾編寫的第一批書籍之一,並且仍然是最受歡迎的書籍之一。
- Hello World! Computer Programming for Kids and Other Beginners,作者 Warren Sande,正如標題所說。
- Computer Programming is Fun!,作者 David Handy,是在考慮幼兒的情況下編寫的。
也提供大學級別的教科書
- Python Programming: An Introduction to Computer Science,作者 John Zelle,是一本專為 CS-1 課程設計的書籍。 Zelle 博士 在瓦特堡學院任教。
- Data Structures and Algorithms Using Python and C++,作者 David M. Reed 和 John Zelle,是一本專為 CS-2 課程設計的書籍。
- Object-Oriented Programming in Python,作者 Michael H. Goldwasser 和 David Letscher,是一本專為 CS-1 課程設計的書籍。Goldwasser 博士和 Letscher 博士在聖路易斯大學任教。他們編寫了一個免費的 面向物件圖形包,作為其教科書的配套材料。
- Practical Programming (2nd edition): An Introduction to Computer Science Using Python,作者 Paul Gries、Jennifer Campbell 和 Jason Montojo,是一本專為 CS-1 課程設計的教科書。所有三位作者都與多倫多大學有關。
- Python Programming in Context,作者 Bradley N. Miller 和 David L. Ranum,是一本專為 CS-1 課程設計的書籍。Miller 博士和 Ranum 博士在路德學院任教。
- 《使用Python進行計算實踐》,作者 Bill Punch 和 Rich Enbody,是一本使用 Python 語言教授 CS1 概念的書籍。教學材料包括完整的 PowerPoint 幻燈片、實驗室練習、Python 專案以及書中 600 多個練習的解答。Punch 和 Enbody 都是密歇根州立大學計算機科學與工程學院的教員。
- 《數字時代的數學與Python程式設計》,作者 Maria Litvin 和 Gary Litvin,則採用了非常不同的方法。根據網站上的描述,它獨特地融合了數學和程式設計,旨在讓計算機科學入門課程的學生了解與計算相關的嚴格數學,以及編寫程式的實用技能。
- 《計算科學的Python指令碼》,作者 Hans Petter Langtangen 博士,教授對於科學計算特別有用的工具和程式設計概念。該書的主頁包含一套相關的相當完整的幻燈片。
- Hans Petter Langtangen 博士還寫了第二本書,《Python科學程式設計入門》。本書使用了數學、統計學、物理學、生物學和金融學的例子。本書教授“Matlab 風格”和程序式程式設計,以及面向物件程式設計。它也可以在亞馬遜上購買。
學習環境
由於 Python 是一種解釋型語言,開始程式設計所需要的一切只是一個終端視窗。然而,對於你的學生來說,這並不是最友好的環境;相反,我們建議你使用類似 IDLE(代表整合開發環境)的東西,它包含在任何支援 Tcl 的平臺(包括 Windows)的 Python 安裝檔案中。
至於你自己,如果你喜歡直接從終端視窗進行程式設計,那麼比預設直譯器更好的選擇可能是 IPython。
除了 IDLE 之外,還有許多第三方工具,你可以透過參考Python 編輯器 Wiki 和 Python 整合開發環境 Wiki來了解它們。
學習資源
這些資源、互動式線上教程和其他教育資源要麼幫助教授 Python,要麼使用 Python 來教授程式設計。
- 線上 Python Tutor 是由 Philip Guo 建立的免費教育工具,它可以幫助學生克服學習程式設計的一個基本障礙:理解當計算機執行程式的每一行原始碼時會發生什麼。使用此工具,教師或學生可以在 Web 瀏覽器中編寫 Python 程式,並可視化計算機在執行程式時逐步執行的操作。
- 互動式 Python 網站上有即時的 Python 書籍,讓學習者能夠在瀏覽器中執行 Python 程式碼,並檢視他們正在執行的程式的視覺化效果。
- Python for Fun 是一系列小型 Python 程式,旨在針對中級程式設計師,探索廣泛的計算機科學概念,包括邏輯電路和人工智慧。
- Pynguin 是一個統一的編輯器、互動式控制檯和圖形顯示區域,使用 Python 和 PyQt 工具包編寫。Pynguin 旨在為初學者程式設計師提供一個簡單的環境來介紹程式設計概念。Pygnuin 程式生成可以儲存為 SVG 或 PNG 檔案的數字影像。
- Crunchy 是一個 Python 程式,可以將原本靜態的 html 教程轉換為瀏覽器中的互動式 Python 會話。Crunchy 早期版本的基本功能在 這個螢幕錄影中進行了演示。
- 一個新的“類似 Mathematica”的 Python 環境是 Codenode。你可能想親自嘗試一下。
- PyKata 是一個新的線上環境,旨在作為 Python 的教學輔助工具。它包含少量但不斷增長的程式設計練習,學生可以自行嘗試並獲得即時反饋。歡迎教育工作者貢獻他們自己的練習。
- Pyro 是一個 Python 程式設計環境,用於輕鬆探索人工智慧和機器人技術中的高階主題。
- GvR,或 Guido van Robot,致力於模仿 Richard Pattis 建立的原始 *Karel the Robot*。它使用基於縮排的類似 Python 的語言和大約 20 個旨在教授程式設計概念的課程。 有一個線上演示可用。
- RUR-PLE 是一個 Python 學習環境,包括一個編輯器、一個 Python shell,以及一個更重要的 Karel the Robot 克隆,可以使用 Python 語法進行程式設計,可以使用過程式命令[例如 move()] 或面向物件的方法 [例如 robot.move()]。它包括大約 40 個課程。一個新的基於 Web 的版本,Reeborg's World,比桌面版本提供的教程更多。
- Python 的 turtle 模組本身不是一個學習環境,但它已針對 Python 2.6 及更高版本進行了全面改進,值得一看。示例包含在原始碼發行版中(以及一個 demoViewer 程式,它也作為如何將 turtle 圖形嵌入到 Tkinter 應用程式中的示例。)對於那些安裝了舊版本 Python(2.3、2.4 或 2.5)的使用者,可以在這裡找到 turtle 模組的適用版本,以及這裡的示例。有一個Pycon 2009 演示 turtle 模組的影片可用。
影片
Python 社群的播客、螢幕錄影和影片演示越來越多,其中許多可能對教育工作者感興趣。有關更多詳細資訊,請參閱 Python 的音訊/影片教學材料
專門的軟體包
鑑於 Python 發行版中包含大量 模組,人們常說 Python 自帶電池。如果標準發行版不包含你需要的模組,你可能需要參考Python 包索引,這是一個包含近 7000 個額外包的儲存庫。
以下只是可用資源的一小部分示例。
- NumPy 是使用 Python 進行科學計算所需的基本包。它包含
- 一個強大的 N 維陣列物件
- 複雜的廣播功能
- 基本的線性代數函式
- 基本的傅立葉變換
- 複雜的隨機數生成能力
- 用於整合 Fortran 程式碼的工具。
- 用於整合 C/C++ 程式碼的工具。
- SciPy(發音為“Sigh Pie”)是用於數學、科學和工程的開源軟體。SciPy 庫依賴於 NumPy,它提供方便快捷的 N 維陣列操作。SciPy 庫旨在與 NumPy 陣列一起使用,並提供許多使用者友好且高效的數值例程,例如用於數值積分和最佳化的例程。它們共同在所有流行的作業系統上執行,安裝速度快,並且免費。NumPy 和 SciPy 易於使用,但功能強大到足以讓世界上一些頂尖的科學家和工程師依賴它們。如果你需要在計算機上運算元字並顯示或釋出結果,請嘗試 SciPy!
- matplotlib 是一個 python 2D 繪相簿,它可以生成各種硬複製格式和跨平臺的互動式環境中的出版質量圖形。matplotlib 可以在 python 指令碼、python 和 ipython shell(類似於 matlab 或 mathematica)、Web 應用程式伺服器和六個圖形使用者介面工具包中使用。matplotlib 試圖使簡單的事情變得簡單,使困難的事情成為可能。你只需幾行程式碼就可以生成繪圖、直方圖、功率譜、條形圖、誤差圖、散點圖等。
- PIL,Python 影像庫,為你的 Python 直譯器新增影像處理功能。此庫支援多種檔案格式,並提供強大的影像處理和圖形功能。
- OpenOpt 是一個基於 Numpy 的免費最佳化框架。除了各種數值最佳化包之外,它還包括
- FuncDesigner - 一種用於快速構建變數/陣列上的函式並透過自動微分獲取其導數的工具。此外,可以透過 OpenOpt 在 FuncDesigner 中執行積分、插值、求解線性/非線性/ODE 方程組和數值最佳化問題。
- DerApproximator - 一種透過有限差分逼近來獲取(或檢查使用者提供的)導數的工具。
- SpaceFuncs - 一種用於 2D、3D、N 維幾何建模的工具,具有引數化計算、數值最佳化和求解幾何方程組的可能性。
- VPython 使建立可導航的 3D 顯示和動畫變得容易,即使對於那些程式設計經驗有限的人也是如此。它包括一個修改後的 IDLE 版本。
- ReportLab 使 Python 程式能夠直接以 Adobe 的 PDF 格式輸出。開源版本在 Python 程式設計師手中功能齊全。對於釋出課程材料很有用。
- SymPy 是一個用於符號數學的 Python 庫。它的目標是成為一個全功能的計算機代數系統 (CAS),同時保持程式碼儘可能簡單,以便於理解和輕鬆擴充套件。SymPy 完全用 Python 編寫,不需要任何外部庫。
- Sage 不是一個 Python 包,但它提供了一個展示 Python 作為程式語言的環境。它是一個在 GPL 下許可的免費開源數學軟體系統。它將許多現有開源軟體包的功能組合到一個通用的基於 Python 的介面中。Sage 的使命是為 Magma、Maple、Mathematica 和 Matlab 建立一個可行的免費開源替代方案。
- Blender 是一個跨平臺的 3D 建模套件,提供建模、動畫、互動式建立和播放功能。Blender 不是一個 Python 包,但它使用 Python 來支援指令碼。
- Michael H. Goldwasser 和 David Letscher 編寫了一個 面向物件的圖形包,與他們的教科書(如上所述)一起使用。
學術論文
許多學術論文都探討了將 Python 作為程式語言的用途。其中包括以下內容:
- Fotis Georgatos 博士的碩士論文,從教師的角度來看,Python 作為大學預科教育環境中教授程式設計的第一門計算機語言有多適用?
- 在高中計算機科學課程中使用 Python 記錄了 Jeff Elkner 在第九屆國際 Python 會議上報告的在課堂上使用 Python 的經驗。(另請參閱 Frank Willison 為 O'Reilly 採訪 Jeff 的訪談。)
- Wartburg College 的 John Zelle 博士提倡使用 Python 作為第一門語言,並在他的 網站上發表了幾篇關於該主題的論文。
- John Miller 的博士論文 透過程式設計 Python 提升計算機素養(1.37 MB)探討了使用 Python 進行教學的相關問題,並探討了 edu-sig 上討論的一些主題。
- Atanas Radenski 博士撰寫了一篇名為 “Python優先”:基於實驗室的計算機科學數字入門 的論文,描述了在將 CS1 課程的語言從 Java 切換到 Python 時獲得的積極體驗。
- Michael H. Goldwasser 博士和 David Letscher 博士撰寫了一篇名為 用 Python 教授面向物件的 CS1 的論文,該論文發表在 2008 年 6 月的第 13 屆計算機科學創新與技術年度會議 (ITiCSE) 的會議論文集中。他們還撰寫了 第一天及以後的圖形包,該論文發表在 2009 年 5 月的第 40 屆年度計算機科學教育 SIGCSE 技術研討會的會議論文集中。(上面包含了免費圖形包的連結。)
最後,雖然不是學術論文,但 Philip Guo 撰寫的 為什麼 Python 是初學者入門程式設計課程的絕佳語言 絕對值得一讀。
遊戲時間!
如果不是因為遊戲,可能很少有人會對程式設計感興趣,也不會有那麼多免費軟體被開發出來。Python 有兩個知名的遊戲開發框架:
其他
- Python for secretaries:一個旨在向商業使用者展示如何使用少量 Python 的資源網站,完全專注於幫助他們處理日常工作職責。
- 免費可重複使用的資料:教師通常需要有意義的資料來構建程式設計練習。為了支援這種使用,教育界的許多人貢獻了 免費可重複使用的資料,可以在其基礎上構建練習。
- Greg Wilson 的 Software Carpentry 是一門針對科學家和工程師的軟體開發技能課程。
- Kirby Urner 的 CP4E 資源 將 Python 程式設計與數學主題相結合。
- Phil Hugues 為 Linux Journal 撰寫的 Guido van Rossum 的訪談 是與 Python 建立者關於向非計算機科學專業的學生教授 Python 的一次對話。
- Stephen Figgins 撰寫的 駭客和追蹤者:CP4E 和 用 Python 教授數學,都是關於人人參與計算機程式設計倡議的早期文章。
SIG 管理
- 訂閱 edu-sig 郵件列表
- 瀏覽 edu-sig 郵件列表存檔
- 向 edu-sig 列表傳送更改建議。