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