摘要:在有眾多教學(xué)資源選擇的前提下,傳統(tǒng)課堂教學(xué)面臨著嚴(yán)峻的考驗(yàn)。如何針對學(xué)生特點(diǎn)、學(xué)生普遍的接受能力,設(shè)計(jì)學(xué)生樂意聽、也聽得懂的課程內(nèi)容,如何有效引導(dǎo)學(xué)生,創(chuàng)造有吸引力的課堂教學(xué)效果?內(nèi)容重于形式,有機(jī)地組織教學(xué)內(nèi)容仍是重中之重。以系統(tǒng)學(xué)為指導(dǎo),貫徹以學(xué)生為本的教學(xué)理念在組織和設(shè)計(jì)高效的課堂教學(xué)通過《程序設(shè)計(jì)基礎(chǔ)》課程教學(xué)實(shí)踐驗(yàn)證,是一種可行的方案。
關(guān)鍵詞:以學(xué)生為本;教學(xué)設(shè)計(jì);程序設(shè)計(jì);系統(tǒng)工程
程序設(shè)計(jì)基礎(chǔ)作為大學(xué)生接觸程序設(shè)計(jì)類的第一門課程,在開啟學(xué)生智慧和控制計(jì)算機(jī)解決實(shí)際問題方面具有啟蒙作用,因此用學(xué)生聽得懂的語言,循序漸進(jìn)地向?qū)W生傳授程序設(shè)計(jì)的基礎(chǔ)知識(shí),根據(jù)學(xué)生已有的認(rèn)知能力和知識(shí)體系將學(xué)生平穩(wěn)地從原來實(shí)驗(yàn)思維、邏輯思維過渡到計(jì)算思維,做好程序設(shè)計(jì)基礎(chǔ)的開篇教學(xué)設(shè)計(jì)尤為重要。
一、 現(xiàn)狀分析
通過問卷調(diào)查了解,就我校而言,大一新生對計(jì)算機(jī)的認(rèn)識(shí)基本處于簡單文件編輯和上網(wǎng)操作,極個(gè)別同學(xué)接觸過一點(diǎn)VB編程,大部分學(xué)生對于學(xué)習(xí)編程還存在一些畏難情緒。而從已修這門課的同學(xué)了解到,初期新概念太多,內(nèi)容雜,剛到復(fù)雜一些的內(nèi)容一個(gè)學(xué)期結(jié)束了,沒學(xué)到多少。因此,把握教學(xué)目標(biāo),了解學(xué)生現(xiàn)有的知識(shí)結(jié)構(gòu)和認(rèn)知水平、認(rèn)真梳理知識(shí)脈絡(luò),在問題和解決方案之間,在學(xué)生的現(xiàn)有知識(shí)水平和待學(xué)的新知識(shí)之間搭起一層層階梯,是設(shè)計(jì)有效課堂教學(xué)內(nèi)容,逐步提升學(xué)生程序設(shè)計(jì)能力的有效途徑。
二、 以學(xué)生為本的程序設(shè)計(jì)基礎(chǔ)課程教學(xué)設(shè)計(jì)思路
針對以上分析的現(xiàn)狀,程序設(shè)計(jì)基礎(chǔ)課程在承擔(dān)語言、思維邏輯教學(xué)的同時(shí),還要兼顧學(xué)生自信心的樹立和思維的轉(zhuǎn)換。為了完成以上培養(yǎng)目標(biāo),在教學(xué)設(shè)計(jì)上探討以學(xué)生為本,遵循知識(shí)的層次性特點(diǎn),尊重認(rèn)知由表及里的過程,按此思路來設(shè)計(jì)教學(xué)。
程序設(shè)計(jì)基礎(chǔ)的基本載體是一種編程語言。作為一種可用的編程語言,它本身就是一個(gè)獨(dú)立的系統(tǒng),而系統(tǒng)都是具有層次性的。于是,用認(rèn)識(shí)系統(tǒng)的方法來學(xué)習(xí)一種語言,按照系統(tǒng)構(gòu)成要素的層次性來遞進(jìn)地、有規(guī)律地學(xué)習(xí)一種語言以及語言傳遞出來的計(jì)算思維方法,并將程序設(shè)計(jì)語言中繁多紛雜的概念按照層次性特點(diǎn)分層梳理。
由表及里的“表”可以理解為外在形式或者系統(tǒng)對外表現(xiàn)出來的功能,“里”則是事物內(nèi)部的組成和關(guān)系。由表及里的認(rèn)識(shí)過程就是先知道事物的功能是什么,可以用來干什么,怎么用,然后再知道它是什么,它的構(gòu)成,更深一步可以理解它的結(jié)構(gòu)是如何支持對應(yīng)功能的。
以學(xué)生為本,就是在分析學(xué)生特點(diǎn)的前提下,按照知識(shí)的層級(jí)性,遵循認(rèn)知的基本規(guī)律,設(shè)計(jì)學(xué)生聽得懂、學(xué)了會(huì)用的課程。
按照問題→知識(shí)→實(shí)踐→思維,再循環(huán)為更復(fù)雜的問題→新的知識(shí)→再次實(shí)踐→新的思維螺旋式上升的過程來設(shè)計(jì)和組織教學(xué),同時(shí)結(jié)合學(xué)生的特點(diǎn),分清螺旋上升鏈的課內(nèi)精講、學(xué)生自建,MOOC資源借用,鏈條的起點(diǎn)和終點(diǎn)等,可以有序并高效組織每一堂課。
三、 實(shí)施案例
在上述教學(xué)設(shè)計(jì)思想指導(dǎo)下,程序設(shè)計(jì)基礎(chǔ)課程的具體教學(xué)實(shí)施辦法示例如下:
1. “hello,world”問題的設(shè)計(jì)
在教學(xué)設(shè)計(jì)中一些重要概念的闡述在用詞上注意保持一致性,新的術(shù)語或者概念也嚴(yán)格遵循先定義,界定其語義范圍,再使用的原則。在學(xué)習(xí)之初,從一個(gè)經(jīng)典又易上手的“hello,world”程序開始。
在這個(gè)實(shí)例中,區(qū)分程序和程序設(shè)計(jì)兩個(gè)概念。引入程序框架、主程序、頭文件的概念。在主程序中再引出函數(shù)、語句等概念。新概念的引入可以通過類比的方法降低新概念接受的難度。比如,將程序框架比作畫板、主程序框架比作畫紙,頭文件比作工具箱,而函數(shù)比作畫筆。引導(dǎo)學(xué)生在很多概念的學(xué)習(xí)上學(xué)會(huì)像用遙控器一樣的方法來學(xué)習(xí),即只要了解用法和功效即可,無需非要把它拆解。
接下來,可選擇地向程序設(shè)計(jì)、程序設(shè)計(jì)語言、程序的開發(fā)環(huán)境以及程序的執(zhí)行環(huán)境幾個(gè)維度分別去拓展。拓展的原則仍是以“用”為標(biāo)準(zhǔn),拓展的內(nèi)容盡可能是能解決當(dāng)前知識(shí)領(lǐng)域的基本問題的一個(gè)最小集,更豐富的知識(shí)留在對應(yīng)課程中做深入講解。拓展中有意識(shí)的引導(dǎo)或點(diǎn)撥:一是傳遞程序設(shè)計(jì)與程序設(shè)計(jì)語言、開發(fā)環(huán)境、執(zhí)行環(huán)境具有相對獨(dú)立性,在學(xué)習(xí)過程中要善于區(qū)分抽象和具體,普遍規(guī)律和具體應(yīng)用,提高學(xué)生更替到新的程序設(shè)計(jì)語言或開發(fā)環(huán)境工作的適應(yīng)性;二是引導(dǎo)學(xué)生“先見森林,再見樹木”,在進(jìn)入領(lǐng)域知識(shí)的學(xué)習(xí)中不會(huì)迷路;三是為課程與其他課程的銜接預(yù)留接口,便于課程之間的無縫對接。
程序設(shè)計(jì)部分的拓展核心解決程序設(shè)計(jì)流程圖即可。再掌握問題解決流程的形式化表達(dá)方法,學(xué)生能用形式化的方法表達(dá)問題的處理流程,架起問題和程序之間的橋梁。關(guān)于算法和數(shù)據(jù)結(jié)構(gòu)的內(nèi)容則留待后續(xù)課程深入,同時(shí),不要過分強(qiáng)調(diào)復(fù)雜算法和數(shù)據(jù)結(jié)構(gòu)的問題來打擊學(xué)生學(xué)好語言基礎(chǔ)的信心。
程序設(shè)計(jì)語言部分的拓展是跨越C語言,簡介當(dāng)前多種常用編程語言,防止學(xué)生在學(xué)習(xí)程序設(shè)計(jì)基礎(chǔ)課程時(shí)的“一葉障目”,陷入學(xué)習(xí)C語言的語法細(xì)節(jié),而忽視了獨(dú)立于C語言的思維方法和適用于各種程序設(shè)計(jì)語言的通用規(guī)律的學(xué)習(xí)。
程序開發(fā)環(huán)境包括程序的編輯、編譯、調(diào)試、預(yù)處理等環(huán)境,要學(xué)生一方面了解程序從編寫到執(zhí)行過程,各自的任務(wù)、用戶、接口等。二是清楚開發(fā)環(huán)境的多樣性。
盡管教學(xué)中以一種具體語言,一種具體環(huán)境為例,將語言的普遍規(guī)律映射到該具體環(huán)境去解決具體問題,但學(xué)生需要充分認(rèn)識(shí)到程序設(shè)計(jì)語言所傳遞的程序設(shè)計(jì)的普遍規(guī)律與程序的開發(fā)、編輯、編譯以及運(yùn)行環(huán)境之間的辯證關(guān)系,歸納出獨(dú)立于具體開發(fā)環(huán)境的一般使用過程,并抓住具體環(huán)境的特色之處。在熟練掌握一種具體語言、一種特定的環(huán)境后,能觸類旁通,培養(yǎng)出對語言和環(huán)境變更與進(jìn)化的自適應(yīng)性。
程序執(zhí)行環(huán)境拓展,理解計(jì)算機(jī)系統(tǒng),更深入地把握程序設(shè)計(jì)語言的精髓,充分發(fā)揮程序設(shè)計(jì)語言的潛能。拓展中可選擇地覆蓋進(jìn)制、數(shù)的表示、存儲(chǔ)和類型。endprint
以上各個(gè)層面的可選拓展為學(xué)生打開了視野,也引導(dǎo)不同學(xué)習(xí)能力、不同興趣愛好的同學(xué)自由構(gòu)建專業(yè)知識(shí)體系。
2. 簡單數(shù)學(xué)運(yùn)算問題的設(shè)計(jì)
聚焦到一門程序設(shè)計(jì)語言,語言要素部分是最雜亂環(huán)節(jié)。采用如下方法解決:
首先,引入一個(gè)簡單數(shù)學(xué)運(yùn)算的問題:根據(jù)用戶輸入的兩個(gè)數(shù),計(jì)算商,并顯示給用戶。
由此分層推進(jìn)C語言的構(gòu)成要素:
層次一:常量、標(biāo)識(shí)符、符號(hào)
常量,是數(shù)據(jù)的一種存儲(chǔ)形式。根據(jù)數(shù)據(jù)內(nèi)容的不同分為:整形常量、實(shí)型常量、字符常量和字符串常量。轉(zhuǎn)義字符是其中字符常量的一種。
標(biāo)識(shí)符,是所有根據(jù)C語言命名規(guī)則形成的有效字符序列,用以表達(dá)一個(gè)對象的名稱。標(biāo)識(shí)符可以被用作符號(hào)常量、變量、函數(shù)名以及C語言關(guān)鍵字等。
符號(hào),代碼中除常量和標(biāo)識(shí)符外C語言編譯器可以識(shí)別的標(biāo)志就是符號(hào)了。符號(hào)主要包括所有運(yùn)算符和特殊符號(hào)。特殊符號(hào)介紹空格、括號(hào)()、逗號(hào),、注釋符(/**/或//)以及分號(hào)(;)、逗號(hào)(,)、引號(hào)(“”)等。
層次二:表達(dá)式及函數(shù)調(diào)用
表達(dá)式是用運(yùn)算符和運(yùn)算符連接起來、符合C語言語法規(guī)則的式子。有算術(shù)表達(dá)式、賦值表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、逗號(hào)表達(dá)式、條件表達(dá)式和函數(shù)表達(dá)式等。
層次三:語句
語句是C語言編譯器可以編譯執(zhí)行的最小單位。一類是以分號(hào)為標(biāo)志,包括變量聲明、函數(shù)調(diào)用、賦值、空、復(fù)合表達(dá)式語句。一類是以一對{}為標(biāo)志,稱為復(fù)合語句。
第四個(gè)層次的要素:程序
包括主程序和函數(shù)定義。
在按照以上層次劃分來梳理和解析C語言代碼的構(gòu)成后,借助于逐級(jí)遞階的應(yīng)用場景,遵循從簡入繁的原則,按照知識(shí)邏輯的組織,分層次推出語言要素。等課程結(jié)束,一覽全貌,一張完整的、結(jié)構(gòu)清晰的知識(shí)體系圖誕生。
3. 階乘fac=n!(n=10)問題的設(shè)計(jì)
實(shí)踐證明,學(xué)生掌握語法結(jié)構(gòu)、理解代碼都不是困難的事情。困難在于遇到實(shí)際問題后,學(xué)生寫不出程序代碼。
因此,從問題場景出發(fā),展開分析并做出合理抽象,從程序語言語法設(shè)計(jì)出發(fā)解析與問題對接的線索,當(dāng)兩者之間相匹配時(shí),水到渠成,問題自然就解決了。
問題分解
對于n!,當(dāng)把n賦予具體數(shù)值時(shí),可以看出,完整的數(shù)學(xué)表達(dá)式是:
如果n=1,無需重復(fù),結(jié)果直接等于1,其他情況(n>1)則需要重復(fù)后面的乘法,根據(jù)輸入的n,重復(fù)(n-1)次,每次都是在原來乘積的基礎(chǔ)上再乘一個(gè)與當(dāng)前次數(shù)相關(guān)的數(shù)。此時(shí),可選擇延伸一個(gè)新的概念:應(yīng)用程序=數(shù)據(jù)組織+數(shù)據(jù)處理。數(shù)據(jù)在內(nèi)存中表現(xiàn)為存儲(chǔ)空間,在程序中表現(xiàn)為常量或變量。于是,可以通過分析問題需要的數(shù)據(jù)以及數(shù)據(jù)需要的處理著手,用流程圖把問題描述出來了。
語法解讀
在學(xué)習(xí)循環(huán)的語法符號(hào)和基本框架時(shí),可以把語法用如下圖(圖1)表示:
于是,循環(huán)結(jié)構(gòu)的語法從語義角度向問題流程圖又靠近了一步,降低問題求解的難度。
語言活用
在代碼實(shí)現(xiàn)中,靈活地運(yùn)用語言豐富的運(yùn)算符和表達(dá)式,可以給出一個(gè)問題的多種代碼實(shí)現(xiàn)方案,而一個(gè)問題的多種求解或描述也為程序代碼的優(yōu)化提供了條件,可以在比較中選擇更優(yōu)化的代碼。
上述fac=n?。╪=10)為例,用for語句可以表述為:
(1)for(i=1,fac=1;i<=10;i++)fac*=i;
(2)for(i=1,fac=1;i<=10;)fac*=i++;
(3)i=0,fac=1;for(;;)if(i++<10)fac*=i;else break;
用do...while或while語句也可以有多種實(shí)現(xiàn)方式,不再累述。還可以用遞歸函數(shù)解決該問題,如下圖(圖2):
int fac(int m)
四、 總結(jié)
從實(shí)際問題切入,提出了以學(xué)生為本的一種教學(xué)內(nèi)容設(shè)計(jì)思路,解決學(xué)生已有認(rèn)知結(jié)構(gòu)和教學(xué)內(nèi)容之間的差距過大以及知識(shí)不能轉(zhuǎn)換為能力的問題。實(shí)踐下來,對于逐階提升學(xué)生的實(shí)踐能力、培養(yǎng)學(xué)生的學(xué)習(xí)興趣以及學(xué)生自主系統(tǒng)地拓展都有很好的指導(dǎo)作用。
參考文獻(xiàn):
[1]沈軍.程序設(shè)計(jì)語言類課程的教學(xué)思路研究[J].高等工程教育研究,2001(1):79-81.
[2]何欽銘,陸漢權(quán),馮博琴.計(jì)算機(jī)基礎(chǔ)教學(xué)的核心任務(wù)是計(jì)算思維能力的培養(yǎng)[J].中國大學(xué)教學(xué),2010(9):5-9.
[3]汪應(yīng)洛.系統(tǒng)工程理論、方法與應(yīng)用[M].高等教育出版社,2004.
[4]周光禮.培養(yǎng)理性的行動(dòng)者——高等教育目的再思考[J].高等工程教育研究,2015,3:49-57.
作者簡介:葛艷,上海市,上海海洋大學(xué)信息學(xué)院。endprint