賀玲, 肖蕾, 羅剛, 唐曉, 胡亞慧
(空軍預(yù)警學(xué)院 預(yù)警情報系, 湖北 武漢 430010)
Python語言由荷蘭人Guido van Rossum于1989年發(fā)明,1991年發(fā)行第一個公開版本。該語言是目前最接近自然語言的通用編程語言,是程序設(shè)計課程教學(xué)改革的理想選擇,是理解計算思維時代性的重要體現(xiàn)[1]。
近年來,全國高校都在開設(shè)程序設(shè)計語言課程,旨在通過學(xué)習(xí)使學(xué)生了解高級語言程序設(shè)計的基本思想,體會計算機(jī)求解問題的方法和步驟,培養(yǎng)學(xué)生設(shè)計程序、編寫程序、調(diào)試程序的能力。而Python語言以其功能強(qiáng)大、簡單易學(xué)等優(yōu)點(diǎn),受到越來越多高校的青睞。我國教育部高等學(xué)校大學(xué)計算機(jī)課程教學(xué)指導(dǎo)委員會在2016年首次將Python語言作為程序設(shè)計入門課程的教學(xué)語言[2]。
我校自2017年以來,已在三屆本科生中全面開展了Python語言程序設(shè)計教學(xué)。總結(jié)回顧這幾年的教學(xué)實(shí)踐,在前期教學(xué)過程中遇到的問題和困難主要體現(xiàn)在以下幾個方面。
一是在知識學(xué)習(xí)層面,學(xué)生普遍存在重“語法”,輕“語義”和“語用”的傾向,導(dǎo)致學(xué)習(xí)重點(diǎn)不明確,學(xué)習(xí)重心本末倒置。
二是在能力培養(yǎng)層面,學(xué)生對具體現(xiàn)實(shí)問題抽象建模不到位,導(dǎo)致學(xué)習(xí)深度不夠,學(xué)習(xí)進(jìn)程緩慢。
三是在素質(zhì)提升層面,學(xué)生解決復(fù)雜問題的結(jié)構(gòu)化、模塊化意識不強(qiáng),導(dǎo)致舉一反三能力偏弱,學(xué)習(xí)效果不明顯。
究其本質(zhì),出現(xiàn)上述問題的根本原因,是學(xué)生在學(xué)習(xí)Python語言的過程中,問題導(dǎo)向不明確,沒有真正從計算思維的角度去看待、分析問題,進(jìn)而導(dǎo)致學(xué)習(xí)興趣不濃厚,學(xué)習(xí)的主觀能動性沒有完全調(diào)動起來。
計算思維的概念最早由美國CMU大學(xué)周以真教授提出[3]。周教授認(rèn)為:計算思維是運(yùn)用計算機(jī)科學(xué)的基礎(chǔ)概念去求解問題、設(shè)計系統(tǒng)以及理解人類行為,它采用抽象和分解的方法來控制龐雜的任務(wù)或設(shè)計巨型復(fù)雜系統(tǒng),并選擇合理的方式對一個問題的相關(guān)方面建模使其易于處理。中國科學(xué)院院士陳國良講授曾指出:在大學(xué)中,計算思維不僅能振興大學(xué)計算機(jī)教育,而且會令科學(xué)與工程領(lǐng)域創(chuàng)造出革命性的研究成果[4]。
案例驅(qū)動教學(xué)法,則能很好地遵循計算思維求解問題的思路,帶領(lǐng)學(xué)生以問題為導(dǎo)向,并通過對問題的抽象建模和模塊化分解,尋求問題的最優(yōu)解,從而將知識學(xué)習(xí)、能力培養(yǎng)、素質(zhì)提升,貫穿教學(xué)的全過程。
案例驅(qū)動教學(xué),以案例為基礎(chǔ)、以問題為核心組織教學(xué),該教學(xué)法已在計算機(jī)等各類學(xué)科的教學(xué)中得到廣泛的實(shí)施[5-7]。
案例驅(qū)動教學(xué)法起源于1920年,來源于美國哈佛商學(xué)院采取商業(yè)管理的真實(shí)情境來進(jìn)行教學(xué),引導(dǎo)學(xué)生主動參與課堂討論。此教學(xué)方法實(shí)施后,效果顯著。結(jié)合Python語言程序設(shè)計教學(xué)的實(shí)際,本文認(rèn)為,案例驅(qū)動教學(xué)法可抽象為以下幾個階段。
首先是設(shè)計(或提出)案例。設(shè)計合理的案例,即是創(chuàng)設(shè)良好的學(xué)習(xí)情境,這是案例驅(qū)動教學(xué)的第一步。一個適合于教學(xué)的案例,應(yīng)該具有鮮明的針對性,針對教學(xué)對象、針對教學(xué)內(nèi)容、針對教學(xué)重難點(diǎn)。
然后是分析(或分解)案例。分析案例,從中提煉關(guān)鍵問題,并對其進(jìn)行歸納建模,這是案例驅(qū)動教學(xué)中承上啟下的關(guān)鍵環(huán)節(jié),其中蘊(yùn)含了“抽象”、“分解”以及“算法思維”等計算思維中的重要概念。
最后是引導(dǎo)學(xué)生圍繞案例所要解決的問題逐步遞進(jìn)地進(jìn)行求解,并驗(yàn)證所得結(jié)果。
在此期間,知識學(xué)習(xí)、能力培養(yǎng)和素質(zhì)提升貫穿教學(xué)的全過程,“學(xué)生主體”的理念也得到了充分的體現(xiàn)。本文提出的案例驅(qū)動教學(xué)過程,如圖1所示。

圖1 Python語言案例驅(qū)動教學(xué)過程
教學(xué)小組在最近一期的教學(xué)中推進(jìn)了案例驅(qū)動教學(xué)法的實(shí)施,實(shí)踐表明,該教學(xué)法能很好地適用于Python語言程序設(shè)計的教學(xué),并且能有效提升學(xué)生分析問題和解決問題的能力、培養(yǎng)并提高學(xué)生的創(chuàng)新意識,最終有效提升教學(xué)效果。接下來以一個五子棋案例為依托,詳細(xì)闡述案例驅(qū)動教學(xué)法在Python教學(xué)中的應(yīng)用。
2.2.1 提出案例
為保證教學(xué)效果,保障教學(xué)進(jìn)程的順利推進(jìn),案例的選取除了要具有鮮明的針對性,也應(yīng)具備一定的啟發(fā)性和趣味性,同時還要有靈活的可操作性,這樣才能最大限度地調(diào)動學(xué)生學(xué)習(xí)的積極性,確保教學(xué)的有效性。
五子棋案例的提出時機(jī),選擇在Python語言基本數(shù)據(jù)類型以及Python程序基本結(jié)構(gòu)等基礎(chǔ)內(nèi)容學(xué)習(xí)完畢之后,旨在通過對該案例的分析和求解,引導(dǎo)學(xué)生進(jìn)一步掌握結(jié)構(gòu)化程序設(shè)計的基本思想和方法,能正確完成循環(huán)結(jié)構(gòu)、選擇結(jié)構(gòu)的程序設(shè)計,并能夠在程序中正確使用列表等組合數(shù)據(jù)類型。
五子棋案例描述如下。
五子棋是中國古代的傳統(tǒng)黑白棋種之一。現(xiàn)欲開發(fā)一款控制臺版五子棋游戲,具備如下功能。
(1) 可以循環(huán)打印棋盤;
(2) 可以單機(jī)對戰(zhàn);
(3) 對戰(zhàn)雙方有一方勝利時,打印勝利棋盤及贏家。
2.2.2 分析案例
首先,對于上述案例,從已給出的三個功能描述,還可進(jìn)一步分析出該案例應(yīng)該隱含的其它功能,例如:能夠判斷某個棋子是否超出棋盤范圍、能夠判斷指定坐標(biāo)位置是否已經(jīng)存在棋子。此外,還應(yīng)該能保證界面美觀、提示清晰明顯。
在此基礎(chǔ)上,根據(jù)五子棋游戲規(guī)則,可總結(jié)抽象出五子棋游戲的功能結(jié)構(gòu),如圖2所示。

圖2 五子棋功能結(jié)構(gòu)抽象示意圖
更進(jìn)一步,根據(jù)對功能結(jié)構(gòu)的分解和描述,可得到該五子棋案例的簡易流程圖,如圖3所示。

圖3 五子棋流程圖
按照計算機(jī)求解問題的一般步驟,接下來要做的工作,就是根據(jù)流程圖,以某個特定的語言為載體,編寫程序,并運(yùn)行程序獲得結(jié)果。
2.2.3 求解案例
分析圖3可知,該案例的求解,其程序結(jié)構(gòu)涵蓋了循環(huán)結(jié)構(gòu)和選擇結(jié)構(gòu)。此外,針對棋盤的處理(初始化棋盤、繪制棋盤等),需要涉及到對列表的處理。因此,案例求解階段的任務(wù),就是引導(dǎo)學(xué)生利用前期所學(xué)過的選擇和循環(huán)結(jié)構(gòu)程序設(shè)計方法,以及對列表這一組合數(shù)據(jù)類型的處理,同時以結(jié)構(gòu)化、模塊化程序設(shè)計的思想為指導(dǎo),完成程序的編寫,并正確地進(jìn)行輸入,以獲得預(yù)期的結(jié)果。
上述從提出案例、分析案例到求解案例的整個過程思路,與計算思維求解問題的途徑和方法一脈相承、緊密吻合,同時也自始至終地貫徹了“問題引導(dǎo)、學(xué)生主體”的教學(xué)理念。
教學(xué)實(shí)踐表明,學(xué)生從首次接觸案例,到最終對案例進(jìn)行求解,都表現(xiàn)出了極大的學(xué)習(xí)積極性和主動性,他們從中也獲得了強(qiáng)烈的成就感和滿足感,學(xué)習(xí)效果得到了明顯的提升。
(1) 學(xué)習(xí)的針對性增強(qiáng),學(xué)習(xí)重點(diǎn)明確。有了案例所求解問題的引導(dǎo),學(xué)生對新知識的學(xué)習(xí)不再有畏難情緒,而是積極主動地帶著問題去預(yù)習(xí)新內(nèi)容、探尋新知識,對知識的學(xué)習(xí)系統(tǒng)性更強(qiáng),條理也更清晰。
(2) 學(xué)生動手能力增強(qiáng),學(xué)習(xí)進(jìn)程順利。在分析案例、求解案例的全過程中,學(xué)生都是作為主體主動參與,借助課程“理實(shí)一體”的教學(xué)模式,整個教學(xué)過程都是圍繞案例邊分析、邊驗(yàn)證。學(xué)生自主實(shí)踐、解決現(xiàn)實(shí)問題的能力得到有力提升。
(3) 計算思維的導(dǎo)向更突出,學(xué)習(xí)效果明顯。從本質(zhì)上說,案例的求解,是一個全局的、系統(tǒng)化的宏觀問題,在將這個大的整體問題劃分為若干個結(jié)構(gòu)化的模塊并得以求解的過程中,學(xué)生的計算思維和素養(yǎng)都能到了應(yīng)有的提高。
案例驅(qū)動教學(xué)法的實(shí)施,一定要注重案例的針對性、明確性和可操作性,只有這樣,才能最大限度調(diào)動學(xué)生學(xué)習(xí)的積極性,保證教學(xué)進(jìn)程的有效推進(jìn)。
Python語言程序設(shè)計,是一門實(shí)踐性極強(qiáng)的課程,需要尋求有更多、更有效的案例,充實(shí)教學(xué)內(nèi)容,提升教學(xué)效果。下一步,在探尋新的教學(xué)模式和教學(xué)思路的同時,還要力求建設(shè)一批貼近實(shí)戰(zhàn)的教學(xué)案例,并將其應(yīng)用于教學(xué)實(shí)踐,推動課程建設(shè)發(fā)展。