樓軼超
摘 要: 針對C語言實踐教學中存在的問題,提出將軟件工程思想引入C語言課程設計的教學改革中。以項目任務為主線,按照軟件工程方法分組、分階段地實施課程設計。實踐教學過程中強化學生的計算思維訓練,采用實踐任務表驅動和階段性驗收方式培養學生自主學習能力,從而提高C語言程序設計實踐課程的教學質量。
關鍵詞: C語言課程設計; 實踐教學; 軟件工程思想; 計算思維
中圖分類號:G642 文獻標志碼:A 文章編號:1006-8228(2015)12-105-03
Study on teaching reform of c language experiment based on software engineering idea
Lou Yichao
(College of Information & Electronic Engineering, Zhejiang Gongshang University, Zhejiang, Hangzhou 310018, China)
Abstract: To address the problems of traditional C language experiment teaching, this paper presents some suggestions adopting the software engineering idea for teaching reform of C language curriculum design. Following the project tasks, students are grouped and perform the experiment in several stages according to the software engineering lifecycle. During the teaching process, the training of computational thinking is emphasized, and practice task list driven and phased acceptance method are used to cultivate students' autonomous learning ability. Based on these reformations, the education quality of C programming practice course can be efficiently improved.
Key words: C language curriculum design; practical teaching; software engineering ideas; computational thinking
0 引言
目前,計算機技術的快速發展、普及和應用極大程度地推動了計算機教育的發展。C語言程序設計作為計算機基礎教育中的一門重要課程,已經成為全國高等院校工科各專業學習計算機程序設計的一門基礎課程,提高其教育質量對培養學生的編程思想和編程技能至關重要。
C語言是程序設計的啟蒙性語言,也是學習數據結構、JAVA語言程序設計和軟件工程等計算機類其他重要課程的前趨課程。作為一種抽象的且實踐性很強的語言,它具有數據類型繁多、語法結構復雜等特點,這些特點給教學帶來一定的難度,上機操作實踐成了鞏固和熟練掌握課堂知識的一個必不可缺的環節。實踐教學效果的好壞直接決定著學生對C語言學習的效果,以及能否調動學生對程序語言學習的能動性。因此加強C語言實踐教學環節,可以為后續的其他計算機類課程的學習奠定良好的基礎,而且,從長遠來看,也符合社會對高素質工程應用型軟件人才培養要求。
1 實驗教學中存在的問題
C語言程序設計課程的教學指導思想應是以應用為目的,重點培養學生分析和解決問題的能力,提高學生的動手能力。根據幾年來在本學院網絡工程專業開展C語言教學效果來看,現有的實踐教學尚存在一些薄弱點,主要表現在以下方面。
⑴ 注重單一的語法練習。語法練習的案例為訓練學生熟練掌握某個或某幾個語法點而設計,其程序簡單,代碼量少,通常僅有一個main函數,學生常通過死記硬背的方式去記憶語法點和語法規則,極易失去學習興趣,并且,少量的幾行代碼不能同時覆蓋多個知識點,這會導致學生不能把各知識點有機地結合起來融會貫通。
⑵ 驗證性實驗較多。驗證性實驗是一種鞏固知識的再現式教學模式,過多的這類實驗使得不少學生養成程序運行時一出現預期答案就終止實驗的習慣,不利于培養學生的程序測試意識,致使其分析錯誤和調試能力差。
⑶ 缺乏計算思維的培養訓練。計算思維的培養應該是計算機基礎教學方面的一項核心任務[1],但由于近年來網絡工程專業常以通過全國計算機等級考試為目標,等級考試的擬題形式直接導致了學生對編程的認識局限于代碼的填空、寫出程序運行結果等諸如此類的形式,而對算法缺少整體上的認識,更談不上從多角度、多方位嘗試用不同的方案、不同的算法來實現程序功能。
⑷ 評價方式單一。傳統的實驗教學采用隨機指導方式,在學生提出問題的情況下進行解答指導,評價僅以最后的實驗作業為依據,評價方式過于單一,學生中易出現抄襲現象,不能反映教學效果。
2 教學改革措施
針對實踐教學環節的薄弱點,我們在傳統理論課結合實驗課模式的基礎上,進一步開設C語言課程設計這一綜合性設計實驗課程,承上啟下的實現教學銜接。
2.1 教學內容改革
社會的發展需要創新能力佳、實踐能力強的復合應用型人才,因此,C語言課程設計的內容改革首先在選題上就要符合以應用為導向這一教學目標,而不能局限于通過計算機等級考試。在開展教學過程中,進一步融入軟件工程思想,強化計算思維訓練。
選題上,以一個小而完整的軟件開發項目貫穿整個課程教學過程,克服驗證性實驗存在的與實際應用脫節問題。C語言作為程序設計的入門語言,考慮到學生尚不熟悉軟件開發的流程,項目選擇以貼近生活的信息管理系統為主,例如電話簿管理、宿舍管理等。這類系統開發項目能覆蓋多個知識點,尤其是覆蓋數組、鏈表、指針、結構體等重點內容,也具有一定的可擴展性,可以引導學生逐漸從簡單功能實現向較難的功能實現過渡。例如信息管理系統的基本功能點是對信息的錄入和讀取,在此基礎上根據學生的能力和完成進度,可以逐漸添加一些功能點,如各種查詢、排序,或進一步加入文件處理以保存信息。這樣就形成了知識鏈條,由淺入深地擴充并覆蓋到教材中各個重要的知識點。
一個小而完整的項目具備一定規模的代碼,C語言又是一種理想的結構化語言,在這種結構化程序開發的教學過程中,需要提前向學生滲透軟件工程思想,潛移默化地熏陶學生養成良好的軟件開發習慣。內容上,引入模塊化設計思想,模塊代表一個小的完整的功能點,用增量方式逐個實現,介紹相對容易理解的瀑布模型,針對每個需求獲取分析、系統設計、開發、測試等幾個階段布置具體任務,讓學生提前接觸軟件開發過程,糾正學生在沒有分析清楚需求就急于寫代碼的習慣,而測試時適當引入一些簡單的黑盒測試方法,例如邊界值法等,避免學生測試的隨意性。
C語言涵蓋了語言和方法兩方面的內容,方法指算法設計和使用計算機語言描述算法的過程[2]。算法可以說是程序的靈魂,而從學生的反饋來看,計算思維的訓練尚存在很大不足。計算思維是運用計算機科學的基礎概念去求解問題、設計系統和理解人類行為的能力,在2006年被提出并明確定義以來[3],逐漸成為計算機教育的新要求,在2010年首屆“九校聯盟計算機基礎課程研討會”上提出把培養學生的“計算思維”能力作為計算機基礎教學的核心任務[4]。算法的學習是一個不斷積累的過程,需要將計算思維的培養貫穿始終。以數據排序為例,可以讓學生對不同的數據結構(數組或鏈表)、不同算法的選擇進行優劣分析,增加數據量或運行次數進行測試,讓他們對計算復雜度有直觀的了解,激發起學習興趣。
2.2 教學方式改革
C語言課程設計以項目任務為主線安排教學步驟,借鑒翻轉課堂教學模式,分為課內實驗和課外兩個階段學習,分組合作,采用階段性驗收方式,以實踐任務表為驅動,促進和提高學生自主學習的能力。
自主學習是一種學習者在總體教學目標的宏觀調控下,在教師的指導下根據自身條件和需要制定并完成具體學習目標的學習模式[5],是我們C語言課程設計的一個重要的教學目標,翻轉課堂思想可以有效地幫助實現這一目標。翻轉課堂作為一種新型教學模式,近年來得到了越來越多的教師的關注。它是以學生為中心,課后學習,課堂上集中精力完成練習以及和教師同學交流[6]。借鑒于此,C語言課程設計的課外學習階段安排查找或觀看跟實踐任務表中問題相關的資料和視頻,課內則集中時間進行實驗。
課堂實驗采用項目分組方式,每組至少3人,并推選一位組長負責組內協調和階段匯報,要求每個項目組按照軟件工程方法進行需求分析、總體設計、詳細設計、編碼和測試。需求分析階段可以實行角色扮演方式,將組內部分人員放在用戶的位置上,采用面對面訪談方式進行需求獲取。在總體設計階段,要求根據自頂向下、逐步求精的模塊化設計思想,拆解為若干個功能單一、相對獨立的子模塊,根據每位學生對現有知識的掌握程度及編程水平進行任務分配,尤其要引導學生注意模塊間數據的傳遞和接口設計問題,減少使用全局變量,提高程序可維護性。詳細設計階段則要求學生多方位思考程序的實現途徑,對于稍微復雜點的必須先給出詳細的算法流程圖或偽代碼,然后進行編碼,將其映射為編程語句,以促進計算思維的培養。編碼和測試沒有明確的界限劃分,要求學生邊編碼邊進行單元測試,這個過程中要求學生學會看編譯出錯信息,掌握調試技術,例如VC斷點調試、單步跟蹤等技巧,觀察內存變量值的變化等。這樣一方面可以糾正學生原先那種與書上源代碼校對來查找錯誤的方式,另一方面可以提升對知識點的理解,尤其是通過在調試窗口觀察程序的動態運行過程來深入理解指針和鏈表問題。編碼階段完成部分測試后,還需要將各模塊功能集成到系統中進行測試,該過程中,向學生引入簡單的等價類劃分和邊界值測試等方法,避免學生測試隨機性和重復性。
信息時代的教學模式應以啟發學生探究為主,教師則是學習的指導者和幫助者,引導學生思考存在什么問題,可以用什么方式解決,而不是直接說明怎么解決。學生是學習的主體,為激發學生自主學習的熱情,C語言課程是設計采用實踐任務表驅動和階段性的驗收方式,引導學生課外學習按照自主的節奏一步一步有序學習。學生經過課堂實驗,梳理歸納出實踐任務單,任務單包含課堂碰到的一些編程問題,以及教師給學生留下啟發式的思考題。階段性驗收以小組進行,以小組為單位匯報進度或發表意見,與教師進行面對面交流,測評實驗問題解決方案。這樣鼓勵學生在課后有針對性的自主發現和解決問題,課后去查找資料,獨立思考,從而實現從“做中學”到“學中思”的過渡。
課程設計結束后,采用答辯方式進行考核,分為小組考核和個人考核,每組用15分鐘左右進行項目演示、功能介紹和總評,個人考核則以過程性考核為主,依據其所實現功能點的數量、在項目合作中發揮的作用,對調試操作的熟練程度等多個方面的指標進行。這樣就做到考核方式多樣化,而不單純以實現結果來衡量,從而能在全方面督促學生進步,也加強了學生良好的團隊意識和合作精神的培養。
3 結束語
本文探討了網絡工程專業教學改革的具體措施,在本院實踐表明,實際項目的開發能很大程度上提高學生的學習興趣,加深知識點的理解,分組分階段的項目開發方式培養了學生的團隊協作能力,增強了學生的軟件工程意識,而通過任務驅動的課外學習方式,學生的學習自主性和解決問題能力都有了較大的提高。為了能夠滿足社會對應用技術型人才的深層次需求,我們還需要在今后的實踐教學中繼續探索新的改革方案,以期達到更好的實踐效果。
參考文獻(References):
[1] 何欽銘,陸漢權,馮博琴.計算機基礎教學的核心任務是計算
思維能力的培養—《九校聯盟(C9)計算機基礎教學發展戰略聯合聲明》解讀[J].中國大學教學,2010.9:5-9
[2] 杜恒.C語言程序設計(理實一體化教程)[M].機械工業出版
社,2011.
[3] Jeannette M.Wing. Computational Thinking [J].Communi-
cations of the ACM,2006.49(3):33-35
[4] 九校聯盟(C9)計算機基礎教學發展戰略聯合聲明[J].中國大
學教學,2010.9:4,9
[5] 謝飔羽.自主學習及大學生自主學習能力培養[J].中小企業
管理與科技,2009.3:122
[6] 張金磊,王穎,張寶輝.翻轉課堂教學模式研究[J]. 遠程教育雜
志,2012.4:46-51