摘要:程序設計能力是計算機類專業(yè)的基本能力,也是檢驗計算機類畢業(yè)生是否合格的標準。針對目前計算機專業(yè)中各門課程教學相對獨立、缺乏課程間有機銜接的現(xiàn)狀,本文提出一種軟件工程環(huán)境下的C程序設計課程教學模式,即通過C語言來講述程序設計,并將程序編寫與軟件工程原理的闡述有機地貫穿在一起,以期增強學生的專業(yè)學習興趣,提高學生整體的程序設計能力和社會競爭力。
關鍵詞:C程序設計;軟件工程;混合式教學;雙語教學
計算機和數(shù)學被看成是各個學科最重要的工具,同樣,編程和算法也成為一種基本的技能。程序語言是程序員間、程序員與機器間交互的媒介。隨著程序越來越復雜,程序必須遵循某種準則開發(fā)才能更好地被他人、其他程序或機器更好地理解,才能更好地演化為符合某種特定目標的軟件[1]。
目前我國的計算機專業(yè)課程體系都是按照CC2001的框架制定的。CC2001是IEEE/CS和ACM為了規(guī)范和促進大學計算機學科教育所制定的教學體系。CC2001的指導思想是計算機學科的課程應由4個專業(yè)方向部分,即計算機科學、計算機工程、軟件工程與信息技術交織組成。作為計算機科學的第一門課程——CS101程序設計基礎,其要求是介紹過程式程序設計的基本概念,內容包括數(shù)據類型、控制結構、函數(shù)、隊列、文件、運行機制、測試和調試;并對計算機科學作為一門學科進行了概述[2]。
C程序設計作為我院計算機專業(yè)的第一門專業(yè)基礎課程,其扮演角色的重要性不言而喻。它是后續(xù)眾多專業(yè)課程的基礎。但目前專業(yè)教學中存在這樣的問題,各階段課程教學相對獨立,缺乏課程間的有機銜接,程序類課程教學中重視語法結構和案例,很少能從程序設計的基本方法和思想進行引導,學生只能照樣畫瓢,缺少抽象思維、邏輯思維能力,難以編程解決實際問題。我們希望在學生掌握程序設計過程中激發(fā)起學生的軟件工程興趣。
針對這個問題,本文提出了一種兩點并行的流程教學模式——軟件工程環(huán)境下的C程序設計教學模式,即通過C語言來講述程序設計,并將程序編寫與軟件工程原理的闡述有機地貫穿在一起,期望起到事半功倍的效果。
1C語言透視圖
C語言是一種復雜而專業(yè)的計算機語言。如果將語言放在一個透視圖中,學生由此能理解它的設計,這樣,C就不是一種難懂的語言了。我們在實際課堂教學中,打破原先程序設計課程順利講授的方式,將課程內容按軟件工程體系結構的要求邏輯重新組合。讓學生通過透視全局的方式快速進入獨立程序設計狀態(tài)。
課堂教學以程序設計為中心組織內容,采用“案例引導,問題驅動”的描述方式。案例基本上來源于生活工作中的實際問題,較大程度地激發(fā)學生的學習興趣。另外,在前兩章內容中先簡要介紹程序設計的基本思想以及利用計算機求解問題的過程,然后從實例出發(fā),介紹順序、分支和循環(huán)3種控制結構以及函數(shù)的使用。從第3章開始,再分主題逐步深入講解程序設計的思想和方法,以及相應的語言知識。改變以前從一開始就進入C語言的語法學習,學生覺得枯燥乏味和教學低效的問題。讓學生形成“算法比程序更重要,思想方法比知識更重要”的貫穿整個專業(yè)學習過程的思維宗旨。
2 “混合式教學”觸發(fā)器
混合式學習(blended learning,BL)是傳統(tǒng)面對面的課堂學習方式和數(shù)字化學習兩種方式的有機整合,其本質是強調教師的主導作用和學生的主體地位。它與傳統(tǒng)學習相比優(yōu)勢在于:不僅局限于對書本知識的簡單記憶,更多的是對知識的深度理解和擴展,以及多方面能力的提升;既要發(fā)揮教師引導、啟發(fā)、監(jiān)控教學過程的主導作用,又要充分體現(xiàn)學生作學習過程主體的主動性、積極性與創(chuàng)造性[3]。
教師的教學靈感就像是觸發(fā)器,在教學過程中要合理有針對性的釋放,盡可能大地挖掘學生的學習欲望和潛力。我們在課堂教學的具體實施過程中應用混合式學習的理念,精心設計各部分課堂教學的課程導入、活動組織、學習支持、教學評價4個教學環(huán)節(jié)。如圖1所示。
這里以C語言函數(shù)這一知識點的第一堂課內容為例,描述整個課堂教學過程,教學目標如圖2所示。
所采用的主要教學手段,有以下5個部分。
1) 課程導入:利用前期課程中的實驗案例引入新課概念。舉例引入“斐波那契數(shù)列之前是用循環(huán)實現(xiàn)的,現(xiàn)在采用函數(shù)該如何實現(xiàn)?”
2) 角色扮演:通過角色扮演的游戲方式,讓學生體會程序設計思路。同時感性地理解函數(shù)基本概念和函數(shù)構成的三要素。
3) 紙面模型:用“紙面模型”法的實物演示形式將抽象思維具體化。模擬函數(shù)參與程序后的整個流程。同時引入軟件工程中的三個相關知識點:結構圖,函數(shù)的復合以及自頂向下的開發(fā)的講解。
4) 團隊合作:分組完成一個隨堂項目“在給定的函數(shù)中挑選合適的完成——學生成績統(tǒng)計程序”的微型案例。強化記憶。
5) 互評機制:學生互相評價。教師總評與總結。
同時,在課堂教學中多媒體教學與黑板教學并用,課件與程序運行環(huán)境并用。部分例子,有時也不一定是一個完整的例子,只是相關知識點的幾行代碼,在課堂上邊講邊編邊運行,讓學生邊聽邊“消化”,并尋找時機進行提問,實現(xiàn)教學互動。引導學生針對問題構思框架,進入設計的細節(jié),使用特定的描述方法,如流程圖。最后使用計算機語言體現(xiàn)設計思想。
3軟件工程環(huán)境的映襯
在每一章節(jié)的結尾部分,我們都安排軟件工程原理的討論。在這里討論的目的當然不是代替獨立的軟件工程課程,是想將基本的軟件工程原理引入早期的學習中,學生能更好地為以后正式參與項目開發(fā)做好準備,同時起到一個承上啟下的銜接作用。更重要的是,一開始就將邏輯簡單清晰、易讀易懂作為程序編寫的一個重要標準,學生就不需要在以后被強迫忘卻壞習慣并重新學習。他們能在以后的課程中更好地理解軟件的涵義,了解軟件開發(fā)的過程。
盡管軟件工程內容重點講解出現(xiàn)于每一章節(jié)的末尾,但最好在每章一開始就先介紹,然后再在每章結束時對課程講授中所展示的軟件工程原理進行小結。因此,我們掌握的一個原則就是,在軟件工程環(huán)境的映襯下,發(fā)揮C語言講解的主導作用。
還是以函數(shù)這一章節(jié)為例,知識點的講授順序如下圖3所示[1]。
4實踐出真知
“Do it”才能夠“Understand it”。C程序設計課是實踐性極強的一門課程。只有通過在機器上編寫代碼,體現(xiàn)出把實際問題轉換為計算機處理過程,理解計算機的“思維”方式,才能夠激發(fā)學生的學習積極性和學習熱情,同時通過編程產生一種“實現(xiàn)”的成就感。
我們在課程中引入綜合性設計類實驗的內容,設計6個左右的主題實訓作業(yè),其中安排3個有完整系統(tǒng)功能需求的任務,要求學生綜合應用所學的知識,分析、設計、編碼和測試完成自己的設計并撰寫一份符合模板要求的報告文檔。
1) 分層次設計主題作業(yè)。
在實際教學中,我們發(fā)現(xiàn)學生編程能力有較大差異。因此,6個主題實訓作業(yè)按難度設置成3組(難度高、中和低,設置不同的考核得分),難度低的提供的參考資料(分析、算法和部分程序段)較多,這樣使得層次低的同學也能完成作業(yè)。
2) 培養(yǎng)團隊合作精神。
對于難度最高的主題作業(yè),鼓勵學生每2~3人組成項目小組,小組成員共同選擇題目,商討編程方法和具體分工模塊。單人獨立完成的項目,可培養(yǎng)學生對一個小型的功能相對完整的軟件項目的理解能力和分析能力。而多人小組完成的項目,可培養(yǎng)學生的項目管理能力和團隊協(xié)作精神。
5雙語補給
英語是計算機的“母語”。在實際教學過程中我們發(fā)現(xiàn),沒有一定的英語基礎已成為學生深入學習程序開發(fā)的“絆腳石”。首先,它反映在專業(yè)課程中,如果不重視這部分基礎補給的話,接下來就會給一系列專業(yè)課程帶來不良影響,其中就有軟件工程。換句話說,如果能在程序設計學習過程中讓學生形成比較好的英語氛圍,這將對學生的整個專業(yè)學習起到相當積極的作用。但學生的英語基礎參差不齊,就每個學生個體來說,各項英語素質也是高低不等,可能詞匯量不少,但聽說理解能力較差。因此,我們認為給學生進行雙語補給,不等同于英語專業(yè)課程的要求。在這里,英語是一個配角的角色,不可缺,但也需要我們教師有的放矢的引導。
課程常規(guī)教學中,引入雙語。在初期的代碼講解過程中,要有一定比例的時間鎖定在雙語講解上,例如關鍵術語的講解,代碼編譯錯誤的具體解釋等。這些往往也是后續(xù)課程必須用到的專業(yè)詞匯。
課后布置一定量原版書籍的翻譯作業(yè)。讓學生在指定的原版書籍中,每周任選一頁進行翻譯,定期教師檢查評估。指定原版書籍為經典書籍Programming in C(中譯名為C語言程序設計)和Software Engineering (中譯名為軟件工程)。通過這樣的翻譯練習,有助于學生原汁原味地理解知識點,有時這樣的原味理解更直接更深刻。
鼓勵學生閱讀一些專業(yè)外文期刊的最新學術論文,以跟蹤國際相關研究動態(tài),開拓學生視野。
以上三點是對全體學生的要求和具體實施方案,對于專業(yè)上比較高的自我要求的學生以及到了高年級后還可以引導他們做如下的拓展:
1) 結合已有知識與見識,廣泛閱讀國外論文。
2) 通過開發(fā)類的外文文檔學習專業(yè)英語。
3) 深入國外專業(yè)論壇進行交流學習。
4) 經常光顧國外大學、研究機構的相關專業(yè)網站。
5) 研究閱讀國外開源軟件的開發(fā)類、方法類等文檔。
6) 網上聽、看國外專業(yè)學術講座與報告。
7) 國外開放課程在線。
6結語
C語言程序設計課程是計算機專業(yè)一門非常重要的基礎課程,對學生的信息化素質培養(yǎng)至關重要,因此,應對本課程進行教學改革意義重大。通過在該課程教學中融入軟件工程的思想,把老師積累的工程經驗傳遞給學生,能夠開闊學生的思維和眼界,動手實踐能力也能得到了成倍的培養(yǎng)。將這兩門課程的核心部分有效結合與銜接,這樣的改革值得深入研究和進一步推廣。
參考文獻:
[1] Behrouz A Forou