摘 要:計算思維能力是未來人所要具備的基本能力之一,程序設(shè)計課程對培養(yǎng)大學(xué)生的計算思維能力和信息應(yīng)用技能是一門核心課程。本文以計算思維為核心,介紹案例教學(xué)法在C語言程序設(shè)計課程中的應(yīng)用以及典型案例的設(shè)置。
關(guān)鍵詞:計算思維;案例教學(xué)法;程序設(shè)計
中圖分類號:TP312.1-4
《C語言程序設(shè)計》課程是大多數(shù)高校非計算機(jī)專業(yè)必修的一門計算機(jī)課程。課程以C語言為依托,介紹程序設(shè)計的基本方法,使學(xué)生了解結(jié)構(gòu)化程序設(shè)計的基本思想,掌握用計算機(jī)解題的基本思路。
計算思維能力的培養(yǎng)是目前國內(nèi)教育界重點研究的課題。為了實現(xiàn)培養(yǎng)和訓(xùn)練學(xué)生的計算思維,《C語言程序設(shè)計》由于其課程的特性是培養(yǎng)計算計算思維的重要課程,對改善學(xué)生的知識結(jié)構(gòu)、培養(yǎng)思維能力與創(chuàng)新精神其中十分重要的作用。通過課程來實現(xiàn)或展現(xiàn)計算思維在思維培養(yǎng)中的作用,將計算思維逐步滲透到學(xué)生的專業(yè)學(xué)習(xí)中。
1 計算思維與程序設(shè)計
1.1 計算思維的基本概念
計算思維在我國引起廣泛注意是在2006年,美國卡內(nèi)基·梅隆大學(xué)的周以真教授系統(tǒng)的提出了計算思維的概念。她認(rèn)為計算思維是運用計算的基礎(chǔ)概念去求解問題、設(shè)計系統(tǒng)和理解人類行為的一種方法,是一類解析思維,涵蓋了反映計算機(jī)科學(xué)之廣泛性的一系列思維活動[1]。
教育部高等學(xué)校計算機(jī)專業(yè)教學(xué)指導(dǎo)分委員會聯(lián)合中國計算機(jī)學(xué)會教育專業(yè)委員會、全國高等學(xué)校計算機(jī)教育研究會召開主任(理事長)擴(kuò)大會議,于2012年3月提出計算思維能力培養(yǎng)的幾點認(rèn)識,其中就指出了計算思維的重要性。隨著信息化的全面深入、無處不在、無事不用的計算使計算思維成為人們認(rèn)識和解決問題的重要能力之一。一個人若不具備計算思維的能力,將在從業(yè)競爭中處于劣勢。計算思維不僅是計算機(jī)專業(yè)人員應(yīng)該具備的能力,而且也是所有受教育者應(yīng)該具備的能力[2]。
計算思維的本質(zhì)是抽象和自動化。計算思維的抽象是使用符號代替實際問題中的各種變量,每個程序包括各種標(biāo)識符、常量、變量、數(shù)組、函數(shù)和結(jié)構(gòu)體等符號語言,這些組合在一起就構(gòu)成了程序設(shè)計語言。計算思維的自動化則體現(xiàn)在程序的機(jī)械式執(zhí)行,這也是馮·諾伊曼計算機(jī)體系的本質(zhì)特征。要實現(xiàn)自動化,就必須要設(shè)計精確的算法和嚴(yán)格的程序語言體系。
1.2 程序設(shè)計課程存在的問題
一直以來,非計算機(jī)專業(yè)的計算機(jī)教育以學(xué)習(xí)基本知識、掌握基本工具為核心要求,一般不強(qiáng)調(diào)計算思維能力的培養(yǎng)。如何在十分有限的學(xué)時中既學(xué)會掌握必要的工具,也讓計算機(jī)思維諸要素融入到學(xué)生的能力結(jié)構(gòu)中,更好的幫助學(xué)生建立計算機(jī)問題求解意識,是對非計算機(jī)專業(yè)的計算機(jī)教育的挑戰(zhàn)[2]。
程序設(shè)計課程的內(nèi)容最能夠體現(xiàn)語言級的問題求解方法,是計算思維能力培養(yǎng)的重要內(nèi)容。對大多數(shù)非計算機(jī)專業(yè)的學(xué)生而言,學(xué)習(xí)程序設(shè)計的目的是學(xué)習(xí)計算機(jī)分析和解決問題的基本過程和思路,而不是成為程序員。目前在程序設(shè)計課程的教學(xué)過程中,經(jīng)常會出現(xiàn)偏重語言而不是設(shè)計的誤區(qū),考試內(nèi)容也偏重語言語法,這對學(xué)生計算思維能力的培養(yǎng)是非常不利的。程序設(shè)計課程的教材也存在相應(yīng)問題,多數(shù)教材偏重語言本身的知識結(jié)構(gòu),詳細(xì)介紹語言的語法等知識點,只能教會學(xué)生如何編寫程序,不能讓學(xué)生掌握用程序解決問題的方法。
2 案例教學(xué)法培養(yǎng)計算思維
有些學(xué)者歸納了計算思維的元素包括約簡、嵌入、轉(zhuǎn)化、仿真、遞歸、并行、抽象、分解、保護(hù)、冗余、容錯、糾錯、系統(tǒng)恢復(fù)、啟發(fā)式、規(guī)劃、學(xué)習(xí)、調(diào)度、折衷等。而在教學(xué)的過程中,教師不可能在講解知識時指出某個知識點或問題屬于計算思維的某個元素,而是需要在潛移默化中引導(dǎo)學(xué)生按計算思維的方法思考問題。培養(yǎng)思維能力常見的教學(xué)方法就是案例教學(xué)法。
2.1 C語言課程中的案例與計算思維
案例教學(xué)模式是一種互動式的教學(xué)方法,以案例分析為基礎(chǔ),解決問題為主線,教學(xué)內(nèi)容圍繞案例的討論、分析逐步展開,通過對案例的剖析,激發(fā)學(xué)生的求知欲,調(diào)動學(xué)生的積極性,使學(xué)生主動地思考,讓學(xué)生充分討論并發(fā)表各自的見解,教師適時引導(dǎo)和評判,最后推導(dǎo)出結(jié)論[3]。
在案例教學(xué)中案例是基礎(chǔ)和關(guān)鍵因素,教學(xué)案例的選取不是簡單的舉例,應(yīng)該覆蓋相應(yīng)知識單元的知識點與技能點。更重要的是案例所反應(yīng)的知識點要豐富,具有針對性、系統(tǒng)性和啟發(fā)性。學(xué)生能夠在案例分析的過程中,通過對具體問題的算法設(shè)計,體會到如何選擇合適的方法描述問題,對這個問題進(jìn)行建模,從而讓計算機(jī)能夠解決該問題。
在C語言程序設(shè)計課程中,教學(xué)的重點在于程序設(shè)計而非語言本身。程序設(shè)計解決問題的過程是問題化→抽象化→層次(模塊)化→自動化→系統(tǒng)化。其中問題化是對具體問題的分析;抽象化是指把復(fù)雜問題按照一定的算法找到解決問題的方法;層次(模塊)化是要把一個復(fù)雜問題簡單化;自動化是通過程序代碼自動實現(xiàn);系統(tǒng)化是指要對運行的結(jié)果分析,通過學(xué)習(xí)、訓(xùn)練、反饋等方式,在時間、空間、效率上找到合適的平衡點。在此過程中可以通過流程圖把整個問題解決的過程抽象出來,找到解決同類問題的方法,形成一個思維方式,這樣就是一個計算思維能力形成的過程。這個待解決的問題可以通過案例的形式呈現(xiàn)出來。
采用案例教學(xué)法可以不拘泥于原有的以知識點建構(gòu)的課程體系,教師引導(dǎo)學(xué)生在問題的求解過程中,由案例引出知識點,然后對知識點進(jìn)行詳細(xì)的介紹。
2.2 C語言課程典型案例培養(yǎng)思維能力
(1)案例貫穿教學(xué)始終
在采用案例教學(xué)的課堂中,從第一堂課開始就用案例引入程序設(shè)計思想,同時也讓學(xué)生了解程序設(shè)計及編碼的過程,給予他們最直觀的感受,增加學(xué)生對程序設(shè)計課程的興趣。對于非計算機(jī)專業(yè)的學(xué)生來說,如何將思維的過程轉(zhuǎn)化為計算機(jī)程序是一個難點,這就需要從第一節(jié)課開始就訓(xùn)練這種能力。
在第一堂課中,可以給出一個簡單的例子,通過分析人腦思考問題的過程,轉(zhuǎn)化為計算機(jī)解題的步驟,再演示如何將分析的過程用C語言程序來實現(xiàn),從而引出程序的基本組成和框架。例如,給出一個簡單的案例,將華氏溫度轉(zhuǎn)換為攝氏溫度。首先分析如何思考這個問題:解決這個問題需要通過轉(zhuǎn)換公式來進(jìn)行運算,運算中用到數(shù)據(jù)為華氏溫度。再確定解決問題的步驟:首先得到華氏溫度的值,再根據(jù)公式進(jìn)行數(shù)學(xué)運算,運算的結(jié)果再輸出顯示。然后在C語言的開發(fā)環(huán)境中寫入代碼,進(jìn)行編譯運行,屏幕上顯示輸出結(jié)果。通過這個案例可以引出程序設(shè)計中的控制結(jié)構(gòu),該案例為順序結(jié)構(gòu),學(xué)生初次接觸很容易理解。還可以引出分析問題的過程:分析問題中涉及的數(shù)據(jù)、解決問題需要的控制結(jié)構(gòu)、程序的預(yù)期結(jié)果。
通過這個例子,學(xué)生在第一節(jié)課就可以看到程序是如何編寫、編譯,最終運行得到結(jié)果,既了解了問題的基本分析過程,也了解了程序的基本框架,可以讓他們能夠盡早的動手編程。
(2)盡量選擇生活化的案例
在很多的教材中,很多例題為數(shù)學(xué)公式運算等比較枯燥的內(nèi)容,問題的本身不易讓學(xué)生產(chǎn)生強(qiáng)烈的學(xué)習(xí)興趣。在教學(xué)中,盡量選擇一些生活化的案例,除了能夠吸引學(xué)生注意力外,更重要的是能讓學(xué)生體會到在日常生活中如何以計算機(jī)解決問題的方法來解決實際問題,這個過程實際上也是計算思維培養(yǎng)的過程。
例如,在學(xué)習(xí)數(shù)組時都會介紹二分查找的算法,常見的例子是給學(xué)生一個已排序的數(shù)組,在其中查找其中某個數(shù)的位置。這時可以引入一個案例:有電視節(jié)目要求選手競猜某件商品的價格,如果猜中商品就歸該選手所有,請問如果你是該選手,采用什么樣的方法能較快的猜到商品價格?這個電視節(jié)目很多學(xué)生可能都看過,通過這個案例能夠充分調(diào)動學(xué)生積極性進(jìn)行思考。教師需要引導(dǎo)學(xué)生將思考的過程逐步細(xì)化,最終確定解決問題的算法。
假定商品的價格是1元到1000元之間的整數(shù),首先猜價格為500元,根據(jù)提示的結(jié)果(高或低)能夠快速去掉其中一半的價格區(qū)間。然后再在剩下的價格區(qū)間中猜中間價格,再根據(jù)提示結(jié)果縮小一半的價格區(qū)間,以此類推,最終能夠確定商品的價格。這個分析的過程就是二分查找的算法思想,確定算法后,分析其中的數(shù)據(jù)與控制結(jié)構(gòu)。運算的對象為1到1000之間的數(shù),用數(shù)組表示,算法中要重復(fù)進(jìn)行取中間價格、確定新的價格區(qū)間的步驟,這個過程為循環(huán)結(jié)構(gòu)。然后再介紹如何用C語言來實現(xiàn)分析的過程。
通過這個生活化案例,訓(xùn)練學(xué)生如何將生活中的問題用計算機(jī)來解決,既提高了他們的學(xué)習(xí)興趣,也鍛煉了思維能力。
(3)案例選擇由簡到難,具備可擴(kuò)展性
有一些案例可以貫穿教學(xué)的始終,隨著教學(xué)內(nèi)容的增加逐步豐富。這樣可以讓學(xué)生在掌握前面案例的基礎(chǔ)上,為后續(xù)內(nèi)容做鋪墊。
例如在介紹分支結(jié)構(gòu)時,用求兩個數(shù)最大(最小)值的案例介紹if-else語句。再引入一個案例求三個數(shù)的最大(最?。┲?,介紹嵌套的if語句。對于多個數(shù)(如100個數(shù))求最值,控制結(jié)構(gòu)仍然為分支結(jié)構(gòu),但數(shù)據(jù)結(jié)構(gòu)要采用數(shù)組,從而引出數(shù)組的概念。隨后,在數(shù)組求最值的基礎(chǔ)上,引出排序的問題,要求對數(shù)組的元素從小到大排列。這個過程要在數(shù)組中找最小值,將最小值與第一個數(shù)進(jìn)行交換,再在剩下的元素中找最小值進(jìn)行交換,以此類推,從而對所有元素進(jìn)行有序排列。在數(shù)組有序的基礎(chǔ)上,再引入前面介紹的二分查找法的案例。
還可以設(shè)置案例根據(jù)教學(xué)內(nèi)容的推進(jìn),提出不同的要求,讓學(xué)生圍繞案例循序漸進(jìn)的學(xué)習(xí),便于思維訓(xùn)練的連貫性。
例如案例:在屏幕上輸入通訊錄中的聯(lián)系人信息,然后再顯示出來,其對應(yīng)的知識點如表1所示。
表1 案例及對應(yīng)知識點
案例描述知識點
在屏幕上輸入一個聯(lián)系人信息:姓名、手機(jī)號,并輸出變量、輸入/輸出函數(shù)
輸入10個聯(lián)系人信息(姓名、手機(jī)號),再輸出數(shù)組、循環(huán)
輸入10個聯(lián)系人信息,并保存在磁盤上文件
3 實驗環(huán)節(jié)中培養(yǎng)計算思維
程序設(shè)計課程除了在教學(xué)中采用案例訓(xùn)練學(xué)生思維能力外,也要重視上機(jī)實踐環(huán)節(jié)。讓學(xué)生在實際操作中強(qiáng)化計算思維。
3.1 實驗內(nèi)容體現(xiàn)計算思維
學(xué)生在剛開始學(xué)習(xí)時是以模仿為主,但隨著學(xué)習(xí)內(nèi)容的深入,實驗內(nèi)容不應(yīng)該只是課堂內(nèi)容的簡單重復(fù),要給學(xué)生提供思維創(chuàng)新的空間??梢栽谡n堂上給學(xué)生留下一定的問題,讓他們自己分析總結(jié)問題。也可以給出一些案例的部分解決辦法,引導(dǎo)學(xué)生的思維過程,將解決辦法補(bǔ)充完整。還可以給出錯誤的代碼,讓學(xué)生查錯糾錯。通過這些不同方式的思維訓(xùn)練,可以給于學(xué)生提出新的方案和排除錯誤的滿足感,從而激發(fā)學(xué)習(xí)的積極性。
3.2 增強(qiáng)實驗的綜合性與趣味性
與課堂教學(xué)一樣,實驗的案例同樣盡量選擇生活化或?qū)嶋H問題。例如計算購房貸款、計算分段電費等問題。實驗案例選擇綜合性較強(qiáng)的問題,讓學(xué)生能綜合應(yīng)用所學(xué)的知識,進(jìn)行系統(tǒng)思維的訓(xùn)練。
例如在介紹遞歸算法后,讓學(xué)生自己分析影片《盜夢空間》中的情節(jié),其中進(jìn)入不同層次的夢境其實就是遞歸的過程??梢栽O(shè)置一個實驗內(nèi)容,讓學(xué)生分析其中的遞歸過程,并模擬表現(xiàn)出來。
3.3 規(guī)范上機(jī)過程
在實驗中,案例的實現(xiàn)要求學(xué)生都按照統(tǒng)一的流程進(jìn)行:分析問題—>設(shè)計算法—>編寫實現(xiàn)—>上機(jī)調(diào)試。引導(dǎo)學(xué)生的思維過程和編程習(xí)慣,逐步提高動手能力。
在上機(jī)調(diào)試完畢后,還可以進(jìn)一步引導(dǎo)學(xué)生對程序進(jìn)行優(yōu)化,思考是否有其他解決辦法,讓學(xué)生體會思維不是固定模式的,不同的思維方式解決問題的效果是不一樣的。
例如在解決一些窮舉問題時,簡單的方式是采用多重循環(huán)來完成。如問題:男人、女人、小孩來搬磚,1個男人搬2塊磚,1個女人能搬1塊磚,2個小孩能搬1塊磚,請問10個人搬10塊磚,應(yīng)該怎么分配?解決這個問題最簡單的方式是采用三層循環(huán),分別表示男人、女人和小孩的人數(shù),判斷人數(shù)之和是否為10,對應(yīng)的人是否能搬10塊磚。
學(xué)生解決這個問題后,讓他們計算程序運行的次數(shù),再提出是否有其他方法能減少運行次數(shù)。學(xué)生就可以考慮能否用兩層循環(huán)表示男人、女人的數(shù)量,小孩的數(shù)量用10減去兩個循環(huán)變量就可以得到。這樣循環(huán)的執(zhí)行次數(shù)就大大減少了。
4 結(jié)語
計算思維能力的培養(yǎng)是經(jīng)過長期學(xué)習(xí)訓(xùn)練、潛移默化中形成的能力,程序設(shè)計基礎(chǔ)課程中程序的設(shè)計過程就是解決問題方法、思維能力形成的過程,因此程序設(shè)計課程是計算思維能力培養(yǎng)重要的基礎(chǔ)課程,可以采用合適的教學(xué)方法來增強(qiáng)大學(xué)生計算思維能力的培養(yǎng),為社會的發(fā)展起到積極的推動作用。
參考文獻(xiàn):
[1]Wing J M.Computational Thinking[J].Communications ofthe ACM,2006,49(3):33-35.
[2]李曉明,蔣宗禮,王志英.積極研究和推進(jìn)計算思維能力的培養(yǎng)[J].計算機(jī)教育,2012(5):1.
[3]丁海燕,袁國武,周小兵,白孟堯.高級語言程序設(shè)計案例式教學(xué)模式的探討[J].計算機(jī)教育,2011,4:65.
作者簡介:鄭爽(1982-),女,安徽人,講師,碩士,研究方向:信息安全;王全民(1963-),男,山西人,副教授,博士,研究方向:信息安全;李秀榮(1971-),女,吉林人,工程師,碩士,研究方向:信息安全。
作者單位:北京工業(yè)大學(xué)計算機(jī)學(xué)院,北京 100124
基金項目:“以計算思維能力培養(yǎng)為核心的理工類專業(yè)程序設(shè)計課程改革研究”,項目編號:DJG-1-2,教育部“大學(xué)計算機(jī)課程改革”項目子課題。