周 頔, 盛歆漪, 王 駿
(江南大學 數字媒體學院,江蘇 無錫 214122)
隨著社會知識結構與內容的更新速度越來越快,保持自身良好社會綜合競爭力的唯一方法就是不斷順應需求、更新自己的知識儲備。這一點,對從事電子信息科技類工作的人員來說顯得尤為重要。因為正如摩爾定律所說,信息科技領域的知識每隔一段時間基本就會進行一次徹底的更新。順應這種市場的要求,現代本科教育中越來越強調自我學習能力的培養。在現在的大學教育過程中,與其說目的是教會學生某些具體的專業技能,不如說更核心的目的是幫助學生建立起正確的本專業思維方式,并培養出學生把握本專業信息、不斷更新自身知識的能力。在這種大環境下,非指導性教學方式在教學過程中就顯示出越來越重要的用處。
非指導性教學,是由人本主義代表人物羅杰斯所提出的“以教師和學生構成平等對話關系”為核心的一種重要教學方法。在這種教學方法中,教師被要求采取友好、真誠、開放的態度來對待學生。而學生則具有充分的思考自主權和行動選擇權,在教師的幫助下建立起良好的自制力,明確自己的興趣點,最終培養出自我探索的能力[1-2]。這種方式在以強調實際動手能力著稱的大學計算機及其相關專業的教學中顯得尤為重要。
對于大學計算機及其相關專業來說,包括C、C++、Java、JavaScript、C#等在內的程序設計類課程等始終是教學中的一塊重要內容,這些課程為大學計算機專業及相關專業的課程的展開打下了扎實的知識基礎。從課程內容上講,這類課程涉及復雜的語法知識,加之知識點瑣碎,概念抽象,所以從某個方面上講,這類課程具有文科類語言課程的特點(如需要花費較多的精力來講授語法規則)。另一方面,這類課程注重學生的邏輯思維能力和動手編程能力,在教學過程中要求學生樂于動腦,勤于動手,具有典型的工科類課程的特點。目前從國內外同類課程的教學現狀來看,現有的大多數教學方法多強調教師在課堂上對知識點的講授,沒有重視發揮學生的主觀能動性,更沒有強調學生的自我學習過程。因此給教師的教學實踐提出了難題。
為了能夠在高校的程序設計課程中更好地推廣非指導性教學方法,筆者在實際教學工作中進行了嘗試。我們認為,為了在這類課程中更好的使用非指導性教學方法以取得更好的教學效果,需要特別注意兩個方面。一是要求授課教師對程序設計教學的內容和重要性有著更加透徹的理解,二是很好的掌握非指導性教學方法在程序設計課程中的應用方式[3-4]。
程序設計的最終目的是要讓計算機來解決實際問題,而解決問題的關鍵則取決于兩個方面:采用何種方法步驟來解決問題,以及采用何種媒介(語言)讓計算機知曉用戶的意圖并按設定的方法最終解決問題。前者指算法,后者指的就是各種編程語言。簡單來說,程序設計語言就是人與計算機之間溝通的工具,而且這種工具的使用必須符合一定的規則,也就是各種程序設計語言中的語法結構和語法規則等。因此,對于程序設計的教學,可以理解為是一個將“人類思維”方式轉變成清晰的、直接的、簡潔的“機器思維”方式的過程。
目前國內許多高校在程序設計課程的教學中,都將主要精力放在某種具體語言的語法細節介紹上。這種教學方式在一定程度上脫離實際應用的需求,而且很容易造成學生對編程的興趣缺失。筆者在教學實踐中也發現了這一問題。有很多學生在學習初期對課程有著較為深厚的興趣,他們也愿意向教師提出各種各樣的問題。但是隨著課程教學的深入和課程知識點難度的提高,他們的原先所具有的學習興趣慢慢消失了。究其原因,我們認為,對于編程語言的學習,其側重點不應該放在具體的語法細節上,而應該放在正確編程思想的建立上。因為學生未來學習工作過程中可能遇到的程序設計語言的種類和數量是無法預計到的,而不同的編程語言在語法細節上多多少少存在各種差異,唯一沒有差異的就是隱藏在各種程序設計語言背后的編程思想。也就是程序中的數據必須以不同類型長度進行存儲(數據類型)、現實中的任何問題都可以抽象為三種邏輯結構(選擇,循環,直到)、為了問題的解決可將大問題拆分成若干小問題(函數)等等這些在任何程序設計語言中都通用的思維方式[5-6]。因此,程序設計的教學,首先就要引導學生正確理解與體會到以下的編程思想并且建立必要的編程技能:
(1)分而治之的理念:為了清晰描述現實生活中的問題尤其是大而復雜的問題時,往往需要通過將大問題切分成小問題的方式來解決。如何將一個完整的大問題分割成若干個既獨立又可以互通信息的小問題,是為了提高程序的編寫效率與正確率的必要手段。實際上,分而治之的理念再往下延伸就是組件化與模塊化。即,通過編程課程的教學,要讓學生養成清晰的編程習慣,要將各個功能相對獨立的代碼分開編寫,而不能所有功能代碼都混到一起,降低代碼的可讀性和復用率。而且從這個理念出發,還要學會用“搭積木”的方法來解決實際問題,即在自己的程序中調用現有的功能模塊,站在前人的基礎上提高問題解決的效率和正確率。
(2)三種邏輯結構解決任何問題的理念:程序設計語言中,順序結構、選擇結構、循環結構是三種基本的邏輯結構。雖然現實生活中的很多問題看上去千頭萬緒而且曲折復雜,但是這些復雜的流程都可以通過程序設計語言中的這三種基本邏輯結構的合理組合來表達出來。普通人群在解決這些問題時的思維方式往往帶有一定的模糊性,并且缺乏嚴格的條理性。而編程課程則需要教會學生將模糊的“人類思維”轉變成條理清晰結構嚴謹的“機器思維”流程,從而將千頭萬緒的實際問題用這三種邏輯結構的組合抽象并描述出來。
(3)調試代碼的能力:代碼調試是程序設計中的一個重要環節,也是被一些程序設計初學者忽略的地方。在編程課程中,除了培養學生撰寫可讀性強、擴充性好、易于復用的優質代碼的編程習慣以外,還有一個重要的任務就是培養查找程序中的錯誤、修改錯誤的調試能力。在以往的教學中經常可以發現學生面對程序錯誤束手無措,只會叫老師幫忙解決的現象。而對于一個合格的編程人員來說,修改程序中的語法錯誤、查找程序中的邏輯錯誤,都是必備的能力素質。因此引導學生自己調試程序也是編程課程中的一個重要環節。
(4)查找資料、甄別資料的能力:程序設計語言的發展具有速度快、種類多、更新迅速的特點,因此在學習編程的過程中不能閉門造車。尤其是在教學過程中建立了模塊化程序設計的理念之后,需要具有查找并借鑒前人優秀資料及代碼的能力。另外,除了知道去哪兒查資料、怎么查資料,還需要培養學生鑒別資料的能力。即在眾多良莠不齊的文獻中,能迅速找到自己所需要的高質量的資料。這些基本技能的培養不僅助于學生綜合素質的提高,而且也是學生以后進入職場的必備。
非指導性教學具有一些基本的特征和原則:(1)極大的依賴于個體的自身成長,需要通過自身的努力,克服各種障礙。不以直接教授為主要手段,而應該通過某些方法使學生的學習得以容易地開展。比如誘導學生獨立思考、澄清問題、幫助總結討論后的結論等。但整個過程中應該讓學生處于主要位置,教師只起到輔助作用。(2)學生是以維持自己的構造或是強化自己的構造心理來學習的,因此要注意在真誠、理解、接受的氣氛中用“同化”來影響學習的過程。(3)教師不應該主要教學生怎樣學,而應該提供學習的資源和手段,創造學習的氣氛,然后由學生自己決定怎樣學。也就是說,在非指導性教學方法中,教師并不是指導者,而是顧問。
落實到程序設計課程中,非指導性的教學方式就可具體化為以下幾種方式:
(1)開放性的命題。用編程手段解決某一個具體工程問題,一般來說,其方法本身就是不唯一的。也就是說,同樣是解決這一個問題,不同的人寫出的程序都不會完全相同。因此,教師在編程課程中應該多使用這些處理方案不唯一,也就是“開放性”的命題來讓學生解決,鼓勵學生百花齊放,采用不同的方案。
(2)以團隊為單位解決問題。除了前期的一些基礎簡單問題,到了程序設計課程的后期,應該特別強調團隊合作解決問題的方式。這首先是因為當學生進入社會后會發現幾乎所有的軟件的開發工作都不可能是由某一個人獨立完成的,而是由一個團隊來進行的,所以極有必要在校期間就培養學生如何進行團隊合作、了解團隊不同分工之間的溝通方式等。其次,以團隊為單位解決問題也有利于創造互相學習的氛圍,激勵學生的自主與互助,符合非指導性教學方式的原則與初衷。
(3)比較式的評價。當學生就開放性的命題提出各種不同的編程解決方案后,教師應該組織引導學生通過對比來認識各種編程方法和解決方案的優劣,而不能簡單地以“對”和“不對”來進行評價。對于程序來說,效率高、復用率高、移植性好、擴展性好等等特點往往是不能兼得的,而且不同的應用場合對這些程序特點的側重需求往往也是不同的。因此可以將學生寫出的這些程序進行一定范圍內的比較,引導他們認識哪種應用場合應該采取哪種解決方案。而且在對比和評價的過程中,應該讓學生不受束縛、毫無顧忌地發表觀點進行討論,就算討論沒有結論也不重要,因為探索的過程本身就已經讓學生進行了創造性的學習和研究。
本文從實際教學的經驗出發,針對目前國內在程序設計課程中存在一些問題,在教師自身對程序設計教學的理解以及非指導性教學方法在程序設計課程中的應用方式這兩方面,對如何在程序設計類課程中引入非指導性教學法進行的闡述和探討。本文工作對實際教學及相關方面的理論研究均有重要的參考價值。
[1]吳啟迪.“非指導性”教學思想下的課堂教學模式研究 [D].哈爾濱:哈爾濱師范大學,2012.
[2]張曉英.淺談羅杰斯的“非指導性教學”模式[J].和田師范專科學校學報,2006,26(2):67-68.
[3]周川.簡明高等教育學[M].南京:河海大學出版社,2002.
[4]沈顯生.教師備課規范化要求探討[J].中國大學教學,2009(1):79-81.
[5]譚浩強.C程序設計[M].北京:清華大學出版社,2010.
[6]蔡學鏞.編程ING:人人都能學會編程設計[M].北京:電子工業出版社,2012.