[推薦]程序員的四個(gè)境界
國(guó)學(xué)大師王國(guó)維先生認(rèn)為古今成大事業(yè)、大學(xué)問(wèn)者,必經(jīng)過(guò)三種境界,第一種境界:“昨夜西風(fēng)凋碧樹。獨(dú)上高樓,望盡天涯路”;第二種境界:“衣帶漸寬終不悔,為伊消得人憔悴”,第三種境界:“眾里尋他千百度,驀然回首,那人卻在燈火闌珊處”。一代宗師真是體察入微,寥寥數(shù)語(yǔ),道盡了求道者的心路歷程,將一個(gè)人由淺嘗、迷茫到徹悟的過(guò)程盡數(shù)概括,可謂入木三分。
IT行業(yè)可謂現(xiàn)在的熱門行業(yè),程序員也是很多人羨慕的工作。薪水高,不用東跑西顛,敲敲鍵盤,看看屏幕,一切工作全都搞定,輕松而方便。果真如此嗎?不盡然,實(shí)際上,程序員的職業(yè)生涯也是一個(gè)求道的過(guò)程,需要不斷的提高和學(xué)習(xí),IT行業(yè)知識(shí)更新之快,常讓程序員們有隨時(shí)掉隊(duì)的危險(xiǎn),無(wú)一日不戰(zhàn)戰(zhàn)兢兢,不敢稍有懈怠。
程序員的職業(yè)生涯也可分為四個(gè)階段,初級(jí)程序員(菜鳥)、高級(jí)程序員(熟練工)、系統(tǒng)程序員(高手)、軟件大師(大師),其作品也經(jīng)歷四種境界:
· 可以運(yùn)行的程序
· 健壯、高效的程序
· 結(jié)構(gòu)優(yōu)美的程序
· 思想深邃的程序
程序員的必經(jīng)第一個(gè)階段都是編寫可以運(yùn)行的程序。很多人的編程生涯是從“Hello World”開始,當(dāng)?shù)谝淮伟凑战炭茣系牟襟E,將源文件編輯完后,編譯、連接、運(yùn)行,在屏幕上顯示出“Hello World”時(shí),心中的激動(dòng)一點(diǎn)也不亞于阿里巴巴打開了寶庫(kù)的大門。初級(jí)程序員的目標(biāo)一般是讓程序能運(yùn)行起來(lái),他們迷惑于庫(kù)函數(shù)的眾多,不知道該用那一個(gè),他們還要學(xué)習(xí)基本的語(yǔ)法,以使程序編譯通過(guò)。初級(jí)程序員一般不會(huì)考慮設(shè)計(jì)模式、軟件結(jié)構(gòu)等問(wèn)題。記得本人編寫的第一個(gè)較大的程序是本人的本科畢業(yè)論文題目——一個(gè)計(jì)算機(jī)輔助實(shí)驗(yàn)系統(tǒng),開發(fā)工具為Turbo C,在DOS下開發(fā)(那個(gè)時(shí)候Windows還不太流行,怎么樣,年代夠久遠(yuǎn)吧),整個(gè)軟件大約7000行代碼,在當(dāng)時(shí)已經(jīng)能干不少事,在DOS下也能顯示不少花里胡哨的圖形界面,支持中文,支持鼠標(biāo)操作(那時(shí)候在DOS下需要自己處理鼠標(biāo)事件中斷),當(dāng)時(shí)還頗受好評(píng)??墒墙裉煸僦匦聹亓?xí)過(guò)去的作品,真有點(diǎn)摻不忍睹,整個(gè)軟件毫無(wú)結(jié)構(gòu)可言,一共分成兩個(gè)源文件還是由于編譯器不支持一個(gè)太大的源文件而被迫分開,整個(gè)系統(tǒng)就是源代碼的簡(jiǎn)單堆砌。相信每個(gè)程序員都需要經(jīng)歷這個(gè)階段,它是程序員職業(yè)生涯的開始,沒有捷徑可以跨越,只有不斷的實(shí)踐、學(xué)習(xí)和總結(jié)。
第二階段的程序員已積累了不少的編程經(jīng)驗(yàn),語(yǔ)法和庫(kù)函數(shù)不再是障礙,他們已不再滿足于程序正確運(yùn)行、功能實(shí)現(xiàn)無(wú)誤。他們需要了解程序背后發(fā)生的事情,需要了解操作系統(tǒng)的原理和調(diào)度機(jī)制,內(nèi)存管理,文件系統(tǒng)組織等;了解開發(fā)工具的細(xì)節(jié),如C的函數(shù)調(diào)用機(jī)制,參數(shù)的傳送機(jī)制、堆棧的建立過(guò)程等;了解C++的封裝、繼承和多態(tài)性背后的機(jī)制,虛函數(shù)實(shí)現(xiàn)機(jī)理等。他們不僅知道程序應(yīng)該如何運(yùn)行,還知道它為什么這樣運(yùn)行,能編寫高效、魯棒的程序
。
第三階段的程序員能構(gòu)建結(jié)構(gòu)優(yōu)美的軟件系統(tǒng),軟件系統(tǒng)結(jié)構(gòu)的合理性、可擴(kuò)展性、可維護(hù)、可測(cè)試性是系統(tǒng)程序員考慮的重點(diǎn),結(jié)構(gòu)優(yōu)美的軟件系統(tǒng)同一棟完美的建筑群一樣,每個(gè)部分各司其職,搭配合理。本人一直認(rèn)為,一個(gè)好的軟件系統(tǒng)應(yīng)當(dāng)具有美學(xué)特征,如簡(jiǎn)潔、和諧、層次感等,一個(gè)好的軟件系統(tǒng)應(yīng)當(dāng)是簡(jiǎn)潔的,易于理解的;應(yīng)當(dāng)是和諧的,每個(gè)部分高內(nèi)聚、低耦合,既分工又合作;應(yīng)當(dāng)是層次分明,易于維護(hù)和移植。所以,本人建議那些進(jìn)行軟件系統(tǒng)設(shè)計(jì)的程序員,當(dāng)你設(shè)計(jì)完一個(gè)系統(tǒng)后,需要問(wèn)問(wèn)自己:"它美嗎?",如果答案是否定的,那么我建議你需要重新考慮系統(tǒng)的設(shè)計(jì),如果答案是肯定的,那么,恭喜你,你已經(jīng)達(dá)到一個(gè)相當(dāng)高的水平。
最后一級(jí)也許是每個(gè)程序員夢(mèng)想達(dá)到的頂峰,程序設(shè)計(jì)不再是簡(jiǎn)單的工具,而是大師們改變世界的魔杖,從C到C++,再到COM和COBRA,再到XML和WEB SERVICES,每次改變,不是軟件語(yǔ)法和開發(fā)工具的升級(jí),而是用軟件構(gòu)建現(xiàn)實(shí)世界模型的改變,是一種軟件思想的革命,軟件具有了靈魂和智能。如果沒有理解這一點(diǎn),認(rèn)為C++只是更好的C,COM只是更好的C++話,你就沒有了解它們的精髓和思想性。