陸淑娟+呂俊
摘 要:以C語言課程為例,闡述了基于計算思維的目標確定以及釋疑啟讀,探討了在C語言教學中引入目標導學模式的方法和策略,旨在實現學生計算思維能力和創新實踐能力提升。
關鍵詞:計算思維;目標導學;C語言教學
DOIDOI:10.11907/rjdk.171301
中圖分類號:G433
文獻標識碼:A 文章編號文章編號:1672-7800(2017)008-0214-02
0 引言
作為計算機基礎教學中的一門重要課程,C語言在很多高等院校都作為理工科學生的必修課。計算機語言課程的目的在于培養學生分析問題和解決問題的能力。而在實際教學中,有很多教師對于課堂教學隨意性強,教學效果不甚理想,對學生的要求也只注重程序編寫而忽略了思維能力的培養。同時,學生往往也會因為繁瑣的語法和對算法的不甚理解最終失去學習興趣。
在教學中引入目標導學模式,可以將傳統的“講授—聽課”關系轉變成“引導—參與”模式,通過以計算思維的培養來設定目標,實現以教師為主導、學生為主體的“雙主教學”來激發學生的學習動機,從而達到提升學生計算思維能力和創新實踐能力的目的。
1 目標導學模式內涵
美國著名的心理學家,教育家布魯姆在20世紀中期發表了著作《教育目標分類學》和《掌握學習理論導言》,而目標導學正是在“目標分類”和“掌握學習”這兩大理論基礎上發展出來的一種教學模式,它是一種以教學目標為核心和主線實施課堂教學的方式。這種模式下,教師作為主導,以教學目標為導向引領、指導學生圍繞目標展開一系列的教學活動,最終完成教學任務。學有目標,則更能激發學生的學習興趣和主動性;目的明確,學生的積極性被充分調動,在教師的引導下真正成為學習的主體。相比其它教學法,目標導學更注重教學的過程和效果,而學生也能在較短的時間內獲得達標后的喜悅感和成就感,從而形成良性循環,促使學生更加努力地想要完成下一個目標。
2 計算思維能力要義
計算思維概念的提出,起源于美國麻省理工學院西蒙·帕佩特(Seymour Papert)教授,而美國卡內基梅隆大學周以真教授則對其進行了系統闡述和推廣。周以真教授將計算思維定義為:“計算思維涉及運用計算機科學的基礎概念去求解問題、設計系統和理解人類的行為。計算思維涵蓋了反映計算機科學之廣泛性的一系列思維活動?!彼J為,計算思維可以通過約簡、嵌入、轉化和仿真等方法把一個看起來困難的問題重新闡述成一個大家知道怎樣解決的問題。計算思維代表著一種普遍的認識和一類普適的技能,每一個人都應熱心于它的學習和運用[1]。隨著國外計算思維的興起,國內計算機教育界也對計算思維進行了探索和研究,哈爾濱工業大學戰德臣教授等[2]用“計算之樹”給出了計算思維多維度的表述框架,認為“0 和1”、“程序”、“遞歸”三大思維最為重要。而九校聯盟[3]在《計算機基礎教學發展戰略聯合聲明》中也強調要把培養學生的計算思維能力作為計算機基礎教學的核心任務。
3 目標導向模式在C語言中的教學組織
當前,如何將計算思維理念融入到計算機語言教學中,培養學生的計算思維能力,成為計算機教學研究的焦點,國內外的探索也取得了一定的成果,但尚未形成一套完整有效的教學模式。通過在教學中的不斷摸索,發現在計算機語言教學中非常適合融入計算思維。以C語言為例,首先教學目的是為了讓學生學習計算機分析、解決問題的思路和方法,培養學生運用計算機技術去解決問題的能力,這正是計算思維的一個方面;其次,語言課程的內容也非常好地體現了語言級問題的求解方法,這也是計算思維能力培養的重要內容。與此同時,也發現C語言中很多生動有趣的案例都可以和語法結合起來設置成一個個學習目標。因此,圍繞學生計算思維能力培養這一核心任務,在C語言教學中構建目標導學模式,可以達到事半功倍的教學效果。
3.1 教學目標設計
將目標導學運用到C語言教學中,首先要示標,通過出示教學目標,喚起學生的參與意識,產生學習動機,并對學習起到引導和激勵的作用。教學目標是每堂課的出發點也是最終的歸宿,它應該有明確的教學內容和要求,一個好的教學目標應該不過于簡單也不過于難,能讓學生在積極思考后體會達成目標的快樂,這樣才能充分激發學生的學習興趣[4]。同時,目標還應該具有啟發性,培養學生的創造性,激發學生的探究性,從而培養學生的思維能力。因此,目標確定非常重要。設計目標時應遵循以下原則:
(1)以計算思維培養為目標。傳統的程序設計教學普遍重視編程能力的培養,對計算思維的本質“抽象和自動化”關注較少。抽象過程就是對問題系統進行建模的過程,是從現實世界——信息世界——機器世界的轉變。而自動化則是指“機械式”地按照步驟自動執行,所以對問題的求解要有精確的算法描述和嚴格的符號表示。因此,在設定目標時,可以選擇一些生活化的案例,讓學生體會如何用計算機解決問題的方法來解決實際生活中的問題,這個過程恰恰就是計算思維培養的過程。例如在分支選擇部分選擇超市打折問題、稅率計算問題等。學生在完成目標時,首先要對現實問題建立模型,寫出對應的分段函數,然后再轉變成C語言的算法描述,并且嚴格地定義符號表示每個需要計算的量,也即變量,根據算法描述運用if—else—else if—和switch結構分別寫出對應的代碼,最終完成多分支選擇結構的學習目標,在整個過程中,引導學生逐步理解并使用抽象化和自動化的方法,慢慢提升計算思維能力。
(2)目標要具有層次性。由于地域的差異,學生的基礎水平參差不齊,傳統的教學組織方式無法照顧到所有學生,很容易造成“優生吃不飽,差生吃不到”的情況。因此,在設定目標時要充分考慮群體的層次性,可以設定基本性、提高性、拓展性等不同目標,學生可以根據目標層次循序漸進地學習,這樣也就做到了讓差生學有所獲,讓中等生學得踏實,也能讓優等生吃得飽。例如,在講述循環時,同一個問題“分解一個整數的各位數”,就可以讓不同層次的學生用不同的方法求解,從而完成不同的學習目標?;A較弱的學生可以采用百、十、個位數分別分解的方法如“a=x/100;b=(x-a*100)/10;c=x%10”來完成,這里的學習目標僅在溫故,進一步熟練掌握并使用上一講中的數學運算符和表達式;中等學生可以用循環方法如“while(x>0) {a=x%10;printf(“%d”,a);x=x/10}”來求解,這里的學習目標是循環,通過程序掌握while循環的使用方法,了解循環是重復執行一組相同的操作;而學有余力的學生則可以在此基礎上進一步拓展,要求他們將分解后的各位數重新組合成原數的逆序數。這里較高的層次都是在較低層次上的一個遞進,這樣就可以在同一個課堂上讓不同層次的學生都能完成目標,體會達標的欣喜,同時,也可以激勵基礎較弱的學生,激發他的好奇心、好勝心,培養他的進取心。endprint
3.2 自學探索,討論釋疑
在教師展示目標之后,則是學生的自學探索階段,對需要完成的目標內容進行思考,進而生疑,或者由教師進行設疑,而后共同討論釋疑。這個過程也是目標導學的核心,它將傳統的“以教為主”轉變為平等的“教學互動”,充分發揮學生的主體性,避免學生依賴教師,思維產生惰性。同時這個過程也正是培養計算思維非常重要的時機,在啟讀、釋疑的過程中轉變、培養學生的計算思維,對學生解決問題的方法進一步地分析、總結、改進,將計算思維的優化特征充分融入到程序的設計過程中。
例如,在設定目標求解1+2+…+100時,有學生直接用等差數列的求和公式進行計算,而百錢買百雞問題,則有學生提出疑問認為無法解,因為3個未知量只有2個方程式,這些都是典型的數學思維,在計算機世界,會用重復的累加完成1~100的求和,會用窮舉法列舉公雞、母雞、小雞的所有可能組合,這些看起來費力的笨辦法卻正是計算機所擅長的,因此,在討論過程中要轉變學生思維,引導學生學會將一個問題轉化成簡單而有規律的重復運算,這正是使用計算機科學對問題求解的一種思維方法和能力。
另外,在算法設計中,不僅要實現問題的解決,還要尋找最優的算法。比如上文提到的百錢買百雞問題,根據窮舉法寫出程序如下:
For(i=0;i<=100;i++)
For(j=0;j<=100;j++)
For(k=0;k<=100;k++)
If(i+j+k==100 && i*5+j*3+k/3.0==100)
Printf(“%d,%d,%d”,I,j,k)
而根據題意,利用i+j+k=100可將三層循環減為兩層,并根據價格縮小窮舉范圍,修改后代碼如下:
For(i=0;i<=20;i++)
For(j=0;j<=33;j++)
{ k=100-i-j;
if( i*5+j*3+k/3.0==100)
Printf(“%d,%d,%d”,i,j,k);
}
循環執行的規模一下子從106減小到600多。再比如數組一章中的冒泡排序,極端情況下每一次比較都要進行元素的交換,而對算法進行優化以后,可以在一趟比較中找出一個最大元素和最后一個交換,這樣大大減少了元素的交換次數。正是這樣,在討論過程中,把計算思維一點一點地融入到教學過程中,讓學生養成一種自覺運用計算思維解決問題的習慣,這也是程序設計課程的價值所在[5]。
3.3 反饋測試、歸納總結
根據學習目標,了解學生的掌握情況,可以提問的方式、學生主動講述的方式或是競答的方式,讓學生在完成目標后能得到驗證和表現。這個環節是目標導學的目的也是歸宿,是對前面環節學習效果的總體反饋,也是對知識的查漏補缺。教師應對學生獲得的成果給予充分的肯定和激勵,再進行歸納總結,強調重點,達到鞏固知識的目的。
4 結語
著名的計算機科學家、圖靈獎得主艾茲格·迪杰斯特拉(Edsger Wybe Dijkstra)說:“我們所使用的工具影響著我們的思維方式和思維習慣,從而也將深刻地影響著我們的思維能力[6]?!?在計算機成為這個時代最為有力的工具時,計算思維的培養也變得日益重要,它不僅可以幫助人們更好地解決身邊遇到的問題,還將有助于人們在今后從事的事業中更有效地運用專業知識。因此,在課程中進行計算思維能力的培養是一個值得深入研究的課題。
參考文獻:
[1] 郭喜鳳,孫兆豪,趙喜清.論計算思維工程化的層次結構[J].計算機科學,2009(4):64-67.
[2] 戰德臣,聶蘭順.計算思維與大學計算機課程改革的基本思路[J].中國大學教學,2013(2):56-60.
[3] 董榮勝.《九校聯盟(C9)計算機基礎教學發展戰略聯合聲明》呼喚教育的轉型[J].中國大學教學,2010(10):14-15.
[4] 韓麗紅.“目標導學法”在教學中的應用[J].科教文匯:中旬刊,2008(11):95.
[5] 李妮.基于計算思維能力培養的C語言程序設計課程改革[J].運城學院學報,2014(5):72-74.
[6] 王玉鋒,孔繁之.基于計算思維的計算機教學研究[J].計算機教育,2013(13):57-59.endprint