(注:以下內容都是作者個人的學習經驗和體會,僅代表個人觀點。針對Win32下的Delphi程序開發而言,部分內容或思想也可適用於其它工具或平台下的軟件開發。)
在程序員的求職資料中,用得最泛濫的詞可能是“熟悉”和“精通”了。評價一個程序員的綜合能力並不容易,下面的文字試圖以Delphi程序開發為例定義一種描述程序員開發能力的方法。
一、學習階段劃分。
根據我個人的經驗,Delphi程序設計分為以下幾個階段:
1、 熟悉階段。
這一階段指從未接觸過Delphi的人,剛開始學習到初步掌握Delphi的語法、可視化編程、面向對象編程的概念、Delphi IDE開發環境、基本代碼編寫、程序結構的過程。
熟悉階段結束後,學習者應該可以編寫簡單的程序,同時對整個Delphi開發環境有一定的了解,但還不能從事開發工作。
根據學習者是否有編寫其它語言代碼的經驗、是否接觸過面向對象編程等因素,這一過程可能需要數天到數十天的時間。
2、 入門階段。
在熟悉Delphi後,入門的標志是學習者可以有目的地利用Delphi強大的可視化開發環境、結合一些常規的代碼編寫技術,編制一些小型的程序,或是完成簡單的數據庫應用。同時,還應掌握基本的程序調試方法。
入門後,程序員可以從事簡單的開發工作,或擔任中小型系統的用戶界面設計及簡單代碼的編寫任務。
同樣,如果沒有代碼編寫經驗,這一過程將需要一個月或更多的時間。
3、 進階階段。
相當多的程序員處於進階階段,他們通過經常性地開發工作,積累代碼編寫和程序調試經驗,通過各種途徑尋找各類代碼編寫技巧。每個人根據自已從事的工作或興趣,在某一方面或幾個方面大量的實踐,可以獨立開發小型、技術含量不高的系統,或在大中型系統中負責普通代碼的編寫。
絕大部分的在職程序員處於這一階段,如果一個程序員不是有目的地在學習、工作中總結、提高,可能很長時間、數年甚至終生處於這一階段。
4、 小成階段。
只有系統地掌握了Delphi的結構體系,從實踐上升到理論,有自己完整的編程思想和風格,或是在深度上達到了相當水平、或是在廣度上有了相當經驗,知識達到融會貫通的地步,才算小有所成。
此時,在代碼編寫方面,只要有時間,程序員幾乎可以實現所有想做的東西。很多功能,都可以舉出幾種實現方法並從效率、可讀上優化選取。
除了Delphi,程序員應該對操作系統有相當深入的了解,能在短時間內學會新的知識並加以應用,可以讀懂絕大部分Delphi源碼,完成復雜程序的調試。
如果向深度發展,程序員應該可以編寫出具有一定水平的組件、專家或較專業的程序。如果向廣度發展,則可以完成中小型的開發任務,或是大中型系統中的核心代碼編寫以及大部分系統分析工作。
這一階段幾乎是沒有現成經驗可學的,完全靠個人的修行和領悟,小有所成後程序員在軟件方面可獨擋一面。
5、 大師級。
如果前面四個階段在某種程度上都可以看做是“應用”的話,大師級的程序員就處於“設計和創造”這一層次。
他們已到技進乎道的境界,可以把Delphi玩得隨心所欲,可以創造新的東西,把握發展方向,隨手寫的代碼都可以當教材用。Borland公司的工程師、國外一些著名軟件、控件包的作者、以及國內少數程序員屬於這一階段。
二、代碼閱讀分析能力。
對一個程序員來說,讀懂別人寫的代碼是一項基本的能力。不僅包括閱讀寫得好的程序,也包括閱讀寫得一般甚至低劣的代碼。
代碼閱讀分析又可分為三個層次,一是代碼本身的閱讀能力,二是代碼編寫思想的理解能力,三是算法模型分析設計能力。
要看懂一段代碼的作用和功能,首先自己應該擁有大量的代碼閱讀編寫經驗,然後是從手冊資料中快速獲得所需信息的能力。然而,僅有這些,很多優秀的代碼仍然不易理解,這就需要程序員的宏觀分析和聯想能力。
和其它所有事物一樣,很多代碼也只有在特定環境中才有其存在的意義。有經驗的程序員在拿到一段代碼後並不急於馬上閱讀,而是在理解代碼所在單元甚至工程的功能後再有目的地分析,從宏觀(系統框架結構)和微觀(具體代碼)上分析作者的設計意圖、框架結構、實現方法,從中汲取經驗或對代碼編寫質量進行評估。
再深入一些, 是代碼和軟件的算法設計。給你一段DES加密算法、UCL壓縮算法或MCNN多層分組神經網絡的實現代碼,如果你沒有相關的理論知識做基礎,即使有源算法模型也是無法看懂的。
三、代碼編寫調試能力。
程序設計能力一般指的就是代碼編寫調試的能力,程序員的代碼直接代表了他的編程水平。
1、 代碼編寫規范。
代碼、注釋的書寫是否規范直接反映出一個程序員對程序設計的態度。不同的組織定義了不同的代碼編寫規范,但從外觀上看,寫得好的代碼看起來都差不多一個模樣,而糟糕的代碼則五花八門。
2、 程序框架和算法結構。
很多程序員在一開始編寫代碼時缺乏對開發目標的細致分析和策劃,邊寫邊改,結果寫出的代碼結構冗長、算法凌亂、可讀易維護性差,特別是在多人開發時很容易導致開發中後期進展緩慢甚至陷入僵局。優秀的程序員代碼書寫簡練、算法清晰、結構合理,他們善於利用編譯器強大的語法檢查功能減少潛在的錯誤,並在設計編寫代碼時充分考慮程序的可移植性和升級能力。
3、 軟件測試和代碼調試能力。
調試復雜代碼的能力同樣是區分程序員能力的重要因素。同一段有問題的代碼,不同的人調試的時間可能相差數倍甚至數十數百倍。特別是組件開發等不可視代碼的調試,要求一個沒有太多經驗的程序員完成是不現實的。而一個優秀的程序員同時也應該是一個優秀的測試員,發現問題的能力和解決問題的能力同樣重要,盡管並不是所有人都能認識到這一點。
四、程序員類型。
從程序員所從事的工作及興趣來看,可將其簡單地劃分為:
1、 應用型。
又可分為以“其它領域結合軟件開發”為主和以“軟件開發結合其它領域”為主兩種。
前者有自己的專業知識,但不滿足於簡單的操作應用,而利用VB、Delphi等開發工具的強大RAD能力開發與自己專業相關的軟件。後者的工作是將計算機技術應用於其它領域,主要為企業編寫各種基於商業數據庫及網絡通訊或一些自動化控制應用的軟件。
應用型程序員一般是“廣度型”發展的,他們並不注重系統底層知識的學習,而重在“應用”,利用開發工具來實現“行業規則”而不需要閱讀編寫底層、復雜的代碼。
2、 技術型。
這一類型的程序員是純軟件技術型的,他們的開發焦點集中在計算機軟件本身上,屬“深度”發展型。
技術型程序員大多追求完美、吹毛求疵,對他們來說,花上數小時的時間優化一段代碼,使程序執行效率提高10%是一件很惬意的事。技術型程序員一般重名重義不重利,喜歡自由,不願受現有框架的約束,每每有驚人之舉,他們大多特立獨行或在軟件開發中負責核心代碼編寫,而這個世界也因這些程序員的存在而變得美麗。
3、 創造型。
創造型程序員結合了應用與技術型的特點。
他們既有精明的商業頭腦,又有強勁的技術實力,既是管理人才又是技術人才,是炙手可熱的人物。關於他們的描述媒體上已有很多,不再贅述。