周曉燕
(蘇州外國語學校,江蘇蘇州 215011)
A-level(General Certificate of Education Advanced Level)課程是英國劍橋考試中心(CIE,Cambridge International Examinations)的金牌課程體系,以其國際權威性為許多國內高中出國班所采用。A-level課程包含70多門科目供學生選擇。A-level課程的學制一般為兩年,第一年稱為AS-Level;第二年稱為A2-Level。課程的考核被設置為四次考試,第一年前兩次考試通過,獲得AS-level證書,第二年再通過后兩次考試,獲得A-level證書。
我國信息技術課程的相關內容為A-level中的兩門課程,涵蓋計算機應用(Computing)和應用信息通訊技術(ICT,Applied Information and Communication Technology)。其中Computing課程的內容包括計算機原理、軟件應用、計算機編程、數據結構、軟件工程、網絡、數據庫等方面。顯然算法與程序設計部分的教學內容對應于Computing課程中的相關內容,同時這部分內容也是Computing課程的重點所在。
Computing課程在使用編程語言方面和中國差別很大,教學大綱中不指定編程語言。與之對應,考試中的相關試題或要求使用偽代碼和流程圖來描述算法,或由學生使用任意一種自己掌握的語言來做答。教材中,AS-Level部分沒有使用具體的語言,A2-Level部分使用 Pascal語言作為范例,但教材中并沒有專門的章節來學習Pascal的語法。此外,在大綱相應的教學指導中,不建議選用可視化的編程環境。
事實上,Computing的教學大綱不指定編程語言,并非不做要求。恰恰相反,需要教師幫助學生自主選擇,掌握一門甚至多門高級語言。教材中用Pascal的程序作為例子來講解問題,也并非要求學生一定就要掌握Pascal,相關參考書所使用的語言也并不相同,但可作為參考或自學時用。
Computing課程中,數據結構的內容相對全面且深入,很多算法,例如遞歸、遍歷、排序都是結合特定的數據結構提出和講解的。內容包括表、鏈表、棧、隊列和(二叉)樹。
Computing課程主要講解瀑布模型,屬于軟件工程的內容。我國的教材中這部分內容也占了相當的比重,但并沒有在考核中體現。而Computing的第四次考核,就是要求學生自己選題,完成一個實際開發項目,考查學生在完成項目過程中的每個步驟并分步評分,程序編寫僅占比30%。從Computing教材來看,很多知識點都在這部分內容中詳細敘述。例如可行性分析和需求分析、用戶界面、接口設計、軟件測試的原則和方法等。
特別需要強調的是,在開發過程中,文檔寫作被尤其看重,也是考核的評分依據,包括分析文檔、技術文檔、測試文檔、開發記錄甚至代碼注釋等方面。
綜合教材和大綱要求,Computing課程中和算法與程序設計除了上文涉及的相關內容,還包括如下方面:
a.教材從匯編語言開始講述計算機語言,然后是高級語言,再到邏輯語言。其中對匯編語言和邏輯語言分別單列一章做了詳細的介紹。例如匯編部分,包括處理器的結構、指令格式和尋址方式三個小節,并有多個匯編程序的講解。
b.通過和面向過程編程方法的對比,講述面向對象編程。通過程序實例(Pascal)解釋類和對象的基本概念。
c.教材結合操作系統,講述文件系統、I/O控制、內存管理的基礎知識。
d.此外,按照大綱的要求,還簡單介紹了并行計算、網絡計算機等先進技術。
客觀地說,中外課程的差別主要是由信息技術課在高中學科體系中的地位不同造成的。Computing雖然是70多門供選擇的A-level課程之一,但是一經選定,其地位就相當于高考課程。而現階段,我國的信息技術課的內容受課時限制,深度取決于會考要求。所以不可能照搬A-level的教學模式。他山之石,可以攻玉,Computing課程的許多做法和經驗都能給我們有價值的啟示,加以吸收借鑒,并用于教學實踐,提升教學效果。筆者在如下三個大方面對自己的教學進行了探索和改進,取得了理想的效果。
對于程序設計中一些重要的原理概念,學生往往由于局限于按部就班地學習一種計算機語言(VB)的編程,對其比較模糊,需要由教師指出并重點講解。
例如算法和語法的區分。Computing課程在 AS-level階段脫離具體的編程語,用偽代碼或流程圖講算法,這樣算法和語法的區分不言自明。但這樣的教法在我們的課堂上采用還不現實,筆者在教學中采取了幾個變通的措施:①直接講解算法和語法的分別,并把Computing的教學方法介紹給學生。②嘗試對某些知識點 (比如循環或選擇)只講解算法,語法由學生自學。③在分析學生程序錯誤的時候區分語法錯誤和算法錯誤。
再如 “程序=數據結構+算法”這一著名公式所表達的思想。因為我們沒有像Computing課程那樣系統學習數據結構的內容,所以普遍的情況是學生對數據儲存方式在程序中的重要地位不明確。筆者在教學實踐中,嘗試通過舉例來講解如果數據結構不同則算法不同這一基本概念。例如同樣是順序查找,數據儲存為一維數組和二維數組算法上就有區別,前者用一層循環即可,后者需要循環嵌套。
Computing課程內容廣泛,這當然需要更多的課時。但如果我們教師仔細挑選內容,認真組織語言,利用少量的課堂時間給學生介紹一些相關知識技術完全可以做到,而這對學生是非常有益的。通過研究,筆者挑選了一些比較重要同時也容易講清楚的知識點補充給學生。例如可視化編程、機器語言和高級語言 (編譯器的作用)、編程方法和操作系統的關系等等。這些知識在Computing課程中都是教材內容,筆者的課堂講述很大程度上就是對Computing教材內容的重新組織和提煉。
其中,可視化編程的概念筆者覺得尤為重要,因為我們的學生一開始學習語言就是VB的編程環境,他們不知道非可視化編程是個什么樣子,甚至沒有程序從何處開始(入口)、到何處結束的概念。對此可由教師在課堂上編寫運行一個命令行的程序讓學生有所認識。
這項工作是模仿了Computing考核的方式,但意義重大。我們是教學生做題目還是做項目,是編代碼還是編軟件。當然在學習初期都是前者,但后者才是最終的目的。事實上,這項教學實踐也對應了我國教課書第五章的內容。這個教學環節,讓學生親自動手所產生的效果和講解一遍書本差別很大,況且現在很多學校教師對這部分內容是讓學生自學的。
筆者在課程后期和學生共同選題,通過任務驅動的教學方法,讓學生分組完成一個簡單的項目,并借鑒Computing做法,要求學生做好文檔記錄,并將其和程序編寫共同作為評判依據。
雖然很多項目本身非常簡單,有的是結合數學物理等課程,編寫軟件實現一項特定的計算;有的就是模仿我國教材內容,對班級學生的各類信息進行數據采集并做簡單處理。“麻雀雖小,五臟俱全”,從需求分析到可行性分析、從方案設計到模塊設計、從編程到測試、從軟件維護到二次開發,學生只有完整地經歷一遍,才能對軟件開發的含義有所體會,知道程序的編寫在其中起著核心但并非全部的作用。
當然,由于各種局限,一個簡單的項目不能說明所有問題,如果有時間,參考 Computing,還可以講解諸如文檔寫作的重要性、調試測試工作在項目中的地位、瀑布模型以外其他軟件開發模型等問題。
總體而言,Computing課程中算法和編程部分的內容和教學方法與我國相比存在很大區別。“要給學生一滴水,自己要有一桶水”,那么,對A-Level Computing課程的研究和思考,首先就是充實“一桶水”的過程。
更重要的是,如何將思考的成果融入自己的課堂,最終使學生受益。應該說,上文介紹的三個方面還都是初步的嘗試,隨著課程改革的深入和高中信息技術地位的不斷提高,期望能有更多更有益的研究成果和教學創新。