周利榮
摘要:本文分析了傳統(tǒng)程序設計教學的步驟、特點、缺點及針對高職學生產(chǎn)生的困境。分析了傳統(tǒng)程序設計教學對高職學生產(chǎn)生困境的原因,并提出了“發(fā)現(xiàn)教學法”,分析了發(fā)現(xiàn)教學法程序設計教學的步驟、特點及優(yōu)點。
關鍵詞:程序設計;發(fā)現(xiàn)教學法;問題驅動;能力本位
中圖分類號:G642? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2021)14-0071-03
Python是一種面向對象的、動態(tài)的、解釋型的計算機語言,由于語法簡潔、優(yōu)雅,簡單易學、易讀以及可擴展性、可移植性、實用性等優(yōu)點,已成為主流開發(fā)語言,高職院校也正逐步采用python作為程序設計教學語言。目前,高職程序設計課堂教學仍大多采用以單向傳授為主的傳統(tǒng)程序教學設計方法,在實際教學中,發(fā)現(xiàn)效果并不理想。
1 傳統(tǒng)程序設計教學
1.1傳統(tǒng)程序設計教學的一般步驟
(1)教師顯示程序設計題目;(2)教師講解程序設計所需相關知識點;(3)教師顯示代碼;(4)講解程序功能并運行程序;(5)通過練習深化提升學生對相關知識點及程序的理解。
1.2 傳統(tǒng)程序設計教學的特點
傳統(tǒng)程序設計教學模式的特點是“單向傳授,以‘教師、教材和課堂為中心,知識本位”。在課堂教學中,主要是教師傳授學生聽講,即“單向傳授”。教師是課堂的主宰,根據(jù)教材制定學習內(nèi)容,控制著學生的課堂學習過程;學生處于被動學習的地位,只需按教師設計好的過程接受教師講授的程序設計知識,然后通過練習鞏固所講內(nèi)容;教師與學生、學生與學生之間基本沒有互動。即以“教師、教材和課堂”為中心。傳統(tǒng)的程序設計教學模式需要達到的教學目標是使學生系統(tǒng)地掌握程序設計知識,即“知識本位”。
1.3 傳統(tǒng)程序設計教學的缺點
在針對高職學生進行程序設計教學的過程中發(fā)現(xiàn),由于高職學生的數(shù)學、英語基礎知識、思維能力、自控力較差,缺乏良好的學習習慣、學習方法、學習策略,在教師講解程序設計相關知識點時,許多學生不能集中注意力,已經(jīng)很少有學生在認真聽課了[1]。
1.4 傳統(tǒng)程序設計教學對高職學生產(chǎn)生困境的原因
傳統(tǒng)程序設計教學對高職學生產(chǎn)生困境的原因在于違背了教學的基本原則——可接受原則。維果茨基說過:“教學必須符合學生的年齡特征,必須以學生的成熟或準備性為基礎,這是可接受原則的基本要求”。學習程序設計需要很強的邏輯思維能力和抽象思維能力。高職學生的邏輯思維能力和抽象思維能力沒有得到很好的發(fā)展,而傳統(tǒng)程序設計教學是從抽象到抽象,讀懂程序和編程需要很強的邏輯思維能力和一定的數(shù)學、英語知識,即傳統(tǒng)程序設計教學對高職學生有很高的難度,使學生產(chǎn)生了畏難情緒和厭學心理。
1.5 走出困境的對策
走出困境的對策:從學生已知道的知識經(jīng)驗出發(fā),由教師提出學生容易回答的問題開始教學,學生經(jīng)歷探究、思考、交流、討論后回答問題,使教學過程符合高職學生的認知規(guī)律。
教師要變灌輸式教學為啟發(fā)式教學。傳統(tǒng)程序設計教學方式是灌輸式教學,是以教師為中心,不顧學生的接受能力,強行灌輸,以教代學。啟發(fā)式教學方式是以學生為中心,從學生的接受能力和知識基礎出發(fā),啟發(fā)誘導,使學生經(jīng)歷了探究、思考的過程,教學過程符合高職學生的認知規(guī)律。
2 發(fā)現(xiàn)教學法程序設計教學
總結高職程序設計教學的實踐經(jīng)驗,提出“發(fā)現(xiàn)教學法”。由教師提出問題,學生通過比較Python程序運行結果的差異,在教師的引導下,經(jīng)過討論、交流回答教師提出的問題,得到某個變量、函數(shù)參數(shù)的功能,逐步得到某個函數(shù)、語句以至整個程序的功能,即由學生自己發(fā)現(xiàn)知識的教學方法。
2.1 發(fā)現(xiàn)教學法程序設計教學的一般步驟
(1)教師顯示題目;(2)教師顯示代碼,說明程序功能并運行程序;(3)改變某個變量、參數(shù)的值,運行程序;(4)由學生比較改變前后程序運行結果的差異;(5)教師提出問題;(6)引導學生討論得到某個變量、參數(shù)的功能或含義;(7)重復(3)、(4)、(5)、(6),引導學生自己得出某個函數(shù)或語句的功能;(8)教師講解相關函數(shù)或語句的知識點以深化學生對知識點的理解;(9)重復(3)、(4)、(5)、(6)、(7)、(8),引導學生自己得出某段程序和整個程序的功能;(10)通過練習深化提升學生對相關知識點的理解。
2.2 發(fā)現(xiàn)教學法程序設計教學實例
(1)教師顯示題目(使用python的turtle模塊的繪圖功能繪制如圖1所示的圖形)及程序代碼(見第5頁)。
(2)說明程序功能并運行程序。
(3)改變函數(shù)forward()參數(shù)的值,運行程序。
改變forward(200)為forward(100)、forward(50),并分別運行,教師提醒學生仔細觀察程序運行過程,并比較程序運行結果(圖3、圖4、圖5)的差異。教師提出問題:三次程序運行結果的差異在哪里?很明顯,圖4 中線段的長度是圖3中的線段的長度一半、圖5 中線段的長度是圖4中的線段的長度一半,這是由于函數(shù)forward()的參數(shù)由200變100,再由100變?yōu)闉?0引起的。引導學生自己得到函數(shù)forward()參數(shù)的含義是:線段的長度;函數(shù)forward()的功能是:沿畫筆所指定方向前進指定的長度;教師講解函數(shù)forward()的知識點。
(4)改變函數(shù)left()、rang()參數(shù)的值,運行程序。
①函數(shù)rang()參數(shù)改為36,left()的參數(shù)改為170,運行程序得到結果為圖6。函數(shù)rang()參數(shù)改為24,left()的參數(shù)改為165,運行程序得到結果為圖7。函數(shù)rang()參數(shù)改為12,left()的參數(shù)改為150,運行程序得到結果為圖8。教師提醒學生仔細觀察程序運行過程,并比較程序運行結果的差異。
教師提出問題:三次程序運行結果(圖6、圖7、圖8)的線條數(shù)分別是多少?很明顯,圖6、圖7、圖8人的線條數(shù)分別是36、24、12,這同函數(shù)rang()的參數(shù)36、24、12是相同的,學生填好表格1中2、3列。引導學生自己得到函數(shù)rang()參數(shù)的含義是:循環(huán)次數(shù),函數(shù)rang()的功能是:如果函數(shù)內(nèi)只有一個參數(shù),則表示產(chǎn)生從0開始計數(shù)到輸入?yún)?shù)(前一位整數(shù))結束的整數(shù)列表;教師講解函數(shù)rang()的知識點。
教師提出問題:三次程序運行過程中海龜旋轉的角度分別是多少?此問題有一定難度,教師可將學生分組進行討論,并給出提示:旋轉的角度=180-尖角的角度,所有尖角的角度之和為360,可先求出尖角的角度。很明顯,圖6 中共有36個尖角,角度之和為360,因此,每個尖角的角度為10度,旋轉的角度是180-10=170。圖7中共有24個尖角,角度之和為360,因此,每個尖角的角度為15度,旋轉的角度是180-15=165。圖8中共有12個尖角,角度之和為360,因此,每個尖角的角度為30度,旋轉的角度是180-30=150。這同函數(shù)left()的參數(shù)170、165、150是相同的,學生填好表格1中4、5列。引導學生自己得到函數(shù)left()參數(shù)的含義是:向左旋轉的角度;函數(shù)left() 的功能是:在畫筆原來的方向上,畫筆向左旋轉參數(shù)指定的角度;教師講解函數(shù)left()的知識點。學生填好表格1中6、7列。
②函數(shù)rang()參數(shù)改為15,left()的參數(shù)改為168,運行程序得到結果為圖9。函數(shù)rang()參數(shù)改為9,left()的參數(shù)改為160,運行程序得到結果為圖10。函數(shù)rang()參數(shù)改為3,left()的參數(shù)改為120,運行程序得到結果為圖11。教師提醒學生仔細觀察程序運行過程,并比較程序運行結果的差異。引導學生填好表格2中黑色部分。
教師提出問題:表格1的線條數(shù)是偶數(shù)還是奇數(shù)?線條數(shù)*(180-left()參數(shù)值)是多少?表格2的線條數(shù)是偶數(shù)還是奇數(shù)?線條數(shù)*(180-left()參數(shù)值)是多少?很明顯,表格1的線條數(shù)是偶數(shù),線條數(shù)*(180-left()參數(shù)值)是360。表格2的線條數(shù)是奇數(shù),線條數(shù)*(180-left()參數(shù)值)是180。引導學生自己得出結論:當圖形中線條數(shù)是偶數(shù)時,線條數(shù)*(180-旋轉角度)=360,即旋轉角度=180-(360/線條數(shù));當圖形中線條數(shù)是奇數(shù)時,線條數(shù)*(180-旋轉角度)=180,即旋轉角度=180-(180/線條數(shù))。旋轉角度同線條數(shù)存在數(shù)量關系,即函數(shù)left()參數(shù)值同函數(shù)range()參數(shù)值存在數(shù)量關系。
③函數(shù)rang()參數(shù)改為3, left()的參數(shù)改為120,運行程序得到結為圖12,函數(shù)rang()參數(shù)不變, left()的參數(shù)改為-120,運行程序得到結為圖13。教師提醒學生仔細觀察程序運行過程,并比較程序運行結果的差異。教師提出問題:兩次運行過程及結果有何區(qū)別?很明顯,當left()的參數(shù)為正數(shù)時,海龜旋轉方向為逆時針,三角形為正立;當left()的參數(shù)為負數(shù)時,海龜旋轉方向為順時針,三角形為倒立。
(5)教師講解函數(shù)for語句的知識點,引導學生自己得出程序段(4-6行)的功能。
(6)改變函數(shù)begin_fill()、end_fill()的值,運行程序。
改變turtle.begin_fill()為#turtle.begin_fill(),改變turtle.end _fill()為#turtle.end_fill(),并分別運行,教師提醒學生仔細觀察程序運行過程。教師提出問題:比較程序運行結果(圖14、圖15)的差異在哪里?很明顯,改變前運行結果(圖14)是有填充色的,改變后運行結果(圖15)是無填充色的。引導學生自己得到函數(shù)begin_fill()、end_fill()的功能分別是:開始填充、結束填充;教師講解函數(shù)begin_fill()、end_fill()的知識點。
(7)引導學生自己得出程序段(3-7行)的功能。
(8)改變函數(shù)color()參數(shù)的值,運行程序。
①改變color("red", "yellow")為color("red", "blue")、color("red", "green"),并分別運行,教師提醒學生仔細觀察程序運行過程,并比較程序運行結果的差異。教師提出問題:三次程序運行結果的差異在哪里?很明顯,三次程序運行結果(圖16、圖17、圖18)的線條顏色是相同的,都是紅色,三次程序運行結果的填充顏色是不相同的,分別是黃色、藍色、綠色。引導學生自己得到函數(shù)color ()第二參數(shù)的含義是填充的顏色。
②改變color("red", "yellow")為color("blue", "yellow")、color("green", "yellow"),并分別運行,教師提醒學生仔細觀察程序運行過程,并比較程序運行結果的差異。教師提出問題:三次程序運行結果的差異在哪里?很明顯,三次程序運行結果(圖19、圖20、圖21)的填充顏色是相同的,都是黃色,三次程序運行結果的線條顏色是不相同的,分別是紅色、藍色、綠色。引導學生自己得到函數(shù)函數(shù)color ()第一參數(shù)的含義是線條的顏色,函數(shù)color ()的功能是:設置畫筆的線條顏色、填充顏色;教師講解函數(shù)color ()的知識點。
(9)改變 import turtle ()為#import turtle,并運行程序,出現(xiàn)錯誤提示:“NameError: name 'turtle' is not defined”,并且是在程序的第二行:turtle.color("red", "yellow")。教師翻譯上述英文的含義,并提出問題:為什么import turtle變?yōu)榉菆?zhí)行語句會出現(xiàn)上述提示?如果學生不能回答,教師可給出提示:turtle庫是Python語言中一個很流行的繪制圖像的函數(shù)庫,使用其中的函數(shù)color()、begin_fill()、forward()、left()、end_fill()必須導入turtle模塊。引導學生自己得到import turtle語句的功能是:使用import關鍵字導入turtle模塊;教師講解import語句的知識點。
(10)引導學生自己得出整個程序的功能,教師顯示附有注釋的代碼如下:
import turtle? ? ? ? ? #使用import關鍵字導入turtle模塊
turtle.color("red", "yellow") #調(diào)用 turtle模塊的color()函數(shù)設置畫筆顏色="red",填充顏色="yellow"
turtle.begin_fill()? ? #調(diào)用 turtle模塊的begin_fill()函數(shù)開始填充
for i in range(36):? ? #循環(huán)36次
turtle.forward(200)? ? #調(diào)用 turtle模塊的forward()函數(shù)沿畫筆指定方向前進200
turtle.left(170)? ? ? ?#調(diào)用 turtle模塊的left()函數(shù)在畫筆原來的方向上,向左旋轉170度
turtle.end_fill()? ? ? #調(diào)用 turtle模塊的end_fill()函數(shù)結束填充
(11)通過練習(使用turtle模塊的繪圖功能繪制如圖2所示的圖形)深化提升學生對相關知識點的理解。教師引導學生仔細觀察圖2,不難發(fā)現(xiàn),圖2中線條顏色、填充顏色均為紅色,因此,color()函數(shù)兩個參數(shù)值均為"red",圖2中線條數(shù)為5,是奇數(shù),由表格2及上述結論知:旋轉角度=180-(180/線條數(shù))=144,旋轉方向為順時針,left()函數(shù)參數(shù)值為-144。其他代碼不變。
2.3 發(fā)現(xiàn)教學法程序設計教學的特點
發(fā)現(xiàn)教學法程序設計教學模式的特點是“問題驅動,以‘學生、經(jīng)驗和活動為中心,能力本位”。是一種促進學生發(fā)展、學生學習的教學模式。[2]教師給學生塔建空間和舞臺,提出問題,引導學生自己比較、討論,并在此基礎上促使學生自己得出某個函數(shù)或語句的功能,即“問題驅動”。學生變成學習的主體,教師只是學生知識建構的引導者、幫助者、促進者,教師與學生組成學習共同體[3];教師提出問題是從學生已有的知識經(jīng)驗出發(fā)的;就教師提出的問題,學生展開活動(比較、討論、交流),即以“學生、經(jīng)驗和活動”為中心。發(fā)現(xiàn)教學法程序設計教學模式需要達到的教學目標是引導學生如何解決問題,發(fā)現(xiàn)知識,從而提高學生的解決問題的能力,即“能力本位”。
2.4 發(fā)現(xiàn)教學法程序設計教學的優(yōu)點
發(fā)現(xiàn)教學法提高了學生的注意力和學習興趣,增強了學習自信心,使學生看到了自己的潛能。由教師提出問題開始,學生的注意力被吸引到問題上,而問題又是從學生已知道的知識經(jīng)驗出發(fā),學生是容易回答的,明顯提高了學生的學習興趣,增強了學習自信心。使高職學生認識到,程序設計并非深不可測,高不可攀,只要付出努力也是可以學好的。
發(fā)現(xiàn)教學法提高了高職學生的思維能力。在提出問題之后,引導學生從具體、簡單的觀察、比較計算出發(fā),通過學生之間相互討論,在教師的引導下,由學生自己提煉、歸納、總結知識點,自己得出某段程序和整個程序的功能以及程序之間的邏輯關系。提高了學生的抽象思維能力和邏輯思維能力。
發(fā)現(xiàn)教學法有利于培養(yǎng)學生的自主學習精神。發(fā)現(xiàn)教學法以問題為基礎,以培養(yǎng)學生解決問題的能力為目標,把學生的學習置于簡單且從學生的知識經(jīng)驗出發(fā)的問題中,通過學習者的自主探究和合作來解決問題,從而形成解決問題的技能和自主學習的能力。
發(fā)現(xiàn)教學法使學生的學習由機械學習變?yōu)橛幸饬x學習。傳統(tǒng)程序設計教學采用“灌”的方式進行教學,要求學生死記硬背,反復練習;學生沒有經(jīng)歷探究、思考的過程;只是消極、被動地接受知識,學到的知識不能靈活應用。因此,學生的學習是機械學習。發(fā)現(xiàn)教學法程序設計教學采用“啟”的方式進行教學,在教師的指導下由學生自己發(fā)現(xiàn)知識,學生經(jīng)歷探究、思考的過程;學生將符號所代表的新知識與學習者圖式中已有的知識經(jīng)驗建立非人為的、實質性聯(lián)系;學生真實主動地進入知識的領域,擁抱知識、掌握知識;在參與中體驗到學習的樂趣和成功。因此,學生的學習是有意義學習[4]。
參考文獻:
[1] 牟章.高職高專學生缺乏學習主動性的原因及對策[J].教育與職業(yè),2015(21):113-114.
[2] 單莎莎,張安富.教學理念的歷史審視與價值定向[J].中國大學教學,2016(2):74-78.
[3] 崔詣晨.高校課堂學習共同體創(chuàng)新教育的任務驅動模式[J].山東教育(高教),2020(12):44-46.
[4] 武法提,田浩.挖掘有意義學習行為特征:學習結果預測框架[J].開放教育研究,2019,25(6):75-82.
【通聯(lián)編輯:王力】