余 穎,李曉昀,歐陽純萍
(南華大學(xué) 計算機學(xué)院,湖南 衡陽 421001)
隨著社會信息化的進程,計算機技術(shù)已經(jīng)滲透到各行各業(yè),具備一定的計算機編程能力是當今大學(xué)生必備的技能之一,因此程序設(shè)計課程是全國各個高校理工科專業(yè)大一新生必修的一門課程,然而,從實際教學(xué)效果來看,并非盡如人意。課程本身有一定難度,雖然任課教師課程導(dǎo)入很好,很多學(xué)生剛開始接觸程序設(shè)計時興趣盎然,但是隨著許多難以記憶和理解的概念、術(shù)語、語法的出現(xiàn),尤其是對程序設(shè)計基本結(jié)構(gòu)的引入,學(xué)生開始感覺到課程乏味、枯燥,甚至思維混亂,經(jīng)常是課堂上好像聽明白了,上機實驗時卻無從下手,寫不出程序,最后導(dǎo)致學(xué)習(xí)興趣逐漸降低。追根溯源,其實學(xué)生雖然學(xué)了課程,但是并沒有真正具備編程思維,而是僅僅知道了一個程序設(shè)計語言以及相關(guān)語法,與程序設(shè)計課程的真正教學(xué)目的相去甚遠。
很多教育者嘗試通過改革實踐教學(xué)來解決這一問題[1-5],主要著力于研究以實踐教學(xué)為重點、以網(wǎng)絡(luò)平臺為依托、以實踐能力提升為目的的教學(xué)改革方案。不可否認,合理設(shè)置更多的實踐環(huán)節(jié)對學(xué)生熟練掌握程序設(shè)計技巧確實大有裨益,但是筆者認為將思維方式融入教學(xué)中更為重要,只有讓學(xué)生掌握思維方式,才能不局限于某一種具體的編程語言,而真正了解程序設(shè)計的內(nèi)涵。不少教育者早已關(guān)注于計算思維能力的培養(yǎng)[6-9],作為計算機科學(xué)的基石,美國卡內(nèi)基·梅隆大學(xué)的周以真教授在計算機權(quán)威期刊Communications of the ACM上將計算思維定義為“運用計算機科學(xué)的基礎(chǔ)概念進行問題求解、系統(tǒng)設(shè)計、人類行為理解等的一系列思維活動”[10],其本質(zhì)就是抽象和自動化。
認知心理學(xué)將知識分為三大類:陳述性知識、程序性知識和策略性知識。陳述性知識告訴我們“是什么”,程序性知識告訴我們“怎么做”,策略性知識則是關(guān)于如何學(xué)習(xí)、如何思考的方法性知識,其實質(zhì)是一套如何學(xué)習(xí)、記憶、思維的規(guī)則和程序,它控制著人的學(xué)習(xí)、記憶和思維活動[11]。策略性知識也是一種程序性知識,但不同于一般意義上的程序性知識,策略性知識針對個人自身的認知活動。在教學(xué)中,通常比較重視陳述性和一般程序性知識的教學(xué),卻忽視策略性知識的養(yǎng)成。
策略是一種知識,而且是一種重要的知識,它跟其他知識一樣能夠表達和傳遞。 若這些知識能夠被學(xué)生真正理解、熟練掌握、自覺運用、廣泛遷移, 就會轉(zhuǎn)化為學(xué)生的學(xué)習(xí)和思維能力。已有實驗證明,通過思維策略的訓(xùn)練有利于在學(xué)習(xí)新知識時進行深水平的加工,有利于養(yǎng)成理解記憶的良好習(xí)慣。
進行程序設(shè)計的思維策略訓(xùn)練,首先要了解程序設(shè)計過程中解決問題的思維策略是什么。任何學(xué)科領(lǐng)域中,解決問題的思維過程都可以大致分為3個階段:分析問題、解決問題和思路總結(jié)。有學(xué)者通過對“專家”與“新手”解決學(xué)科問題的思維過程進行對比分析[12], 總結(jié)出了解決問題的7條通用思維策略(見表1)。這7條策略中,策略1—3 是分析問題(表征問題)階段上的思維策略,策略4—6 是解決問題(思維推理)階段上的思維策略, 策略7 是解題后回顧總結(jié)(思路概括)階段上的思維策略。
程序設(shè)計也是一個解決問題的過程,它建立在計算過程的具體實現(xiàn)和約束之上,通過程序控制機器的全部操作,從而獲得問題的解。將通用策略映射到程序設(shè)計過程中,能夠得到程序設(shè)計的思維策略(見表1)。在程序設(shè)計過程中,前3個策略是決定成敗的關(guān)鍵,策略4—6與編碼實現(xiàn)相關(guān),策略7則通過回顧總結(jié)幫助學(xué)生更好地掌握編程思維。
例如,素數(shù)判定問題的程序設(shè)計求解如下:(1)首先是理解問題,確定什么是素數(shù),是否能在有限時間內(nèi)作出判定。
(2)接下來考慮問題的輸入為從鍵盤任意輸入一個整數(shù),輸出為“Yes”或“No”的判定結(jié)果。
(3)考慮判定的算法。素數(shù)判定的算法有很多,簡單的枚舉嘗試、篩數(shù)法、同余法等,核心都是判斷能否整除。以枚舉為例,逐一枚舉因子,判斷是否能夠整除輸入的整數(shù),若直至所有小于該數(shù)的因子都被嘗試,仍未發(fā)現(xiàn)可整除的因子,則判定為“Yes”,否則,判定為“No”。
至此,問題的分析已完成,解決的思路已確定,接下來進一步剖析解決步驟。
(4)需要設(shè)置兩個整型變量完成判定:從鍵盤輸入的整數(shù)n,枚舉因子的循環(huán)變量i。由于需要逐一進行枚舉,因此須采用循環(huán)結(jié)構(gòu)。按照素數(shù)的數(shù)學(xué)定義確定循環(huán)控制范圍為[2,n-1]。
(5)結(jié)合編程語言選擇實現(xiàn)循環(huán)結(jié)構(gòu)的語句,如在C語言中for、while、do-while均可實現(xiàn)循環(huán)結(jié)構(gòu)。
(6)考慮非正常輸入的處理,如負數(shù)、浮點數(shù)、字符、其他字符等,需要在程序中對輸入的有效性進行驗證。
到這里問題已基本解決,結(jié)合一門具體的編程語言即可實現(xiàn)素數(shù)判定問題的求解。
(7)當成功實現(xiàn)素數(shù)判定后,梳理求解問題的思路并進行總結(jié)與應(yīng)用推廣,如在求解超級素數(shù)、統(tǒng)計給定區(qū)間的素數(shù)時,可將其聲明為自定義函數(shù)進行調(diào)用。另外,可考慮已實現(xiàn)代碼的改進,如循環(huán)范圍還可依據(jù)相關(guān)數(shù)學(xué)證明來縮?。ㄈ缑杜e至)。
表1 通用策略與程序設(shè)計思維策略
從分析問題到解決問題,再到思路總結(jié),每個具體問題的程序設(shè)計過程都有對應(yīng)的思維策略,但都歸集于7條抽象思維策略的范疇。若能讓學(xué)生掌握這樣的思維過程,也就達到了教學(xué)的真正目標。
我們嘗試通過元認知訓(xùn)練,讓學(xué)生真正掌握程序設(shè)計的思維策略,并在實踐中得以體現(xiàn)。1976年,F(xiàn)lavell提出了元認知的概念[13],他認為“元認知是一個人所具有的關(guān)于自己思維活動和學(xué)習(xí)活動的認知與監(jiān)控”,它體現(xiàn)了人在認知活動中的意識性、反省性和自主性。通過元認知訓(xùn)練可以讓學(xué)生對自己的認知加工過程進行自我覺察、自我評價和自我調(diào)節(jié),其實質(zhì)就是設(shè)法讓學(xué)生學(xué)會學(xué)習(xí)。我們以C語言程序設(shè)計課程為實驗對象,開展了一個學(xué)期的元認知訓(xùn)練,將思維策略融入課堂教學(xué),引導(dǎo)學(xué)生主動運用思維策略解決問題。我們設(shè)計了一個自我提問單,見表2。
在課堂上講解程序設(shè)計案例時,教師可以通過自我提問的方式向?qū)W生逐一拋出問題,啟發(fā)其思考,讓學(xué)生在潛移默化中進行元認知訓(xùn)練,從而養(yǎng)成良好的程序設(shè)計思維習(xí)慣,在獨立解決問題時能夠正確地應(yīng)用思維策略求解問題。在2016—2017學(xué)年第一學(xué)期中,我們選擇2016級信計專業(yè)學(xué)生實驗性地開展思維策略訓(xùn)練,通過在線評測系統(tǒng)上的實驗完成情況來看(如圖1所示),經(jīng)過思維策略的元認知訓(xùn)練,信計專業(yè)學(xué)生的解題平均數(shù)量明顯高于其他專業(yè)學(xué)生,并且最初在剛接觸程序設(shè)計語言,進行分支結(jié)構(gòu)實驗時,各個理工科專業(yè)學(xué)生的解題平均數(shù)量相差無幾,但在后期實驗中,參與元認知訓(xùn)練的信計專業(yè)學(xué)生逐漸在解題能力上優(yōu)于其他幾個專業(yè)的學(xué)生。
實驗班與其他班的上機情況對比結(jié)果表明,實驗班的上機任務(wù)完成情況明顯優(yōu)于其他班級。學(xué)期末,從每個專業(yè)挑選10名學(xué)生進行一次限時的綜合實驗,實驗班的學(xué)生平均解題數(shù)比其他班級學(xué)生多出0.8題??梢?,基于元認知的思維策略訓(xùn)練行之有效。
表2 元認知訓(xùn)練自我提問單
圖1 實驗班與其他班實驗完成情況的比較
在數(shù)字化時代背景下,以計算思維主導(dǎo)的思維能力培養(yǎng)十分重要,而程序設(shè)計所包含的編程思維恰恰能夠很好地詮釋計算思維的內(nèi)涵。很多國家已經(jīng)開始在中小學(xué)生中普及計算機程序設(shè)計課程,從小開始培養(yǎng)學(xué)生的計算思維。一種思維能力的培養(yǎng),其終極目標是“授人以漁”,因此在高校的程序設(shè)計課程教學(xué)中,摒棄以往“授人以魚”的方式,將思維策略訓(xùn)練引入課堂,將得到事半功倍的效果。