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