李志圣 邢振祥 唐國峰
摘要:針對程序設計中的計算思維能力培養,國內外學者進行了大量的理論研究和教學實踐,但尚未在教學中形成清晰的表達體系。文章分析計算機基礎教學中的程序設計過程,明確提出程序設計的三個階段,并針對各階段闡述教學內容和評價標準,為培養計算思維能力的引導式教學形成步驟明確、可操作性強的標準化方案,使所有教師都能找到學生在程序設計中所遇到問題的思維根源,進而實施有效的引導教學。
.
關鍵詞:程序設計;計算思維;引導式教學;標準化
引言
2010年,清華大學等高校在西安召開了首屆“九校聯盟(C9)計算機基礎課程研討會”。在會議發表的聯合聲明中,旗幟鮮明地把“計算思維能力的培養”列為計算機基礎教學的核心任務。
計算機基礎教學中的核心內容是程序設計教學中的計算思維能力培養問題。綜觀近年來的相關國內文獻,主要有兩大類代表性的工作:
一類是闡述針對具體程序實例進行編程教學工作,例如:文獻關注從具體編程案例出發討論計算思維能力的培養。此類工作存在的問題是缺乏對一般性問題的求解體系步驟的歸納和概括。另一類工作如文獻,關注程序設計教學的一般性規律,提出的見解具有理論上的指導意義,但在運用于具體程序設計教學時,尚有賴于教師理解水平和實踐經驗的豐富程度。
馮博琴教授在《對于計算思維能力培養“落地”問題的探討》中提到:“關于計算思維的理解多停留在‘哲學或者‘科學層面,在‘教學層面上沒有形成一個清晰的表達體系,其內涵、外延還沒有得到清楚的描述”。
本文通過建立對計算思維能力培養教學的標準化方案,來嘗試解決馮博琴教授提到的問題。主要工作為:對計算機基礎教育中的程序設計過程進行分析和抽象,提出編程的具體步驟;為每個步驟提出精確的評價標準,使教師在進行引導教學時,有分階段可實施的明確目標,在保障引導教學順利實施的同時,強化學生的計算思維能力培養。
1相關研究基礎
蔣宗禮教授提出:為培養計算機學科的計算思維能力,可采用適應計算機求解問題的基本方式和有效方法考慮問題的求解(描述、分析和構建);
龔沛曾教授也相似地認為:計算思維中問題求解的步驟包括問題抽象化的描述一尋找解決方案(設計算法)—程序編制(編碼)。
綜合上述兩篇文獻意見,本文將編程的過程細化為以下三個階段:
第一,理解問題的自然語言描述;
第二,采用規范的自然語言描述解題過程;
第三,采用計算機語言替換自然語言描述2。
2分階段教學內容和評價標準
1)理解問題的自然語言描述。
教學內容1教師引領學生閱讀使用自然語言描述的問題。
評價標準1要求學生用自己的語言轉述問題,若無歧義或者誤解,則評價為合格。
2)采用規范的自然語言描述解題過程。
教學內容2教師要求學生按以下步驟得出自然語言的解題描述。
步驟2.1要求學生針對具體問題給出具體解答。例如在求n!問題時,要求學生給出5!的計算結果。
評價標準2.1學生得出正確計算的結果。
步驟2.2要求學生使用自然語言詳盡描述之前求解的過程。
評價標準2.2
2.2.1實詞:都能確定性地求值,且求值過程是可直接計算的。
錯誤示例:從1連乘到4。
錯誤原因:不可直接計算。
教師應向學生指出錯誤原因,引導學生關注到從1到5的計算過程的分解。
2.2.2虛詞:只允許作用于計算(1)流程控制(2)邏輯判斷(3)指向實詞等意義明確的用途。教師尤其要及時要求學生刪除“大概”“可能”“很”等含混的虛詞表達。
步驟2.3詞匯的規范化:要求其中出現的詞匯及其搭配方式必須前后一致。禁止人為省略。
評價標準2.3檢查所有詞匯及其相關搭配。保證每個詞匯及其相關搭配的使用前后一致。
錯誤示例:
將1和2相乘,得到2;
和3相乘,得到6;
和4相乘,得到24;
錯誤原因:后兩個相乘的用法存在人為省略問題,與第一個相乘不一致。
改正后得到規范的自然語言描述:
將1和2相乘,得到2;
將2和3相乘,得到6;
將6和4相乘,得到24。
步驟2.4泛化到一般性問題。
評價標準2.4自然語言描述正確地表達了任意問題的求解。
規范的自然語言描述:
將1和2相乘,得到2;
將2和3相乘,得到6;
將6和4相乘,得到24;
重復以上步驟,直到將中間結果與n相乘。
3)采用計算機語言替換自然語言描述2。
本標準化方案適合各種面向過程的高級程序設計語言。在實例中,將采用c語言進行示例。
教學內容3教師要求學生觀察自然語言描述2,并按以下步驟進行操作。
步驟3.1觀察是否存在以“重復以上步驟”為表達的任意次計算。如果存在,那么根據描述確定其直接關聯變化的數據序列,為其定義變量,并確定其初值、變化規則和執行條件,同時替換原自然語言描述。
評價標準3.1值序列確實能由定義的變量根據初值、變化規則來生成。
此變量之后將作為循環結構的控制變量而存在。
正確示例:
以上自然語言描述中,隨“重復以上步驟”而關聯變動的值序列是1,2,3,4,…,n。定義變量為x,其初值為1,變化規則為x=x+1。執行條件為x<=n。
替換后的自然語言描述變為:
設變量x,初值為1;
將1和x相乘,得到2;x=x+1;
將2和x相乘,得到6;x=x+1;
將6和x相乘,得到24;x=x+1;
若x<=n,重復以上步驟,將中間結果與x相乘。
步驟3.2對于其他數值,判斷是否具有同樣的意義;如果是,則定義同一變量。并替換其對應的所有數值。如果某數值在描述中沒有變動,那么保留它作為常量。
評價標準3.2該值序列中的各值指向相同的意義。
正確示例:
中間結果序列為:1,2,6,…,設變量名為mul。
替換后的描述變為(此時已經向程序語言過渡了):
設變量x,初值為1;
設變量mu1,初值為1;
將mul和x相乘,得到mul;x=x+1;
將mul和x相乘,得到mul;x=x+1;
將mul和x相乘,得到mul;x=x+1;
若x<=n,重復以上步驟,將mul與x相乘。
特別要注意,若存在循環嵌套,只需利用步驟3.1先確定外層循環變量,然后再依次確定內存循環變量,并替換相關自然語言描述,最終將形成嵌套結構。
步驟3.3替換所有的動作為程序語言的基本語句。
評價標準3.3所有動作應該能替換為基本語句。若不能,則意味著評價標準2.2未滿足,重新退回步驟2.2。
正確示例:
之前的計算步驟描述中,將?與?相乘,得到?,該動作搭配已被確認過是可直接計算的,其c語言的語句為:?=?*?。
替換后的描述變為:
設變量x,初值為1;
變量mul,初值為1;
mul=mul*x;x=x+1:
mul=mul*x;x=x+1:
mul=mul*x;x=x+1:
若x<=n,重復以上步驟,將mul與x相乘。
步驟3.4替換所有變量定義描述為語句。
評價標準3.4檢查所有變量的定義類型符合問題原意。
替換后的描述為:
intx;x=1;
int mul;mul=1:
mul=mul*x;x=x+1:
mul=mul*x;x=x+1:
mul=mul*x;x=x+1;
若x<=n,重復以上步驟,將mul與x相乘。
步驟3.5替換所有的循環結構、消除循環中重復的語句、替換選擇結構,得到程序。
評價標準3.5若描述無法替換,重新退回步驟2.2或者步驟3.1。
最終描述為:
int;x=1;
int mul;mul=l;
while(X<=n)
{
mul=mul*x;
x=x+1:
}
3標準化方案對培養學生計算思維能力的意義
筆者認為:程序設計課程中最核心的內容是培養出學生的計算思維能力:學生善于使用精確的符號化和有限的動作來刻畫和描述現實問題。但這對于初次接觸編程的學生來說并不是容易做到,因此,在計算機基礎教學中,教師進行有效的引導式教學就顯得非常重要。
引導式教學中最突出的問題是:當學生在過程中遇到某個問題而難以解決時,若教師對問題出現的背景以及與求解過程的關系沒有清晰認識,那么引導教學將無法繼續。此時教師可能會過于強調學生個人的領悟,卻不知這實質上是對學生的學習熱情和信心的傷害。
在本標準化方案的不斷完善的過程中,筆者進行了大量的實踐和探索。為驗證標準化方案的有效性,筆者針對一些學習成績較差的學生,進行了多人次的教學實踐。學生反饋表明:當教師能夠隨時指出學生當前狀態所存在的問題根源,并能夠引導學生按照標準化方案進行下一步思考時,學生所收獲的不僅是會編寫程序,還有對專業學習的信心。
4對馮博琴教授在文獻中提出的若干問題的探討
馮博琴教授在文獻中針對計算思維能力培養的“落地”提出了多個問題。其中具有代表性的有:
第一,“啟發式教學是否就能夠培養學生的計算思維能力”?
筆者認為:啟發式教學與引導式教學類似,其有效的前提在于教師對學生的計算思維過程有清晰的把握,本文提出的標準化教學方案有助于教師有效開展啟發式教學。
第二,“如何在1~2門課程之內,用有限的課時,在很多學生計算機基礎很薄弱的條件下,采用何種不同尋常的教學手段和教學方法,使得他們突破學習之瓶頸,更好地掌握計算思維”?
筆者認為:使學生突破學習瓶頸的方法,就是教師實施有效的引導式教學。引導教學應按照任務分段化、目標標準化來開展,教師能清楚地把握學生思維過程中各種可能的細節,對各個水平層次的學生都能給予有效的幫助。
5結語
目前本標準化方案能適用于針對多重循環的程序設計的引導教學工作,但尚存在以下問題:
第一,對具有復雜的數據結構的程序編制是不適合的。這包含程序的初始數據為非線性結構、程序的流程控制采用復雜的棧或隊列等情形;
第二,當循環層次較多和涉及變量較多時,使用標準化方案顯得繁瑣;
第三,對自然語言中的詞法和語法現象研究尚不夠全面。
下一步將針對上述問題進行研究,通過適度地降低實施步驟的精確性,來提高對程序復雜度的描述能力。