董玉蓉
摘? 要 針對新工科背景下程序設(shè)計課程中理論教學(xué)與實(shí)踐教學(xué)脫節(jié)的現(xiàn)象,在C語言程序設(shè)計課程教學(xué)中引入案例教學(xué)法,架起理論教學(xué)與實(shí)踐教學(xué)間的橋梁。并以明確的教學(xué)內(nèi)容和目標(biāo)為依據(jù),設(shè)計以學(xué)生為中心、以問題為導(dǎo)向、以討論為基礎(chǔ)的案例教學(xué)環(huán)節(jié),提高學(xué)生學(xué)習(xí)興趣和主動性,最終達(dá)到提高計算思維和編程能力的目的。
關(guān)鍵詞 計算思維;案例教學(xué);C語言程序設(shè)計;理論教學(xué);實(shí)踐教學(xué);教學(xué)改革
中圖分類號:G642.41? ? 文獻(xiàn)標(biāo)識碼:B
文章編號:1671-489X(2018)20-0131-04
Application of Case Teaching in Theoretical Teaching and Prac-tical Teaching//DONG Yurong
Abstract In view of the disconnection between theoretical teaching and practical teaching in the course of program design in the back-ground of new engineering, this paper introduces the case teaching method in the course of C Language Programming, and sets up a bri-
dge between theoretical teaching and practical teaching. And on the basis of the teaching contents and target, the design of case teaching link with student center, issue-oriented and issue-based, to improve students interest and initiative in learning, and to improve the ability
of computational thinking and programming.
Key words computational thinking; case teaching; C language pro-gramming; theoretical teaching; practical teaching; teaching reform
1 背景
新工科跨越了現(xiàn)有學(xué)科的界限和產(chǎn)業(yè)邊界,是對傳統(tǒng)學(xué)科的整合,是面向為了新技術(shù)和新產(chǎn)業(yè)發(fā)展的學(xué)科[1]。新工科背景下的高等教育強(qiáng)調(diào)通識教育對專業(yè)教育的支持,包括加強(qiáng)基礎(chǔ)科學(xué)教育,使學(xué)生對各種新技術(shù)的科學(xué)基礎(chǔ)有扎實(shí)的理解,對學(xué)生適應(yīng)日后新技術(shù)和新產(chǎn)業(yè)的快速發(fā)展和變化十分重要。
計算思維是思維三大模式之一,現(xiàn)已成為所有大學(xué)生應(yīng)該具備的能力。C語言程序設(shè)計作為非計算機(jī)專業(yè)的通識教育課程,是后續(xù)相關(guān)專業(yè)課程的基礎(chǔ)。該課程通過面向過程的程序設(shè)計方法,培養(yǎng)學(xué)生計算思維和程序?qū)崿F(xiàn)能力,從而能更好地利用計算機(jī)科學(xué)與技術(shù)解決各個專業(yè)領(lǐng)域的相關(guān)計算和信息處理問題。
當(dāng)下很多高校進(jìn)行課程改革,壓縮了程序設(shè)計課程的課時,因此,如何在有限的教學(xué)課時內(nèi)完成教學(xué)內(nèi)容、實(shí)現(xiàn)總體的教學(xué)目標(biāo),成為授課教師亟待解決的難題,而在新工科背景下進(jìn)行的教學(xué)改革會使這個問題越來越嚴(yán)峻。當(dāng)前強(qiáng)調(diào)計算思維能力的程序設(shè)計類課程改革大都基于MOOC+SPOCs+翻轉(zhuǎn)課堂的混合式教學(xué)模式[2]。這類教學(xué)改革改變了傳統(tǒng)教學(xué)中“滿堂灌”現(xiàn)象,使得學(xué)生學(xué)習(xí)不受時間、空間的限制,同時對教學(xué)資源進(jìn)行了合理規(guī)劃和有效利用,并對教學(xué)內(nèi)容進(jìn)行了優(yōu)化?;旌鲜浇虒W(xué)方法雖然能夠很好地解決教學(xué)課時不足的問題,但由于在線學(xué)習(xí)對學(xué)生學(xué)習(xí)的主動性和自主性要求很高,對一些學(xué)習(xí)基礎(chǔ)薄弱、學(xué)習(xí)興趣不高、目標(biāo)不明確并缺乏獨(dú)立思考和自我激勵的學(xué)生而言,這種教學(xué)模式并不能很好地幫助他們完成課程學(xué)習(xí),提高課程成績。
C語言程序設(shè)計教學(xué)一直以來都由理論教學(xué)和實(shí)踐教學(xué)兩個部分組成。理論教學(xué)是知識的傳遞過程,主要是由教師到學(xué)生的單向傳遞,是對學(xué)生知識的增量;實(shí)踐教學(xué)是知識的應(yīng)用、經(jīng)驗的積累過程,是對學(xué)生綜合能力的鍛煉。C語言程序設(shè)計是實(shí)踐性很強(qiáng)的一門課程,強(qiáng)調(diào)理論應(yīng)用到實(shí)踐,該課程的學(xué)習(xí)必須通過大量的編程和程序調(diào)試訓(xùn)練,在實(shí)踐中掌握編程知識,培養(yǎng)編程能力,并逐步理解和掌握程序設(shè)計的思想、方法和技巧。對于大多數(shù)學(xué)生來說,上課時聽得懂、跟著老師會做題,并不是真正的懂、真正的會。在線學(xué)習(xí)雖然能夠?qū)⒔虒W(xué)過程重現(xiàn),幫助學(xué)生再次進(jìn)行深度學(xué)習(xí),但仍然有學(xué)生只是掌握了語法知識和常用的算法,即使想到了解決方法,也無法將其描述成適合計算機(jī)執(zhí)行的步驟。理論知識不能解決實(shí)際的問題,造成理論學(xué)習(xí)和上機(jī)實(shí)踐脫節(jié),讓學(xué)生越來越覺得編程很難,從而影響到學(xué)習(xí)后續(xù)內(nèi)容的興趣和主動性。
2 案例教學(xué):理論教學(xué)與實(shí)踐教學(xué)的橋梁
案例教學(xué)是一種開放式、互動式的教學(xué)方法[3-4],是在理論教學(xué)和實(shí)踐教學(xué)之外,啟發(fā)學(xué)生對問題的思考、討論和進(jìn)一步探索,能對知識結(jié)構(gòu)進(jìn)行整合,幫助學(xué)生在案例實(shí)施過程中通過同伴之間的討論和交流,提升計算思維和編程實(shí)現(xiàn)能力。案例教學(xué)的目的是完成教學(xué)任務(wù),基于問題和探索問題是這種教學(xué)方法的核心特點(diǎn)[5]。
理論教學(xué)是知識傳遞的過程,實(shí)踐教學(xué)是知識應(yīng)用、經(jīng)驗積累的過程。案例教學(xué)是對知識結(jié)構(gòu)的整合、經(jīng)驗交流與學(xué)習(xí)的過程,能在理論教學(xué)和實(shí)踐教學(xué)之間起到橋接的作用。因此,如何在課程教學(xué)計劃設(shè)計、案例設(shè)計時使得理論教學(xué)、實(shí)踐教學(xué)、案例教學(xué)達(dá)到平衡,是授課教師需要考慮的首要問題。
案例教學(xué)以學(xué)生為中心,關(guān)鍵在于“學(xué)”,要避免在學(xué)生沒有理論基礎(chǔ)和實(shí)踐經(jīng)驗的情況下開展案例教學(xué)。教師是案例的設(shè)計者。在案例實(shí)施過程中,教師所扮演的是引導(dǎo)者和主持人的角色,避免成為問題的解答者和答案的仲裁者;學(xué)生是案例實(shí)施的主角,教師將學(xué)的主動權(quán)交給學(xué)生,通過案例中的問題激發(fā)學(xué)生學(xué)習(xí)的興趣,引起學(xué)生之間的討論。在整個過程中,教師適當(dāng)?shù)囊龑?dǎo)和對學(xué)生行為的約束是很有必要的,能夠保證教學(xué)環(huán)節(jié)有序按計劃進(jìn)行,完成教學(xué)內(nèi)容,達(dá)到理想的教學(xué)目標(biāo)。
案例設(shè)計是案例教學(xué)的基礎(chǔ),案例的好壞直接關(guān)系到案例教學(xué)能否順利地進(jìn)行,能否達(dá)到預(yù)期的教學(xué)目標(biāo)。需要注意的是,C語言程序設(shè)計的教學(xué)內(nèi)容并不都適合進(jìn)行案例教學(xué)。因此,案例的選擇不僅要考慮教學(xué)計劃、教學(xué)內(nèi)容、教學(xué)目標(biāo)和教學(xué)對象,還要結(jié)合案例教學(xué)的特點(diǎn)來選擇。案例選擇要做到描述簡潔、正確,盡量選擇一些典型問題的求解,以便學(xué)生掌握程序設(shè)計所需的各類基本問題的算法。案例中提出的問題要有針對性,要使學(xué)生能夠?qū)⑺鶎W(xué)的理論知識進(jìn)行綜合應(yīng)用,聯(lián)系實(shí)際問題進(jìn)行綜合分析、設(shè)計算法和編程實(shí)現(xiàn),避免學(xué)生在學(xué)習(xí)過程中感覺知識點(diǎn)零散繁雜,同時避免將綜合性的課程實(shí)習(xí)當(dāng)成案例。
案例教學(xué)強(qiáng)調(diào)學(xué)生的主動參與,學(xué)生可以選擇分組或者是在全班進(jìn)行討論。與傳統(tǒng)課堂教學(xué)中知識由教師向?qū)W生的單向傳遞相比,同伴之間的交流會讓學(xué)生更加舒適和放松,更有利于學(xué)生之間多向的經(jīng)驗交流和分享。討論的過程也是知識、經(jīng)驗、認(rèn)知的碰撞。問題的提出、分析和解決,都是在同一個知識水平上進(jìn)行(盡管有的學(xué)生學(xué)得好,有的學(xué)生學(xué)得不好,但地位的平等會讓學(xué)生更加貼近,容易交流),問題的提出和解決方法的描述,用他們的方式和語言更加容易讓伙伴理解和接受,學(xué)生也更容易在同伴而不是教師那里接受到經(jīng)驗。
教學(xué)總結(jié)對任何一種教學(xué)方法、任意一門課程來說都是一個重要的環(huán)節(jié)。案例教學(xué)中的教學(xué)總結(jié)可以是教師對教學(xué)實(shí)施過程的總結(jié)性評價,也可以是學(xué)生對自己所聽、所想、所學(xué)的總結(jié)。教學(xué)總結(jié)有助于教師改進(jìn)教學(xué)案例、完善教學(xué)設(shè)計,還能夠提升學(xué)生學(xué)習(xí)中的認(rèn)知水平,增強(qiáng)教學(xué)效果。
3 案例教學(xué)設(shè)計
學(xué)習(xí)程序設(shè)計,理解計算機(jī)解決問題的方式很重要,要知道計算機(jī)擅長和不擅長做什么。想要編寫程序,首先要能夠讀懂程序,能對已有的程序進(jìn)行模仿,會套用已有的程序?,F(xiàn)有的經(jīng)典算法,內(nèi)含一些基本問題的解決方法和思路,通過在基本問題的基礎(chǔ)上增加復(fù)雜的條件,幫助學(xué)生熟練掌握并學(xué)會使用這類算法,能夠使學(xué)生在碰到相似問題時快速找到解題思路,節(jié)省時間,降低問題的難度和復(fù)雜度。在實(shí)際應(yīng)用中,適應(yīng)C語言程序設(shè)計的案例教學(xué)可以簡化為三個步驟:案例設(shè)計、教學(xué)實(shí)施、教學(xué)總結(jié)。
案例設(shè)計? 為了能夠讓學(xué)生在學(xué)習(xí)完算術(shù)運(yùn)算符、數(shù)據(jù)類型、三大控制結(jié)構(gòu)、基本輸入輸出之后,強(qiáng)化對理論知識的理解和掌握,能夠熟練應(yīng)用并編寫相應(yīng)的程序去解決實(shí)際生活中的問題,本文設(shè)計了一個有關(guān)循環(huán)結(jié)構(gòu)應(yīng)用的案例,由淺至深、由簡到繁,從簡單需求入手,逐步將程序完善,適用于解決更復(fù)雜的問題。
循環(huán)結(jié)構(gòu)是程序設(shè)計的三大控制結(jié)構(gòu)之一,學(xué)生在學(xué)習(xí)該結(jié)構(gòu)之前已經(jīng)學(xué)習(xí)了運(yùn)算符、輸入輸出、順序結(jié)構(gòu)、選擇結(jié)構(gòu)的語法知識,并上機(jī)編程實(shí)踐了簡單的程序。循環(huán)結(jié)構(gòu)的語法知識難度和復(fù)雜程度都要大于前兩種結(jié)構(gòu),并且從循環(huán)結(jié)構(gòu)開始就要使用枚舉法、二分法、選擇排序、冒泡排序等常用算法。學(xué)生在理論知識學(xué)習(xí)之后直接進(jìn)行上機(jī)實(shí)踐難度較大,此時就需要教師結(jié)合教學(xué)目的和教學(xué)內(nèi)容設(shè)計合理的案例教學(xué)來激發(fā)學(xué)生興趣,正確引導(dǎo)學(xué)生思考。在案例選擇時,選擇小而經(jīng)典的算法,能使學(xué)生更好地掌握和理解計算思維。
下面兩個程序的功能分別是使用枚舉法和輾轉(zhuǎn)相除法來判斷輸入的整數(shù)是否為素數(shù)。
枚舉法:
#include
void main()
{
int x;
int i;
int primes = 1;? //? x是素數(shù)
printf(“請輸入一個整數(shù):”);
scanf(“%d”, &x);
for ( i=2; i { if ( x % i == 0 ) { primes = 0; break; } } if (primes == 1 ) printf("是素數(shù)\n"); else printf("不是素數(shù)\n"); } 輾轉(zhuǎn)相除法: #include void main() { int x; int i; int primes = 1;? //? x是素數(shù) printf(“請輸入一個整數(shù):”); scanf(“%d”, &x); for ( x=1; x<=100; x++ ) { for ( i=2; i { if ( x % i == 0 ) { primes = 0; break; } } if (primes == 1 )? printf(“%d “, x); } printf(“\n”); } 問題1:比較兩個程序,哪段程序最優(yōu)?為什么? 問題2:試著找出其他能夠判斷素數(shù)的方法,并將該方法描述出來。 擴(kuò)展1:輸出100以內(nèi)的素數(shù)。 擴(kuò)展2:輸出前50個素數(shù)。 思考題:需要幾層循環(huán)?每一層循環(huán)變量能不能設(shè)置成一樣?循環(huán)的次數(shù)是多少次?如何讓程序效率更高?在沒有計算機(jī)的情況下,如何知道你的算法是正確的? 該案例是在經(jīng)典問題上增加了難度,由淺入深;是對經(jīng)典問題的擴(kuò)展,更貼近實(shí)用;要求學(xué)生不僅學(xué)會方法,更要領(lǐng)會思路;讓學(xué)生能夠掌握變量分析法,在脫離計算機(jī)的情況下也能編寫出正確的程序,理解算法真正的含義。該案例的教學(xué)實(shí)施是在循環(huán)結(jié)構(gòu)理論教學(xué)結(jié)束之后。通過本次案例教學(xué),有助于學(xué)生對三大控制結(jié)構(gòu)的整合,能夠?qū)χ八鶎W(xué)理論知識進(jìn)行固化,加強(qiáng)知識從理論到實(shí)踐轉(zhuǎn)換。 教學(xué)實(shí)施? 教學(xué)實(shí)施以討論為基礎(chǔ),是案例教學(xué)的核心環(huán)節(jié)。學(xué)生是關(guān)注的中心和主角,對于同一個案例,不同的學(xué)生會有不同的關(guān)注點(diǎn)。在問題1的討論中,學(xué)生關(guān)注點(diǎn)主要集中在程序中表達(dá)式的復(fù)雜程度、循環(huán)的次數(shù)、語句的條數(shù)、能否讀懂、算法的步驟、流程圖是否容易畫出等方面。問題2在問題1的基礎(chǔ)上增加難度的同時,考查了學(xué)生對算法描述方法的掌握程度,該問題沒有標(biāo)準(zhǔn)答案,學(xué)生只要能用一種方法正確地描述出算法,就算是回答了。 擴(kuò)展1和擴(kuò)展2是對兩個已有的程序進(jìn)行擴(kuò)展,很多學(xué)生在看到題目之后馬上開始寫代碼,并有強(qiáng)烈的上機(jī)實(shí)踐的欲望,這時教師就要提醒學(xué)生注意后面的幾個思考題。 對于同一個問題,學(xué)生也能提出不同的解決方法,不同的方法又會有不同的步驟,就會形成不同的算法,而同一個算法又會有不同的描述。在討論過程中沒有設(shè)定標(biāo)準(zhǔn)答案,學(xué)生要在討論過程中對比不同的方法、算法和描述,對算法進(jìn)行分析,可以從循環(huán)執(zhí)行的次數(shù)、程序的語句行數(shù)、程序的可讀性、輸出結(jié)果是否美觀等方面進(jìn)行比較,找出最優(yōu)的解決方案。學(xué)生之間多向的知識和經(jīng)驗的碰撞,要比教師單向的知識傳遞和教師與學(xué)生之間雙向的討論產(chǎn)生的效果更顯著,學(xué)生也更樂于向同伴而非教師尋求幫助。 教師作為整個教學(xué)環(huán)節(jié)的設(shè)計者、引導(dǎo)者和主持人,在課堂上要適時地引導(dǎo)案例討論的進(jìn)程,控制課堂討論進(jìn)度,必要時進(jìn)行提示和提問,避免討論過于發(fā)散。學(xué)生在討論過程中可以加入自己的需求,試圖讓問題得到更合理、完善的解決,極大地調(diào)動積極性;也學(xué)會使用計算機(jī)編程去解決現(xiàn)實(shí)中的實(shí)際問題,進(jìn)而提高計算思維能力。對案例不設(shè)置標(biāo)準(zhǔn)答案,也沒有明確的指示性答案,只要能編程實(shí)現(xiàn),能解決問題,就是一個好的程序。 在案例教學(xué)實(shí)施過程中,教師特別要注意那些能力不符合案例教學(xué)要求的學(xué)生,要能夠及時做出調(diào)整和正確的引導(dǎo),以免影響他們學(xué)習(xí)的積極性和主動性。 教學(xué)總結(jié)? 教學(xué)總結(jié)是案例教學(xué)的重要環(huán)節(jié)。教學(xué)總結(jié)可以是教師對案例中的難點(diǎn)、重點(diǎn)的強(qiáng)調(diào)解析,也可以是學(xué)生對未解決或發(fā)現(xiàn)的新問題的提問。有學(xué)生提出:前50個素數(shù)輸出之后,在終端會由一行顯示,這樣的結(jié)果不利于查看和進(jìn)一步分析。有學(xué)生就提出:可以讓這些數(shù)分成五行顯示。五行顯示后又發(fā)現(xiàn)數(shù)有大有小,各行長短不一,輸出也很難看,那么為什么不讓五行的長度一樣呢?怎樣才能讓五行長度一樣呢?這些問題是在平時的編程中很容易出現(xiàn)的,看似很簡單,可沒有細(xì)致的觀察提不出問題,沒有經(jīng)驗的積累也無法解決問題。發(fā)現(xiàn)問題是能力,分析問題、解決問題也是能力。學(xué)生提出的問題和感興趣的內(nèi)容可以在考試中出現(xiàn),這對學(xué)生的學(xué)習(xí)也是一種激勵。 4 結(jié)語 筆者結(jié)合從事C語言程序設(shè)計課程教學(xué)的經(jīng)驗,通過在理論教學(xué)和實(shí)踐教學(xué)之間引入案例教學(xué),幫助學(xué)生將零散的知識融入已經(jīng)掌握的知識體系中去。教學(xué)實(shí)踐表明,通過學(xué)生之間的討論,能夠調(diào)動學(xué)生學(xué)習(xí)的興趣和主動性;學(xué)生在教學(xué)實(shí)施過程中從問題到答案,逐步經(jīng)過問題抽象、計算建模、編程實(shí)現(xiàn),這一過程恰恰是計算思維中最重要的三個思維過程——抽象、分解與組合;通過學(xué)生之間多向的經(jīng)驗交流和共享,幫助學(xué)生提高編程能力,而編程能力的提高直接反映了學(xué)生計算思維能力的提高?!?/p> 參考文獻(xiàn) [1]林建.面向未來的新工科建設(shè)[J].清華大學(xué)教育研究, 2017(2):26-35. [2]戰(zhàn)德臣.“大學(xué)計算機(jī)”“MOOC+SPOCs+翻轉(zhuǎn)課堂”混合教學(xué)改革實(shí)施計劃[J].計算機(jī)教育,2016(1):12-16. [3]蘭霞萍,陳大超.案例教學(xué)的問題與出路[J].教學(xué)與管理,2017(4):1-4. [4]丁海燕,袁國武,周小兵,等.高級語言程序設(shè)計案例教學(xué)模式的探討[J].計算機(jī)教育,2011(8):65-68. [5]王名.如何進(jìn)行案例教學(xué)[EB/OL].[2006-07-19].http:// case.sppm.tsinghua.edu.cn:9090/ggalzx/detail_wh.jsp? boardid=12&pageno=1.