郭強強
摘 要|隨著計算機技術和知識的普及,非計算機專業與計算機專業在程序設計方面的差距逐漸縮小,計算機專業的程序設計課程改革勢在必行。詳細分析了高級語言程序設計課程建設的背景以及課程的主要問題,從教學目標、實驗環節、教學內容、考試改革等方面提出了課程改革方案。
關鍵詞|程序設計;教學改革;高級語言
程序設計是計算機專業學生的基礎課程,程序設計能力是計算機專業人員, 特別是軟件工作者的重要專業基礎能力,C 語言是目前計算機專業工作者的第一語言。在計算機技術尚未普及的時候,掌握 C 語言的基本語法和語義,能夠使用 C 語言編程,就足以使計算機專業的學生在專業知識和技能方面明顯區別于非計算機專業的學生。然而,隨著計算機技術和知識的普及,越來越多的非計算機專業的學生也在這一層次和深度上掌握了 C 語言的知識和運用能力。與此同時,計算機專業在高級語言程序設計的教學方面依然采用原來的教學內容和教學方法,在程序設計知識的深度和廣度以及編程語言的運用能力方面沒有大的進展,導致計算機專業學生與非計算機專業學生之間在這方面的專業能力差距逐漸縮小甚至消失。計算機專業學生所完成的程序在程序結構、程序的可靠性、可維護性、可擴展性、程序的時空效率,以及程序的風格和可讀性等方面與非 計算機專業學生的程序差別不大,而非計算機專業的學生,由于其或者具有較 強的抽象思維能力,或者具有相關應用領域的背景,因而可能在程序的算法選擇、易用性,以及功能的完備性等方面具有更好的表現。
1??? 高級語言程序設計課程建設的背景
隨著計算機技術的迅速發展和日益普及,越來越多的高校畢業生涌入計算機技術及應用產業,特別是軟件產業。這些人中不僅有計算機專業的畢業生, 也有諸如數學、電子、自動化、機械等其他大量的理工科專業的畢業生以及部分文科專業的畢業生。在與這些非計算機專業的學生的競爭中,計算機專業的學生并未表現出明顯的專業優勢。相反,有些非計算機專業的學生由于具有本身的專業知識和訓練,在一些應用軟件的研發領域表現出了更強的適應性和競爭力。造成這一現象的原因多種多樣,其中重要的一點就是,計算機專業學生所掌握的一些知識和技能,特別是一些基礎專業知識和能力,缺乏專業性的深度和廣度。從學校教育的角度來看,可以說計算機專業學生所學的一些專業課程和專業基礎課程沒有為學生提供足夠的專業知識和訓練,是一個不可忽視的因素。高級語言程序設計課程就是這樣一門在專業性方面有待加強的專業基礎課程。
2??? 高級語言程序設計課程的主要問題
造成上述這種情況的原因,從教學方面看主要有 5 點:(1)課程定位不明確;(2)高級語言程序設計課程的教學內容偏窄偏淺;(3)教學方法不適當;(4)實驗考核手段落后;(5)學生對學習內容和方法不適應。
2.1 教學目標和指導思想
長期以來高級語言程序設計這門課程定位不明確,目前的教材或二級考試中使用的一些例題和習題,側重于語法細節,與實際的程序設計能力相距甚遠, 究竟是教語言還是教編程,是注重知識還是能力的培養?由于對專業能力的培養重視不夠,導致與非計算機專業教學的區別不明顯。另外對課程的實踐性重視不夠,對書本知識過于偏重,實際知識運用的訓練較少、較淺。
2.2 課程的教學內容
高級語言程序設計在教學內容上偏重于語言本身,在程序設計方面注意不夠。教學內容以語言要素為主組織教學,著重介紹語法、語義、語句以及簡單的應用舉例,講解過于強調語言的知識點,如 for 語句,while 語句、switch 語句的格式、算術、條件、邏輯表達式的計算、自增自減運算的不同寫法、變量的存儲類別、變量生存期等。講解了各種語法規則,但學生抓不住重點,不會將紛繁的知識點融會貫通。由于缺少較深入討論程序設計的內容,缺少對語言運用能力培養和訓練的內容,使得該課程成了一門思維游戲課,學生學到是只是語法,并沒有掌握結構化程序設計的思想和方法,沒有具備通過編程解決實際問題的能力。
2.3 教學方法
課程的目標是培養學生分析問題和運用程序設計語言解決實際問題的能力。該課程對編譯原理、數據結構、算法分析、軟件工程等后續課程的學習有重要 的影響,程序設計的邏輯思維直接影響到計算機專業學生在大學學習期間的學 習方法。但在課程教學過程中未能充分認識到高級語言程序設計是一門實踐性 很強的專業基礎課,高級程序設計通常混同于一般的理論課教學,因而在教學 過程中重視概念的講解而忽視概念的運用,重視知識的講授而忽視對能力的培 養,實踐環節重視不夠。
2.4 練習和考核手段
在練習和考試中,由于缺少必要的技術手段,難以提供實際程序設計練習的機會和條件,因此多采用書面方式,缺少對知識靈活運用的練習題,缺少專業性編程基礎的練習題,缺少對程序實際運行的檢驗。這樣,一方面使得學生很難把注意力集中到提高實際的程序設計能力上面,另一方面也使得教師在評判學生的練習和考試答卷時面臨巨大的工作量和難度,因此只能盡量多出一些選擇題、填空題等標準化試題,對于少量的程序設計題,也只能更多地注意學生答案的基本思路是否正確,是否有明顯的錯誤,而很難判斷學生的答案是否可以在計算機上運行,是否可以滿足題目的各項要求,產生正確的結果,以及程序在風格和結構上是否合理等。這樣也從另一方面引導學生把注意力更多地放在對一些基本概念和語言要素的學習上,而忽視了對程序設計能力的鍛煉和培養,因此教學質量難以把握和提高。
2.5 學生方面的問題
從學生學習的角度看,也存在對學習內容和方法不適應的問題。大多數的學生從小學到中學,已經適應了記概念、背知識點、應付書面考試的學習模式, 對于靈活運用所學的知識去分析和解決問題,缺乏必要的訓練,因此不具備這方面的能力。當學生第 1 次接觸程序設計課程時,依然會沿用原來的思維模式和學習方法。特別是當程序設計教學仍然是以程序設計語言本身為主、以概念為主、以書面教學為主時,就更會強化學生原有的思維模式和學習方法,把這門課程當成以概念和知識點的學習為主的理論型課程,忽視了對各種實際能力的培養。因此,很多學生盡管在書面考試中的成績尚可,但是在實際的程序設計能力方面普遍偏低,即使是百行以內的簡單程序也很難在較短的時間內正確地完成,更談不上具有較為專業化的程序設計能力了。
3??? 課程結構和組織
為使學生通過編程語言的學習掌握程序設計的能力,養成良好的程序設計習慣,并在分析問題和解決問題的能力上得到培養和鍛煉,需要在課程的教學內容和側重點上進行必要的調整,在教學方法上進行必要的改進,在實驗和考核的手段上進行必要的革新,在教學過程的組織和安排上與其它相關課程更好地協調。
3.1 以程序設計能力的培養為目標
根據課程的指導思想制訂了新的教學大綱和課程安排。新的教學大綱明確了本課程的基本教學目標是培養學生良好的程序設計能力和習慣,掌握運用編程語言的知識和能力,為學生進一步全面掌握專業化的程序設計知識和能力打下基礎。
新的教學大綱以程序設計能力的培養為主線,根據循序漸進的原則安排相關的課程內容和進度,根據學生的知識水平和學習過程中的認知規律,把整個教學內容分為 2 個有機結合又相對獨立的階段。第 1 階段教學內容以培養學生的基本程序設計能力為中心,第 2 階段的教學重點以培養學生的專業程序設計能力為中心。
3.2 加強實踐環節的設置
其次應當認識到,程序設計課程是一門實踐性很強的專業技術課程。要鼓勵學生多讀典型程序,認真思考算法,自己編寫并上機調試程序,通過調試程序來發現語法錯誤,檢查邏輯錯誤,從而提高編程能力。程序設計的知識和能力不是僅僅通過書本知識的學習就可以掌握的。只有加強實踐環節,通過理論學習與實際編程練習相結合的方法,讓學生在失敗和成功的實踐中深入體會, 通過自己的經驗積累才能真正理解書本上的知識,切實掌握實際運用的能力。因此,在課程教學的過程中不僅要重視理論教學,重視教學內容的設置,也要重視實踐環節的設置,重視為學生提供具有及時監控和反饋環節的實踐環境。這樣不僅可以使學生深入理解和掌握程序語言的知識和運用程序設計語言的能力,而且可以培養學生良好的理論與實際相結合的意識和習慣,提高學生分析問題和解決問題的能力,提高學生學習的積極性。通過上機練習使學生進一步熟悉 C 語言的語句和語法規則,不斷深化理解各種不同的數據類型、結構化程序設計的基本思想。為此要增加必要的上機時數,以及必要的編程題目數量和難度,做到課堂教學與編程練習相結合。
3.3 教學內容詳略得當、重點突出
在高級語言程序設計課程的教學內容和側重點上需要進行必要的調整,注重知識點的取舍,講授的角度和深度符合學生的知識水平和認知規律,與編程密切結合,優化教學內容。把教學的重點從編程語言本身轉移到程序設計的思路和方法,以及運用編程語言進行程序設計上來,把講授語言的概念轉變為講授語言運用,把對概念的講授由抽象的分析和講解轉變為通過實例和經驗對概念的學習。以往常規的程序設計教材和教學方法主要是以編程語言教學為中心,圍繞著編程語言本身進行。課程以變量、表達式、語句、程序結構、數組、指針、結構等編程語言要素為單元逐一講解相關的知識點,而只把實際的程序作為說 明編程語言要素的示例。為培養學生的程序設計能力,教學內容應當圍繞程序 設計的思想和方法進行組織,把編程語言作為講解程序設計的工具,在講解程 序設計的思想、方法和步驟的過程中,根據程序描述的需要,本著由簡到繁, 由淺入深的原則,逐步講解編程語言中的知識點,將編程語言要素貫穿于結構 化程序設計的順序、分支、循環 3 種結構之中,通過地址將數組、指針、函數 3 者有機聯系起來,使得紛繁的知識點形成一個完整、統一的知識體系。例如在 初學階段對于一些不常用或非關鍵的內容如編譯預處理、輸出格式涉及的數制 轉換、宏替換、指針函數、二級指針、變量的存儲類別與生存期等都可以不講, 今后在計算機組成原理、數據結構的課程中會學到數制轉換、位運算、鏈表等 復雜的數據結構。通過與其他課程的銜接,在多門課程的反復學習過程中編程 水平會呈螺旋式上升。
3.4 考試改革
在課程的考核環節,應該以檢驗學生的實際程序設計能力為主,關鍵概念為輔。采用“筆試 + 上機考試 + 課程設計”三位一體的方式。對于語言的語法細節和使用方式,則不應單獨作為考核的題目,而應該與對程序設計能力的考核有機地融合在一起。例如應當避免表達式求值、(*p)-- 自增自減運算、判斷題、改錯題、概念問答題這類關注語言細節的題目,上機考要求學生按指定的題目編寫程序、調試、運行程序得到正確結果,課程設計由學生自選一些有實用性的題目,分組完成,或組織參加一些程序設計競賽,這樣才能夠引導和鼓勵學生真正把學習的注意力集中到程序設計的能力培養方面,從而改變讀書、背概念、應付考試的學習模式。這種考核方式最大程度上發揮了學生的自學能力和主動性,是實現創新性人才培養的途徑。
4??? 小結
由于高級語言程序的重要性,通過該課程培養學生良好的程序設計的知識和能力,理論聯系實際的習慣,自學能力,分析和解決實際問題的能力,為后續的專業課程奠定了基礎。
參考文獻
[1]尹寶林.C 程序設計思想與方法[M].北京:機械工業出版社,2009.
[2]張基溫.組織學生參加計算機統一考試該不該叫停[J].計算機教育, 2004(9):268-269.
[3]蘇丹丹,孟祥銳,褚麗娟.高校非計算機專業 C 語言程序設計課程四位一體教學模式研究[J].長春師范學院學報(自然科學版),2008,27(5): 129-132.
Analysis of Computer Teaching Reform
Guo Qiangqiang
Northeastern University, Shenyang
Abstract: With the popularization of computer technology and knowledge, the gap between non-computer majors and computer majors in programming is gradually narrowing. The program design curriculum reform of computer majors is imperative. This paper analyzes the background and main problems of the course construction of advanced language programming in detail, and puts forward a curriculum reform plan from the aspects of teaching objectives, experimental links, teaching contents and examination reform.
Key words: Program design; Teaching reform; A high-level language