修煉一名程序員的職業(yè)水準[1]
]假設(shè)你是一名軟件專業(yè)畢業(yè)的本科學(xué)子,如何在工作中修煉成為一名有較高職業(yè)水準的程序員呢,本文試圖總結(jié)作者從事15年軟件開發(fā)工作的感想,希望對有志成為職業(yè)程序員的人有所幫助,并借此機會感謝原昆明工學(xué)院計算機系的和智玲老師和張懷寧老師,特別感謝我的碩士導(dǎo)師,南京大學(xué)計算機系的博導(dǎo)鄭國梁教授,
修煉一名程序員的職業(yè)水準[1]
。注:本文辭尖刻,乃作者脾氣秉性使然,如果你看著有氣,就請多多見諒,放下別看了。
程序就是一系列按步驟進行的操作序列,它有好多種級別,比如最低級的微程序、次低級的匯編程序、高級的各種編程語言程序、最高級的腳本語言程序,也許我列的不對,但沒關(guān)系,我要說的是不管是那個級別的程序,其本質(zhì)都是操作的邏輯序列。大多數(shù)系統(tǒng)和應(yīng)用程序都是建立在高級編程語言上的,比如C、C++、C#、FORTRAN、BISIC、JAVA等等,就讓我們只關(guān)注這一級的編程能力吧。因此如果一個程序員的邏輯能力不高,他永遠都不能成為一名具有合格職業(yè)水準的程序員,我們在下面的討論有關(guān)編程能力的方方面面,最終都是為了最大程度地提高和實現(xiàn)一名程序員的邏輯能力。
一、掌握基礎(chǔ)知識:十六年寒窗的持續(xù)積累 從7歲讀小學(xué)起,經(jīng)過16年的學(xué)習(xí),你從軟件專業(yè)本科畢業(yè)后,必須完成以下幾門專業(yè)課程的學(xué)習(xí):計算機組成、操作系統(tǒng)原理、匯編語言、數(shù)據(jù)結(jié)構(gòu)、編譯原理、數(shù)據(jù)庫原理、軟件工程、結(jié)構(gòu)性設(shè)計語言(PASCAL、C)、面向?qū)ο笤O(shè)計語言(C++、C#)、計算機網(wǎng)絡(luò)等,你最好還懂一些算法分析、分布式系統(tǒng)、計算機圖形學(xué)、形式邏輯、人工智能原理、軟件設(shè)計模式、軟件構(gòu)架/框架等研究生的課程,16年來,你積累的除了知識,更重要的是形成最適合自己的學(xué)習(xí)方法和工作方法。這些是你具備程序員職業(yè)水準的基礎(chǔ)能力,不要受什么計算機軟件怪杰之類傳奇的影響,那不過是小概率事件,而且這些怪杰們就算沒有讀過軟件本科和研究生,也往往自學(xué)了大多數(shù)專業(yè)課程,很可能比在校學(xué)習(xí)的學(xué)生對這些課程的精髓部分理解的更好,還有他們的工作方法和思維方式是特別而高效的,但普遍性差,可以借鑒,不宜模仿。好,所以現(xiàn)在你只需要問問自己,那些課程和知識都學(xué)會并掌握了嗎?如果是,那就準備好進行實踐了。
二、在實踐中提高:成為一名高水平的Coder好了,你畢業(yè)了,在校功課都不錯,也找了一個專業(yè)對口的工作,你想大展鴻圖了,可是別急,你的翅膀還不夠硬,不信我們說來看看。 通常,你在工作中都會用到某一種單位/公司固定的操作系統(tǒng)和編程語言開發(fā)環(huán)境,比如Windows、UNIX、LINUX等操作系統(tǒng),又比如用VC、VB、PB、Delph、JAVA、Motif/XWindow、QT、OpenGL、OpenInventor等編程語言和開發(fā)環(huán)境,我們在后面把它們合稱為開發(fā)環(huán)境。就在校學(xué)習(xí)的有關(guān)開發(fā)環(huán)境的知識而言,大概你距工作需要的差距是不小的,當(dāng)某個操作系統(tǒng)和編程語言環(huán)境成為你的飯碗時,就不應(yīng)也不能用通過課程/認證考試之類的眼光和要求來評價你的能力,即使你能考100分。你需要深入地學(xué)習(xí)該操作系統(tǒng)和編程語言環(huán)境的各類開發(fā)手冊的所有內(nèi)容,你會說大多數(shù)你都用不上,其實你既對又不對,對的是單從使用的角度而言,你確實用不上開發(fā)手冊的大多數(shù)內(nèi)容,比如龐大的VC開發(fā)類庫和復(fù)雜的開發(fā)環(huán)境,你在實際工作中能用到的不到總數(shù)的1/10或1/5,不對的地方在于,你用到的部分不是孤立存在的,它們是整個體系中的一部分,只有對整個體系有了一個較完整的了解,才能得心應(yīng)手、隨心所欲地用好你用到的部分,你才算初步具備在這種開發(fā)環(huán)境下進行Coding的職業(yè)水準(還遠不夠程序員的職業(yè)水準呢),而這只是剛開始,
資料共享平臺
《修煉一名程序員的職業(yè)水準[1]》(http://www.szmdbiao.com)。如何才能真正掌握一種開發(fā)環(huán)境的全面的知識呢,最原始的辦法就是讀開發(fā)指南/教程、參考手冊,一般來講,學(xué)習(xí)開發(fā)指南/教程時,你如果是一個認真的人,都會完成5/10~7/10左右內(nèi)容的學(xué)習(xí)和練習(xí),如果你想成為職業(yè)選手,就應(yīng)該完成9/10以上內(nèi)容的學(xué)習(xí)和練習(xí)。參考手冊不同,大多數(shù)所謂的"程序員"們只是用到了才翻翻,這差的太遠了,你應(yīng)該象讀開發(fā)指南/教程一樣,每個環(huán)節(jié)都要讀,比如VC,參考手冊中的每個類,類的'每個函數(shù),都要讀上幾遍,它們往往是一小伙一小伙地糾纏在一起使用的,開始時讀得你毫無頭緒、心煩意亂,不要緊,還有一手呢,如果你開發(fā)環(huán)境安裝的全面,它們往往都有開發(fā)商做的demo例子可看,你就進入另一個境界了,開始時你關(guān)注demo中的具體技術(shù),后來你發(fā)現(xiàn)這些demo的程序?qū)懙亩歼算不錯,結(jié)構(gòu)簡單但合理,如果你真的用心,就一定能發(fā)現(xiàn)一些個別的demo是極品,它所展現(xiàn)的程序邏輯結(jié)構(gòu)是你設(shè)計不出來的,你現(xiàn)在有點更關(guān)心它的程序設(shè)計構(gòu)架,甚于對你原始目的(某種相關(guān)的技術(shù)/技巧)的關(guān)注,這時的你,開始了從一名Coder向一名Programmer的轉(zhuǎn)變,你會忍不住要看看開發(fā)商提供的源程序,比如。h和。cpp,通常你會找到include路徑下所有的。h程序,你才知道,哇!好多好多東東在參考手冊中都沒提到,你要學(xué)的太多了,沒時間顧及其它的業(yè)余愛好了,現(xiàn)在知道為什么程序員是年輕人的職業(yè)了吧,你要有足夠多的時間才行,即使你的智商有160.如果你走到這一步,在你工作的團隊中,已經(jīng)是經(jīng)常有人向你請教技術(shù)問題,經(jīng)常有人請求你幫忙debug,你已是公認的"高手"了,別得意,因為你仍然是個Coder,為什么這么說呢,你想想,你已深入了解了這個開發(fā)環(huán)境中的各種技能,知道一名Coder如何用好這些東西,可是你能設(shè)計的出提供給Coder們用的東西嗎?唔……,你想了想,可能還不太行。對了,就是這樣,你還是一名小我境界的程序員呢,本質(zhì)是個Coder,當(dāng)然已是一名高水平的Coder了,然而你需要進一步登堂入室才能成為一名真正的程序員。 讓我們繼續(xù)吧,通常你都是從精通一種編程環(huán)境開始的,假設(shè)你已經(jīng)較為精通在Windows下用VC開發(fā)軟件了,這時在技術(shù)和技巧方面你將面臨一小一大兩個挑戰(zhàn),第一個小挑戰(zhàn)是如果公司/單位改換了開發(fā)環(huán)境,比如用LINUX下的QT交互語言工具進行開發(fā),你不過是把前面掌握VC的過程再來一遍,由于在主觀上經(jīng)歷了VC工具的學(xué)習(xí)過程,在客觀上各種開發(fā)環(huán)境都有太多相似的方面,這回你掌握的應(yīng)該較快。要小心,在這時第一次誘惑之門打開了,因為你感覺良好,看!這回這么快,我就這么好地掌握了新的開發(fā)環(huán)境,你開始關(guān)注其它暫時還用不到的同類環(huán)境,比如VB、Delph、JAVA,如饑似渴地掌握各種開發(fā)工具,證明自己的學(xué)習(xí)能力和價值,但你忘了一點,你仍然是個Coder,只不過是一個在好多開發(fā)環(huán)境下都能編程的Coder,就像你生活在中國,因而精通了漢語,工作需要你又掌握了英語,然后你就來了勁,把俄語、日語、阿拉伯語、拉丁語,等等等等,都學(xué)習(xí)個遍,我只能說,有點BT.你忘了自己是個職業(yè)人,同一類的東西工作中用得到才需學(xué)習(xí),太多太多的Coder們喜歡在一起比較和炫耀自己會掌握了幾種開發(fā)工具,不信你看看招聘時的求職書就知道了,sigh!他們中絕大多數(shù)人永遠都只能停留在這個層次上,心浮氣躁,一生都再也當(dāng)不成真正的程序員了。
【修煉一名程序員的職業(yè)水準[1]】相關(guān)文章: