


摘要:針對高校計算機相關專業C程序設計課程教學質量不高的問題,提出以構建和完善學生知識系統為核心的框架式教學法。該教學法根據學習過程中的認知特點,在重構教學內容的基礎上,將教學過程分為2個階段,第1階段通過核心知識的講授幫助學生形成簡單知識框架,第2階段通過反復接觸、穿插教學的方式幫助學生不斷豐富和完善該框架,最終完成整個課程的教學。
關鍵詞:C程序設計;教學法;認知
0 引言
C程序設計是高校計算機相關專業的核心課程之一,課程教學質量對學生專業水平和后續課程學習有顯著影響。由于受到諸多因素制約,該課程教學效果一直不理想,如何提高教學質量成為高校相關專業教學過程中面臨的問題。
造成現狀的原因有學生的專業基礎薄弱,教學時間偏少等客觀因素。除此之外,教師在教學內容組織和教學過程安排等方面的問題也是導致教學質量不高的重要原因。
C程序設計的教學目標是了解、理解、掌握和C語言程序設計相關的知識,具備運用C語言解決實際問題的能力。該目標的實現涉及知識、教學和實踐3個方面的內容。
在傳統C程序設計課程教學過程中,知識被分解成若干完整且相對獨立的單元,教師針對每個單元開展集中教學,最終完成整個知識體系的教學工作,我們將它稱為積木式教學法,具體情況如圖1所示。
積木式教學法的缺點顯而易見,首先,學生學習單一知識點的時間短,因此學習壓力大。其次,教學過程中對知識進行串聯和重復教學的時間少,不利于學生系統性地認識和掌握知識。再次,由于“指針”、“結構體”、“文件”等知識通常被安排在最后進行教學,時間有限,而客觀上這些知識又需要較多教學時間,因此教學效果不理想。最后,這樣的安排容易使教學過程變得枯燥、乏味,導致課堂氛圍差,學生開小差的情況多。
在教學過程中,知識同時扮演著作為領域的知識和作為學習對象的知識2種不同的角色,二者在內容上基本一致,但組織結構上卻存在較大差異。前者只考慮領域本身的特性,后者必須兼顧領域特征和學習者認知規律2個方面。積木式教學法之所以難獲得理想的效果,主要原因在于教學過程中忽視了學習者的認知規律,沒有對知識結構和教學方法做相應的調整。
針對積木式教學法中存在的問題,文章提出C程序設計課程的框架式教學法。該教學法在充分考慮學生認知規律的基礎上,對知識進行重組,先讓學生形成關于C程序設計的簡單知識框架,然后不斷豐富和完善該框架讓學生形成完整的知識體系。
框架性知識包含了C語言程序設計過程中涉及的大部分內容,但每部分內容只包含其中最基礎、最關鍵的部分。例如,數組部分只包含一維數組,函數部分只包含函數的基本要素和基本形式,具體情況如圖2所示。
和積木式教學法相比,框架式教學法的教學過程呈現出螺旋式、循環往復的特征。例如,在學期中期引入指針的概念,在后續相當長時間內,通過陸續引入指針和數組、鏈表、函數指針等概念不斷強化學生對指針概念的認識,最終完成對這一概念的教學。
1 知識重構
知識重構是在領域知識基礎上,根據學習者的認知規律,對知識的組織方式進行調整,以降低學習難度,提高學習效率的過程。
1.1 學習過程中的認知特點
學習是一個從“不知道”到“知道”,從“不會”到“會”的過程,這個過程具有明顯的階段性特征,完整的學習過程大致分為以下幾個階段。
(1)接觸階段:這是一個非正式學習階段,通常無需考慮學習效果,目的只是對所學內容建立大致印象,學習者在這個階段比較自由,甚至可以完全憑個人喜好選擇學習內容。教材的概述或導論部分主要為這個階段的教學服務。
(2)弱知識體系階段:在這個階段,學習者逐漸在大腦中形成所學對象的大致輪廓,并逐漸脫離先前對目標對象一無所知的狀態。學習者在這個階段往往會產生較多的興奮點,形成主動完善知識輪廓并將其清晰化的內在沖動。這個階段需要幾周甚至幾個月的時間才能真正完成。
(3)知識體系的豐富和完善階段:在這個階段,學習者大腦中的知識拼圖不斷被完善,并逐漸變得清晰和完整。
(4)強知識體系階段:學習者對所學對象形成了系統化的知識體系,對其中的主要概念有了較為清晰、準確的認識,能夠比較自如地運用所學知識。
學習過程具有明顯的重復性,漸進性特征。計算機科學是數學的一個分支,大部分概念對初學者都比較抽象,需要經過反復接觸、思考、實踐才能真正理解。因此,教師在教學過程中應盡可能為學生多提供機會,讓他們反復接觸、揣摩和實踐所學內容,以幫助理解和掌握。
學習過程本身是一個知識系統化的過程,存在著對知識的系統性認識需求。知識系統不僅有助于學習者從宏觀上把握學習對象,還有助于對知識細節的學習。因此,讓學習者盡早建立知識的系統結構,有助于提高教學質量。
此外,學習過程中還存在一些傾向性特征。新鮮的、容易的、吸引人的或與自身相關的內容往往更容易引起學習者的興趣,也更容易被掌握。因此,教學過程中有意識地做一些調整,能對教學效果帶來較大的改觀。例如,將第1個C語言程序從顯示“hello world”改成顯示卡通的字符圖形等。
1.2 教學內容重構
針對學習過程中的認知特點,我們對課程知識進行重組,教學內容被分成框架基礎知識和擴展知識2部分。框架基礎知識是構建系統性認知框架的必要內容,包括基本概念和主要知識點的基礎部分;擴展知識則是對基礎知識框架的豐富和完善。
框架基礎知識和擴展知識的劃分不以知識點作為基本單元。同一知識點,可能一部分內容屬于基礎知識部分,另一部分內容則屬于擴展知識。例如,函數的基本概念、簡單調用屬于基礎知識,而遞歸函數、帶參main函數、函數指針等內容則屬于擴展知識。建立最簡單知識框架需包括以下內容。
(1)計算機系統結構:處理器、存儲器和I/O設備在程序運行中扮演的角色。
(2)最簡單的程序:程序基本框架。
(3)基本數據類型:3種基本數據類型、變量、地址、指針等基本概念。其中地址和指針只是提及并不做深入介紹。
(4)基本算術運算和I/O:簡單算術運算和printf、scanf語句。
(5)程序控制結構:選擇結構只介紹if語句,循環結構只介紹while語句。
(6)函數基本概念:函數組成要素、基本形式、函數定義和調用。
擴展知識讓學生對具體知識點的認識更深入、更準確,這部分知識被分成2個階段進行教學,其中第1階段的知識包括以下內容。
(1)程序控制結構:switCh語句、for語句,選擇/循環嵌套,多種控制結構復合語句,程序跳轉(break、continue)等。
(2)函數:遞歸函數、帶參數的main函數、指向函數的指針等。
第2階段知識包括以下內容。
(1)常量類型,靜態數據類型。
(2)特殊運算符::?運算符、自增自減運算符等。
(3)復雜數據類型:聯合、枚舉類型等。
(4)文件操作:文件指針、多種輸入/輸出方式。
(5)宏定義,類型定義(typedef)。
(6)多維數組。
(7)位操作。
這種組織方式使知識點在教學過程中呈現條狀,而不是塊狀特征,某些數組、指針等較難理解的概念被提前引入,并在此后直至課程結束的很長一段時間里反復教學。這種安排的優點在于學生接觸單一知識點的時間被拉長,使他們有更充分的時間去消化這些知識;學生對基礎知識的掌握更扎實,進而促進他們對高階知識的學習;由于知識安排本身具有循序漸進的特點,因此課程的教學難度得以降低。
2 框架式教學過程
在知識重構基礎上,教學過程被分為2階段。第1階段講授形成認知框架所需的關鍵知識,幫助學生建立對課程知識的系統認知,這階段約占整個教學時間的1/2-2/3左右。第2階段通過對知識點的深入講解和拓展,豐富和完善學生的認知結構,這部分約占整個教學時間的1/3-1/2左右。
2.1 建立知識框架
框架式教學法第1階段的教學涵蓋了簡單程序控制結構,函數概念,指針、地址,文件基本概念和操作,計算機系統,程序概念,基本數據類型,基本I/O大部分知識,但是經過重構,這些知識點在廣度和深度上都大為降低。例如數據類型部分只介紹3種基本數據類型,程序控制結構部分只講解最簡單的if語句和while語句,for語句、do…while語句以及break/continue的使用都被移至后一階段講解。
這階段對學生的要求也有所變化,我們不要求學生完全理解所有內容,而是讓他們從宏觀上搞清楚C程序設計是怎么回事,包含哪些內容,可以做哪些事情等,同時讓學生獲得關于基本概念的感性認識。學習難度的降低有助于保持學生的學習積極性,使他們容易從學習過程中獲得成就感和滿足感,促進他們進一步學習其他內容。授課進度的加快一方面能促進學生思考和自學,另一方面也容易保持新鮮感。
由于缺乏相關專業知識背景,學生在學習過程中會普遍遇到專業術語理解困難的問題。在教學的第1階段,由于學生在較短時間內接觸到大量專業概念,因此這類問題表現得更為突出。針對這一問題,我們一方面花費大量時間和精力用于具體教學手段和方法的設計,例如動畫、圖形、文字多種形式綜合講解,引人大量類比和比喻等;另一方面將概念和實例相結合,多次重復講解以幫助學生理解。
2.2 螺旋式的教學過程
框架式教學法的教學是一個呈螺旋式上升的過程,具體過程如圖3所示。課程主要知識點會在不同的時間進行多次、分層次的講解。對于重要知識點,第1次講解比較簡單,讓學生建立初步印象,后面的講解會不斷深入,側重知識點的理解和掌握。
螺旋式的教學過程更多地體現在函數的高階知識(遞歸函數,帶參數的main函數)、多維數組、鏈表等系統性知識的教學中,位運算、宏定義等非系統性知識比較零碎,內容也不多,其教學過程不具備螺旋式特征。
與傳統積木式教學法相比,新的教學方法比較符合學習過程的重復性、漸進性特征。學生通過多次接觸、學習同一知識,對知識的認識從易到難逐漸深入。
2.3 課內實驗
為了配合新教學方法,課程實驗被分為基礎性實驗和提高性實驗2部分。這2部分在內容上有重疊,但是在深度和難度上存在明顯差異。學生在第1階段教學過程中完成基礎性實驗,這些實驗相對簡單,以體驗為主,目的是讓學生理解知識點相關基本概念,建立感性認識,學生只要正確理解相關概念就能完成。提高性實驗需要學生經過認真思考才能解決。以“函數”為例,基礎實驗只安排函數定義、聲明、調用方面的簡單問題,而進階實驗則安排遞歸函數、函數與數組的結合等相對復雜的問題。在時間安排上,提高性實驗在所有基礎實驗完成之后進行。目的是讓學生對大部分基本概念都有初步認識之后再著手解決相對復雜的問題,這樣既有助于學生主動尋找不同知識點之間的聯系,交叉運用,又有助于學生加深對各知識點的理解。
3 教學輔助措施
對課程內容的重構和教學方式的調整是框架式教學法的核心,但是教學質量的提高還有賴于輔助手段的調整和優化,現就主要教學輔助措施的調整做詳細的說明。
首先,為了輔助日常教學和實驗,我們根據初學者的認知特點,設計了1套完整的示例程序,與其他例程相比,具有以下特點。
(1)簡單易懂。例程的設計以方便學生閱讀和理解為基本原則,盡量減少甚至避免出現技巧性代碼。如編寫分支型程序時盡量使用if……else結構,少用“:?”之類的運算符。
(2)針對性強。例程中不包含容易引起誤解,或難以理解的代碼。如第1個C語言程序中有意刪除了#include語句,main函數的返回值類型也設置成void類型,目的是讓學生把注意力集中于核心代碼,防止無關代碼對學習造成不必要的干擾。
(3)問題典型,貼近生活。選擇和學生日常生活比較接近,或容易被接受的領域問題進行講解,如閏年判斷、身份證信息處理、圖書館管理系統設計等。
此外,新的教學方法對學生的學習態度有更高的要求,強調學生的自主學習,要求學生有較強的學習積極性和主動性。為了幫助學生改進學習方法,提高學習效率,我們在上課過程中明確要求學生采用聽課、模仿、閱讀、思考、交流和實踐等多種方法進行學習。
4 教學實踐分析
通過針對不同年級、不同層次學生的反復實踐和比較,新的教學方法從提出、嘗試到定型歷時約7年,和傳統積木式教學法相比,框架式教學法的優勢體現在以下幾個方面。
(1)提高了課程教學質量。新教學方法實施之后,學生不僅能更扎實地掌握基本知識和基本概念,對數組、函數、指針等重難點知識的掌握情況也得到明顯提高,同時,學生的獨立思考和動手能力都有較大程度的提高。
(2)擴大了講課范圍。新教學方法提高了教學效率,一些原本因時間所限難以詳細介紹的內容(如指針、結構體和文件等)能夠講解得更深入、詳細。一些原本沒有時間講解的內容(如帶參數的main函數、指向函數的指針等)也能在課上進行講解。
(3)挖掘了優秀學生的潛能。新教學方法為學生提供了大量自學機會,經過半學期左右的鍛煉,少數優秀學生能通過自學掌握剩下的大部分知識。
(4)保護了學生的學習興趣。新教學方法降低了課程學習難度,減少了學生學習過程中的挫折感,保護了學生的興趣。
從實踐過程中我們發現,框架式教學法的實施效果受學生的學習態度影響比較明顯。在這種教學模式下,學習態度好的學生無論在知識的掌握程度還是在能力的提高方面都比積木式教學模式培養的學生有更好的表現。但是對于學習態度不好的學生,框架式教學法的優勢并不明顯。
5 結語
和傳統積木式教學法相比,框架式教學法提高了課程教學質量和效率,培養了學生自主學習、獨立思考和解決問題的能力。該方法不但適用于C程序設計課程的教學,對其他課程,特別是程序設計語言類課程的教學也有借鑒意義。目前,該教學方法仍不完善,有待進一步改進。首先,第一階段的內容組織和授課進度安排還需要進一步完善,如何根據教學情況,特別是學生學習情況,動態調整教學內容也需要進一步研究。其次,該方法受學生的學習態度和學習習慣影響比較明顯,如何在教學過程中提高和保持學生的積極性、主動性和興趣,幫助學生養成良好的學習習慣是今后需要解決的問題。最后,該教學方法目前還缺少教材支持,與其配套的教材仍在編寫過程中。