馬燕 李順寶 徐曉鐘 李魯群 張玉萍



摘要:本文提出一種螺旋上升式任務驅動模式,并將其應用于大學程序設計類課程的教學,分析了該模式與傳統的任務驅動法的區別。為配合該教學法的具體實施,以C語言為例,對程序設計類課程的教學內容作了詳細分析,給出了在設計遞進式任務時所遵循的若干原則,并要求做到理論教學與實踐教學的一體化,同時,對任課教師需要具備的理論素養和實踐技能作了分析。
關鍵詞:螺旋上升式;任務驅動;遞進式任務;程序設計
中圖分類號:G642.0 ? ? 文獻標志碼:A ? ? 文章編號:1674-9324(2016)43-0162-04
一、引言
《C語言程序設計》、《Java語言程序設計》等是高校計算機專業的基礎課程,在講授程序設計語言語法、程序設計基本方法等之外,應注重培養學生利用計算機語言求解實際問題的計算思維能力,而該能力的培養正是在實際教學環節中所欠缺的。傳統的教學往往過度強調語法知識的掌握,而忽視對于學生實際編程能力和計算思維能力的培養,學生即使掌握了語法知識,在遇到實際編程問題時也會無從下手。另外,學生自身素養、理解能力的個性差異也較大,大部分學生在紛繁復雜的語法、枯燥的編程語言面前往往失去信心與興趣,從而對計算機語言產生畏懼心理。因此,本文以C語言程序設計課程為例,針對其教學內容,提出一種螺旋式任務驅動模式來實施程序設計語言類課程的教學,使學生真正掌握編程的精髓和實質,從而提高計算思維能力。
二、螺旋上升式任務驅動模式
“任務驅動法”是一種建立在建構主義理論基礎上的教學法,即在教學過程中,老師根據教學內容、教學目標、學生特點等綜合因素來組織、設計教學任務,要求學生通過獨立探究完成任務。該方法的特點是:學生的學習過程必須與所給的任務或者問題相結合,學生的學習動機是在強烈的問題驅動下,通過問題的探究進行自主探索和互動協作,使學生帶著真實的任務在探索中學習。
在C語言中采用“任務驅動”教學法,就是將C語言中的教學內容轉化為需要學生完成的編程“任務”,在這些“任務”驅動下,由教師引導學生由易到難、循序漸進地完成各項“任務”,從而完成教學任務,并且在“任務”的完成過程中,不斷地培養學生分析問題、解決問題的能力,從而提高學生的獨立思考能力和計算思維能力,并且不斷激發學生學習編程語言解決實際問題的興趣,逐步形成學習—思考—進步—再學習—再思考—再進步的良性循環。在任務的設計中,可以結合C語言自身特點,對教學內容進行重組,并從重組后的教學內容出發,重新設計各項任務,使前續任務是后繼任務的基礎、引導,后繼任務又是前續任務的擴充、提高,使任務之間層層遞進,環環相扣,由此,本文提出螺旋上升式任務驅動模式來完成大學程序設計類課程的教學。
三、程序設計類課程教學內容的分析
為配合螺旋上升式任務驅動教學法,課程內容的分析與組織是關鍵之一。以C語言為例,可以把教學內容簡化為以下兩大階段。
第一階段包括C語言的基礎內容,如基本數據類型、運算符、三大結構(順序結構,選擇結構,循環結構)。這一階段的教學任務設計中,應淡化語法細節,強調三大結構的理解與掌握,而順序、選擇和循環這三大結構教學環節的設計可以由螺旋上升式任務方式完成教學內容,以實例分析深入展開,通過由淺入深的任務,將程序的三種基本結構的執行過程和特點一一呈現。通過任務的完成,讓學生理解并掌握三種基本結構的執行過程,在三大結構的學習中,貫穿基本數據類型、運算符、輸入、輸出、條件、循環和轉移語句等相關語法知識的學習。經過第一階段的學習,學生具備基本的程序設計能力,并初步具有計算思維能力,能獨立編寫具有初等難度、幾十行的程序,并能夠較順利地完成程序調試與測試。
第二階段包括C語言的高層次內容,如數組、指針、函數。這三部分分別進行單獨學習的話,較容易被學生理解和使用,真正的難點是如何將這三部分內容靈活組合成具有通用性的程序,而要達到這一目標,首先要對數組、指針和函數這三部分的區別與聯系作一分析,如果這三者存在密切的關系,則可以利用螺旋式任務驅動教學法來設計前后貫通、不斷提升的各項任務。圖1對數組、指針和函數三者的關系作了說明,首先,數組是定義了一塊連續的內存區域,這一連續的內存區域中的首地址可以利用指針引用,而數組和指針最終是為模塊化程序設計服務,最終,又可以通過函數來完成。圖1說明了在第二階段的C語言學習中,是可以利用螺旋式任務驅動教學法來完成的。經過第二階段的學習,學生可以獨立編寫數百行以上、功能較為復雜、具有一定可讀性和可擴展性的程序。
上述兩個階段教學內容中包含需要學生了解、掌握的知識點,對于這些知識點,要進行全面分析與統籌,需要對知識點間的相互關系做出分析:知識點是獨立的還是并行關系,以及對于掌握某一知識點的支撐知識點,所有這些關系可以通過繪制知識點的結構圖來完整表示出來。圖2和圖3分別列出順序結構和分支結構的知識點結構圖,其中,箭頭表示概念的走向。
四、螺旋上升式任務的設計原則
螺旋上升式任務驅動模式的關鍵在于任務的設計,而在教學任務設計時所遵循的原則決定著整個教學任務的成敗,下面就螺旋上升式任務驅動模式的任務設計所遵循的幾條原則進行探討。
1.按教學內容設計,要求覆蓋盡可能多的知識點。任務的設計可以緊扣知識點的結構圖來設計,做到盡可能多地涵蓋教學內容的絕大多數知識點。例如,在分支結構程序設計任務中,可以設計兩個數比較大小的任務,由學生輸入兩個10以內的自然數,計算機根據兩個輸入數的大小,輸出“大于”、“等于”或“小于”。在該任務中,需要學生掌握輸入輸出語句、分支語句以及邏輯運算符和邏輯表達式等知識點。
2.遞進式任務的設計。對于一些較大的知識點,比如函數和模塊設計,可以被認為大任務,通過大任務的完成,可以形成對函數比較系統與全面的認識,如果要求學生直接完成大任務,由于學生的個體差異,則較難順利完成。我們可以按照大任務涉及到的知識點,將其分解成二級甚至三級、四級子任務來完成,同時,二級、三級和四級子任務間呈遞進式關系,并注意新舊知識的聯系,子任務之間通過知識點加以貫穿,在完成新的子任務的同時不斷復習鞏固舊知識點。圖4列出了5個遞進式子任務的設計,任務1與上述例子一致,任務2則在任務1中兩個數的基礎上,修改為三個數比大小,要完成該項任務,則需用到多分支嵌套結構。任務3進一步將三個數改為100個數,這時,向學生拋出一個新的問題,即100個數是無法再通過鍵盤輸入的,而學生要解決該問題,只能采用for循環語句來實現,并且還需掌握隨機數生成函數。在任務3的基礎上,進一步產生了任務4,要求對這100個數排序,這時,學生僅掌握上述知識點顯然已捉襟見肘,待解決的問題變成了變量存儲的問題,可以順理成章地引入一維數組的定義,同時,也可以讓學生了解冒泡排序法。在學生掌握了任務4以后,又面臨任務5,要求對4個班級學生的五門課程成績分別排序,學生如果還是延用上述方法的話,則分別要進行20次的冒泡排序法,這顯然是行不通的,而模塊化設計正好可以解決該問題,由此,引入了函數的知識點。
3.任務盡量貼近生活。程序類課程的學習本質上是較枯燥的,可以通過設計與學生日常生活貼近的任務,激起學生的好奇心,積極探索,主動學習,通過自主探索解決實際問題,這樣就能給學生帶來成就感,并激發他們投入更大的熱情完成程序設計任務。
例如,圖4(見下頁)中的任務4可以改為以下實例:喬伊是一位遠近聞名的大胃王,這天他參加一項國際競吃比賽,競吃食品包括燒餅、熱狗、龍蝦、冰淇淋、烤雞等共10種,每種食品價格各不相同,比賽規定按10種食品價格從低到高依次品嘗,請您替喬伊列出按食品價格排序后的食品清單。通過這個實例可以看出,數的排序問題被轉化為鮮活的實際生活問題,巧妙的將枯燥的冒泡排序法等知識點融合在了需要學生解決的問題中,從而讓學生體悟到編程的終極目標不是為了掌握語法,而是為了解決實際問題。
五、螺旋上升式任務驅動模式的實施
在大學程序設計類課程的教學實踐中,要將螺旋上升式任務驅動模式付諸實現,需要對理論教學和實踐教學等各個環節進行改革,并且也對教師提出了新的要求。
1.做到理論教學與實踐教學的一體化。螺旋上升式任務驅動教學與一般的任務驅動教學的最大區別是,教師圍繞任務展開理論教學,學生在理解與掌握任務中涉及的知識點后,接受新的任務,任務間層層遞進,學生學習的知識點循序漸進,螺旋式上升。為完成這一目標,需要對任務作一分類,有的任務是由教師通過講授來完成的,而有的任務則是由學生通過實踐自主完成,不同任務之間有可能是相互嵌套、互有關聯,這時就要求在課堂教學中,做到理論教學與實踐教學的一體化。教師可以根據學生的實際情況和教學目標,或實施理論教學,或安排學生自主實踐,靈活安排各項任務。比如,圖4中的任務1相對簡單,實例較短,教師可邊講解學生邊操作;而任務2,相對任務1更易出錯,教師可先不給提示,讓學生獨立完成,針對學生中出現的普遍問題,可以出示反面樣例,從而起到事半功倍的作用。
2.教師應具備較高的理論素養和實踐技能。要在大學程序設計類課程中運用好螺旋上升式任務教學法,其核心在于具備較高理論素養和實踐技能的教師,理論教學不再是按傳統模式先講語法再舉例,而是由課前精心設計的任務自然引入新的知識點,學生則是從一個較易解決的熟悉的內容漸漸進入到新知識點的學習。在課堂教學中,往往會出現教師無法預知的情況,比如,學生在完成任務過程中,會出現各種錯誤,面對林林總總的錯誤,需要教師迅速分析出帶有共性的錯誤,并通過變例(包括正例和反例)的演示來加深學生對知識點的理解,學會獨立探究的方法。
六、結論
筆者針對大學程序設計類課程教學中面臨的實際問題和特點,提出螺旋上升式任務驅動模式,將其用于大學程序設計類課程的教學中,如能較好地運用這一方法,則可以使枯燥的計算機語言語法的“填鴨式”的傳授轉變為學生對實際問題的探究,而在完成遞進式任務的同時,了解計算機語言語法,最終使學生由被動接受知識轉變為主動獲取知識,提高學生解決實際問題的能力和計算思維能力。
參考文獻:
[1]陳蓮君,朱晴婷.培養能力為主線的C語言程序設計教學研究[J].計算機教育,2011,(14):102-105.
[2]劉金月,楊永,倪紅梅,時貴英.任務驅動法在《程序設計》課程中的應用[J].長江大學學報(自然科學版)理工,2012,9(8):183-185.
[3]徐新海,林宇斐.注重計算思維的啟發式C語言語法教學[J].計算機教育,2014,(17):1-4.
[4]郭紹青.任務驅動教學法的內涵[J].中國電化教育,2006,(7):57.
[5]李薇,王磊.螺旋上升式教學模式的探討[J].高等理科教育,2009,(2):56-60.
[6]趙大偉.螺旋式項目教學法在《C語言程序設計》教學中的應用[J].教育探索,2009,(11):80.
[7]左永文.案例教學法在《C語言程序設計》課程中的應用[J].科技創新導報,2012,(18):175.
[8]王偉勤.基于任務的螺旋上升式教學模式探究[J].產業與科技論壇,2012,11(7):169-170.
[9]張世民,李琳琳.任務驅動教學法在程序設計課程中的應用[J].現代計算機,2008,(3):65-69.
[10]李軍.基于任務驅動的《電工技術基礎》課程教學設計過程[J].計算機光盤軟件與應用,2013,(16):241-242.
The Teaching Research of Programming Design Course in the University Based on Spiral Type Task-driven
MA Yan1, LI Shun-bao2,XU Xiao-zhong1, LI Lu-qun1,ZHANG Yu-ping1
(1.College of Information, Mechanical and Electrical Engineer,Shanghai Normal University,Shanghai200234 ,China;2.Mathematical Institute of Shanghai Normal University,Shanghai 200234,China)
Abstract:This paper presents that spiral type task-driven mode can be applied to the teaching of programming design course in the university. The difference between this mode and traditional task-driven has been analyzed. With the implementation of the proposed teaching method,C language is taken as example. The paper analyzes the teaching content of programming design course in detail,puts forward several rules to be followed in the design of progressive task. It is required to achieve the integration of theoretical teaching and practical teaching. This paper also analyzes the theoretical knowledge and practical skills for the teachers.
Key words:spiral mode;task-driven;progressive task;programming design