計算機教學的目標之一,是要使學生具有“扎實的問題分析能力和獨立的思考能力”。要達到這個目標,一定程度的算法能力和編程實踐能力必須盡早的教授給學生,也許大一第一/二學期就應該開始。目前,很多學校的計算機相關專業都在不斷的發展和實踐各種不同的教學方法,期望能讓學生更好更快的入門編程。
但是,眾所周知,無論使用哪種編程語言(C,C++等),程序入門教學都是比較困難的。程序入門教學的對象是“初學者”(包括計算機專業和非計算機專業),他們一般只具有很少甚至沒有任何編程經驗和背景。程序入門課程面對的困難是:在教會學生掌握分析和思考能力的同時,也要讓學生掌握一門具體編程語言的概念及使用。針對這個教學目的,衍生出很多創新的教學方式。而針對這個問題,本文也提出了一種創新的教學方式,即使用Python編程語言進行教學。這一教學方式在我校的計算機專業和非計算機專業都進行了嘗試,結果證明這一教學方式是有效和令人滿意的。根據學生的反饋和調查,以及不斷增長的參加這門課程的學生人數,我們相信這個教學方式值得推廣,可以廣泛應用到各種不同的計算機專業和非計算機專業的程序入門課程。

表1
對大多數學校而言,針對非計算機專業開發這門課程是個挑戰:首先,學習這門課程的學生完全是一張白紙,沒有任何計算機編程或程序設計的概念。其次,通常程序入門是非計算機專業的一門選修課,學生來自不同的專業,有的具有很好的數學背景而有些沒有。第三,這門課程教授的編程語言必須符合計算機發展的潮流,應該具有面向對象的特點。當然,可供選擇的語言有很多,從C,C++到Java,但是,問題是,哪一種語言既足夠簡單能讓學生快速上手,同時又能用來解決實際問題。在課程開始的一段時間里,大多數學校一直使用的是C語言。根據我們自己的經驗以及學生的反饋,我們認為,C語言雖然強大,但并不適于教授給沒有任何編程背景和經驗的非計算機專業學生。
問題是為什么選擇Python?免費,開源,跨平臺,面向對象,豐富的Python教程,這些都是選擇的理由,但最重要的還是因為Python本身極高的易用性和強大的功能。根據我們最近兩年的教學實踐,Python得到這一評價是實至名歸的。Python的極高的易用性是學生可以把精力集中在對問題的分析和思考上,而不是花在學習復雜的語言結構和語法上。
給非計算機專業教授程序設計,即使是入門級的課程,也是很有挑戰性的。傳統的程序設計教學包含很多的課時,測試以及考試,對于非計算機專業入門課程來說,這并不是一個很好的方式。主要因為以下幾點:第一,因為學生的背景是各不相同,因此需要很多課時來學習基礎的編程知識。第二,大部分學生都不喜歡冗長的靜態教學,100分鐘的課堂很難一直保持注意力。第三,課后作業(包括練習,試驗等)并不能真正的讓學生理解編程。實際上學生總是在互相copy彼此的作業。為了避免這些問題,教學時應盡可能的使學生在課堂上練習思考和研究問題,以提高學生獨立思考和解決問題的能力。為了鼓勵學生,對于能獨立在課堂上完成的學生,應給予額外加分??偟膩碚f,教學方式的核心思想是把教師的職能從“高高在上的圣人”,變為“指導學生的助手”,從而來達到我們的教學目的。讓學生通過有挑戰性的問題,聯系課堂活動,來理解程序設計。經過一段對課程的實踐,我們觀察到了學生的進步。首先,學生喜歡這樣的互動教學模式(通過對學生調查和反饋);第二,學生愿意在課堂上花費更多的時間(有些學生甚至建議增加課時);第三,學生變得更加自信并且測驗和考試通過率也更高。總而言之,學生比教學方式改變之前學得更好,期末平均成績證明了這一點。
程序入門教學要達到以下教學目標:
(1)教授給學生足夠的計算機組織與結構知識(軟件和硬件);
(2)教授給學生獨立的使用Python編程語言的能力;
(3)提供符合教學要求和大綱的各種不同的實例和項目,幫助學生掌握獨立思考能力和實際問題解決能力;課程是入門級的課程,基本不考慮學生背景的差異。
我們教學方式符合下面這些教學目標:
(1)教授給學生基礎的Python程序語言概念
(2)教授給學生基礎的程序設計概念
(3)讓學生理解以下概念:抽象,調試程序,函數和對象,遞歸,重用等
(4)教授學生程序邏輯思維和解決問題技巧
(5)教授學生發展團隊合作技能
(6)教授學生發展交流技巧
(7)教授學生把學到的編程技巧應用和其他知識融合
為了適應此種教學方式,我們依據課程特點設計和測試了以下課程結構并得到了學生的積極反饋:
●Python語言的易用性使得學生把精力集中在對問題的分析和思考上,而不是花在學習復雜的語言結構和語法上
●強調邏輯推理能力,課程理論和實踐都圍繞這一點
●每個星期課程都包含三部分內容,分別有理論學習,課堂實踐,學生練習以及團隊合作。課后作業也是緊密聯系本節所講授的重點。如表1所示。
●每節課都包含有一個“解決問題”環節,緊密聯系當前階段所學習的內容,重點是問題分析能力以及把字面問題轉換為計算機能理解的問題。
●如果時間允許,和計算機相關的高級內容也可以介紹一些。
●課堂時間環節重點培養學生用軟件方法解決問題的能力。選擇的問題要盡可能的接近實際并鼓勵學生去解決實際問題。課堂要盡可能互動,要選擇一些容易讓學生互動的方式和問題。
●詳細講解每一個課堂示例。
●試驗環節要包括需要團隊合作才能完成的內容。
●介紹:計算機里面有什么?
○這節內容簡要的介紹一下計算機組織與結構,操作系統和編程語言。
●Python開發環境
○這節內容介紹Python的安裝以及運行環境。
●Python的第一個程序
○這節內容介紹幾個簡單的Python程序
○課堂實踐環節介紹一下Python的運行模式:運行模式和編輯模式
○跳過main函數,直接在命令行中運行程序,以便降低難度并讓學生有一個直觀的認識
●介紹軟件開發流程
○這節課程,對軟件開發流程進行一個詳細的介紹
○根據內容,例舉一些軟件開發的例子(如Windows是如何全球協作開發)
●Python基礎語法和命令
○介紹Python的輸入和輸出,以及賦值語句
○介紹Python的兩種基礎數據類型:數值型和字符串類型
●循環和判斷
○介紹if,if-else,if-elif-else
○介紹for循環
●函數
○介紹基礎的函數式編程(根據我們的經驗,對于非計算機專業學生而言,函數式編程要容易理解的多)
○函數的概念,對于沒有屬性背景的學生而言,會有一點困難
●遞歸函數
○本節是整個課程中的一個難點
○通過分解復雜問題為簡單問題,通過實例介紹此概念
●簡單數據類型,比如列表,數組和字典
○介紹數據類型的概念
○通過實例使用列表,數組和字典來理解它
○介紹Python的兩種基礎數據類型:數值型和字符串類型
●算法
○介紹算法的設計基礎
○重點介紹算法是如何讓復雜問題變得簡單并如何應用到實際生活中
●高級話題,包括面向對象設計,網絡編程等
無論對于計算機專業還是非計算機專業,程序設計都不是一門簡單的課程。對于非計算機專業的學生,根據我們的教學經驗,Python編程語言因其極為簡潔的語法和強大的功能,以及優秀的面向對象能力,非常適合于編程入門教學。我們使用的創新的教學方法已經在我們學院被測試過。教學成果表明課堂實踐聯系要比冗長的課程更有效率。課堂實踐總是和當前教授的內容緊密結合,團隊協作任務和獨立完成任務也總是相輔相成。總的來說,這種教學方法是有效的將學生與教師結合在了一起,提高了學生的學習主動性,也提高了教師教學的積極性,這種教學方式是值得推廣的。
[1](挪)Magnus Lie Hetland.Python基礎教程(第2版)[M].北京:人民郵電出版社,2010.
[2](美)Magnus Lie Hetland.Python核心編程[M].北京:人民郵電出版社,2010.
[3](美)Mark Lutz.Python學習手冊[M].北京:機械工業出版社,2011.
[4]David Ranum,Bradley Miller,John M.Zelle,Mark Guzdial.Successful approaches to teaching introductory computer science courses with python.Technical Symposium on Computer Science Education-SIGCSE,2006:396-397.
[5]Nitin Madnari.Getting started on natural language processing with python.ACM Crossroads Student Magazine-XRDS,2007,13(4):5-5.