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