白洪濤[1] 何麗莉[2] 胡成全[2]
([1]吉林大學(xué)公共計(jì)算機(jī)教學(xué)與研究中心 吉林·長(zhǎng)春 130012;[2]吉林大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 吉林·長(zhǎng)春 130012)
摘 要 針對(duì)學(xué)生學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言的困難,以提高學(xué)生的實(shí)際編程能力為目標(biāo),提出了分層次的基于問(wèn)題(Problem Based Learning,PBL)的程序設(shè)計(jì)學(xué)習(xí)方法。包括:以激發(fā)學(xué)習(xí)興趣為目標(biāo)的教學(xué)情景案例、以培養(yǎng)“計(jì)算思維”為目標(biāo)的宏觀問(wèn)題和以培養(yǎng)實(shí)際編程能力為目標(biāo)的微觀問(wèn)題等。教學(xué)實(shí)踐表明基于PBL的教學(xué)取得了良好的效果。
關(guān)鍵詞 基于問(wèn)題的學(xué)習(xí) 教學(xué)情景 宏觀問(wèn)題 微觀問(wèn)題
中圖分類號(hào):G424 文獻(xiàn)標(biāo)識(shí)碼:A DOI:10.16400/j.cnki.kjdkz.2015.08.061
Programming Design Language Teaching Cases Base on PBL
BAI Hongtao[1], HE Lili[2], HU Chengquan[2]
([1] Center for Computer Fundamental Education, Jilin University, Changchun, Jilin 130012;
[2] College of Computer Science and Technology, Jilin University, Changchun, Jilin 130012)
Abstract: For students to learn computer programming languages difficult, in order to improve students' ability to target the actual programming is proposed based on hierarchical problem (Problem Based Learning, PBL) learning programming. Including: to stimulate interest in learning the target of teaching case scenario, to develop macro issues "computational thinking" as the goal, and to develop practical programming capabilities targeted micro issues and so on. The practice shows that the good results achieved based on the teaching of PBL.
Keywords: problem-based learning; teaching situation; macro issues; micro issues
0 引言
計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言是學(xué)生們普遍認(rèn)同的學(xué)習(xí)難點(diǎn),過(guò)多的語(yǔ)法知識(shí)點(diǎn)以及在考核考評(píng)模式下,學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言應(yīng)有的根本目標(biāo)——編程能力沒(méi)有得到很好的鍛煉。當(dāng)前的教學(xué)模式是以教師為主體,教師是教學(xué)過(guò)程的主導(dǎo),學(xué)生是知識(shí)的被動(dòng)接受者和思想的跟隨者。因此,培養(yǎng)學(xué)生的創(chuàng)造力,構(gòu)建以學(xué)生“學(xué)”為中心的教學(xué)體系是非常必要的。
基于問(wèn)題(Problem Based Learning,PBL)的教學(xué)模式率先由美國(guó)神經(jīng)病學(xué)教授Barrows創(chuàng)立。①PBL已從國(guó)際醫(yī)學(xué)界擴(kuò)展到工程、法學(xué)、工商管理等諸多學(xué)科,從大學(xué)高等教育逐步延伸到中小學(xué)教育。②③PBL在國(guó)內(nèi)的起步較晚,上世紀(jì)90年代才引起研究者的關(guān)注,全國(guó)教育科學(xué)“十五”項(xiàng)目規(guī)劃將PBL的網(wǎng)絡(luò)化設(shè)計(jì)列為重點(diǎn)課題。1994年開始,陸續(xù)有關(guān)PBL理論研究的文章發(fā)表,且側(cè)重于醫(yī)學(xué)教育領(lǐng)域,2000年后擴(kuò)展到其他領(lǐng)域,但理論研究比例較大。④⑤PBL在高等院校計(jì)算機(jī)程序語(yǔ)言學(xué)課程中的實(shí)踐,則較為少見(jiàn)。
本文引進(jìn)PBL教學(xué)模式,通過(guò)基于“問(wèn)題”的學(xué)習(xí),探尋一條適合學(xué)生學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言的有效途徑,同時(shí)為教師在教學(xué)中提供可參考的方法和思路。
1 教學(xué)情景案例
1.1 什么是計(jì)算機(jī)語(yǔ)言
對(duì)于初學(xué)者而言,最直接的問(wèn)題就是:“什么是計(jì)算機(jī)語(yǔ)言?”我們從《通靈芯片》一書⑥中對(duì)計(jì)算機(jī)語(yǔ)言既抽象又形象的解釋來(lái)闡述這一問(wèn)題。
石頭上我蝕刻了一副圖案,內(nèi)有幾何圖形種種,在不明者眼中,顯得神秘而又復(fù)雜,但我明白,只要布局正確,這塊石頭將被賦予一種特殊的能力,即對(duì)一種至今無(wú)人說(shuō)過(guò)的咒語(yǔ)做出反應(yīng)。我用這種語(yǔ)言提問(wèn),石頭會(huì)顯靈應(yīng)答:那是一個(gè)我用符咒創(chuàng)造的世界,一個(gè)在石頭圖案內(nèi)想象的世界。
石頭是硅片(硬件),咒語(yǔ)就是程序(軟件)。
1.2 計(jì)算機(jī)語(yǔ)言與人類語(yǔ)言的關(guān)系,學(xué)習(xí)計(jì)算機(jī)語(yǔ)言與學(xué)習(xí)外語(yǔ)的相似性
語(yǔ)言也是我們?nèi)祟惖闹饕涣魍緩?,要說(shuō)對(duì)方能夠聽(tīng)得懂的話。若我們想讓計(jì)算機(jī)遵從我們的意愿工作,就必須對(duì)計(jì)算機(jī)“說(shuō)”它能夠“聽(tīng)得懂”的“語(yǔ)言”。
學(xué)習(xí)和使用計(jì)算機(jī)語(yǔ)言與我們學(xué)期一門外語(yǔ)(如英語(yǔ))一樣,有兩種方式:
先學(xué)習(xí)單詞、語(yǔ)法,再學(xué)習(xí)語(yǔ)義。
學(xué)習(xí)一定的語(yǔ)法,在使用(編程)中學(xué)習(xí)語(yǔ)義,融會(huì)貫通。
我們建議采用第二種學(xué)習(xí)方法,竭力避免為了語(yǔ)法而語(yǔ)法,死記硬背的學(xué)習(xí)是沒(méi)有意義的。
1.3 結(jié)構(gòu)化程序設(shè)計(jì)的好處
我們吃中餐都有這樣一個(gè)體會(huì),同樣一個(gè)菜品,在不同的飯店,由不同的廚師做出來(lái)的味道迥異。而比如KFC,無(wú)論在世界上的哪個(gè)店面,口味幾乎是一樣的。同學(xué)們想為什么呢?對(duì),因?yàn)镵FC建立了一套標(biāo)準(zhǔn)化的食品制作流程,每個(gè)環(huán)節(jié)都是規(guī)定好的,細(xì)致的,不需要個(gè)人主觀“發(fā)揮”的。同樣,程序設(shè)計(jì)既可以是“京醬肉絲”,也可以是“漢堡包”??梢允撬囆g(shù),也可以是工程。比較而言,我們更側(cè)重于用工程化的思想和方法來(lái)進(jìn)行程序設(shè)計(jì)。進(jìn)而,有了結(jié)構(gòu)化程序設(shè)計(jì)方法,就是為了規(guī)范程序設(shè)計(jì)的個(gè)人行為的。使得程序有更好的可讀性、可理解性和可移植性。
1.4 正確理解編譯器的提示信息
同學(xué)們?cè)谟镁幾g器對(duì)高級(jí)語(yǔ)言源程序進(jìn)行編譯的時(shí)候,若有語(yǔ)法錯(cuò)誤,通常編譯器會(huì)告知我們語(yǔ)法錯(cuò)誤出現(xiàn)在哪一行。有時(shí)僅僅有一個(gè)語(yǔ)法錯(cuò)誤,但是編譯器會(huì)顯示有很多行都有錯(cuò)誤。很多同學(xué)不理解,以為出了什么問(wèn)題,其實(shí)這是可以解釋的,如圖1所示:
圖1 編譯器匹配規(guī)則
第一行有5個(gè)正確的匹配,如果我拿走了其中的一個(gè)(黃色一對(duì)中的一個(gè)),則高級(jí)語(yǔ)言順序編譯器根據(jù)至上而下檢查的原則,會(huì)出現(xiàn)4個(gè)(而不是一個(gè))失配的錯(cuò)誤。只要更正了黃色的部分,則所有錯(cuò)誤消失。
2 宏觀問(wèn)題
(1)如何才能學(xué)好計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言?
回答:從模仿開始。
人類學(xué)習(xí)母語(yǔ)是模仿,學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言也可以從“照葫蘆畫瓢”開始,在模仿的過(guò)程中修正錯(cuò)誤,掌握知識(shí)點(diǎn),培養(yǎng)程序設(shè)計(jì)的思路、方法和技能。
類比,學(xué)習(xí)外語(yǔ)如英語(yǔ)的方法也不該只是大量地背單詞,應(yīng)該是從說(shuō)話、閱讀、寫作當(dāng)中學(xué)習(xí),學(xué)會(huì)用是最終目的,否則再多的單詞也是沒(méi)有生命力的。
(2)if 語(yǔ)句和switch…case語(yǔ)句都能實(shí)現(xiàn)選擇分支,是不是二者用哪個(gè)都可以?
回答:雖然從語(yǔ)法上,switch…case結(jié)構(gòu)相當(dāng)于多個(gè)if嵌套。也有一些題目來(lái)考察兩者的相互轉(zhuǎn)換。但語(yǔ)法不該被亂用或?yàn)E用,switch…case結(jié)構(gòu)只有在特定的多分支選擇時(shí)才適合使用。
(3)條件表達(dá)式可以代替if語(yǔ)句,那么就多用條件表達(dá)式對(duì)嗎?
回答:這個(gè)問(wèn)題類似于switch…case結(jié)構(gòu)一樣,不能被濫用。只有類似于下面的條件語(yǔ)句
if ?( a>b )
Max = a;
else
Max = b;
才能使用 Max = a>b?a:b;來(lái)代替,不是任何if語(yǔ)句轉(zhuǎn)換成條件表達(dá)式都是合適和易于理解的。
(4)為什么C語(yǔ)言有“指針”?是必須的嗎?
回答:包括C語(yǔ)言在內(nèi)的任何一種計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,都是從實(shí)用性出發(fā)的,而不像數(shù)學(xué)定理那樣追求“當(dāng)且僅當(dāng)”。C語(yǔ)言的指針并不是必須的,比如C#就沒(méi)有指針的概念,但有了“指針”,能夠使程序更具靈活性,在實(shí)現(xiàn)某些功能時(shí)更方便、快捷。當(dāng)然,C語(yǔ)言的指針也有一些負(fù)面的作用,如野指針。對(duì)初學(xué)者來(lái)說(shuō),C語(yǔ)言的指針也確實(shí)是一個(gè)難點(diǎn)。但無(wú)論如何,同學(xué)們完全可以通過(guò)勤學(xué)多練,掌握“指針”。隨著學(xué)習(xí)和應(yīng)用的深入,同學(xué)們會(huì)慢慢體會(huì)到C語(yǔ)言的“指針”不僅不是阻礙,而且還是解決問(wèn)題的“利器”。
3 微觀問(wèn)題
(1)數(shù)組既然是多個(gè)數(shù)據(jù)元素的集合,是否可以對(duì)數(shù)組所有元素進(jìn)行整體輸入和輸出?
例如:int a[10];
scanf(“%d”, a);
回答:C語(yǔ)言規(guī)定,數(shù)組的名字代表了數(shù)組首元素的地址(或理解為數(shù)組在內(nèi)存中的起始地址),雖然scanf的參數(shù)表列的要求是地址,但不允許用一個(gè)地址將數(shù)組所有元素都輸入,除非要輸入的字符串,且字符串是放到字符數(shù)組中,并當(dāng)作一個(gè)整體來(lái)看待的。
正確的方法是:
int a[10], i;
for (i=0; i<10; i++)
scanf(“%d”, &a[i]);
對(duì)于字符數(shù)組而言,可以:
int c[10];
scanf(“%s”, c);
(2)如何驗(yàn)證對(duì)浮點(diǎn)數(shù)在“足夠接近”情況下的等值。
回答:浮點(diǎn)數(shù)的定義決定它的絕對(duì)精確度會(huì)隨著其代表的值變化, 所以比較兩個(gè)浮點(diǎn)數(shù)的最好方法就要利用一個(gè)精確的閾值。這個(gè)閾值和作比較的浮點(diǎn)數(shù)值大小有關(guān)。不要用下面的代碼:
double a, b;
...
if (a == b) /*錯(cuò)!*/
要用類似下列的方法:
#include <math.h>
if (fabs(a - b) <= epsilon * fabs(a))
epsilon 被賦為一個(gè)選定的值來(lái)控制“接近度”。你也要確定a 不會(huì)為0。
(3)莫要亂寫“;”
C語(yǔ)言程序的一行是以“;”為結(jié)尾的,但不意味著任何一行程序的末尾都要加“;”。比如:
for ( i=0; i<100; i++ )
sum = sum + i;
有很多同學(xué)在for ( i=0; i<100; i++ )后加了一個(gè)“;”,這使得本來(lái)完成一個(gè)功能的語(yǔ)句,硬生生地被“分開”了。
4 結(jié)束語(yǔ)
熟練掌握一門計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,無(wú)論是對(duì)計(jì)算機(jī)還是非計(jì)算機(jī)專業(yè)的學(xué)生都是非常重要的。教學(xué)實(shí)踐表明,通過(guò)不同層次基于問(wèn)題的學(xué)習(xí),能夠顯著增強(qiáng)學(xué)生的主觀能動(dòng)性,提升學(xué)習(xí)興趣。本文是在我校教育教學(xué)改革項(xiàng)目的支持下的教學(xué)研究成果。期望在政策的指引下,通過(guò)師生的共同努力,探索出適合當(dāng)代大學(xué)生學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言和相關(guān)課程新道路。
參考文獻(xiàn)
2013.09,吉林大學(xué)本科教學(xué)改革研究項(xiàng)目,在線“非計(jì)算機(jī)專業(yè)計(jì)算機(jī)程序設(shè)計(jì)PBL教學(xué)”內(nèi)容研究,項(xiàng)目編號(hào):2013097;
2013.09,吉林大學(xué)本科教學(xué)改革研究項(xiàng)目,基于PBL理論的《無(wú)線傳感器網(wǎng)絡(luò)》課程教學(xué)研究,項(xiàng)目編號(hào):2013093;
2013.09,吉林大學(xué)本科教學(xué)改革研究項(xiàng)目,《物聯(lián)網(wǎng)應(yīng)用系統(tǒng)分析與設(shè)計(jì)》課程建設(shè),項(xiàng)目編號(hào):2013091