汪曉妍,黃鮮萍,夏 明,胡海根
(浙江工業大學 計算機科學與技術學院,浙江 杭州 310023)
隨著全球一體化的加快,我國的高等教育步入快速發展階段。由于國際影響力的增強,越來越多的國際學生來中國接受高等教育,來華留學生教育已經成為我國高等教育的重要組成部分和建設國際一流大學的重要基礎與保障[1],是教育是否開放、學術交流能力是否活躍的重要標志。教學工作作為留學生工作的關鍵環節,其質量的好壞關系著我國國際聲譽的維護和留學生事業的發展。
招收國際本科留學生和培養來華留學生,目的是讓他們成為適應國際競爭和符合國際需求的專業人才,培養他們獨立解決問題的能力和創新能力。隨著留學生數量的增加,留學生的國別、母語、宗教信仰等方面存在諸多差異,同時留學生的基礎參差不齊,留學生教學對教學內容的設計以及教學的技巧和管理提出了很高的要求。
國際留學生計算機專業本科教學的根本目的是培養學生的計算機應用與編程能力[2]。然而,留學生與國內學生在基礎、文化、語言等方面存在較大差異,現有的教學方式在留學生教學過程中遇到了諸多問題,因此亟須根據留學生特點,對現有教學方式作針對性的改革以切實提高教學質量。
計算機程序設計課程是計算機相關專業課程中最重要的基礎課程,其目的是培養大學生程序設計以及系統開發的能力,同時培養學生的思維和動手能力。程序設計大型實驗課程則針對已修程序設計基礎C和C++程序設計課程的本科學生開設。實驗中,需綜合運用過程化、對象化和面向對象編程方法解決實際問題,學習大型程序的開發過程和相關技術。然而,目前國際留學生的程序設計大型實驗授課過程中存在以下問題。
(1)留學生編程基礎普遍薄弱,而大型實驗綜合性實踐性強、知識點分散、難度大。雖然留學生有先修的語言課程知識,但是技術普遍不夠熟練,往往對于大型的程序開發感覺無從下手。
(2)教師與留學生之間存在語言隔閡,而大型實驗課程無獨立的課堂教學時間,學生難以在短時間內理解實驗重點和難點。目前教師一對多的教學結構很難保證在項目實踐過程中對每名學生進行詳細指導,而留學生缺乏自我分析和解決問題能力,遇到困難往往難以自己解決,難以按期按質完成實驗任務。
(3)類似于其他留學生課程,文化差異在大型實驗課程中也有非常明顯的體現,導致難以按照中國學生的授課方式進行教學。海外留學生的基礎不同,文化也不同,對課程有著自己不同的意見和觀點。在不滿意課程進度時,學生往往比較散漫,缺課甚至不提交作業,從而導致無法有效考核其實驗完成情況。
綜上所述,以上問題導致留學生在大型實驗過程中疲于應付,甚至產生厭學、教學低效等現象,迫切需要研究適應于留學生教學的新理念和新方法,提升教學質量。雖然目前已有學者對計算機程序設計教學的方法進行了探索[2-4],但是由于留學生的特殊性,還無法很好地滿足留學生教學的需求[5]。目前對于留學生程序設計大型實驗的教學方法還缺乏相關探討。
任務型教學法最早應用于語言教學[6],追求把語言運用的基本原理轉化為具有實際意義的教學方式,體現了以學習者為中心的教學理念[7]。計算機語言是一種擴展意義上的語言,通過一套計算機能夠理解的數字、字符和語法規則組成的指令或語句,控制計算機進行工作。與自然語言學習類似,計算機語言的學習同樣需要大量的鍛煉,在實際運用中提升對于語言運用的熟練程度。為了克服留學生對現有教學方式難以適應,導致程序設計大型實驗效果欠佳的問題,我們提出任務模塊化教學方式。
首先,將大型的實驗任務分解為小型的相互關聯的模塊,將實驗重點和難點提煉到各個模塊中,這樣可以避免學生突然接觸到大型問題后無法下手的問題;引導學生進行問題分解并逐個解決模塊中的小型關鍵問題,即使學生的編程基礎較差,也可以通過逐個解決各個模塊中的問題,逐步完成整個大型實驗任務。
其次,通過大型實驗任務的模塊化分解,教師可有針對性地對每個小型模塊的重點和難點進行講解,并且通過圖形化等手段對重點和難點進行形象化描述,從而有效避免語言隔閡對于教學效率的影響。
最后,通過引導學生分階段遞進式地完成模塊化的實驗內容,可有效避免因留學生缺課、不交作業而難以對其進行考核的問題;引導學生逐次提交模塊化實驗內容的作業,從而實現對學生進行過程化考核,降低留學生的管理難度,并有利于教師及時跟進指導。
整個程序設計大型實驗項目的設計可采用任務模塊化。首先,從項目的選型上選擇具有清晰模塊需求的項目,從設計的角度將系統設計成為模塊松耦合的組織方式;其次,將一個完整的項目分解成相對獨立的模塊,依據所需要的知識點和難點,給予每個模塊相對較完整的目標任務書和參考資料,并適度分階段給出問題的解決思路;最后,對于部分基礎薄弱的學生,對部分難度較高的模塊提供范例程序框架,讓學生在讀懂和理解程序框架的基礎上添加或修改代碼,以完成實驗要求,并逐步引導學生獨立完成每一個模塊任務的開發,最終搭建成為整個系統。
以實驗內容為設計一個萬年歷為例,首先將其分解為3個軟件開發階段:設計階段、實現階段和測試階段,并對每個階段進行任務模塊分解,以覆蓋需求分析與數據結構、業務邏輯與算法、軟件工程這3個方面的學習和訓練。設計階段的任務模塊分解在時間軸上進行,包括需求分析、概要設計和詳細設計。該階段的任務模塊分別要求學生根據總體目標分析軟件需求并給出具體功能,根據軟件功能設計總體框架和功能模塊,并進一步細化所需要的數據結構、數據結構間的交互關系等;引導學生把現實的需求抽象成程序設計的語言,以面向對象的方法,把需求準確地表達出來并進行系統設計。實現階段的任務模塊分解則根據詳細設計給出的數據結構進行,要求學生每次實現一個所設計數據結構的業務邏輯。對于基礎較差的學生,可以提供參考程序框架,在框架內進行功能實現。該項目的業務邏輯中包含對分支、循環等基本編程要素的運用以及對常見的數組、鏈表等數據結構的使用,從多個角度對學生編寫具有一定算法邏輯程序的能力進行訓練。在程序測試階段,引導學生對每個所完成的數據結構進行黑盒或白盒測試,并對整個軟件的功能進行集成測試。在此基礎上,模塊鼓勵學生對現有的程序進行擴展和優化,實踐軟件工程中有關軟件生命周期的相關理論,學習如何應對需求變更、對已有的程序項目進行有效的維護、進行代碼優化和問題跟蹤、進行測試用例的設計等,以提高學生對軟件開發流程的整體認識。
圖1 所示為一個典型的萬年歷設計與任務模塊分解示意圖,其中,前序任務模塊的結果作為后繼任務模塊的基礎,在設計階段將整個軟件分解為Calendar、DateTime、Event等多個數據結構,并在實現和測試階段進行分別實現和測試,最后進行集成測試。整個任務被分解成多個子任務,通過引導學生完成單個子任務,并對每個子任務學生的完成情況進行及時檢查和指導,可以提高留學生程序設計大型實驗的效率和效果。

圖1 任務模塊化分解
任務模塊化的程序設計大型實驗的關鍵在于分模塊進行有效的課堂指導,對此,可以采用支架式策略,并適當運用范例法開展教學輔導。整個基于任務模塊化的課堂指導執行流程如圖2所示。
有效的任務模塊化課堂指導要求根據每個任務模塊的階段目標,設計有針對性的指導內容和反饋方式。在設計階段,主要提供給學生軟件工程和設計模式方面的參考資料,輔導時則結合典型的設計模式案例對學生的設計方案作針對性指導;在實現階段,主要提供給學生典型數據結構和算法實現設計甚至范例源代碼,輔導時則針對學生代碼中的錯誤和不合理之處結合范例作針對性指導;在測試階段,主要提供給學生軟件測試教材以及自動化測試軟件使用說明資料,輔導時則主要針對學生測試用例覆蓋完善程度和測試輸入輸出結果合理性作針對性指導。
分模塊進行課堂設計和輔導極大地增加了教師負擔,為了任務模塊化的設計能夠更好地得到執行,可對學生進行分組。如果沒有將整體任務模塊化,就很難考查學生進度并進行有效分組,而任務模塊化由于任務模塊逐步給出并不斷考核,因此可以有效考查學生進展,選擇進展較快的學生作為組長,負擔部分指導組內學生的任務,從而在保證教學效果的情況下,降低教師負擔。筆者嘗試了一種在教學進展過程中動態分組的方法,在學期先不進行分組,在完成1~2個任務模塊后,視進展情況,在30人左右的班級中選擇5~6名任務模塊完成情況好的學生作為組長,并讓其自由選擇同學作為組員,形成5~6個小組;組長負責將本組實驗進展和問題向指導教師匯報。其次,為進一步保證對學生的充分指導,在進行實驗課時,需要1~2名研究生助教進行輔導,這樣一次實驗,2個班級60人左右,分10個左右的實驗小組,由3名教師和研究生助教指導,基本保證了每個留學生在整個開發過程中都能得到及時和足夠的提示和幫助。在具體指導過程中,每名教師或助教負責3~4組,而教師可以更多地關注各組組長,檢查其實驗內容,對組長進行提問。每組在實驗過程中碰到問題多時,由組長收集向教師提出。根據問題出現的頻率,教師可選擇集體解答或直接向提問的學生解釋。
以往實驗課考核主要根據最終的實驗代碼和實驗報告的結果進行總結性評價,這種方式很難全面反映學生實驗過程的真實情況。引入任務模塊化有利于引入形成性評價機制,對于任務模塊進行階段性、遞增式的考核,因此需要設計新的適應于任務模塊化設計的考核方式。
基于任務模塊化的考核設計關鍵在針對任務模塊子目標設計有獨立、有針對性的評價方式。教師可從兩個角度對學生完成任務模塊的方式進行評價。一方面是客觀完成情況,以詳細設計為例,重點考查設計模式運用、數據結構接口設計是否合理,能否實現概要設計階段定義的模塊功能;再如模塊實現,重點考核正常和非正常邏輯是否合適處理、數據結構運用是否高效等。模塊測試重點考核是否完整測試所有正常和非正常輸入的場景,是否進行了壓力測試,是否實現自動化測試。另一方面,情感、動機以及社會交互也是影響學習的極為重要的因素。因此,在進行基于任務模塊化的考核評價設計時,需要考慮多種因素對學生的實驗準備、實驗過程和實驗結果同時進行綜合評價。其中,對于實驗準備成績,可以參照組長實驗報告準備情況、回答問題情況等方面確定該組成員的基本成績。實驗過程成績通過實驗運行情況、回答教師問題情況、選做部分完成情況、有“獎”類實驗完成情況等方面進行評定。每個任務模塊結束前,教師根據學生情況,對每組學生給出差別成績并告知學生,學生如有不同意見,可以及時反映,進行修正。對于實驗結果部分的成績,可以從實驗報告規范完整情況、實驗結果分析情況等方面進行評定。
如上所述,任務模塊化的引導式教學方式可以貫穿在整個程序設計大型實驗教學過程中,這種教學方法的引入,能夠極大提升留學生應用計算機程序設計語言進行實踐和開發的能力。
發展留學生教育教學工作,是我國教育國際化的一個重要方面和必要途徑。總結留學生計算機程序設計教學的優勢和特點,思考它所面臨的新問題,認真開展留學生教育教學的研究和探索,建構具有中國特色的國際計算機專門人才培養平臺,具有極其重要的意義。
程序設計大型實驗對于留學生來說是運用計算機語言進行規模化開發的第一次實踐,知識點分散、難度大,對于留學生來說尤為困難。借助任務模塊化的新教學方式,將大型實驗完整任務依據知識點和難點分解為多個任務模塊,并按照任務模塊設計實驗內容、課堂指導方案和考核方法,引導學生逐步完成大型任務,既有獨立的針對性建設,又結合各自需求聯合優化,可以很好地解決留學生教學效率低、難以管理等問題。
[1]趙奇棟. 國際化對留學生招生培養工作的挑戰及應對[J]. 經濟與社會發展, 2017(2): 81-84.
[2]尹鴻峰. 面向對象程序設計(C++)教學方法探討: 類的概念及應用的引入[J]. 計算機教育, 2017(5): 82-84.
[3]高枚, 龔沛曾, 孫麗君. 構建多層次思維培養的C/C++程序設計教學[J]. 計算機教育, 2016 (1): 81-83.
[4]郭銀章, 王麗芳. 基于項目任務驅動的C語言程序設計課程教學改革與實踐[J]. 計算機教育, 2017(2): 41-44.
[5]郭玲, 何新. 面向留學生的VC++程序設計課程建設與教學實踐[J]. 課程教育研究, 2016(8): 244-245.
[6]李廣鳳.任務型教學的形成、引進、探索和趨勢[J]. 課程·教材·教法, 2015(9): 108-116.
[7]李云鳳. 淺談職校計算機教學中的任務型教學[J]. 課程教育研究, 2017(3): 143-144.