丁海燕
(云南大學(xué) 信息學(xué)院, 云南 昆明 650091)
計算機程序設(shè)計課程中計算思維的培養(yǎng)
丁海燕
(云南大學(xué) 信息學(xué)院, 云南 昆明 650091)
計算機程序設(shè)計課程是許多高校理工科專業(yè)的公共必修課程之一,通常采用C語言作為編程語言。針對傳統(tǒng)程序設(shè)計課程的教學(xué)不足,如概念抽象學(xué)生理解困難,學(xué)生缺乏程序設(shè)計的邏輯思維等問題,該文介紹了計算思維的概念,分析了如何將計算思維融入程序設(shè)計課程教學(xué)內(nèi)容,并對翻轉(zhuǎn)課堂教學(xué)法進行了探討,教學(xué)實踐證明取得了良好的教學(xué)效果。
程序設(shè)計; 教學(xué)設(shè)計; 計算思維; 翻轉(zhuǎn)課堂
程序設(shè)計既是高校計算機和通信等專業(yè)的必修課程,也是理工科非計算機專業(yè)的計算機基礎(chǔ)課程之一,通常采用C語言作為計算機編程的入門語言,目前高校程序設(shè)計課程的教學(xué)普遍存在一些不足:
(1) 教師在授課過程中容易注重語法的細節(jié)而忽視算法和計算思維的培養(yǎng),即基本問題求解方法的講解。
(2) 教學(xué)方式通常是教師講學(xué)生聽,學(xué)生在整個學(xué)習(xí)過程中參與度不高,處于被動學(xué)習(xí);先講理論后上機實驗,學(xué)生聽課后按部就班完成上機實驗,動手能力和解決問題的思考能力不強[1]。
(3) 教學(xué)偏重于知識的學(xué)習(xí),忽視計算思維的培養(yǎng)與訓(xùn)練。由于計算思維能力的養(yǎng)成沒有得到專門的訓(xùn)練,導(dǎo)致思路狹窄,缺乏學(xué)習(xí)的興趣和動力,學(xué)生在學(xué)完課程后常常會感到迷茫,不知道如何用程序設(shè)計方法解決自己的專業(yè)問題。
這些問題是導(dǎo)致學(xué)生編程能力不強的主要原因,是傳統(tǒng)課堂注重知識的傳授、忽視思維的培養(yǎng)和訓(xùn)練的結(jié)果。學(xué)生缺乏將數(shù)學(xué)模型映射為計算機模型的能力,即計算思維薄弱,算法靈活應(yīng)用能力不足。解決以上問題的根本方法是將計算思維引入“程序設(shè)計”課程教學(xué)[2]。
《中國高等院校計算機基礎(chǔ)教育課程體系(2008)》對“程序設(shè)計基礎(chǔ)”課程提出的培養(yǎng)目標:一是學(xué)習(xí)問題求解的思路和方法;二是理解在計算機上算法的具體實現(xiàn)。因此程序設(shè)計課程不僅是學(xué)習(xí)編程語言的知識,更重要的是邏輯思維的培養(yǎng),學(xué)習(xí)算法思想與用問題求解的方法,即計算思維的培養(yǎng)。
在利用計算機求解問題的一系列過程中,包括了思維過程、設(shè)計過程和計算過程。對于給定的問題,首先必須對提出的問題進行分析思考,即為思維過程;其次用規(guī)范的形式對算法進行描述,即設(shè)計過程;最終通過計算機程序?qū)崿F(xiàn)算法,使問題得到解決,即為計算過程。顯然,計算性的思維已貫穿于計算機求解問題的全過程,無論是形成解題思路還是編寫程序,其思維的目標都是圍繞可計算性或可操作性,即計算思維[3]。
2006年3月,美國卡內(nèi)基·梅隆大學(xué)的周以真教授在美國計算機權(quán)威期刊《Communications of ACM》撰文提出計算思維(Computational Thinking)的概念和詳細定義。所謂計算思維,就是運用計算的基礎(chǔ)概念去求解問題、設(shè)計系統(tǒng)、理解人類行為。它是涵蓋了計算機科學(xué)之廣泛性的一系列思維活動[4]。計算思維是“每個人都渴望具有的、能夠?qū)W習(xí)和實際運用的具有普適性的思維方式和應(yīng)用技巧。計算思維的本質(zhì)是抽象(Abstraction)和自動化(Automation)[5]。同濟大學(xué)的龔沛曾教授等將計算思維培養(yǎng)進一步細分為計算思維意識、計算思維方法和計算思維能力3個維度培養(yǎng),為程序設(shè)計課程教學(xué)提供了更為明確的指導(dǎo)[6]。
在程序設(shè)計課程中,各種問題的求解方法和算法,如排序法、遞歸法、遍歷法、二分查找法等,都是計算思維方法在程序設(shè)計課程中很好應(yīng)用的體現(xiàn)[7],與計算思維能力培養(yǎng)的主要內(nèi)容相吻合。當然一門課程并不能包含計算思維的所有內(nèi)容,需要一系列計算機應(yīng)用課程共同完成計算思維能力的培養(yǎng)。因此,在程序設(shè)計課程中注重對計算思維能力的培養(yǎng),對學(xué)生后續(xù)專業(yè)方面的學(xué)習(xí)和實踐能力的提高具有重要意義。
計算思維涵蓋了計算機科學(xué)的各個核心思想,不可能在程序設(shè)計一門課程中把計算思維全部體現(xiàn)出來,那么程序設(shè)計課程重點應(yīng)該著重講述哪些內(nèi)容以培養(yǎng)計算思維呢?結(jié)合程序設(shè)計課程的特點,筆者認為有3個最基本的計算思維,即抽象、遞歸和模塊化。
抽象是從事物中抽取出的共同的、本質(zhì)性的特征,而舍棄其非本質(zhì)的特征[8]。例如實數(shù)、整數(shù)、字符、字符串是不同的數(shù)據(jù),得出數(shù)據(jù)類型的概念,不同數(shù)據(jù)在計算機內(nèi)存中的存放形式也不一樣,就是一個抽象的過程。計算思維中的抽象是指用這種抽象的方法表達實際的問題。
遞歸是指函數(shù)在運行過程中直接或間接調(diào)用自身而產(chǎn)生的重入現(xiàn)象。遞歸是計算機科學(xué)的一個重要概念,采用遞歸編寫程序能使程序變得簡潔和清晰,是解決問題的一個有效的程序設(shè)計方法[8]。
模塊化教會學(xué)生如何把復(fù)雜的問題分解成若干個小問題,即使用分而治之的方法解決實際的問題。
計算思維是信息思維,它不同于傳統(tǒng)的數(shù)學(xué)思維,不關(guān)注邏輯關(guān)系、推理演算的嚴謹程度,而是強調(diào)問題解決的操作過程和應(yīng)用實踐。因此在理論知識的講解上要注重教學(xué)方式和方法,將復(fù)雜的概念簡單化描述,讓學(xué)生理解概念的來龍去脈,理解如數(shù)據(jù)存儲、數(shù)據(jù)類型、函數(shù)等重要的概念,為后期講授程序設(shè)計中比較難的部分如數(shù)組、指針、數(shù)據(jù)結(jié)構(gòu)埋下伏筆。另一方面,還要注重培養(yǎng)學(xué)生解決科學(xué)問題能力,以及將這種思維和模型轉(zhuǎn)換為程序的實踐能力。
(1) 如何講授數(shù)據(jù)類型。數(shù)據(jù)類型是一個抽象的概念,學(xué)生在無法看到“內(nèi)存”的實體時,要理解數(shù)據(jù)類型是很困難的。這時可以先借助圖片、音樂、視頻文件的容量大小對字節(jié)的概念進行闡述,再引入不同基本類型的數(shù)據(jù)在內(nèi)存中的存放方式,使學(xué)生建立完整的計算機數(shù)據(jù)存儲的概念,才能牢靠掌握不同數(shù)據(jù)類型的存儲特點。使學(xué)生在后續(xù)的數(shù)據(jù)類型的轉(zhuǎn)換及構(gòu)造數(shù)據(jù)類型的學(xué)習(xí)過程中可以較為平滑地過渡。
(2) 如何講授遞歸。在講解遞歸函數(shù)時,首先“n!=n*(n-1)!”為例介紹遞歸的概念,并以“老和尚講故事的‘無窮故事’”為例說明什么是無窮遞歸,如何讓遞歸在有限次數(shù)內(nèi)終止。以計算Fibonacci數(shù)列和實現(xiàn)十進制與其他進制的轉(zhuǎn)換為例,說明編寫數(shù)值與非數(shù)值問題的遞歸程序,最后以漢諾塔的例子介紹遞歸的實現(xiàn)[5]。
(3) 如何講授函數(shù)。要理解函數(shù)的作用,首先要理解函數(shù)出現(xiàn)的意義,函數(shù)可以將一些重復(fù)出現(xiàn)的計算邏輯獨立出來,從而增強程序的合理性和健壯性,實現(xiàn)程序的模塊化。這時可以舉一個例子,如生活中我們在享受別人提供的服務(wù),但是我們并不關(guān)心是誰提供的這種服務(wù),來讓學(xué)生明白函數(shù)的獨立性以及封裝性。只有函數(shù)和模塊在程序設(shè)計中的重要性解釋清楚以后,學(xué)生才有興趣和愿意去進一步了解如何定義和使用函數(shù),以及如何調(diào)試程序。
函數(shù)的另外一個重要的概念是C語言的函數(shù)參數(shù)傳遞機制是單向值傳遞,很多書上認為指針作為參數(shù)時,傳遞的是地址,從而獨立出地址傳遞這個概念。由于地址也是一類特殊的值,這樣的傳遞方式并沒有破壞C語言參數(shù)單向傳遞機制,因此地址傳遞本質(zhì)上也是一種值傳遞,當學(xué)生對函數(shù)參數(shù)傳遞機制建立起一種統(tǒng)一的概念以后,就很容易理解指針作為函數(shù)參數(shù)時是如何運作的[3]。
(4) 如何形成知識脈絡(luò)。圍繞內(nèi)存的變化,使學(xué)生理解用指針作函數(shù)參數(shù)傳遞地址,實參與形參本質(zhì)上占據(jù)同一內(nèi)存空間,通過形參的改變來改變實參,達到帶回多個不同類型的函數(shù)返回值的目的。從而把數(shù)組、指針、函數(shù)、結(jié)構(gòu)體這些知識脈絡(luò)形成了一條清晰的教學(xué)主線,幫助學(xué)生突破C語言的教學(xué)難點與重點[3]。
學(xué)習(xí)金字塔理論表明,被動聽講的教學(xué)方法學(xué)習(xí)效果最低,在“做中學(xué)”知識吸收能達到75%,而“馬上應(yīng)用或者教別人”學(xué)到的知識能達到90%。愛德加·戴爾提出,學(xué)習(xí)效果在30%以下的幾種傳統(tǒng)方式都是個人學(xué)習(xí)或被動學(xué)習(xí),而學(xué)習(xí)效果在50%以上的,都是團隊學(xué)習(xí)、主動學(xué)習(xí)和參與式學(xué)習(xí)。由此看出,學(xué)習(xí)方法不同,學(xué)習(xí)效果大不一樣。因此教師要學(xué)會調(diào)整甚至改變教學(xué)方法,學(xué)生要努力轉(zhuǎn)變學(xué)習(xí)方法,要由被動聽轉(zhuǎn)到主動學(xué)。在教學(xué)中,要大力提倡小組合作學(xué)習(xí),在參與中掌握知識,生成能力,從而真正實現(xiàn)從知識到能力的轉(zhuǎn)化。
教師應(yīng)當充分尊重學(xué)生在學(xué)習(xí)中的主體地位,在程序設(shè)計課程中可以引入翻轉(zhuǎn)教學(xué)法,顛倒課堂上的學(xué)習(xí)流程,化被動學(xué)習(xí)為主動學(xué)習(xí),提高課堂教學(xué)的有效性。所謂的翻轉(zhuǎn)課堂,就是教師創(chuàng)建視頻,學(xué)生在家中或課外觀看視頻中教師的講解,回到課堂上師生面對面交流和完成作業(yè)的這樣一種教學(xué)形態(tài)[9]。“翻轉(zhuǎn)課堂”特點有:
(1) 教學(xué)視頻短小精悍,通過網(wǎng)絡(luò)發(fā)布的視頻,具有暫停、回放等多種功能,可以自我控制,有利于學(xué)生的自主學(xué)習(xí)。
(2) 教學(xué)信息清晰明確,把內(nèi)容集中在屏幕上,配合講解的畫外音。每一個視頻都針對一個特定的問題,有較強的針對性;視頻的長度控制在在學(xué)生注意力能比較集中的時間范圍內(nèi)(10 min內(nèi)),符合學(xué)生身心發(fā)展特征。
(3) 重新建構(gòu)學(xué)習(xí)流程。教師提供了視頻,在課前對學(xué)生進行“信息傳遞”,在課堂上通過互動來完成“吸收內(nèi)化”,教師在課堂上給予有效的輔導(dǎo),教師更多的責任是去理解學(xué)生的問題和引導(dǎo)學(xué)生去運用知識,學(xué)生之間的相互交流更有助于促進學(xué)生知識的吸收內(nèi)化過程。
(4) 復(fù)習(xí)檢測方便快捷,學(xué)生觀看了教學(xué)視頻之后,是否理解了學(xué)習(xí)的內(nèi)容,視頻后面緊跟著的4~5個小問題,可以幫助學(xué)生及時進行檢測,并對自己的學(xué)習(xí)情況做出判斷[10]。
程序設(shè)計知識點繁雜、概念抽象,因此視頻教學(xué)和翻轉(zhuǎn)教學(xué)也非常適合程序設(shè)計的教學(xué)。有效實施翻轉(zhuǎn)教學(xué)法的前提是根據(jù)教學(xué)內(nèi)容和教學(xué)大綱,劃分出各個章節(jié)的知識點,如if語句、switch語句、for循環(huán)語句、while循環(huán)語句、數(shù)組、函數(shù)、指針等,將每個知識及其典型案例用屏幕錄像軟件錄制成10 min左右的微視頻,上課前提前發(fā)布給學(xué)生在課外觀看,上課時通過師生互動輔導(dǎo)學(xué)生完成上機編程作業(yè),解答學(xué)生在編程中遇到的問題。先看錄像后講課,這是“翻轉(zhuǎn)課堂”的教學(xué)視頻與傳統(tǒng)的教學(xué)錄像最大的不同之處。一個最顯著的變化將是,翻轉(zhuǎn)課堂從以教師為中心真正轉(zhuǎn)變?yōu)橐詫W(xué)生為中心,這實際上是一種傳統(tǒng)與現(xiàn)代的結(jié)合體,但其效果遠好于傳統(tǒng)教學(xué),并且翻轉(zhuǎn)教學(xué)這種主動學(xué)習(xí)的方式有利于計算思維的訓(xùn)練與形成,是培養(yǎng)計算思維很好的一種教學(xué)方式。
培養(yǎng)學(xué)生的計算思維能力,除了把程序設(shè)計的重點放在講解思路、問題分析和對問題進行抽象以外,在教學(xué)過程中還要注意4個原則:
(1) 采用案例法和任務(wù)驅(qū)動。選擇計算學(xué)科中的一些趣味性強的典型實例引導(dǎo)學(xué)生進行程序閱讀和思考,體會其中解決問題的思想和方法。相關(guān)知識點在案例中一并講解,激發(fā)學(xué)生的學(xué)習(xí)興趣和求知欲,避免學(xué)生因枯燥的程序語言語法規(guī)則而失去學(xué)習(xí)興趣;以項目為驅(qū)動組織實施程序設(shè)計的教學(xué),這樣有利于學(xué)生計算思維能力和自學(xué)能力的培養(yǎng)[11]。
(2) 注重學(xué)生的自主學(xué)習(xí)。將課堂教學(xué)、上機實驗、翻轉(zhuǎn)教學(xué)、慕課、教材及其他資源相結(jié)合,創(chuàng)設(shè)線上與線下立體學(xué)習(xí)環(huán)境使學(xué)生成為學(xué)習(xí)活動的主體,讓學(xué)得好的學(xué)生上機輔導(dǎo)差一些的學(xué)生,充分訓(xùn)練學(xué)生的思維與語言表達能力。
(3) 以實踐教學(xué)促進理論教學(xué)。通過上機實踐環(huán)節(jié)加強和訓(xùn)練程序設(shè)計的計算思維模式,學(xué)生在對程序進行不斷調(diào)試的過程中,理解和領(lǐng)悟程序設(shè)計問題求解的思想方法和思維模式[12]。
(4) 引導(dǎo)學(xué)生參加合作學(xué)習(xí)。采用的方式是上機實驗時將3~4個學(xué)生作為一組進行考核。每個人在解決問題中所能貢獻的能力是不一樣的,合作方式可以很快提高自身所缺乏的能力;其次,小組之間形成競爭關(guān)系,小組成員會盡力提高自己小組的競爭力,這種競爭機制能夠激發(fā)學(xué)生的積極性,在提高學(xué)生解決問題的能力的同時也培養(yǎng)了團隊合作精神。
計算機技術(shù)更新極快,在程序設(shè)計的教學(xué)中不能只滿足于教會學(xué)生編程技能,還要注重學(xué)生的自學(xué)能力、思維能力和創(chuàng)新能力的培養(yǎng)。教師還要教給學(xué)生歸納總結(jié)、觸類旁通的學(xué)習(xí)方法,教會學(xué)生歸納和總結(jié),在多門編程課程中觸類旁通,將會使學(xué)生在將來的工作中立于不敗之地。
References)
[1] 張莉,金瑩.大學(xué)程序設(shè)計課程中的計算思維培養(yǎng)[J].中國電力教育,2013(16):94-95.
[2] 楊俊生,張潤.基于計算思維的“C程序設(shè)計”案例設(shè)計初探[J].工業(yè)和信息化教育,2013(6):65-70.
[3] 劉渝妍,丁海燕,何紅玲.C語言程序設(shè)計[M].北京:科學(xué)出版社,2015.
[4] Wing J M. Computational thinking[J].Communications of the ACM,2006,49(3): 33-35.
[5] 顧榮杰,范劍波.基于計算思維的C 語言計算機公共課程的改革[J].寧波工程學(xué)院學(xué)報,2012,24(4):92-94.
[6] 龔沛曾,楊志強.大學(xué)計算機基礎(chǔ)教學(xué)中的計算思維培養(yǎng)[J].中國大學(xué)教學(xué),2012(5): 51-54.
[7] 黃靜,高延英,楊宇姝.基于計算思維的程序設(shè)計課程教學(xué)模式研究[J].計算機教育,2013(5):51-54.
[8] 蘇小紅,車萬翔,王甜甜,等.如何在程序設(shè)計課程中培養(yǎng)計算思維能力[J].工業(yè)和信息化教育,2013(6):32-36.
[9] 殷丙山,李玉.慕課發(fā)展及其對開放大學(xué)的啟示[J].北京廣播電視大學(xué)學(xué)報,2013(5):29-34.
[10] 趙興龍.翻轉(zhuǎn)教學(xué)的先進性與局限性[J].中國教育學(xué)刊,2013(4):65-68.
[11] 王先超,王春生,胡業(yè)剛,等. 以培養(yǎng)計算思維為核心的C程序設(shè)計探討[J].計算機教育,2013(13):44-47.
[12] 潘亞平,徐燕.基于計算思維的計算機程序設(shè)計課程的教學(xué)改革與實踐[J].淮海工學(xué)院學(xué)報:人文社會科學(xué)版,2012,10(23):76-78.
Cultivation of computational thinking in Computer Pogramming Design course
Ding Haiyan
(School of Information Science and Engineering, Yunnan University, Kunming 650091,China)
The Computer Programming Design is one of the compulsory courses in many universities of science and engineering, and the C language is usually adopted as a programming language. In view of teaching problems of traditional programming design courses, for example, the concepts are abstract and difficult to understand for the students , lack of logical thinking of programming design, etc. This paper introduces the concept of computational thinking, and analysis of how to integrate computational thinking into the teaching contents of Computer Programming Design course, and the flipped classroom teaching method is discussed too. The teaching practice shows that good teaching effects are achieved.
programming design; teaching design; computational thinking; flipped classroom
2015- 03- 07 修改日期:2015- 04- 24
2013年度云南省質(zhì)量工程教學(xué)改革研究項目(X3113008); “云南大學(xué)第五批中青年骨干教師培養(yǎng)計劃”專項經(jīng)費資助(XT412003); “教育部高等教育司—微軟公司”2014校企合作專業(yè)綜合改革項目(2014MOEMSCT0111)
丁海燕(1974—), 女,云南昆明,碩士,副教授,主要研究領(lǐng)域為計算機應(yīng)用.
E-mail:teidhy@163.com
G642.0
A
1002-4956(2015)12- 0016- 03