文章編號:1672-5913(2008)12-0050-03
摘要:本文分析了Java作為入門教學語言的相關爭議,論述了Java教學中基礎先行的講授方式,強調了對象理論在Java語言中的重要性,闡述了Java教學中易產生的一些誤解及選取企業真實項目時應注意的問題。
關鍵詞:Java;面向對象;GUI
中圖分類號:G642
文獻標識碼:B
2008年1月紐約大學計算機科學系的兩位退休教授發表公開文章,反對將Java作為入門教學語言,由此引起了有關Java編程教學語言的一系列爭議。Java自1995年由Sun公司正式推出,就迅速成為全球最主流與應用最廣泛的開發語言,其跨平臺的技術優勢為網絡計算帶來了劃時代的變革,從一種編程語言發展成為全球第一大領先開發平臺。因此本世紀初,美國計算機教育界普遍接受Java作為編程入門語言,此后在很短的時間里,Java迅速成為美國高中和大學里的首選編程教學語言,國內高校也已開始將Java設為編程入門課程,并認為這是與國際接軌的進步標志。但是國內外企業在招聘學生時反映:大部分學生技術方面遠遠沒有達到企業的要求,實際項目開發經驗缺乏,不能適應軟件行業的發展,而企業運營緊張,很難讓新員工熟悉崗位。因此如何培養企業需要的高質量Java人才困擾著許多高校Java教師,筆者據自己多年的Java教學經驗對此做出探討。
1作為入門教學語言的爭議及其分析
紐約大學計算機科學系的兩位教授認為:以Java作為入門教學語言會使學生過早地使用Java類庫和框架,學生只知道將一些簡單的程序組織到一起,但難于對所寫的程序形成運行時成本(run-time cost)的概念,因為他們很難知道究竟哪種調用方法是有效的;真正的程序員應該會用任何語言編程,過早地使用Java使學生不清楚源程序和硬件間的關系,不了解指針的意義,將來難以使用C語言編程;還有Java初學者習慣于圖形化編程,難于在沒有圖形用戶界面(GUI)的語言上編寫程序[1]。兩位教授的意見非常中肯,但筆者認為采取下面這些措施來解決以上問題。
(1) 讓學生獨立實現部分類庫和閱讀Java標準類庫。學生過早使用Java框架,長于整合和快速開發,生產效率高,做直接的、有章可循的、非研究性和非創新性的工作比較合適,但這樣的學生基礎不牢,對計算機系統的理解薄弱,處理細節和矛盾的能力不足,缺少自主分析問題、解決問題的知識、能力和經驗。因此在Java教學中教師決不能讓學生依賴Java框架寫出程序就大功告成,而應該讓學生獨立實現部分類庫。教師可先介紹Java框架中相應類的接口定義和使用方法,學生使用后,從用戶的角度有了直觀的認識,再讓學生自己完成具體實現,然后在可用性、靈活性、可擴展性和性能上與Java框架中的實現比較,分析結果差異,最后再閱讀、研究分析Java框架的具體源代碼實現。這種讓學生先當用戶,體會用戶的需求,然后再當設計者的方案不僅培養了學生獨立解決問題的能力,也使其學習了Java框架中優秀的編程技巧與風格。
(2) 注重Java課程與后續相關專業課程的聯系。入門教學語言的選擇是至關重要的事情,作為大多數學生第一種需要認真學習理解的編程語言,必將成為很多學生的編程母語在他的思維方式中留下深深的烙印。這個編程母語要幫助學生破除計算機和軟件的神秘感,建立對于程序的基本認識和對計算機體系的最初理解。但教師不能希望僅通過一門編程語言的學習就使學生掌握諸多的專業內容,在后續專業基礎課和專業課程的學習中,這門編程語言應該作為主要工具貫穿始終,幫助學生認識計算機系統,掌握算法與數據結構技能,熟悉操作系統概念,理解編譯原理知識,理解軟件抽象及軟件設計的基本思想,完成一定量的課程及課外項目實踐,建立正確的軟件開發實踐習慣。不僅如此,教學語言必須是工業界的主流語言,否則學生學非所用,學習動力無法保證。Java在教學上具有其特殊的優勢,比如其開發環境和工具支持非常成熟,有助于培養學生正確的編程習慣;Java是當今第一工業主流語言,標準類庫非常全面,可以迅速地開發具有實際用途的程序,有助于激發和保持學生的興趣;而在數據結構、算法、編譯原理的教學方面,Java也毫不落于下風,在軟件抽象設計方面,Java還有著明顯的優勢;特別是在并行編程的教學方面,Java concurrent包提供的優勢是壓倒性的。
Java作為入門教學語言是有諸多可取之處的,關鍵是教師了解其優點與缺點后,教學中要“揚長補短”,也就是在利用其面向對象的優勢前提下,通過補充適當內容和依靠后續專業課來彌補其不足,但沒有必要因為其不支持指針等細節而耿耿于懷。
2基礎先行的講授方式
講授Java有三種比較普遍的做法。第一種講法是先講圖形用戶界面,將Java applet和圖形程序設計與面向對象程序設計的概念混合講授。第二種講法是先講對象,一開始就介紹面向對象程序設計(OOP)。第三種講法是先講基礎,是一種循序漸進的講授方式,首先對程序設計的概念、控制語句、方法和數組打下堅實的基礎,然后介紹面向對象程序設計,再講授圖形用戶界面、applet,最后講授異常處理、簡單I/O和其他高級課題[2]。
先講圖形用戶界面的做法從GUI和applet開始,似乎能夠引起學生的興趣,但這需要學生具備牢固的面向對象程序設計方面的知識,并要求對Java事件處理模式有很好的理解,所以學生可能不太容易完全接受。先講對象的做法,其出發點是由于Java是一種面向對象的程序設計語言,應該首先介紹對象。但這種想法忽略了基本程序設計技巧的重要性,而這種基本技巧是使用任何程序設計語言編寫程序都需要的。此外,在學生完全理解類和對象并使用它們開發應用程序之前,這種做法勢必混淆靜態變量與實例變量、靜態方法與實例方法的概念。在學習Java的開始階段,由于必須同時掌握面向對象程序設計和程序設計的基本法則,學生會感到壓力比較大。這是低年級學生不能成功學習面向對象程序設計的普遍原因。
從本人經驗以及很多同事的成功經驗來看,對很多低年級學生來說,學習邏輯基礎和基本程序設計技巧是一項艱苦的工作。在面向過程程序設計中沒有學好編碼的學生很難學好面向對象程序設計。應該充分地介紹基本數據類型、控制語句、方法和數組,為學習面向對象程序設計作好準備。因此,應該采用先講基礎的做法,首先按部就班地學習所有必備的和重要的基本概念,進而學習面向對象程序設計,然后用面向對象的思想建立具有異常處理、簡單I/O和其他高級功能相關的GUI應用程序和applet。這種方法的好處是,首先講解了面向過程的方法,然后演示面向對象方法的優越性,學生可以從中學到何時以及如何高效應用面向對象方法。
3強調對象理論
Java語言是純面向對象語言,對象是Java語言的核心,對象理論的理解直接決定了學生能否真正掌握Java編程。但許多教師對Java中的對象理論存在著誤解。
(1) 輕視對象理論的講授。很多教師認為對象理論的講授是“軟件工程”和“面向對象分析與設計”課程的責任,在Java課程中輕視對象理論的講授,在簡要介紹了封裝、繼承和多態的概念后,卻著重于語法細節的講解。由于缺乏對象理論的理解,學生只會寫代碼片段,但對如何根據用戶需求用對象理論從零開始構造應用程序卻一無所知。
(2) 以過程化的程序設計思想寫Java程序。部分教師先前是講授C++語言的,在講授Java后誤認為Java與C++只是語法上的差別,由于又受到更早C語言的影響,這些教師原本講授的就是過程化的C++語言,在講授Java時如果從始至終按照過程化的思想來寫程序就無法充分發揮Java平臺對象特性的優點。
(3) 過份依賴IDE工具。很多教師由于受傳統Windows平臺IDE工具(VB和Delphi)的影響,在課程的開始就直接采用JBuilder或Eclipse作為開發工具,在講授GUI有關內容時則完全依賴IDE工具的可視化特性來構造程序。學生由于將大量精力花在IDE工具的學習上而忽略了對象理論的學習,開發出來的程序僅界面具有對象特性,而后臺業務邏輯毫無對象特性且與前臺界面代碼緊密耦合,如此程序的可擴展性和可維護性極差。
因此在Java課程中應加重對象理論的內容,尤其強調如何根據用戶需求用對象理論構造應用程序,同時對每部分理論一定要提供相應的Java代碼實現以加深學生對理論的理解;教師自身務必不要以傳統的過程化的程序設計思想來看待Java編程,一定要從面向對象的角度分析問題和解決問題,如此才能教授學生寫出真正的面向對象的Java應用程序;在課程的初期建議選用簡單的文本編輯器作為開發工具,在課程的后期再引入IDE工具,這樣不至使學生將注意力集中在開發工具的學習上。
4練習企業真實項目
在課程后期,學生有了一定的Java編程基礎,欠缺的主要是實際的開發經驗和全面系統的、深入的掌握Java技術。解決的方法就是通過企業真實項目練習,對所學知識進行深化,然后通過項目來獲取實際開發的經驗,盡快達到企業的實際要求[3]。選擇項目時需要注意:
(1) 選擇企業真實項目。項目應是實際的系統,或者是實際系統的簡化和抽象,不能夠是沒有實戰意義的教學性或者是純練習性的項目。否則學生練習后還是難以達到企業實際的需要。
(2) 項目規模要適當。這要根據項目練習的階段,練習的時間,練習的目標來判斷。不能太大,太大了做不完,也不能太小,太小了沒有意義,達不到練習的目的。
(3) 項目應能覆蓋所學的主要知識點。學以致用,學完的知識點需要在實踐中應用,才能夠真正理解和掌握。
(4) 強調培養學生的動手能力。軟件開發是一個動手能力要求很高的行業,要求學生必須能夠獨立動手寫出代碼,寫出的代碼必須能解決實際的問題。
有了好的項目還要有好的訓練方法,最基本和重要的就是:絕對要指導學生親自動手做,而不是看和聽,所以盡量不要選擇有現成代碼的項目,演示用的項目也最好不配發代碼,讓學生能夠獨立做出來才是真的掌握。
5結束語
培養真正滿足企業需求的高質量Java編程人才,不能依靠單學期單門的Java語言課程來實現,它需要多學期的系列的Java課程(如Java EE和輕量級框架)的講授才有望達到,這就要求教師要在更高的、全局的角度來安排教學內容,并能根據技術的發展不斷更新教學內容。
參考文獻
[1] Robert B.K. Dewar, Edmond Schonberg. Where Are the Software Engineers of Tomorrow[CP/OL]. http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html.
[2] Daniel Liang. Java語言程序設計(第5版)[M]. 北京:機械工業出版社,2006.
[3] Craig Larman. UML和模式應用:面向對象分析與設計導論[M]. 北京:機械工業出版社,2002.