摘要:本文提出了一些觀點,探討了如何能使新生真正掌握一門程序設計語言。
關鍵字:程序整合;程序設計;邏輯思維;任務驅動教學
中圖分類號:G642 文獻標識碼:B
文章編號:1672-5913(2007)10-0013-03
0引言
計算機程序設計與其說是一門科學,倒不如說是一門藝術,即駕御程序設計語言的藝術,它不僅需要掌握一定的基礎知識,同時還需要具備一定的創(chuàng)造性邏輯思維能力[1,5]。程序設計的學習過程枯燥、難懂、持續(xù)時間長,從內容到學習方法、思維方式等同高中課程,與大學里的其他課程都有很大差異,大部分學生反映計算機語言難學,程序更難編。為了使學生能真正掌握一門語言,并能應用這種語言編寫程序,具備一定的編程能力,本文結合C/C++,針對如何培養(yǎng)大學新生的計算機語言編程能力,提出了一些觀點。
1程序設計能力的訓練過程
下面給出了我們總結出來的循序漸進的程序設計能力訓練過程。整個過程打破課本原有以知識的邏輯結構體系為順序組織的學習及教學方式,以學生已有知識為基礎,按照學生的認知規(guī)律,遵循先易后難、先具體后抽象、先輪廓化后細節(jié)化的原則,通過學習、觀看、模仿、理解、總結、提高五個階段進行訓練[2]。
1.1對程序設計語言的學習
程序=數(shù)據(數(shù)據結構)+算法[1],這個公式表明了編寫程序的基本要素以及要學習的基本內容。針對初學者,有必要讓他們對程序語言有一個全局性而且是簡單性的認識與學習,因此我們提出將程序設計語言抽象成為以下三方面的內容,進行教學。
(1) 數(shù)據,C語言的數(shù)據雖然比較豐富,但也就為兩大類:基本型,復合型。在初學階段,可僅針對基本型進行學習、應用。在學生有一定基礎之后,再開始復合型數(shù)據的學習與應用。
(2) 程序流程控制,三種基本程序結構,各自實現(xiàn)語句。
(3) 輔助工具,屬于高級階段的內容,比如說文件操作,宏的應用,函數(shù)等。
1.2閱讀、修改、整合簡單程序范例
小孩堆積木之前,有必要了解、認識、理解積木,然后才能夠堆出各種造型來。閱讀簡單程序范例就相當于對積木的了解、認識、理解過程,是一個基本且必要的過程。在這一過程中,可以引導學生培養(yǎng)動態(tài)思維來閱讀程序,或判斷程序的正確性。這種思維習慣的養(yǎng)成,對培養(yǎng)學生的邏輯思維能力和抽象思維能力有非常重要的作用[2]。
典型的簡單范例程序,如有規(guī)律的數(shù)據項累加/累乘,驗證某個數(shù)是否為素數(shù),分離某個數(shù)的每位數(shù)字,求兩個數(shù)的最大公約數(shù)/最小公倍數(shù)等[1]。
該訓練過程的后期主要是在簡單范例程序的基礎上逐漸改變和增加條件的方法來訓練學生的動手實踐能力。
針對上述簡單范例程序,可變化出一些程序,如求出某范圍內的所有素數(shù),求出某范圍內的所有水仙花數(shù)(某數(shù)等于其每位上的數(shù)字立方和)等[1]。這些程序都可以只對上述簡單范例程序修改、整合來完成,學生在這一過程中必須親自實踐。
該過程屬于模仿階段,持續(xù)時間長且枯燥,所面對的范例大部分都沒有實際應用價值,也沒有太多吸引力。但這是一個相當基礎且必要的過程。
1.3獨立編寫簡單應用程序
經過上述過程的訓練,學生對程序設計語言的運用已達到比較熟練的程度。在此基礎上,選擇一些與上述過程中有所區(qū)別的簡單應用問題,由學生獨立完成程序的編寫。在這一過程中應該貫徹過程化程序設計的基本原則“自頂向下,逐步細化”[1],同時也應該注意培養(yǎng)學生的編程風格[3]。
有很多可以選擇的經典問題,如“猴子選大王”問題[1]。n(由程序運行動態(tài)給定)只猴子,由1到n編號并排成一列(或一行也可)。第一次從頭到尾進行1,2,3報數(shù),凡報3的出列,取消候選資格。第二次從尾到頭進行1,2,3報數(shù),也是凡報3的出列。第三次又從頭到尾,如此反復,直到隊列中剩下兩只猴子時,此時報2的猴子即為大王。請編程計算出如果要當選為大王,則預先應站在隊列的哪個位置。針對該問題可做引導學生做如下分析:遵循逐步細化的原則,將問題細化成若干簡單問題(原子問題)。
(1) 某一序號位置處猴子的表示,需要表示出兩個數(shù)據,一是猴子的位置序號,二是該位置上的猴子在與不在。
(2) 1,2,3報數(shù)子問題。
(3) 從頭到尾,從尾到頭,如此反復的子問題。
可逐步針對這些子問題尋求解決辦法,編寫出相應的程序代碼,然后再進行全局性整合,直至解決整個問題。
這個過程屬于理解與總結階段,也是持續(xù)時間長、枯燥,不過所面對的求解問題可能多了一點趣味性。
1.4以任務驅動模式進行程序設計訓練
“任務驅動法”是一種建立在建構主義教學理論基礎上的教學法。作為建構者,教師是學習的指導者、輔助者、導航者,學生才是主體。所謂“任務驅動教學法”就是讓學生在一個典型“任務”的驅動下展開學習,引導學生由簡到繁、由易到難、循序漸進地完成一系列“任務”,從而得到清晰的思路、方法和知識的脈絡,并在完成“任務”的過程中培養(yǎng)分析問題、解決問題以及用計算機處理信息的能力。驅動式實踐教學可以充分發(fā)揮計算機的優(yōu)勢和學生個性的特點,讓學生在任務中通過不斷實踐自己發(fā)現(xiàn)、解決問題,同時在這過程中掌握知識、提高操作技能[4]。
這個過程就是提高階段,綜合應用階段。在第3節(jié)中我們將詳細闡述任務驅動模式方面的問題。
2邏輯思維能力訓練
在計算機程序設計的學習與訓練過程中,學生們常提出的一個問題是:程序設計語言已掌握好了,簡單的范例程序也能讀懂,簡單的數(shù)值性計算問題也可以獨立編程求解,但是面對一個真正的應用問題時,感覺到不知道如何求解。他們所反映出來的問題就是邏輯思維能力的欠缺。如何培養(yǎng)學生的邏輯思維能力不是本文范疇,有興趣者可參考文獻[6]。
3任務驅動模式中的關鍵問題
如何選擇任務,如何處理任務中可能出現(xiàn)的超越學生現(xiàn)有能力之外的環(huán)節(jié),是任務驅動訓練過程中需要面對與解決的兩個關鍵問題。
3.1選擇任務的基本原則
選擇任務遵循的基本原則是:任務必須對學生有強烈的吸引力。這樣才能激發(fā)學生的興趣,才能激發(fā)學生挑戰(zhàn)梭的信心與斗志,才能讓學生在面臨困難的時候不輕易退縮與放棄。
我們認為任務的吸引力主要源自以下幾個方面:
(1) 任務貼近學生的實際生活,符合學生的應用要求,在一定程度上迎合學生愛刺激的心理。在我們教學過程中,常遇到一些學生提出要求老師多講解一些諸如怎樣編寫通訊錄管理程序、小病毒程序、QQ等密碼盜取/破解程序、系統(tǒng)漏洞掃描、鍵盤監(jiān)控程序。學生們并不是希望用這些來搞什么破壞,而是想鍛煉或者驗證自己的能力,稍嚴重點的就是在同學或朋友間做點小惡作劇以炫耀自己,或者在應用過程中獲取一定的刺激。充分利用這種心理就可以設計出合適的、具有強烈吸引力的程序設計任務。當然在這一方面教師必須正確的引導學生對這些技術的合理、合法應用。
(2) 任務的網絡化趨勢。網絡的普及使每個學生在學習過程中都有機會去接觸各種類型的網絡應用,如網絡間傳送數(shù)據文件、網絡聊天等,合理的設計與這些應用有關的程序設計任務,讓學生自己有一定的能力在網絡中自由遨游,也將對學生產生巨大的吸引力。
(3) 任務與數(shù)碼技術的關聯(lián)。目前數(shù)碼技術的應用可謂無孔不入,數(shù)碼照相、攝像等可以隨時隨地的進行。將程序設計任務與數(shù)字圖像、視頻的簡單操作、處理相關聯(lián),勢必也能激發(fā)學生的興趣。
3.2對任務超越學生能力范圍的處理
依據上述原則選擇與設計程序設計任務。有些任務雖說算是小型問題,但涉及到其他一些知識點。有些任務直接,涉及其他知識點不多,但可能需要有更高級的編程技術,如基于Windows的應用程序界面制作、Windows API的調用等。如果處理不當,將會使任務難度太大,反而打擊學生挑戰(zhàn)的信心與斗志。我們提出以下幾種處理方式。
(1) 在學生具有一定的實踐能力之后,可逐步將所學習的程序設計語言向更高層次拓展。如針對C語言,有必要拓展到C++,不過只能是最簡單、最必需的知識點,不宜太全面。在學生有一定C語言的基礎之后,僅引入C++中的類的基本概念、定義及使用、構造函數(shù)、析構函數(shù),其他知識點先置之不理。之后,進一步將學生編寫、調試程序的工具移植到可視化工具之中,如Visual C++,不過也僅是讓學生了解該工具的基本操作,不宜全面介紹與引入,關鍵是能理解、會用即可。
(2) 針對某些任務進行專題講座。如編寫小病毒程序,教師則針對病毒程序的幾個特性來進行技術講座,并針對典型問題詳細介紹如何獲取相關資料、如何解決等,引導學生充分利用現(xiàn)有資源(如網絡、書籍等)獲取資料和解決問題的辦法。
(3) 針對學生一時無法解決的問題,最好的處理辦法是給出程序的框架,并做詳細注釋與講解,讓學生只需要利用現(xiàn)有知識及能力就能解決這類任務。
總而言之,要設計出具有吸引力的任務,但又要合理把握好難度。
4小結
大學新生計算機語言編程能力的強弱,在很大程度上影響到后續(xù)課程的學習,對理工科學生來說其影響尤其明顯。因此如何培養(yǎng)大學新生的計算機語言編程能力,已成為很多高校教師關注的熱點。本文提出了一些觀點,以拋磚引玉,便于同行們繼續(xù)深入探討。Edu
參考文獻:
[1] 譚浩強. C程序設計(第二版)[M],北京:清華大學出版社,2005.
[2] 孔婷. C語言程序設計教學方法探討[J]. 南昌教育學院學報,2006,(21):47-50.
[3] 丁紅勝,田金琴. C語言教學中學生編程風格的培養(yǎng)[J]. 計算機時代,2006,(10):65-67.
[4] 朱利民,趙利敏. 淺析任務驅動教學法[J]. 科技情報開發(fā)與經濟,2006,(18):246-247.
[5] 閆英戰(zhàn). “C語言程序設計”教學改革的探討[J]. 電腦知識與技術,2006,(29):175-176.
[6] 王莘. 邏輯思維訓練[M]. 北京大學出版社,2006.
作者簡介:趙飛,高級網絡工程師,網絡安全師,高級程序員。負責開發(fā)過各類大學管理軟件的項目,有著豐富的編程經驗,在計算機網絡和編程上有深刻研究。現(xiàn)負責湖南師范大學樹達學院計算機教學中心的全面工作。