摘要:本文分析了非計算機專業計算思維的培養需求及目前大學所設的非計算機專業程序設計類課程中存在的問題,并提出應注重學情,因材施教,從課程引入、案例教學和實驗三個階段強化計算思維訓練,進而提升學生的信息素養的改革思路。
關鍵詞:計算思維;程序設計課程;非計算機專業
中圖分類號:G434 文獻標識碼:A 論文編號:1674-2117(2017)08-0089-04
21世紀是信息和知識經濟的時代,它的特征是數據資源的開發、計算機和網絡的廣泛普及,這個時代所需要的思維方式是計算思維方式。[1]因而,計算思維成為21世紀大學生必須具備的基本技能。目前,程序設計課程是大學通識教育的重要組成部分,它不僅向學生傳授計算機的相關知識和技能,更重要的是能夠培養大學生的思維方式。因此,如何對程序設計課程進行教學改革,將計算思維能力培養融入教學過程,提高學生運用計算思維分析問題和解決問題的能力是一個富有挑戰性的研究課題。
非計算機專業的計算思維培養需求
計算思維是運用計算機科學的基礎概念進行問題求解、人類行為理解等一系列的思維活動和過程,是一種以抽象、自動化為特征的解決問題的思維方式。[2,3]培養計算思維的目的是希望所有人都能像計算機科學家一樣思考和分析,把計算機技術與各種學科理論技術進行融合和創新。研究指出,理論思維、實驗思維、計算思維共同組成人類認識世界和改造世界的三種思維方式。[4,5]理論思維是用“假設—推理—證明”等理論手段來研究社會自然規律的邏輯思維,實驗思維是用“實驗—觀察—歸納”等實驗手段來研究的實證思維,計算思維是以“抽象—設計/構造—編程實現”等計算手段來研究的構造思維。隨著對自然社會現象和規律研究的深入,理論思維和實驗手段受到很大的限制,不同學科研究對計算機科學的需求日益增強,特別是在高端交叉學科,如“計算數學”“計算物理”“計算化學”“計算生物”等,這些學科都需要利用計算手段來實現理論和實驗的協同創新。
對非計算機專業人才的計算思維培養的重任首先落在大學計算機基礎課程的教學上。因為計算機基礎課程在小學、中學階段都有不同程度的開設,因此在大學階段,很多高校就不再開設,而主要開設程序設計類課程。高校非計算機專業開設的程序設計類課程主要有“C語言程序設計”“Visual C++程序設計”“Visual Basic程序設計”“Java程序設計”等課程(以下簡稱“程序設計類課程”)。程序設計類課程能夠培養學生計算思維、邏輯思維能力,其開設對改善大學生的知識結構,培養他們的計算思維、創新能力及提高綜合素質都起著十分重要的作用。
非計算機專業程序設計類課程教學現狀及方法改革
1.教學現狀及存在的問題
程序設計類課程的授課對象為非計算機專業大學一年級的學生,他們當中有些是文科生,數學基礎差,對概念不容易理解,且自學能力差,實際應用則更困難。同時,學生的學習功利性很強,對上機實際操作比學習理論知識更有興趣,雖然簡單的類似課堂內容的實驗項目能完成,但解決實際應用問題的能力卻較差。另外,由于課時有限,程序訓練較少,他們很難認真獨立地完成作業。
2.注重學情,因材施教,使用案例教學模式
(1)注重學情,因材施教
在深入研究非計算機專業大一年級學生的認知規律、思維模式和專業背景后,筆者按照課程知識的內在體系結構梳理了教學內容,并深入淺出、由易到難、循序漸進地進行了教學設計。實踐結果表明,教學的理論深度要適當,難點要分散,先修知識要交代清楚,避免學生因聽不懂而產生厭學情緒。同時,在教學過程中,要大量使用多媒體教學和實際編程環境演示,增加學生的感性認識;針對較復雜的問題要采用講練結合的形式來鞏固知識,加深其理解;還要淡化繁瑣的語法規則,突出重點,增加學科前沿知識。
(2)使用案例教學模式
在程序設計類課程的教學中使用案例教學模式,設計豐富生動的教學實例,如講最大公約數算法時引入歐幾里得的故事,講Fibonacci數列的數組應用時引入兔子繁殖問題,講雙重循環時使用多種金字塔圖形。在課堂教學中,教師可采用講故事的案例教學法引出與案例相關的一系列概念與算法,調動學生的學習積極性,啟發思維,便于學生理解。除此之外,還可以采用課程小組、團隊學習等形式促進學生共同學習、共同探索,提高學習效率。
非計算機專業程序設計類課程計算思維的培養實踐
計算思維可以貫穿程序設計類課程的整個教學過程,下面筆者分別從課程引入、課堂案例教學和實驗設計三個階段探討如何將程序設計類課程與計算思維有機地結合起來。
1.突出計算思維的課程引入
首先,筆者點明計算思維對學習的重要性。既然計算思維這么重要,那么怎么培養呢?接著告知學生現在要學習的程序設計類課程就是培養計算思維能力的。這就很自然地過渡到本課程的培養目標,即培養學生計算思維與邏輯思維的能力,培養學生算法思想與解決問題的能力。然后,介紹主要教學內容,并展示經典案例及優秀作品,培養學生的學習興趣。例如,展示數學四則運算實例;展示輸入你的姓名輸出“***同學,祝你學好程序設計”的實例;展示小汽車肆意向前奔馳的實例;展示掃雷游戲實例;等等。通過這些例子讓學生們看到編程能夠實現一些基本功能,進而增強他們的自信心和興趣。
實例展示好后,筆者一步一步演示簡單的加法運算實例的具體實現過程(以Visual Basic程序設計為例)。第一步,界面設計。演示需要哪些控件進行數據的輸入輸出以及界面的屬性設計等。第二步,代碼設計。引導學生分析問題,如何抽象化和具體化,分析算法和功能,寫出代碼。第三步,調試運行,修改錯誤,得出結果。這個實例操作的過程體現了計算思維的抽象化和自動化特征,達到了初步培養學生計算思維的目的,進而實現了課程引入。
2.基于計算思維的案例教學:歐幾里得算法
案例教學可以以“介紹歷史人物故事—算法介紹—算法編寫實現—算法執行過程講解與輸出”為教學過程,體現案例教學中趣味性和科學性的結合。下面,筆者以歐幾里得算法為例介紹教學過程。
①介紹歷史人物故事。歐幾里得(公元前330—公元前275),古希臘數學家,被稱為“幾何之父”,他的傳世之作《幾何原本》是歐洲數學的基礎。《幾何原本》第一次實現了數學的系統化、條理化,而且孕育出一個全新的研究領域——歐幾里得幾何學,簡稱歐氏幾何。歐幾里得算法與“丟番圖方程可解性問題”相關。丟番圖也是一位古希臘的數學家,是第一位懂得使用符號代表數來研究問題的人,被后人稱為“代數之父”。他在Arithmetic(《算術》)一書中提出“有關兩個或多個變量整數系數方程的整數解”的問題。對于具有整數系數的不定方程,如果只考慮其整數解,這類方程稱為丟番圖方程。例如,只有一個未知數的線性丟番圖方程,如ax=b,只要a能整除b,就可判定方程有整數解,該解為a|b(“|”整除符號)。對于有兩個未知數的線性丟番圖方程,如ax+by=c,先求出a和b的最大公約數d,若d能整除c(d|c),則該方程有整數解。因此,對于有兩個未知數的線性丟番圖方程來說,求解的關鍵是求最大公約數。
②算法介紹。歐幾里得在其著作《幾何原本》中闡述了求解兩個數的最大公約數算法。求能同時整除a和b的最大正整數的算法就是著名的歐幾里得算法,又稱輾轉相除法。[5]算法步驟為:第一步,輸入兩個正整數a、b。第二步,以b除a(或者a除以b),余數為r。第三步,若余數r為0,則輸出b,程序結束;否則,以b置換a,r置換b,又返回第二步。
③算法編寫實現。歐幾里得算法流程圖與模擬計算過程如上圖所示。算法介紹完成以后,根據所學編程語言,進行編程,并調試運行輸入數據,輸出結果。
④算法執行過程講解與輸出。由于部分學生在高中階段并沒有學習過計算機基礎相關課程,即使學習過也可能會對知識的掌握并不準確,所以講解程序的編譯輸出過程有助于學生了解計算機的相關知識和工作過程。
筆者首先講解存儲問題。算法第一步是定義變量和分布變量內存空間大小。變量以變量名如a、b形式保存在內存空間中,a、b以整形變量2個字節的二進制形式保存在內存地址中。這時由操作系統來執行,操作系統來決定程序裝載在哪個內存中,決定程序被CPU的執行。講解完存儲問題后,引導學生理解算法的執行。算法的執行需要CPU(控制器和運輸器)的操作。編譯過后的機器語言程序是可以被CPU直接解釋和執行的機器指令,一條機器指令被分為操作碼和地址碼兩部分,操作碼傳達給CPU所要進行的操作類別,如存數、取數、做求余運算、打印等,地址碼傳達給CPU所要操作的數據在哪里。然后CPU就執行程序了,在一個機器周期內,按“發送指令地址給存儲器—取出存儲器中指令給控制器—控制其解析指令碼—指令碼控制相關動作執行(求余運算)”,完成一條指令的執行。然后機器不斷重復執行這樣一個過程,直至遇到停機指令為止,完成程序的執行。最后在編譯器中或外存中顯示程序運行的結果。
3.培養學生自己動手練習和實驗操作
在程序設計類課程的課堂教學中,教師在講完一個重要算法或知識點后,要給學生一個閱讀或編程練習的機會,這樣不僅可以讓學生鞏固已學的知識點,增強對知識點的理解,而且可以激發學生的靈活運用,提高其創新能力。筆者基本上會保證每次課有5~10分鐘的練習時間,讓學生成為學習的主體,進行探索研究式的自主學習,讓教師成為教學的主導者,起到控制學習過程、提供教學資源和教學建議的作用。
計算思維是問題求解的思維,程序設計類課程主要培養學生算法思想與問題求解的思路,因此上機實驗是培養學生計算思維的重要手段,是程序設計課程教學的核心之一,所以教學中教師要重視上機實驗。筆者一般安排教學課時的四分之一用于上機實驗,上機實驗內容不僅要與教材知識點同步,而且要有趣味性和綜合性。例如,在分支結構中,安排“健康秤”程序,確定標準身材的身高和體重指數;在循環實驗中,設計“九九乘法表”;在數組實驗中,設計“楊輝三角形”。上機實驗內容一般要提前布置好,3~4題為宜,且難易程度要有一定的梯度。另外,在實驗課上調試運行時,教師要鼓勵學生程序出錯不要放棄,由于學生有不同的專業背景、思維方式和個體差異,因此在實現同一問題時,要允許他們使用不同的方法,要鼓勵他們從不同的視角認識問題,提倡算法的多樣性。
結論
進行計算思維訓練對21世紀的大學生來說是極為重要的。程序設計類課程正是鍛煉計算思維的好的工具和方式,它不僅提高了非計算機專業學生的信息素養,培養了學生在處理計算機問題時應有的思維方法、表達形式和行為習慣,而且能夠使學生準確地理解計算機的實現機制,有利于學生利用計算機去解決學科問題,并進行學科融合和創新。然而,建立科學的計算思維培養模式尚處在嘗試階段,還并沒有一個成熟的模型。因此,如何將計算思維融入教學,培養學生自主學習能力,培養學生運用計算思維解決各應用學科問題的能力,還需要教授程序設計類課程的教師不斷地探索和實踐。
參考文獻:
[1]王飛躍.面向計算社會的計算素質培養:計算思維與計算文化[J].工業和信息化教育,2013(6).
[2]Wing JM.Computational Thinking [J].Communications of the ACM,2006,49(3):33-35.
[3]常亮,徐周波,古天龍,等.離散數學教學中的計算思維培養[J].計算機教育,2011(14):90-94.
[4]陳杰華.程序設計課程中強化計算思維訓練的實踐探索[J].計算機教育,2009(20):84-85.
[5]戰德臣,聶蘭順.大學計算機——計算思維導論[M].北京:電子工業出版社,2014.
作者簡介:鄭紅波,女,博士,講師,從事程序設計教學和虛擬現實研究。鄭浩,男,高級中學一級教師,從事數學和計算機教學工作;秦緒佳,男,教授,博士生導師,教育部高等學校文科計算機基礎教學指導委員會委員,研究方向為計算機圖形學。
基金項目:浙江工業大學校級教學改革項目(JG201512),浙江工業大學科研啟動金(119005029)。