摘要 本文針對高級語言程序設(shè)計(C++)課程的教學現(xiàn)狀,從教學模式、教學設(shè)計方法和教學內(nèi)容三個層面對該類課程提出改革措施,強調(diào)學生的實際應(yīng)用能力,并融入團隊精神和規(guī)范編程等軟件工程思想。
關(guān)鍵詞 C++教學改革 教學模式 教學方法 教學內(nèi)容
一、引言
“高級語言程序設(shè)計(C++)”一直是計算機專業(yè)、信息類和電類一年級學生開設(shè)的專業(yè)基礎(chǔ)課程,部分其他理工科專業(yè)也將此課程納入公共基礎(chǔ)課范疇。本課程培養(yǎng)學生軟件設(shè)計邏輯思維和編程能力,特別對于計算機專業(yè)的學習。是后續(xù)專業(yè)課程必不可少的先修課程。目前,課程的建設(shè)綜合考慮了各專業(yè)學生的接受能力和學習條件,事實上,對于計算機學科領(lǐng)域的學生,C++作為他們學習的第一門計算機高級語言,掌握和運用的好壞不僅僅影響了他們對整個學科知識體系的理解,更體現(xiàn)了他們的專業(yè)素質(zhì)和技巧。
通過一段時間的教學,我們發(fā)現(xiàn),目前存在的主要問題是課程學習完畢以后,學生能掌握一定的理論知識,但實際動手能力較差。大部分學生在通過一年的學習后,只會解決書本和試卷中的練習題,但不會處理解決實際問題,不能動手編制較復(fù)雜的程序。因此,我們建設(shè)更適于計算機相關(guān)專業(yè)的C++課程,而改革的核心在于實驗。
二、教學模式改革
筆者認為,當前高校教學改革的長期目標之一是要改變傳統(tǒng)的以教師為中心的教學模式,建構(gòu)一種既能發(fā)揮教師的主導(dǎo)作用又能充分體現(xiàn)學生認知主體作用的新型教學模式。在此基礎(chǔ)上逐步實現(xiàn)教學內(nèi)容、教學手段和教學方法的全面改革。之所以要把教學模式作為此次教改的主要目標,是因為教學模式是指在一定的教育思想、教學理論和學習理論指導(dǎo)下,在一定環(huán)境中展開的教學活動進程的穩(wěn)定結(jié)構(gòu)形式,也就是說,教學模式是指按照什么樣的教育思想、教學理論和學習理論來組織教學活動進程。所以教學模式是教育思想、教與學理論的集中體現(xiàn)。教學模式的改變將要引起教學過程的深刻變革,也必將導(dǎo)致教育思想、教學觀念、教與學理論的根本變革。
從我們目前的現(xiàn)實情況看,教學模式基本上都是以教師為中心。這種模式的優(yōu)點是有利于教師主導(dǎo)作用的發(fā)揮,便于教師組織、監(jiān)控整個教學活動進程,便于師生之間的情感交流,因而有利于系統(tǒng)的科學知識的傳授,并能充分考慮情感因素在學習過程中的重要作用。其嚴重弊病則是:幾乎完全由教師主宰課堂,很大程度上忽視了學生的認知主體作用,不利于具有創(chuàng)新思維和創(chuàng)新能力的創(chuàng)造型人材的成長(按這種模式培養(yǎng)出的絕大部分是知識型人材而非創(chuàng)造型人材)。
建構(gòu)主義學習理論和學習環(huán)境強調(diào)以學生為中心,要求學生由外部刺激的被動接受者和知識的灌輸對象轉(zhuǎn)變?yōu)樾畔⒓庸さ闹黧w、知識意義的主動建構(gòu)者,建構(gòu)主義的教學理論則要求教師要由知識的傳授者、灌輸者轉(zhuǎn)變?yōu)閷W生主動建構(gòu)意義的幫助者、促進者;要求教師應(yīng)當在教學過程中采用全新的教育思想與教學模式(徹底摒棄以教師為中心、強調(diào)知識傳授、把學生當作知識灌輸對象的傳統(tǒng)教育思想與教學模式)、全新的教學方法和全新的教學設(shè)計。因而很自然地,建構(gòu)主義的學習理論與教學理論就成為以學生為中心教學模式的主要理論基礎(chǔ)。以學生為中心的教學模式注意在學習過程中發(fā)揮學生的主動性、積極性,相應(yīng)的教學設(shè)計主要圍繞“自主學習策略”和“學習環(huán)境”兩個方面進行。前者是整個教學設(shè)計的核心——通過各種學習策略激發(fā)學生去主動建構(gòu)知識的意義(誘發(fā)學習的內(nèi)因);后者則是為學生主動建構(gòu)創(chuàng)造必要的環(huán)境和條件(提供學習的外因)。
上述兩種教學模式各有其優(yōu)點和不足,結(jié)合我們社會和學校自身的實際情況,我們希望能夠?qū)嵺`一種更加符合實際的“主導(dǎo)一主體”的雙主教學模式。雙主模式介于上述兩種總模式之間,它不是以教師為中心,也不完全是以學生為中心,而是既發(fā)揮教師的主導(dǎo)作用(而不是像“教師中心模式”中那樣發(fā)揮“主宰”作用——自始至終主宰課堂,完全由教師唱主角),又要充分體現(xiàn)學生的認知主體作用,即要把“教師中心”和“學生中心”兩者的長處吸收過來,而把兩者的消極因素加以避免。這就要求在基本保留“傳遞一接受”教學活動進程(在大班授課情況下,這有利于教師對教學的組織和主導(dǎo)作用的發(fā)揮)的條件下,要對這種“進程”加以認真的改造,即在此進程中要利用計算機為核心的技術(shù)手段,在建構(gòu)主義理論指導(dǎo)下通過人機交互讓學生更多地去主動思考、主動探索、主動發(fā)現(xiàn),從而形成一種新的教學活動進程的穩(wěn)定結(jié)構(gòu)形式:在整個進程中,教師有時處于中心地位(以便起主導(dǎo)作用),但并非自始至終;學生有時處于傳遞一接受學習狀態(tài),但更多的時候是在教師幫助下進行主動思考與探索;教學媒體有時作為輔助教的工具,有時作為學生自主學習的認知工具;教材要素也各自有不同的作用,彼此之間有不同的聯(lián)系,從而形成一種新的教學模式——“雙主模式”。這種模式的理論基礎(chǔ)既有“傳遞一接受”教學理論和行為主義學習理論,也有建構(gòu)主義的教學理論和學習理論。
教學模式的改革必將引起教學策略、教學設(shè)計方法和教學內(nèi)容的變化,因此,我們還要對現(xiàn)有的教學策略和教學內(nèi)容進行一定的改造,以適應(yīng)模式的轉(zhuǎn)變。
三、教學設(shè)計方法改革
在雙主教學模式的背景下,可以采用很多不同的具體的教學設(shè)計方法,如支架式教學設(shè)計、拋錨式教學設(shè)計、隨機進入式教學設(shè)計等,這些設(shè)計方法可以在具體的教學過程中有選擇性地采用,在我們新的教學改革方案中,我們也給學生定義了這樣的七個學習階段:
1.選——找到幫助
選包括選老師、選教材、選參考資料、選信息來源、選學習渠道,等等。雖然一部分選擇教師負責完成,但教會學生充分利用網(wǎng)絡(luò)資源、有效利用開發(fā)工具,并以此作為他們的良師益友是非常重要的。筆者經(jīng)常在第一堂課就告訴學生,教師只是一個領(lǐng)路人,他們的良師益友是編譯器、是優(yōu)秀的文獻資料、是網(wǎng)絡(luò)另一端的先行者們。
2.拓——認識程序
給學生們一些簡單的例程,給學生們一段操作的步驟,讓他們依葫蘆畫瓢地將程序輸入,編譯、連接之后運行。這個時候他們多數(shù)只知道是連續(xù)的點擊不同的按鈕的操作過程。當出現(xiàn)錯誤時,只能讓他們仔細檢查輸入的每一個字符是否準確。但是,這將樹立他們對于程序的第一印象。他們能迅速地體會到程序“啟動”的欣喜和成就,盡管不是自己創(chuàng)作的程序。
以往教學中,習慣于先解釋字、詞、語句。每完成一部分內(nèi)容的教學,讓學生們嘗試用他們已經(jīng)認識的信息組成的一段代碼進行實驗。實際上,學生們在知識籌備的時間內(nèi),他們對于詞法、語法的學習是漫無目標的,不知道什么時候有用,不知道該怎么用;自然而然以一種死記硬背的方式去學習,真正進行實驗的時候,一些記憶模糊了,一些已經(jīng)不記得了,再一次從頭來過。
事實上,“拓”的過程中,學生對于語言知道的越少,他對于程序的運行越感興趣,在后續(xù)的學習過程中,更加能夠集中精力去研究清楚程序中的每一個組成部分。這其實是在教學的初期階段給學生建立一個謎題的過程,而解開謎題的過程與科學探討的過程及其相似。通過目標的創(chuàng)建,不僅激發(fā)學生對于學習目標的興趣,還可以引導(dǎo)他們像專業(yè)人員一樣思考。再給學生準備好一些更復(fù)雜的源程序,讓他們可以直接打開運行,這些都可以吸引他們的注意力。
3.臨——改動程序
在原樣照搬的基礎(chǔ)上,一些變化能夠激起學生更多的好奇心。通過讓學生在例程上自由的進行一些改動,記錄下改動的內(nèi)容,猜測這樣的改動將給程序的運行帶來怎樣的變化后再次編譯運行,來驗證他們的想法。運用“差距理論”來調(diào)動學生的學習主動性。1994年,卡耐基梅隆大學的行為經(jīng)濟學家Georgy Loewenstein給出了對情境興趣最全面的解釋。他認為,當我們感到在知識上存在差距時就會產(chǎn)生好奇心;Loewenstein認為差距導(dǎo)致痛苦。當我們想知道什么事卻無法知道的時候,就像我們身上有個非撓不可的癢癢。為了解除這種痛苦,我們就必須填補這種知識差距。即便看爛電影本身就是一種痛苦,我們也會耐心地坐著,因為不知道解決實在是太痛苦了。差距理論的一個重要含義是在填補差距之前要制造差距。說出事實之前,他們先要認識到他們需要這些事實才行。根據(jù)Loewenstein的觀點,說服人們相信自己需要我們的信息的訣竅在于首先要強調(diào)某種他們所沒有的特定知識。我們可以給學生們提出一個就他們的知識而言存在差距的問題,給他們預(yù)測結(jié)果的挑戰(zhàn)。
“改變‘=’左邊的內(nèi)容程序會怎么樣?”,“改變‘=’右邊的內(nèi)容程序會怎么樣?”不管結(jié)果和猜測是否吻合,是否能分析出原因呢?“為什么改變‘=’左邊的字符對于運行結(jié)果沒有任何改變,但是改變右邊的字符。運行結(jié)果就變了?”“如果把‘=’左右兩邊的內(nèi)容交換又會怎樣?”解決一個問題往往能引發(fā)出更多的問題,讓學生在一個自問自答的過程中思考和學習。
4.仿——重寫程序
在幫助學生解答問題的過程中,其實已經(jīng)把語言的基本要素教授給了學生,雖然他們還會拼寫錯關(guān)鍵字,會不記得運算符的優(yōu)先級別,但是他們已經(jīng)知道怎么去運用每一個元素。那些字面上的錯誤,或者用戶手冊上清楚列明的問題不需要花費他們太多的時間去解決,也將隨著運用次數(shù)的增加牢牢地刻在學生腦海之中。
既然他們已經(jīng)清楚了每一個分詞在例程中的作用,他們可以通過改寫程序來實現(xiàn)一些類似但不同的功能。剛才他們只能把一個從1累加到10的程序改成從1累加到100的程序,再改成從1累加到n的程序,現(xiàn)在讓學生解決一個計算2的n次方,或者n的階乘的程序,接下來他們可以計算任意復(fù)雜的表達式了。
5.脫——創(chuàng)造程序
前面四個階段是本科生必須在一年級完全經(jīng)歷的學習階段,后面的三個階段在本課程的學時內(nèi)或多或少的會有一些閃現(xiàn),然后一直貫穿學生專業(yè)學習的過程,乃至從事軟件開發(fā)工作的職業(yè)生涯。
當前面積累的例程代碼都轉(zhuǎn)變成個人的編程經(jīng)驗,學生們面對問題不再需要擺著例程在面前。他們通過將問題不斷分解,直到每個小問題都是一個自己曾經(jīng)解決過的問題。把積累的那些代碼拼裝起來,得到新問題的解決方案。
進一步的脫離模板、程序創(chuàng)造,需要學生進行數(shù)據(jù)結(jié)構(gòu)和算法的學習,這讓他們能夠組織的問題規(guī)模更加龐大,結(jié)構(gòu)更加復(fù)雜。每個學生有自己拆分現(xiàn)實世界的角度,也有重新拼裝的獨特想法。同樣的問題,解題的思路豐富了,編寫的代碼也各不相同。
6.變——創(chuàng)新程序
大作業(yè)或者課程設(shè)計是檢驗學生掌握計算機語言,并能靈活運用的好方法。在布置大作業(yè)時,讓學生自由選題,只對于程序的規(guī)模,功能的完整性和知識點在程序中的應(yīng)用提出。在檢查學生們的大作業(yè)時,總能出現(xiàn)一些很陌生的代碼,需要花上一些時間才能看懂看明白。到這一階段時。老師對于學生的影響已經(jīng)很小,尤其是技術(shù)的指導(dǎo),學生基本形成了特有的技術(shù)風格,并感受到方法學、模式、結(jié)構(gòu)框架等對于大規(guī)模開發(fā)的重要作用,軟件工程對于團隊開發(fā)的重要作用。老師引導(dǎo)學生更加關(guān)注知識體系的組成、行業(yè)的發(fā)展趨勢、先進技術(shù)的產(chǎn)生,幫助他們開拓視野。Mitchell kapor的《軟件設(shè)計宣言》說道“設(shè)計就是腳踏兩個世界,即技術(shù)的世界和人及其愿望的世界,設(shè)計人員努力要做的是把兩者結(jié)合到一起”。讓學生懂得,技術(shù)不是全部,技術(shù)為人類服務(wù)。
四、教學內(nèi)容改革
目前的教學內(nèi)容主要依賴于課本,但課本由于編寫周期較長,很多內(nèi)容比較陳舊,而且由于缺乏可視化編程的內(nèi)容,很多學生在學習完成之后無法編寫標準的Windows程序,導(dǎo)致他們學習興趣驟然降低。我們計劃在教學內(nèi)容上作出如下改進:
1.采用課本+課外書籍+MSDN幫助+網(wǎng)絡(luò)的多元化教材
課本和相關(guān)書籍由于結(jié)構(gòu)清晰、層次清楚,因此很適合學生作為系統(tǒng)的學習材料,但也因其更新速度慢、離今后的實際工作距離較遠,導(dǎo)致學生學不到最新的知識,進而導(dǎo)致學生缺乏實際的動手能力。采用多元化的教材,一方面,可以促進學生閱讀大量的中英文技術(shù)文檔,提高其自主學習和研究的能力,另一方面,也可以讓學生接觸到最新的技術(shù)發(fā)展趨勢。
2.加強可視化編程內(nèi)容的學習
集成開發(fā)環(huán)境VC是可視化編程的開發(fā)工具。在以往的教學中,只關(guān)注語言本身的練習,因此只開發(fā)控制臺(DOS)程序。但學生的興趣不高,成就感不強。將可視化開發(fā)納入C++實驗課程體系,可以提升學習樂趣,盡早給學生提供實現(xiàn)創(chuàng)新想法的工具。
3.加強編程模式的學習
計算機語言的學習,不僅是語法規(guī)則的學習,更重要的是編程模式的學習。在編程特別是面向?qū)ο缶幊谭矫嬗泻芏嗲叭丝偨Y(jié)的模式和習慣用法,這決定這一個程序設(shè)計人員水平的高低。這就好像人人都會下象棋,但真正的高手是需要有一個行棋的模式的。常見的編程模式包括簡單工廠模式、工廠方法模式、策略模式、裝飾模式、建造模式、單例模式、多例模式、代理模式、適配器模式、橋梁模式、觀察者模式等,所有這些內(nèi)容在現(xiàn)在的教材中都沒有得到體現(xiàn)。
4.提倡規(guī)范化編程
好習慣從小養(yǎng)起,好的編程習慣也要從初學就開始培養(yǎng)。在實驗中應(yīng)強調(diào)和貫徹專業(yè)的編程規(guī)范,不僅可以減少程序中錯誤,更是幫助學生樹立了良好的專業(yè)形象,培養(yǎng)職業(yè)道德,為以后的團隊合作、軟件工程實踐奠定基礎(chǔ)。
五、總結(jié)和展望
高級語言程序設(shè)計是計算機和軟件專業(yè)專業(yè)學習必不可少的先修課程,能不能學好就意味著專業(yè)知識的基礎(chǔ)是否扎實,直接影響到后續(xù)學習的效果。筆者認為,在傳統(tǒng)的教學內(nèi)容上,必須融入團隊精神和編程規(guī)范的思想,以引導(dǎo)學生主動探究的方式開展教學,從而提高學生的應(yīng)用能力和創(chuàng)新能力。