鄒柳聰 繆佳佳
(浙江師范大學 教師教育學院,浙江 金華 321000)
近年來,在國內(nèi)關于計算思維的研究逐年上升,成為計算機學科與教育領域關注的重點,研究熱度不斷升高。大多數(shù)高校將程序設計、編程設計等課程列為計算機和通信等專業(yè)的必修課程,以及理工科非計算機專業(yè)的計算機基礎課程之一[1],研究者和教學者也更加注重將傳統(tǒng)的以知識傳授為導向的教學轉(zhuǎn)向以計算思維為導向的教學。以計算思維的理念為切入點,滲透計算思維的特征到實際的教學實踐環(huán)節(jié),有效地培養(yǎng)學生的程序設計、編程能力,大多數(shù)教學實踐證明培養(yǎng)學生的計算思維能力能夠作為一個解決問題的有效工具,對程序教學的實踐、學生編程思維能力的提升都具有重要指導意義。
計算思維的研究起步較早,在20世紀下半葉就已出現(xiàn)計算思維的概念,我國周以真(Jean-nette M.Wing)教授[2]于2006年在計算機權威雜志“Communication of the ACM”上發(fā)表了題為“Computational Thinking”的文章。周教授在文中給出了“計算思維”的定義與說明,認為計算思維是運用計算機科學的基礎概念進行問題求解、系統(tǒng)設計以及人類行為理解等涵蓋計算機科學之廣度的一系列思維活動。其本質(zhì)內(nèi)容體現(xiàn)了抽象、約簡、規(guī)劃、關注點分離、遞歸、優(yōu)化、分解等思維特征。關于計算思維的教學和培養(yǎng)在計算機、信息技術等教育領域均呈現(xiàn)出較高的活躍度,尤其是在高等教學中逐漸成為廣泛關注的重要研究課題。
程序設計類課程對于學生來說是很難掌握的一門科目,需要學生結合自主學習能力、理解應用能力、抽象思維能力以及理論化為實踐的操作能力,尤其在編程設計中。C語言編程能力的形成體現(xiàn)在學生進行思維養(yǎng)成的動態(tài)過程,即在程序設計時進行問題分析、確定算法、確定可行的解決方案、編寫代碼,最后運行程序獲取結果來解決問題。從教學角度來說,培養(yǎng)學生的計算思維要在具體的課程教學中落實,以計算思維為導向的教學培養(yǎng)能夠直接有效地訓練學生的思維能力、實踐能力。及時調(diào)整方式、方法以適應程序設計學習、編程學習所需的計算思維變化過程,對研究者、教學者培養(yǎng)學生C語言編程能力的教學實踐有著重要的指導意義。
我國眾多高校計算機和通信、理工科等專業(yè)均有開設關于計算機編程或計算機科學相關的課程,例如大學計算機課程、C語言程序設計等。這些課程用于提升學習者的編程能力雖有必要,但程序設計和編程類課程的教學存在一些亟待解決的問題,主要體現(xiàn)在教師和學習者兩個方面[3][4][5][6]。
大部分教師缺乏對學習者編程思維能力的培養(yǎng)。授課過程中僅注重語法細節(jié)而忽視算法思維的培養(yǎng),教學重難點停留于語法學習和實例應用上,缺乏積極引導學生進行算法思維的分析和編程設計的思考;未能根據(jù)學生的個人能力發(fā)展發(fā)掘有效的編程思維能力提升訓練方法和教學策略,教學上用統(tǒng)一的教學方式和教學案例,學生被動接受教師指令,機械地完成上機作業(yè),無法正確找尋適合自己的學習方式??梢哉f,教師未能正確引導學生將實踐經(jīng)驗轉(zhuǎn)化為思維能力。
學生則存在“只知其一,不知其二”的學習情況。C語言及其派生的編程語言學習對學生來說存在一定的難度,大多數(shù)學生對于課程內(nèi)容的掌握僅停留在讀懂和編寫給定程序,即一些基本問題的求解方法,而不能調(diào)用自我思維設計算法和編寫程序,十分不利于后續(xù)知識的學習,學生極易喪失學習興趣;學生的編程思維能力、學習能力等存在較大的個體差異,再加上學生課后投入的精力有限,往往導致兩極分化現(xiàn)象非常嚴重,容易造成學習者學習興趣減弱,從而容易產(chǎn)生掉隊的現(xiàn)象。
C語言編程作為一門實踐性很強的專業(yè)課程,需要課堂教學和學習實踐活動相結合逐步進行能力提高的培養(yǎng)[7]。建構主義強調(diào)個體主動性在建構認知結構中起關鍵性作用,學習者主動性地發(fā)生學習行為、進行意義建構、形成概念,從而獲得知識。思維的意義建構需要通過有效的外部思維技能引導和訓練漸進達成,思維技能可通過學習和訓練逐漸得到提升,在學習和認知的過程中可以通過反復訓練潛移默化的培養(yǎng)、發(fā)展和提升[8][9]。強化計算思維訓練更加注重從學生潛在的實際思維能力出發(fā),結合有形的技術工具,主動建構和可視化學習思維。
皮亞杰認知發(fā)展理論指出由淺入深、循序漸進的四個發(fā)展階段過程的重要性,并且在學習過程中可通過同化與順應兩種方式,從而不斷積累知識并促進已有的觀念、思維方式、知識組織結構的發(fā)展,進而促進認知結構的發(fā)展[10]。應摒棄學習僅僅是簡單的信息積累的舊觀念,從思維方式發(fā)展的角度出發(fā),新舊知識經(jīng)驗的思維沖突,由此引發(fā)認知結構的重組。自我認知的發(fā)展注重自我調(diào)節(jié),在簡單汲取知識信息的輸入、存儲和提取之外,進行思維和學習雙向的作用過程。
有效培養(yǎng)和訓練學生在程序教學類課程中對復雜問題和事物進行分析的計算思維能力,通過規(guī)范的方式將復雜問題轉(zhuǎn)化為若干簡單事物加以解決,并及時調(diào)整方式、方法以適應程序設計學習、編程學習所需計算思維變化過程,對研究者、教學者進行程序設計類教學實踐有著重要的指導意義。以計算思維為導向的C語言編程思維能力培養(yǎng)則是利用計算思維的特征為主導啟發(fā)和訓練學生在特定的實踐中對實際待解決問題進行復雜到簡單的邏輯抽象,能應用特定的編程語言實現(xiàn)已知算法,對已知問題進行數(shù)據(jù)結構和算法的設計,并能夠有序、有意識地進行代碼的調(diào)試、運行、反思和完善等一系列綜合活動。學生將擁有的基本的C語言編程思維能力落實到發(fā)現(xiàn)問題、分析問題、解決問題、反思問題等思維活動中,最終達到增強學生解決實際問題的編程能力的目的。
計算思維作為思維方式的一種,并非單一的思維能力構成,而是涉及多種思維能力的綜合體現(xiàn)。美國國際教育技術協(xié)會(ISTE)和計算機科學教師協(xié)會(CSTA)[11]曾共同提出了計算思維的操作性定義:計算思維是一個問題解決過程,涉及問題的闡述,數(shù)據(jù)的組織、分析和呈現(xiàn),解決方案的制訂、識別、分析和實施以及問題解決過程的遷移。計算思維以其獨特的方式對其他思維技能進行了擴展,既區(qū)別于其它思維,但又與其它思維密切相關。這對研究者計算思維培養(yǎng)的研究提出了更高的要求,通過劃分計算思維的維度并對其內(nèi)涵進行更加深入的解析,各學者相繼提出三維度[12][13][14]、四維度[15]、八維度[16]、九維度[17]的劃分維度為提升計算思維以及思維教學提高提供重要培養(yǎng)方向依據(jù)。
計算思維的訓練培養(yǎng)要有機嵌入到具體的實踐系統(tǒng)中去。也就是說,在教學方面,發(fā)展學習者的計算思維要在具體的課程教學當中落實。借鑒前人提出的計算思維劃分方式,本研究認為從傳統(tǒng)的以知識傳授為導向的C語言編程教學轉(zhuǎn)向以計算思維為導向的C語言編程思維能力培養(yǎng),需要著力從3個培養(yǎng)維度開展C語言編程能力提升訓練,分別為抽象思維、算法思維、糾錯思維,如表1所示。
表1 C語言編程能力提升培養(yǎng)的維度及可行方式
1.利用思維可視化工具開展直接的思維訓練
思維可視化工具是無形的意識形態(tài)技術,可幫助學習者將思維實現(xiàn)從抽象到具象、從內(nèi)隱到外顯,甚至從加工舊知到創(chuàng)造新知的有效轉(zhuǎn)變[18]。C語言編程教學中,滲透思維可視化工具的應用,開展直接的思維訓練,引導學生清晰而直觀地進行思維圖示的過程,是對抽象思維的有效鍛煉,幫助學生統(tǒng)合發(fā)散式的思維,從抽象到具體按照一定的邏輯形成線狀、網(wǎng)狀的圖示思維。在計算知識學習和知識理解的過程中幫助學生認識思維、激發(fā)思考、構建思維結構與流程,并在反復的練習和強化過程中,逐步養(yǎng)成從無意識思維到有意識思維直至無意識自動思維的習慣。例如利用思維可視化工具優(yōu)化學生課前預習以及課后復習整理部分,利用思維圖示法支持工具,如思維導圖、流程圖、模式圖等進行圍繞主題/項目問題的有序解決。
2.設計基于問題解決的探究式課堂學習實踐
傳統(tǒng)的程序設計課程以教師活動為中心,以知識點講解為主線,過于強調(diào)編程語言本身的完整性和系統(tǒng)性,忽略了抽象、分解、自動化等計算思維特征在教學過程中的滲透[19]。以計算思維為導向的C語言編程能力提升培養(yǎng)注重算法思維的拓展發(fā)展,在有限的教學課時里實現(xiàn)總體的教學目標,采用基于問題解決的案例教學法,通過C語言基本知識的實例講授,以理解和應用為目標,基于實際問題,在課堂學習實踐中引導學生圍繞問題、項目,判斷、分析與綜合各類知識點,運用合理的算法表示成可以進行計算的解決問題方案,最終形成問題提出-問題分析-設計算法-執(zhí)行程序-解決問題的探究式課堂學習實踐活動。
3.設計漸進梯度的自我編程任務
自我實踐編程是C語言程序?qū)W習的一個重要環(huán)節(jié),學生掌握基本的典型算法之后,內(nèi)在C/C#的基礎知識,能夠靈活應用三種控制結構順序結構、選擇結構和循環(huán)結構,從問題分析、確定方法、界面設計、編寫代碼到調(diào)試運行最終完成一個完整的編程動作。漸進梯度的自我編程任務符合編程學習所需計算思維變化過程,漸進梯度的編程實踐任務操作能夠提高學生自我分析問題和解決問題的能力。在知識模塊學習之后,設計層次化、梯度化的編程任務目標,學習者根據(jù)自我能力狀況制定由易到難、由淺到深的編程任務進程,完成從基礎能力到中級應用能力的培養(yǎng),最終達到高級應用的一系列循序漸進的C語言編程能力提升活動。
在程序設計類課程的教學中,學生的C語言編程能力體現(xiàn)在能夠掌握并利用C語言程序編寫代碼,從而提出解決問題的思路和方法,最終完成經(jīng)過問題分析、方法確定、算法設計和編程實現(xiàn)的整個學習過程。因此,筆者只能對目前傳統(tǒng)C語言編程教學課程存在的亟待解決的問題,在具體教學中以計算思維為導向進行C語言編程能力提升培養(yǎng)。從抽象思維、算法思維、糾錯思維三維度提出相應的三個培養(yǎng)方式訓練學生的C語言編程能力,促使學生進行系統(tǒng)化的具體的編程訓練,為提升C語言程序教學實踐效果和學生編程學習效率提供可行的參考策略。