- 基于敏捷開發的數據結構研究
- 黃復賢著
- 55字
- 2018-12-27 20:11:13
第1章 程序設計與敏捷廁發
我們正在通過親身實踐以及幫助他人實踐,揭示更好的軟件開發方法。
摘自《敏捷軟件開發宣言》
1.1 程序設計能力的提高是一個長期的廿序漸進的過程
計算機高等教育的目標是培養具備良好的科學理論研究素養和具有一定的系統開發能力的人才。本科生教育是高等教育的基礎,要求學生掌握基本知識、方法和技能,具有學科所要求的基本素質。這就要求我們的學生具有較高的綜合素質。但是從目前我國大學生就業后的能力與企業需求的矛盾中可以看出:一方面學生知識的體系結構過于陳舊,跟不上時代、技術的發展;另一方面,學生處理人際關系的本領太差,缺少與他人合作的能力,很難快速融入開發團隊,而團隊合作精神又是任何一個單位,特別是軟件企業積極求勝的一個重要法寶。當前我國軟件開發人才短缺,如果只重視理論學習,認為學了一到兩門程序設計語言就可以成為軟件開發人員的想法不符合高等教育的培養目標。而當前我國高等教育的現狀則是偏重理論學習,缺少綜合實踐環節,課程之間缺少銜接,缺少綜合素質與能力的培養。
計算機科學是一門充滿挑戰和發展機遇的年輕學科,而程序設計則是這門學科的重要基礎。近幾年來,隨著計算機相關技術的發展,計算機課程體系從原來的計算機科學和計算機工程擴大到計算機科學、計算機工程、軟件工程、信息系統等多個專業。計算機課程所涉及的學科專業和教學范圍正在不斷擴大,教學內容和教學過程也發生了日新月異的變化,CC2004、CC2005相繼推出,并且成為一個開放的、可擴充的、適合多專業的、整合了計算機教學相關原則體系觀點的課程體系指南。因此計算機程序設計基礎的教學也應該反映當代計算機科學技術的發展水平,與國際主流計算機教育思想接軌。
1.1.1 面向過程語言的淘汰與面向對象語言的流行
軟件開發從本質上講是對軟件所處理的問題域進行正確的認識,并把這種認識正確地描述出來。直接面對問題域中客觀存在的事物來進行軟件開發,就是面向對象,這也是人們在日常生活中的思維習慣和方法,可以說面向對象方法是軟件理論的返璞歸真。
面向對象程序設計簡稱OOP,是Object-Oriented Programming的縮寫。面向對象是與面向過程相對而言的。傳統的程序設計語言,如C語言,是面向過程的結構化程序設計語言,這種語言在20世紀80年代非常流行。隨著軟件業的發展,軟件的規模越來越大,導致軟件的生產、調試、維護越來越困難,因此而發生了軟件危機。人們期待著一種效率更高、更容易理解、更符合人類思維習慣的程序設計語言和方法,在這種情況下OOP應運而生。在20世紀90年代,OOP異軍突起,成為最有希望和最有活力的程序設計方法。
1.1.2 數據結構課程的變化對程序設計課程教學的影響
培養學生的程序設計能力是計算機專業的基本目標,這種能力的培養需要在基礎課與后繼課程中逐步實現,同時基礎課還要擔當為數據結構等后繼課程提供語言基礎的功能。因此,數據結構課程的變化也會對基礎課程的教學產生影響。
數據結構課程是計算機專業的一門核心課程,也要適應面向對象方法的要求,表面的變化表現為教材的變化,各種以過程化語言描述的版本轉向用面向對象來描述。更重要的是,在面向對象方法成為軟件開發主流的情況下,數據結構課程不論是內容還是地位都將發生重大的變化。設計模式的內容被逐步列入教學大綱,一些新的教材采用面向對象的設計模式,不僅系統全面地介紹各種傳統的數據結構,還把它們按照類和類層次的現代理念予以展開,進而達到抽象結構與實際設計的完美統一。
綜上所述,新的程序設計基礎課應該是能反映變化、適應發展的基礎課程。
1.1.3 新時期程序設計基礎課的要求
程序設計課程的目標是學習用計算機解決問題的思考方法,培養編程應用能力,而不是僅僅學會某個程序設計語言的語法規則。課程應把最核心的思想方法,即結構化方法和面向對象方法作為教學重點。對于結構化方法以順序結構、分支結構、循環結構為基礎,培養學生的基本程序設計能力;對于面向對象,以對象的抽象性、繼承性、多態性和封裝性這四個本質特征為基礎,學習面向對象程序設計的基本方法。
在此基礎上,通過程序設計的學習和對相關的理論進行學習,為進一步學習打好基礎。對于計算機的工作原理,則要求理解內存的分配、堆棧的工作原理、數據的表示及處理。要掌握數據類型、數據結構、抽象數據類型、算法及其實現等數據組織的控制理論知識;掌握程序設計方法與理論;了解軟件工程的基本知識,培養良好的程序設計風格;了解軟件工程的新的方法學、軟件生命周期、軟件開發過程、軟件測試與調試、對象建模及UML等理論,使學生通過學習,不僅培養扎實的程序設計能力,而且建立完整的程序設計知識體系結構。
程序設計能力的培養是一個長期的循序漸進的過程,僅僅依靠一門課程的教學是不可能實現的,應該是通過以語言課為基礎并與后繼課程相互融合而形成的一個程序設計能力培養體系。一個程序最終要通過程序設計語言的應用來體現,而不同的程序語言決定著不同的程序設計思想方法和技術技巧,制約著程序設計的實現能力和效率。應該通過對多種語言的學習,掌握程序設計語言的本質規律,從而培養學生的自學能力和創新能力。
1.1.4 關于教材建設的思考與探索
教材建設是教學工作的基礎建設,沒有好的教材,提高教學質量只能是一句空話。在新的形勢下,程序設計基礎課程改革與教材建設引起了廣泛的關注,教師及專家們圍繞計算機程序設計課程教學內容如何適應人才培養要求;課程結構和體系如何優化;教學手段和教學方法如何適應信息化時代要求等問題,對原有課程進行了全方位的創新與改進。
1.走出盲目跟新的誤區
隨著新技術、新工具的不斷推出,也給我們的教學帶來一些問題,一方面我們的教材跟不上發展,陳舊過時,學生沒有學習興趣;另一方面企業抱怨學生的動手能力差。但如果盲目跟新,在大部分高校當前的教學條件下,學生也只能學到表面的東西。反映在教學內容上,不是進行真正的面向對象程序設計教學,而專注于可視化、基于組件和控件的程序設計。學生的能力得不到提高,與企業期望的差距越來越大。
滿足學生與企業零距離就業的要求在一定程度上是很難的,雖然可以通過與企業的合作來逐步解決,但從本質上說,還是要求學生具備自學能力、適應能力、團隊合作能力和素質,而不是簡單地要求學生學會哪一種工具。
程序設計能力和程序設計思維的培養是程序設計課程教學的最終目的。教師應以系統化的觀點制訂每門程序設計課程的教學計劃,不同課程之間要彼此兼顧,盡量避免課程之間相同知識和類似語句、語法規則的重復講解;教師在教學過程中要以系統化的程序設計思維培養和軟件開發能力為出發點,要學生“抱西瓜”而不是“撿芝麻”,要把教學重點放在系統化的解題思路、算法設計、編程構思和程序實現上。作為一門實踐性很強的課程,必須加強案例與實踐教學,以提高學生解決實際問題的能力和綜合運用知識的能力。
2.合理安排相關課程
在明確課程性質后,筆者重新規劃了教學內容,用全部課程的三分之一學時講解基礎理論知識,其余學時則用來讓學生進行實踐和操作訓練。課堂理論教學中,一方面注意精選內容,強調課程核心是以語言為載體的程序設計方法的學習,對基礎的語法性知識和一些相關性知識不做過多介紹;另一方面采用案例教學法,如通過開發趣味程序、組織學生完成簡單信息管理系統等,提高學生的學習興趣和動手能力。實驗教學中則針對知識的把握程度逐層展開,設計了基礎與驗證型實驗、設計與開發型實驗、研究與創新型實驗三個層次的計算機案例實驗課程。其中,基礎與驗證型實驗涉及課程相關知識點,讓學生驗證、理解、鞏固并掌握基礎理論教學中要求的基本教學內容,通過編制上機實踐講義,讓學生很快熟悉開發環境,在模仿中不斷提高閱讀程序能力并設計簡單的程序;設計與開發型實驗以“任務”或“課題”形式提出實驗要求和具體的實驗成果,要求學生綜合利用所學知識設計、開發并最終完成實驗項目,在學生的組織上,有意讓學生組成團隊,結合最新軟件開發思想,培養學生的團隊合作能力;研究與創新型實驗重在培養學生的研究能力與創新意識,既可由教師設定研究題目,也可由學生自選題目,這類實驗可以沒有最終結果,但要求學生給出實驗分析與研究報告,寫出有見解的心得體會。經過幾年的教學實踐發現,實驗教學環節的深化改革確實有利于培養學生的獨立工作能力。
3.選擇和編寫符合課程內容的教材
課程內容的調整客觀上對教材建設提出了新的要求,從程序設計課程的體系結構來看,程序設計能力的培養不可能只通過學習一本教材來實現,我們有意在不同的語言類課程中各自設置側重點,通過幾本教材和輔助教材形成一個完整的體系結構。在原來開設PASCAL語言的基礎上開設Delphi,重點培養學生的代碼編寫能力和對結構化程序設計方法的認識。通過C++和JAVA課程的學習,重點培養學生面向對象的思想方法。在數據結構課程中進一步提高學生解決問題的能力,通過對設計模式的學習,使學生具備系統化的面向對象思想,提高學生從簡單的代碼書寫到大系統構架的能力。強調完整的應用系統設計思想的建立,以典型案例為依托,從具體到抽象逐步展開,力求從案例中總結出的原則、方法、經驗能反映出程序設計的一般規律,進一步啟發學生思路,促進理論學習。通過貫穿始終的大型綜合案例、課程設計的教學,讓學生從某個知識點開始,一步步經歷整個項目開發必經的主要環節,從而在課程結束時能基本掌握整個軟件開發的全過程。
我們在課程中以典型案例為主線,實現理論與實踐的有效結合,提高學生獨立分析問題、解決問題的能力。在今后的教學工作中對這一點還需要進一步提高與完善,特別是為了精選案例,教師應更多地走出校園,參與軟件企業的調研與實踐,使理論教學和實驗教學更加貼近企業的需求。