計(jì)算機(jī)教學(xué)的目標(biāo)之一,是要使學(xué)生具有“扎實(shí)的問題分析能力和獨(dú)立的思考能力”。要達(dá)到這個目標(biāo),一定程度的算法能力和編程實(shí)踐能力必須盡早的教授給學(xué)生,也許大一第一/二學(xué)期就應(yīng)該開始。目前,很多學(xué)校的計(jì)算機(jī)相關(guān)專業(yè)都在不斷的發(fā)展和實(shí)踐各種不同的教學(xué)方法,期望能讓學(xué)生更好更快的入門編程。
但是,眾所周知,無論使用哪種編程語言(C,C++等),程序入門教學(xué)都是比較困難的。程序入門教學(xué)的對象是“初學(xué)者”(包括計(jì)算機(jī)專業(yè)和非計(jì)算機(jī)專業(yè)),他們一般只具有很少甚至沒有任何編程經(jīng)驗(yàn)和背景。程序入門課程面對的困難是:在教會學(xué)生掌握分析和思考能力的同時(shí),也要讓學(xué)生掌握一門具體編程語言的概念及使用。針對這個教學(xué)目的,衍生出很多創(chuàng)新的教學(xué)方式。而針對這個問題,本文也提出了一種創(chuàng)新的教學(xué)方式,即使用Python編程語言進(jìn)行教學(xué)。這一教學(xué)方式在我校的計(jì)算機(jī)專業(yè)和非計(jì)算機(jī)專業(yè)都進(jìn)行了嘗試,結(jié)果證明這一教學(xué)方式是有效和令人滿意的。根據(jù)學(xué)生的反饋和調(diào)查,以及不斷增長的參加這門課程的學(xué)生人數(shù),我們相信這個教學(xué)方式值得推廣,可以廣泛應(yīng)用到各種不同的計(jì)算機(jī)專業(yè)和非計(jì)算機(jī)專業(yè)的程序入門課程。
表1
對大多數(shù)學(xué)校而言,針對非計(jì)算機(jī)專業(yè)開發(fā)這門課程是個挑戰(zhàn):首先,學(xué)習(xí)這門課程的學(xué)生完全是一張白紙,沒有任何計(jì)算機(jī)編程或程序設(shè)計(jì)的概念。其次,通常程序入門是非計(jì)算機(jī)專業(yè)的一門選修課,學(xué)生來自不同的專業(yè),有的具有很好的數(shù)學(xué)背景而有些沒有。第三,這門課程教授的編程語言必須符合計(jì)算機(jī)發(fā)展的潮流,應(yīng)該具有面向?qū)ο蟮奶攸c(diǎn)。當(dāng)然,可供選擇的語言有很多,從C,C++到Java,但是,問題是,哪一種語言既足夠簡單能讓學(xué)生快速上手,同時(shí)又能用來解決實(shí)際問題。在課程開始的一段時(shí)間里,大多數(shù)學(xué)校一直使用的是C語言。根據(jù)我們自己的經(jīng)驗(yàn)以及學(xué)生的反饋,我們認(rèn)為,C語言雖然強(qiáng)大,但并不適于教授給沒有任何編程背景和經(jīng)驗(yàn)的非計(jì)算機(jī)專業(yè)學(xué)生。
問題是為什么選擇Python?免費(fèi),開源,跨平臺,面向?qū)ο螅S富的Python教程,這些都是選擇的理由,但最重要的還是因?yàn)镻ython本身極高的易用性和強(qiáng)大的功能。根據(jù)我們最近兩年的教學(xué)實(shí)踐,Python得到這一評價(jià)是實(shí)至名歸的。Python的極高的易用性是學(xué)生可以把精力集中在對問題的分析和思考上,而不是花在學(xué)習(xí)復(fù)雜的語言結(jié)構(gòu)和語法上。
給非計(jì)算機(jī)專業(yè)教授程序設(shè)計(jì),即使是入門級的課程,也是很有挑戰(zhàn)性的。傳統(tǒng)的程序設(shè)計(jì)教學(xué)包含很多的課時(shí),測試以及考試,對于非計(jì)算機(jī)專業(yè)入門課程來說,這并不是一個很好的方式。主要因?yàn)橐韵聨c(diǎn):第一,因?yàn)閷W(xué)生的背景是各不相同,因此需要很多課時(shí)來學(xué)習(xí)基礎(chǔ)的編程知識。第二,大部分學(xué)生都不喜歡冗長的靜態(tài)教學(xué),100分鐘的課堂很難一直保持注意力。第三,課后作業(yè)(包括練習(xí),試驗(yàn)等)并不能真正的讓學(xué)生理解編程。實(shí)際上學(xué)生總是在互相copy彼此的作業(yè)。為了避免這些問題,教學(xué)時(shí)應(yīng)盡可能的使學(xué)生在課堂上練習(xí)思考和研究問題,以提高學(xué)生獨(dú)立思考和解決問題的能力。為了鼓勵學(xué)生,對于能獨(dú)立在課堂上完成的學(xué)生,應(yīng)給予額外加分。總的來說,教學(xué)方式的核心思想是把教師的職能從“高高在上的圣人”,變?yōu)椤爸笇?dǎo)學(xué)生的助手”,從而來達(dá)到我們的教學(xué)目的。讓學(xué)生通過有挑戰(zhàn)性的問題,聯(lián)系課堂活動,來理解程序設(shè)計(jì)。經(jīng)過一段對課程的實(shí)踐,我們觀察到了學(xué)生的進(jìn)步。首先,學(xué)生喜歡這樣的互動教學(xué)模式(通過對學(xué)生調(diào)查和反饋);第二,學(xué)生愿意在課堂上花費(fèi)更多的時(shí)間(有些學(xué)生甚至建議增加課時(shí));第三,學(xué)生變得更加自信并且測驗(yàn)和考試通過率也更高。總而言之,學(xué)生比教學(xué)方式改變之前學(xué)得更好,期末平均成績證明了這一點(diǎn)。
程序入門教學(xué)要達(dá)到以下教學(xué)目標(biāo):
(1)教授給學(xué)生足夠的計(jì)算機(jī)組織與結(jié)構(gòu)知識(軟件和硬件);
(2)教授給學(xué)生獨(dú)立的使用Python編程語言的能力;
(3)提供符合教學(xué)要求和大綱的各種不同的實(shí)例和項(xiàng)目,幫助學(xué)生掌握獨(dú)立思考能力和實(shí)際問題解決能力;課程是入門級的課程,基本不考慮學(xué)生背景的差異。
我們教學(xué)方式符合下面這些教學(xué)目標(biāo):
(1)教授給學(xué)生基礎(chǔ)的Python程序語言概念
(2)教授給學(xué)生基礎(chǔ)的程序設(shè)計(jì)概念
(3)讓學(xué)生理解以下概念:抽象,調(diào)試程序,函數(shù)和對象,遞歸,重用等
(4)教授學(xué)生程序邏輯思維和解決問題技巧
(5)教授學(xué)生發(fā)展團(tuán)隊(duì)合作技能
(6)教授學(xué)生發(fā)展交流技巧
(7)教授學(xué)生把學(xué)到的編程技巧應(yīng)用和其他知識融合
為了適應(yīng)此種教學(xué)方式,我們依據(jù)課程特點(diǎn)設(shè)計(jì)和測試了以下課程結(jié)構(gòu)并得到了學(xué)生的積極反饋:
●Python語言的易用性使得學(xué)生把精力集中在對問題的分析和思考上,而不是花在學(xué)習(xí)復(fù)雜的語言結(jié)構(gòu)和語法上
●強(qiáng)調(diào)邏輯推理能力,課程理論和實(shí)踐都圍繞這一點(diǎn)
●每個星期課程都包含三部分內(nèi)容,分別有理論學(xué)習(xí),課堂實(shí)踐,學(xué)生練習(xí)以及團(tuán)隊(duì)合作。課后作業(yè)也是緊密聯(lián)系本節(jié)所講授的重點(diǎn)。如表1所示。
●每節(jié)課都包含有一個“解決問題”環(huán)節(jié),緊密聯(lián)系當(dāng)前階段所學(xué)習(xí)的內(nèi)容,重點(diǎn)是問題分析能力以及把字面問題轉(zhuǎn)換為計(jì)算機(jī)能理解的問題。
●如果時(shí)間允許,和計(jì)算機(jī)相關(guān)的高級內(nèi)容也可以介紹一些。
●課堂時(shí)間環(huán)節(jié)重點(diǎn)培養(yǎng)學(xué)生用軟件方法解決問題的能力。選擇的問題要盡可能的接近實(shí)際并鼓勵學(xué)生去解決實(shí)際問題。課堂要盡可能互動,要選擇一些容易讓學(xué)生互動的方式和問題。
●詳細(xì)講解每一個課堂示例。
●試驗(yàn)環(huán)節(jié)要包括需要團(tuán)隊(duì)合作才能完成的內(nèi)容。
●介紹:計(jì)算機(jī)里面有什么?
○這節(jié)內(nèi)容簡要的介紹一下計(jì)算機(jī)組織與結(jié)構(gòu),操作系統(tǒng)和編程語言。
●Python開發(fā)環(huán)境
○這節(jié)內(nèi)容介紹Python的安裝以及運(yùn)行環(huán)境。
●Python的第一個程序
○這節(jié)內(nèi)容介紹幾個簡單的Python程序
○課堂實(shí)踐環(huán)節(jié)介紹一下Python的運(yùn)行模式:運(yùn)行模式和編輯模式
○跳過main函數(shù),直接在命令行中運(yùn)行程序,以便降低難度并讓學(xué)生有一個直觀的認(rèn)識
●介紹軟件開發(fā)流程
○這節(jié)課程,對軟件開發(fā)流程進(jìn)行一個詳細(xì)的介紹
○根據(jù)內(nèi)容,例舉一些軟件開發(fā)的例子(如Windows是如何全球協(xié)作開發(fā))
●Python基礎(chǔ)語法和命令
○介紹Python的輸入和輸出,以及賦值語句
○介紹Python的兩種基礎(chǔ)數(shù)據(jù)類型:數(shù)值型和字符串類型
●循環(huán)和判斷
○介紹if,if-else,if-elif-else
○介紹for循環(huán)
●函數(shù)
○介紹基礎(chǔ)的函數(shù)式編程(根據(jù)我們的經(jīng)驗(yàn),對于非計(jì)算機(jī)專業(yè)學(xué)生而言,函數(shù)式編程要容易理解的多)
○函數(shù)的概念,對于沒有屬性背景的學(xué)生而言,會有一點(diǎn)困難
●遞歸函數(shù)
○本節(jié)是整個課程中的一個難點(diǎn)
○通過分解復(fù)雜問題為簡單問題,通過實(shí)例介紹此概念
●簡單數(shù)據(jù)類型,比如列表,數(shù)組和字典
○介紹數(shù)據(jù)類型的概念
○通過實(shí)例使用列表,數(shù)組和字典來理解它
○介紹Python的兩種基礎(chǔ)數(shù)據(jù)類型:數(shù)值型和字符串類型
●算法
○介紹算法的設(shè)計(jì)基礎(chǔ)
○重點(diǎn)介紹算法是如何讓復(fù)雜問題變得簡單并如何應(yīng)用到實(shí)際生活中
●高級話題,包括面向?qū)ο笤O(shè)計(jì),網(wǎng)絡(luò)編程等
無論對于計(jì)算機(jī)專業(yè)還是非計(jì)算機(jī)專業(yè),程序設(shè)計(jì)都不是一門簡單的課程。對于非計(jì)算機(jī)專業(yè)的學(xué)生,根據(jù)我們的教學(xué)經(jīng)驗(yàn),Python編程語言因其極為簡潔的語法和強(qiáng)大的功能,以及優(yōu)秀的面向?qū)ο竽芰?,非常適合于編程入門教學(xué)。我們使用的創(chuàng)新的教學(xué)方法已經(jīng)在我們學(xué)院被測試過。教學(xué)成果表明課堂實(shí)踐聯(lián)系要比冗長的課程更有效率。課堂實(shí)踐總是和當(dāng)前教授的內(nèi)容緊密結(jié)合,團(tuán)隊(duì)協(xié)作任務(wù)和獨(dú)立完成任務(wù)也總是相輔相成??偟膩碚f,這種教學(xué)方法是有效的將學(xué)生與教師結(jié)合在了一起,提高了學(xué)生的學(xué)習(xí)主動性,也提高了教師教學(xué)的積極性,這種教學(xué)方式是值得推廣的。
[1](挪)Magnus Lie Hetland.Python基礎(chǔ)教程(第2版)[M].北京:人民郵電出版社,2010.
[2](美)Magnus Lie Hetland.Python核心編程[M].北京:人民郵電出版社,2010.
[3](美)Mark Lutz.Python學(xué)習(xí)手冊[M].北京:機(jī)械工業(yè)出版社,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.