第一篇:一個(gè)合格程序員的標(biāo)準(zhǔn)
一個(gè)合格程序員的標(biāo)準(zhǔn)
一個(gè)合格程序員的標(biāo)準(zhǔn)(轉(zhuǎn))2009年02月21日 星期六 01:37 A.M.假設(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ó)梁教授。
程序就是一系列按步驟進(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è)后,必須完成以下幾門(mén)專業(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/X
Window、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)始。如何才能真正掌握一種開(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í)第一次誘惑之門(mén)打開(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)不成真正的程序員了。總結(jié)一下,其實(shí)你在這時(shí)需要的是對(duì)自己掌握新開(kāi)發(fā)環(huán)境的能力的自信,而不是一遍遍地重復(fù)來(lái)證明自己。第二個(gè)大挑戰(zhàn)就是你明白了只掌握VC是不夠的,你發(fā)現(xiàn)自己有點(diǎn)淺薄,有很多東東你會(huì)用但你不太懂,很多方面支持VC編程的知識(shí)你都沒(méi)掌握,比如操作系統(tǒng)的源碼、網(wǎng)絡(luò)協(xié)議知識(shí)、Windows 的注冊(cè)表、進(jìn)程和線程的基礎(chǔ)知識(shí)、硬件驅(qū)動(dòng)方面的知識(shí)、ActiveX、Windows 龐大的 API,又是一個(gè)等等等等,這些基礎(chǔ)知識(shí)的學(xué)習(xí)和掌握可是要花費(fèi)大量時(shí)間的,你再一次深切地感到時(shí)間太不夠用了,因?yàn)檫@時(shí)的你大概有許多俗務(wù)纏身了,所以有點(diǎn)沮喪,還不用提IT業(yè)每天不知有多少新東西在發(fā)布,KAO,永遠(yuǎn)都跟不上,越拉越遠(yuǎn)了。哎!別氣餒,振作一點(diǎn),你還是忘記了自己是個(gè)職業(yè)人,既然好多東東在工作中你永遠(yuǎn)都沒(méi)機(jī)會(huì)用,那么干嘛要
學(xué)呢?用什么才學(xué)什么,最多預(yù)測(cè)到馬上要用什么,先一步學(xué)什么好了,要知道沒(méi)有人是真正的、無(wú)所不精的全科大夫,除非你是神,但如果你還在耐著性子看這篇文章,你肯定是個(gè)人嘛。
OK,一般工作后三五年,你經(jīng)歷了上述過(guò)程,經(jīng)受了誘惑和考驗(yàn),終于明白了一個(gè)道理:你要的是強(qiáng)勁的學(xué)習(xí)知識(shí)的能力,是對(duì)某種軟件知識(shí)/技能的有深度的精通,一種摸到它的根的深度,而不是已掌握的技能的種類和數(shù)量。這時(shí)無(wú)論誰(shuí)用他掌握了多少種你不會(huì)的技能來(lái)嚇唬你都沒(méi)用,你對(duì)他的層次只有蔑視。通過(guò)幾年的學(xué)習(xí)和工作,要記住最重要的一點(diǎn),永遠(yuǎn)最重要:對(duì)自己學(xué)習(xí)IT知識(shí)能力的自信,一個(gè)程序員一生都要不停地進(jìn)行高強(qiáng)度的學(xué)習(xí),用心問(wèn)問(wèn)自己,有沒(méi)有這個(gè)自信?別用虛榮心來(lái)騙自己哦,如果沒(méi)有的話,那就不必花費(fèi)你寶貴的時(shí)間向下看了,作者在此感謝你有耐心看到這里,現(xiàn)在建議你關(guān)閉這篇文章,趁著年輕,當(dāng)機(jī)立斷轉(zhuǎn)行吧!
三、注重邏輯:成為一名職業(yè)程序員
好,再前進(jìn)一點(diǎn)點(diǎn),你就要成為一名職業(yè)程序員了,讓我們繼續(xù)來(lái)完成這個(gè)任務(wù)吧!我們?cè)谇耙还?jié)提到過(guò),“你發(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í)你是在關(guān)注這個(gè)demo程序作者的思維邏輯,所有程序的本質(zhì)就是邏輯。技術(shù)你已經(jīng)較好地掌握了,但只有完成邏輯能力的提高,你才能成為一名職業(yè)程序員。打一個(gè)比方吧,你會(huì)十八般武藝,刀槍棍棒都很精通,但就是力氣不夠,所以永遠(yuǎn)都上不了戰(zhàn)場(chǎng),這個(gè)力氣對(duì)程序員而言就是邏輯能力(其本質(zhì)是一個(gè)人的數(shù)學(xué)修養(yǎng),注意,不是數(shù)學(xué)知識(shí))。邏輯能力也是逐步提高的,開(kāi)始時(shí)你一定是用直觀的邏輯能力來(lái)編程的,怎么想就怎么編,不對(duì)就再改,在改進(jìn)中提高自己的邏輯能力,從直觀邏輯能力提高到抽象邏輯能力,這是很正常的。提前說(shuō)一句吧,到達(dá)邏輯能力的至高境界,其表現(xiàn)是用數(shù)學(xué)語(yǔ)言來(lái)描述問(wèn)題和問(wèn)題的解決辦法,高度抽象!好,說(shuō)回來(lái)吧,你要提高邏輯能力,最快的辦法就是讀別人寫(xiě)的結(jié)構(gòu)優(yōu)秀的程序。優(yōu)秀的代碼是百讀不厭的(這句話是我抄來(lái)的),暫時(shí)放放對(duì)其中某種技術(shù)和技巧的關(guān)注吧,你要推導(dǎo)和學(xué)習(xí)的是這些好程序的邏輯結(jié)構(gòu),它們是被精心設(shè)計(jì)出來(lái)的。你可以先捂住這個(gè)demo程序,自己設(shè)計(jì)一個(gè)功能相同的程序結(jié)構(gòu),然后比較一下demo的程序結(jié)構(gòu),如果差距較大,那你就不應(yīng)簡(jiǎn)單地改進(jìn)一下,而是要把demo作者設(shè)計(jì)的過(guò)程在心里復(fù)原一遍,做到這一點(diǎn)也許有點(diǎn)困難,但這種事
干的多了,你就會(huì)越干越快,越來(lái)越得心應(yīng)手,你的邏輯能力飛速提升,你能看得上的邏輯結(jié)構(gòu)優(yōu)秀的程序開(kāi)始不多了,下一步就是練習(xí)。從工作中開(kāi)始吧,如果你有空閑,你需要做至少兩類練習(xí),一類是算法練習(xí),所有的經(jīng)典算法都是經(jīng)典的邏輯,題目有的是,像個(gè)好學(xué)生一樣吧,每年的國(guó)內(nèi)國(guó)際編程競(jìng)賽都有邏輯要求非常高的題,你可以只選一兩道難題來(lái)做做。當(dāng)你可以把復(fù)雜的單遞歸程序(只有A調(diào)A)變成非遞歸程序時(shí),已經(jīng)不錯(cuò)了,如果你能看得懂雙遞歸程序(A調(diào)A、A調(diào)B、B調(diào)A、B調(diào)B都有),我為你鼓掌!你不必往下看了,我有點(diǎn)不好意思啦――班門(mén)弄斧,你快滾蛋吧!另一類是把以前和當(dāng)前你工作中你不滿意的程序推倒重新設(shè)計(jì)一遍,這非常重要,省時(shí)省力,因?yàn)槟闶煜ば枨螅夹g(shù)上也沒(méi)問(wèn)題,目的就是改進(jìn)程序的邏輯結(jié)構(gòu),很劃算哦,唯一要克服的就是:你對(duì)推翻以前工作中那點(diǎn)小小成就的心理障礙,如果你真想優(yōu)秀,說(shuō)句粗話:這點(diǎn)心理障礙算個(gè)屁,一遍遍反復(fù)地推倒已有的成果只能使自己快速進(jìn)步,放手干吧,沒(méi)什么好可惜的,馬恩早就在《共.產(chǎn).黨宣言》里說(shuō)過(guò)了:在這個(gè)過(guò)程中,你失去的只有鎖鏈(禁錮你思想的鎖鏈)。
讓我們來(lái)總結(jié)一下,經(jīng)過(guò)自我否定后,再生的你盡管對(duì)過(guò)去的“業(yè)績(jī)”還有一些眷戀,但已是一個(gè)初步具備職業(yè)水準(zhǔn)的程序員了,掌握了相應(yīng)的技術(shù)和技巧,具備了較高的抽象邏輯思維能力,最主要的特征是:能自覺(jué)地自我否定,不斷地追求更高水平的邏輯能力。在這個(gè)過(guò)程中,如果你能注意以下一些小的方面,你前進(jìn)的步伐也許會(huì)快一些。
l 從編譯原理的角度來(lái)理解你工作中使用的高級(jí)語(yǔ)言,如果你做到這一點(diǎn),至少有兩個(gè)好處,第一個(gè)好處是避免一大堆低水平重復(fù)出現(xiàn)的編譯錯(cuò)誤。一名優(yōu)秀的Coder平均在一個(gè)工作日中應(yīng)該完成200行以上的源碼,其編譯錯(cuò)誤應(yīng)該控制在5個(gè)以下,要知道這200行源碼不是一次完成的,所以大多數(shù)情況下你都要追求一次編譯通過(guò),而一名職業(yè)水準(zhǔn)的程序員,應(yīng)該進(jìn)一步做到即使用purify這類的工具來(lái)檢查源碼,也不會(huì)存在嚴(yán)重的內(nèi)存泄露。第二個(gè)好處是可以提高源碼的可讀性和效率。規(guī)范地編寫(xiě)你的代碼使你自己的邏輯清晰,因?yàn)槟忝靼锥嗉訋讉€(gè)括號(hào)和空行、多換行對(duì)齊、多注釋,編譯器是會(huì)自動(dòng)識(shí)別的,不影響程序執(zhí)行的效率,反過(guò)來(lái),控制好遞歸調(diào)用和循環(huán)內(nèi)的if語(yǔ)句才是提高程序效率的關(guān)鍵,要全力避免遞歸,但要深刻理解遞歸,能通過(guò)自己建立堆棧來(lái)把遞歸程序轉(zhuǎn)換成非遞歸程序,要求還是較高的哦!l 避免思維陷阱,只要你是人就一定有自己的思維慣性,這一
定又會(huì)表現(xiàn)在你的程序邏輯中,有時(shí)你就是從這個(gè)慣性中跳不出來(lái)(誰(shuí)都有這個(gè)時(shí)候),但要心里有數(shù)才行,所以你需要幫助,如果你有幾個(gè)水平相若或更高的職業(yè)伙伴,太好了,當(dāng)遇到花30分鐘還打不下的bug時(shí),就別浪費(fèi)時(shí)間了,找他們吧,最要緊的是能思路清晰明確地表述你的問(wèn)題,通常你自己在這個(gè)過(guò)程中或者伙伴中就有人把問(wèn)題解決了,又快又好。另外,有幾個(gè)可以良性競(jìng)爭(zhēng)的職業(yè)伙伴是人生的一件幸事,1+1>2,大家各有所長(zhǎng),你最好做到及時(shí)公開(kāi)你的成果,技不壓身嘛,IT發(fā)展的這么快,你再優(yōu)秀,那點(diǎn)東東也沒(méi)有什么值得隱藏的,所以你可以技術(shù)或水平不夠高,但千萬(wàn)不可以讓真正具有職業(yè)水準(zhǔn)的選手鄙視你的職業(yè)品質(zhì)和行為。
l 有自己debug的特點(diǎn),下面的說(shuō)法作者不敢太肯定,只是經(jīng)驗(yàn)之談。即使在VC這種高度完善的開(kāi)放環(huán)境下,你仍然應(yīng)該要求自己僅憑打印語(yǔ)句就能debug。這也有兩點(diǎn)好處,第一個(gè)好處是,遇到bug你會(huì)認(rèn)真想問(wèn)題所在,而不是用debug工具一步步簡(jiǎn)單地追蹤卡在哪兒了,你定位bug范圍的方式是從大到小、從粗到精,這是一種自頂向下的思維方式,而用工具追蹤,容易形成自底向上的思維方式,這不算好,你應(yīng)該先看到森林,再看到樹(shù)木。我反復(fù)提及:程序就是邏輯過(guò)程,大多數(shù)程序從main函數(shù)開(kāi)始,是由數(shù)據(jù)結(jié)構(gòu)和功能子程序組成的一個(gè)樹(shù)形結(jié)構(gòu)的邏輯過(guò)程(要認(rèn)清即使是面向?qū)ο蟮某绦蛘Z(yǔ)言也是一樣的),它的執(zhí)行過(guò)程是深度優(yōu)先的,但你定位bug應(yīng)該是廣度優(yōu)先的,好好想想這一點(diǎn),嗯?第二個(gè)好處是強(qiáng)迫你思考并記住而不是用工具看到調(diào)用過(guò)程,你大腦的抽象邏輯思維能力和胳膊上肌肉的力量一樣,都是練出來(lái)的,如果你的bug是程序結(jié)構(gòu)上的邏輯錯(cuò)誤引起的,這一點(diǎn)就非常重要了,順便說(shuō)一句,最難打的bug就是程序邏輯結(jié)構(gòu)錯(cuò)誤導(dǎo)致的bug。你要是真正明明白白地認(rèn)識(shí)到這兒了,那我就沒(méi)什么東西可以告訴你了。總之,程序員的職業(yè)水準(zhǔn):生產(chǎn)效率和程序質(zhì)量,主要是取決于源碼中bug的數(shù)量和debug的速度,而不是取決于編寫(xiě)源碼的速度。給你一個(gè)我自己定義的考查一個(gè)職業(yè)程序員的指標(biāo):一個(gè)合格水準(zhǔn)的職業(yè)程序員,編程的時(shí)間如果算一份的話,其累計(jì)debug的時(shí)間不能超過(guò)一份,真正職業(yè)高手累計(jì)debug的時(shí)間應(yīng)該控制在0.5份以下,如何?你關(guān)上門(mén)悄悄問(wèn)問(wèn)自己,你花費(fèi)在編程和debug上的時(shí)間比例是多少?如果你把程序員作為自己一生的職業(yè),那么就永遠(yuǎn)都要牢記一點(diǎn):追求做一個(gè)0 bug的優(yōu)秀程序員!這是任何一個(gè)想成為職業(yè)程序員的人的理想,請(qǐng)相信:堅(jiān)忍不拔地追求實(shí)現(xiàn)這個(gè)理想將讓你出類拔萃!l 做好程序
的單元測(cè)試,這是另一項(xiàng)考查你是否是一名具有合格職業(yè)水準(zhǔn)的程序員的一個(gè)必要指標(biāo)。其實(shí)在你拿到需求的時(shí)候就要準(zhǔn)備單元測(cè)試用例了,并且這些用例將直接影響你的詳細(xì)設(shè)計(jì)(有關(guān)軟件設(shè)計(jì)本來(lái)是該放在第四節(jié)講的)。我們還是打比方吧,當(dāng)你拿到一個(gè)需求時(shí),除了分析它靜態(tài)的功能外,還應(yīng)明確它動(dòng)態(tài)的操作/執(zhí)行過(guò)程,把這個(gè)動(dòng)態(tài)過(guò)程明確地用流程圖畫(huà)出來(lái),比如分為A~Z的26步,其中A又可以進(jìn)一步分解為A1~A5的5步,直到不能再分解為止。又比如說(shuō)A3步不可分解了,那么你應(yīng)該把A3步的正常操作和所有五花八門(mén)的異常操作都列出來(lái),確保正常的操作肯定正確,異常的操作起碼程序不退出才行。這樣你就要寫(xiě)好多好多的測(cè)試用例,說(shuō)句老實(shí)話,我也從來(lái)不寫(xiě)!但我一般會(huì)列一個(gè)提綱,比如A3步有正常的操作a、b、c、d、e共5項(xiàng),異常的操作有f、g、h、i、j、k、l、m、n共9項(xiàng),你在進(jìn)行單元測(cè)試時(shí)都應(yīng)該跑一遍,這樣的程序都還不敢說(shuō)質(zhì)量如何好,但起碼可以說(shuō)較穩(wěn)定吧!如果要想在進(jìn)行單元測(cè)試時(shí)干得快、效率高,那么在進(jìn)行詳細(xì)設(shè)計(jì)時(shí),你就應(yīng)該把A3步中對(duì)所有正常操作和異常操作的判斷都設(shè)計(jì)好,在編程實(shí)現(xiàn)A3步時(shí),使得程序的結(jié)構(gòu)合理高效,對(duì)不對(duì)?所以,如果你在工作中是割裂地看待軟件工程中從需求、分析、設(shè)計(jì)、編程、測(cè)試等各個(gè)環(huán)節(jié),恐怕水平很有限喔!但如果你在分析需求時(shí)就能看到測(cè)試的問(wèn)題,并改進(jìn)設(shè)計(jì)和實(shí)現(xiàn),為此做好相應(yīng)的準(zhǔn)備工作,嘿嘿,整個(gè)軟件開(kāi)發(fā)過(guò)程你的效率會(huì)高很多,通常你在一個(gè)開(kāi)發(fā)團(tuán)隊(duì)中就會(huì)高度自信的,你已越過(guò)當(dāng)一名偏頗、露骨的高手的境界,成為一個(gè)平靜的高手,這可是The best in the best!,用周星星的話說(shuō):是高手之高高手,因?yàn)閯e人看不出你高在哪兒,沒(méi)見(jiàn)你有什么高招或特拚命干,但反正你就是干得又快又好、又省力。關(guān)于進(jìn)行單元測(cè)試還有很多復(fù)雜的方法,在此本文只提到了最基本的一點(diǎn),目的是讓你在工作上考慮周全、安排有序,其它的自己琢磨吧,沒(méi)有人能替你吃飽飯!
l 如果你是用C++編程,我再簡(jiǎn)單談?wù)動(dòng)嘘P(guān)內(nèi)層釋放的一個(gè)小技巧,就是對(duì)所有你編寫(xiě)的類,在構(gòu)造和析構(gòu)函數(shù)中加打印語(yǔ)句,統(tǒng)計(jì)每個(gè)類在運(yùn)行程序時(shí)構(gòu)造和析構(gòu)的地方,如果是配對(duì)的,那么起碼沒(méi)有對(duì)象類一級(jí)的內(nèi)層在程序運(yùn)行結(jié)束時(shí)沒(méi)有釋放,然后你就可以把打印語(yǔ)句刪掉了,招數(shù)雖土,但管用!
l 還有其它一些好習(xí)慣,在這里我隨筆寫(xiě)一些,你要是有不同看法也請(qǐng)一笑過(guò)之吧。編程時(shí)應(yīng)該對(duì)齊縮進(jìn),一個(gè)縮進(jìn)用一個(gè)tab鍵,一般是4個(gè)空格,嚴(yán)格遵守開(kāi)發(fā)團(tuán)隊(duì)的編程規(guī)范也是非常重要的。一個(gè)子程序
不應(yīng)超過(guò)30行(不算空行),其內(nèi)多重循環(huán)不應(yīng)超過(guò)3層,否則都應(yīng)該分裂成兩個(gè)子程序,個(gè)別算法程序可以長(zhǎng)一些,但也不宜超過(guò)200行。通常一個(gè)類的所有成員函數(shù)總和不宜超過(guò)1500行,多了就應(yīng)該考慮分解成兩個(gè)類(這個(gè)工作最好在設(shè)計(jì)時(shí)就完成)。每完成一小段程序,比如15~30行,就立即編譯運(yùn)行,不要假裝高手,先敲它一大堆程序,再編譯運(yùn)行,妄想一次成功,體驗(yàn)一種假爽的、虛榮的快感,或炫耀給別人看,這么做只能證明自己是一個(gè)不折不扣的傻瓜,裝酷而已。因?yàn)橹灰幸淮尾怀晒Γ憔蜁?huì)花費(fèi)大量的時(shí)間來(lái)調(diào)程序,別人的進(jìn)度在這時(shí)就遠(yuǎn)遠(yuǎn)地超過(guò)你了,平常心是道,還是修煉真功夫吧!孫子兵法里關(guān)于這一點(diǎn)有明確的闡述,我就不引用了,但建議你真的不要這么干,除非你確實(shí)就是這樣總是一次就成功的天才,那你還看這篇文章干什么呢?我又不是寫(xiě)給你們這些天才們看的。再就是有學(xué)會(huì)買(mǎi)好書(shū)、讀好書(shū),關(guān)于計(jì)算機(jī)和軟件方面的書(shū)太多了,時(shí)間有限,比如有一個(gè)叫侯捷的家伙,幾乎寫(xiě)的每本書(shū)都不錯(cuò),張國(guó)峰的C++編程也不錯(cuò),這只是我的個(gè)人意見(jiàn)啊,好書(shū)多著呢,列出來(lái)比這篇文章長(zhǎng)好多倍,我就不多說(shuō)了。還有一招,要是你運(yùn)氣好,能搞到一些著名軟件系統(tǒng)的源碼,好好讀讀吧,在此我只能告訴你,Linux操作系統(tǒng)的一些源碼不錯(cuò),是開(kāi)放的,你可以合法地搞到,其它的不要說(shuō)是我建議你侵犯知識(shí)版權(quán)啊!
四、天生神力:成為系統(tǒng)分析員
本來(lái)就論述如何成為一名職業(yè)程序員而言,本文已基本完成任務(wù)了,但《菜根譚》有言:竭世機(jī)樞,似一滴投于巨壑,窮諸玄辯,若一毫置于太虛。既已乘興到此,何妨多置一毫于太虛呢,作者不才,干脆盡興寫(xiě)算了。
你要是運(yùn)氣好,直接進(jìn)入了一個(gè)嚴(yán)格規(guī)范生產(chǎn)的軟件企業(yè)就業(yè),剛開(kāi)始就應(yīng)該是按別人做好的軟件設(shè)計(jì)來(lái)實(shí)現(xiàn)編程,你可以有機(jī)會(huì)直接學(xué)習(xí)軟件設(shè)計(jì),當(dāng)你積累的足夠多了,能夠?qū)ζ渲械囊恍┰O(shè)計(jì)提出好的改進(jìn)建議,而且干得又快又好,就會(huì)漸漸地展露頭角,我相信你終有一天成為一名軟件設(shè)計(jì)人員(注意,不是軟件產(chǎn)品設(shè)計(jì)人員),步入系統(tǒng)分析員的行列,但這還需其它的一些條件和自我修煉。如果你在一個(gè)不規(guī)范的軟件企業(yè)工作,那也不錯(cuò),你很可能直接就有機(jī)會(huì)進(jìn)行軟件設(shè)計(jì),然后開(kāi)發(fā)、測(cè)試,甚至還不得不自己定義需求,把軟件開(kāi)發(fā)過(guò)程的各個(gè)環(huán)節(jié)走一個(gè)遍,當(dāng)然這樣對(duì)你的要求更高,而且你也不容易得到及時(shí)有益的指點(diǎn),在正態(tài)分布的情況下,你應(yīng)該是成長(zhǎng)的很慢。但不管就業(yè)的單位如何,如果你決心要成為頂尖軟件職業(yè)選手,通常什么客觀困難都阻擋不了
你,然而你個(gè)人的因素可能會(huì)阻止你的前進(jìn)。下面提出的觀點(diǎn)純屬一己之見(jiàn),傷人自尊之處作者在此提前道歉,并建議你除非對(duì)本文有強(qiáng)烈的興趣,否則就請(qǐng)直接看第五節(jié)或放下別看了。丑話已說(shuō)在前頭了,在各種軟件開(kāi)發(fā)組織的發(fā)展過(guò)程中的事實(shí)也證明,只有少數(shù)程序員能成為系統(tǒng)分析員,我想這一點(diǎn)不是我杜撰的吧,因此你要是在看接下來(lái)的部分時(shí)感到氣憤難當(dāng),那也實(shí)在沒(méi)著,純屬活該,因?yàn)樽髡咧皇窃谡f(shuō)明自己的觀點(diǎn)而已,你最多可以呲之以鼻,表示一下你的輕蔑好了,但沒(méi)有任何理由可以罵人!
作者自己沒(méi)有到微軟面試過(guò),但身處軟件行業(yè),關(guān)于微軟的許多東東當(dāng)然還是有耳聞的,據(jù)說(shuō)微軟招聘一名程序員要過(guò)五個(gè)已經(jīng)成為微軟程序員的面試關(guān),而且是一票否決制,又據(jù)說(shuō)大多數(shù)面試題并非編程,而是一些有關(guān)邏輯和智力的題,作者私下也做過(guò)許多流傳的微軟面試題,并對(duì)此做法深以為然。程序的本質(zhì)就是邏輯,所以幾十年前就有人提出編程是一門(mén)藝術(shù),而藝術(shù)是要靠天份的,這一點(diǎn)少有人反對(duì)。一個(gè)人的邏輯能力可以不斷提高,但其能到達(dá)的終極邏輯能力的層次必定為其天生智力所限制,這一點(diǎn)就讓人不易接受了。好笑啊!人們可以公開(kāi)承認(rèn)自己沒(méi)有某種或全部的藝術(shù)天份,但要說(shuō)自己邏輯天份不夠,換句話說(shuō)承認(rèn)自己笨、IQ不夠高,往往是要怒發(fā)沖冠的,其實(shí)這又有什么區(qū)別呢?話都說(shuō)到這兒了,再次建議你如果不夠自信,就跳過(guò)這一節(jié)吧,直接看第五節(jié),好嗎?
好了,把話題說(shuō)回來(lái),你已經(jīng)成為一門(mén)合格的職業(yè)程序員了,如果要想成為從事軟件系統(tǒng)設(shè)計(jì)的職業(yè)系統(tǒng)分析員,第一件事就是悄悄找一個(gè)標(biāo)準(zhǔn)智商測(cè)試的網(wǎng)站或其它渠道,嚴(yán)格認(rèn)真的測(cè)一測(cè)自己的智商,如果IQ低于130(正常智商是110),就請(qǐng)別費(fèi)勁了,打消掉成為系統(tǒng)分析員的念頭吧!好!好!先請(qǐng)你冷靜一下,好好想想,其實(shí)微軟面試時(shí)就是在測(cè)你的智商和邏輯數(shù)學(xué)素質(zhì)呢,這就是本節(jié)的標(biāo)題為“天生神力”的原因,因?yàn)樵O(shè)計(jì)就是從無(wú)到有地進(jìn)行創(chuàng)造,無(wú)論是軟件還是其它行業(yè)都一樣,可以有借鑒的,沒(méi)有現(xiàn)成的,設(shè)計(jì)就是創(chuàng)造!如果你IQ在130以上,又決心要當(dāng)一名職業(yè)軟件系統(tǒng)分析員,其實(shí)你不過(guò)是要準(zhǔn)備好吃更大的苦而已,有什么好虛榮的呢? 修煉還是從基本功開(kāi)始的,過(guò)程和成為一名職業(yè)程序員差不多。必須使用設(shè)計(jì)工具這一點(diǎn)是不用多說(shuō)的。在工作中,你基本上遇到的是兩類方式的設(shè)計(jì),一個(gè)是結(jié)構(gòu)化設(shè)計(jì),另一個(gè)是面向?qū)ο笤O(shè)計(jì),就個(gè)人經(jīng)驗(yàn)而言,面向?qū)ο蟮脑O(shè)計(jì)更好。如果你工作中不得不采用結(jié)構(gòu)化的設(shè)計(jì),你必須熟練地掌握數(shù)據(jù)流圖和
控制流圖的分析和設(shè)計(jì),一般來(lái)講,如果你把一個(gè)軟件中用到的數(shù)據(jù)模型設(shè)計(jì)好了,針對(duì)功能化的流程,不難設(shè)計(jì)出數(shù)據(jù)流圖,但下一步設(shè)計(jì)控制流圖才是挑戰(zhàn),如果你按照需求走不通設(shè)計(jì)好的控制流圖,那么你或別人在按照這個(gè)設(shè)計(jì)編程實(shí)現(xiàn)時(shí),必定也走不通,沒(méi)有奇跡會(huì)發(fā)生,還是在設(shè)計(jì)階段嚴(yán)格要求吧,又有一點(diǎn)需要牢記:返工是最慢的。當(dāng)你在進(jìn)行控制流圖的設(shè)計(jì)時(shí),也不要妄想得到需求人員提供給你明確的指點(diǎn),通常他們要是能夠把需求的功能和操作次序?qū)懲暾脑挘銘?yīng)該就感恩戴德了,從需求中整理出功能、操作的拓?fù)浯涡蚝蜅l件是你作為系統(tǒng)分析員的職責(zé)。看看,要是沒(méi)有一點(diǎn)圖論的基礎(chǔ)和拓?fù)鋵W(xué)的入門(mén)知識(shí),你是當(dāng)不好一個(gè)職業(yè)系統(tǒng)分析員的,即使你天賦不錯(cuò),必要的數(shù)學(xué)和邏輯素質(zhì)仍然不可或缺。也不用氣餒,永遠(yuǎn)沒(méi)有最好的設(shè)計(jì),只有更好的設(shè)計(jì),反復(fù)地進(jìn)行設(shè)計(jì)迭代,勇于推翻舊的設(shè)計(jì),你將快速進(jìn)步。如果你在工作中是采用面向?qū)ο筮M(jìn)行設(shè)計(jì)的,那就更有利了,有關(guān)面向?qū)ο笤O(shè)計(jì)的書(shū)太多了,不用作者在此多費(fèi)口舌,建議精讀一本經(jīng)典的書(shū),比如北大邵維忠等編譯的《面向?qū)ο蟮姆治觥罚行┓椒ê图记煽赡苓^(guò)時(shí),但其邏輯的基本原理是非常正確的,其本質(zhì)是,你在邏輯上是如何認(rèn)識(shí)這個(gè)世界的,你就是如何設(shè)計(jì)軟件體系結(jié)構(gòu)的,然后讀讀其它書(shū),觸類旁通,自己創(chuàng)造機(jī)會(huì)多實(shí)踐,成功自然會(huì)到來(lái)的,總之,不管是結(jié)構(gòu)化設(shè)計(jì)還是面向?qū)ο笤O(shè)計(jì),評(píng)價(jià)一下自己的軟件系統(tǒng)設(shè)計(jì)方案吧,有好多指標(biāo)呢,比如是否均勻和平衡?局部獨(dú)立性強(qiáng)不強(qiáng)?有沒(méi)有歧異的結(jié)構(gòu)?有沒(méi)有層次太多或太少?有沒(méi)有某個(gè)層次太大、太廣?是不是邏輯結(jié)構(gòu)先復(fù)雜了再化簡(jiǎn)的?還是只會(huì)設(shè)計(jì)簡(jiǎn)單的,復(fù)雜不起來(lái)(這一點(diǎn)是笨哦,如果出現(xiàn)多次,請(qǐng)你不要意氣用事,轉(zhuǎn)行吧)?最重要的一點(diǎn),是否容易理解、實(shí)現(xiàn)和改進(jìn)?你自己會(huì)得出評(píng)價(jià)的。如果有機(jī)會(huì)看到別人的設(shè)計(jì),一定不要錯(cuò)過(guò)學(xué)習(xí)的機(jī)會(huì),自己推導(dǎo)一遍,認(rèn)真比較比較,獲益會(huì)較多。
走到這一步,你就應(yīng)該關(guān)注設(shè)計(jì)模式了,首先還是學(xué)習(xí),這方面的好書(shū)有的是,但一般在工作中用到的設(shè)計(jì)模式較為單一,應(yīng)該多嘗試一下其它的設(shè)計(jì)模式。其次必須要明白設(shè)計(jì)模式不是設(shè)計(jì)思路,也不能代替設(shè)計(jì)思路,比方你要從A到B修一條路,設(shè)計(jì)模式只是讓你選擇,是修水泥的還是柏油的?是高架路還是普通的,但線路必須你自己定,而線路就是設(shè)計(jì)思路,模式對(duì)思路是有影響,但不能代替,所以如果你的智商高達(dá)250,我相信你直接用匯編語(yǔ)言也能寫(xiě)出面向?qū)ο蟮某绦騺?lái)。第三在此有一
個(gè)陷阱,很多系統(tǒng)分析員生搬硬套設(shè)計(jì)模式,全然不懂如何融會(huì)貫通,在你的一項(xiàng)具體工作中,往往是以一種設(shè)計(jì)模式為主,其它模式為輔的,思維不拘泥于形式才是關(guān)鍵,而且也為你到達(dá)更高的軟件設(shè)計(jì)的境界做好準(zhǔn)備。
唉!都不知該怎么向下寫(xiě)好了,因?yàn)橐堰_(dá)到作者水平的極限了,我胡亂說(shuō)一點(diǎn),你湊合看吧。軟件設(shè)計(jì)最終的層次是:以無(wú)法為有法、以無(wú)限為有限,這句話是李小龍說(shuō)的,不是我說(shuō)的。再拾人牙慧一把,類比一個(gè)故事吧,金大俠在《倚天屠龍記》里講到張無(wú)忌初學(xué)太極,學(xué)會(huì)的標(biāo)志是把剛學(xué)的招數(shù)全忘了,記住的是太極的道理和精神,和李小龍有些相似喔,軟件設(shè)計(jì)也一樣,忘記所有的設(shè)計(jì)模式,隨心所欲進(jìn)行設(shè)計(jì)才是至高境界,所以你能到達(dá)多高的軟件設(shè)計(jì)的境界最終將取決于你的哲學(xué)素質(zhì),這一點(diǎn)實(shí)在是不好寫(xiě)啊,你自己領(lǐng)悟吧!作者只有祝福了!
五、職業(yè)人的終極目標(biāo):全面修煉,成為L(zhǎng)eader 這一節(jié)更不好寫(xiě),涉及到太多其它非技術(shù)方面的因素,特別是個(gè)人人生觀和世界觀的修煉,如果本帖的點(diǎn)擊率超過(guò)作者私下期望的一個(gè)數(shù)值,那我就爭(zhēng)取盡力厚著臉皮再補(bǔ)上吧。我只說(shuō)一句,雖然大家都知道軟件開(kāi)發(fā)是一個(gè)團(tuán)隊(duì)性的工作,但追求參與一個(gè)大型軟件系統(tǒng)的成功開(kāi)發(fā),是一名軟件人員的本能,就像拿破侖說(shuō)的不想當(dāng)元帥的士兵不是好士兵,所以不追求實(shí)現(xiàn)大系統(tǒng)的軟件人員,也不是一個(gè)好的職業(yè)軟件人員,但你只有成為L(zhǎng)eader,領(lǐng)導(dǎo)一個(gè)優(yōu)秀的軟件開(kāi)發(fā)團(tuán)隊(duì),才有機(jī)會(huì)實(shí)現(xiàn)這個(gè)終極職業(yè)目標(biāo),對(duì)不對(duì)?
好吧,不管你現(xiàn)在的感受如何,我都謝謝你能讀到這里!我不習(xí)慣假歉虛,就不說(shuō)什么作者水平有限,本文拋磚引玉,歡迎大家批評(píng)斧正之類的客套話了,雖然作者水平確實(shí)有限。所以我認(rèn)為你盡管有權(quán)砸磚,但實(shí)在沒(méi)必要搞回帖、或回罵、或頂之類的玩意兒,我只是盡興寫(xiě)一點(diǎn)多年從事軟件開(kāi)發(fā)工作的體驗(yàn),因此接下來(lái)我就高掛免戰(zhàn)牌,不回復(fù)任何回帖了。再次謝謝你能有耐心讀到這里!希望本文對(duì)你有所裨益,祝你成功!再見(jiàn)!
第二篇:如何成為一個(gè)合格的Java程序員
如何成為一個(gè)合格的Java程序員? 合格的Java程序員就是要技術(shù)精湛,懂得溝通,然后就是要不斷學(xué)習(xí)學(xué)習(xí)。如何成為一個(gè)合格的java程序員,想要成為一名合格的java程序員需要掌握哪些?下面,讓多迪技術(shù)總監(jiān)為你一一介紹。
1、技術(shù)能力這是非常重要的事,過(guò)硬的技術(shù)能讓你得到面試機(jī)會(huì),并在工作中游刃有余。當(dāng)公司招聘一個(gè)Java開(kāi)發(fā)人員時(shí),是會(huì)優(yōu)先考慮能力因素的。在實(shí)際的項(xiàng)目開(kāi)發(fā)中,一個(gè)程序員的技術(shù)能力等于其解決問(wèn)題的能力。
2、專業(yè)基礎(chǔ)是一個(gè)程序員的知識(shí)積累很大程度上決定了其解決問(wèn)題的能力。知道如何編寫(xiě)代碼是基本的技能,但是知道Java編程語(yǔ)言的原理,知道代碼背后的算法將使你從人群中脫穎而出。
3、主流編程工具有構(gòu)建工具:Maven或Gradle。SCM:Git(不是GitHub。大不相同)。構(gòu)建自動(dòng)化:Jenkins。IDE:Netbeans或Eclipse——不僅用于編寫(xiě)代碼,而且還從IDE中重構(gòu)和調(diào)試代碼。Bug跟蹤:Bugzilla或Jira。
4、JSF的知識(shí)是應(yīng)用程序服務(wù)器,所有Java開(kāi)發(fā)人員應(yīng)該知道如何在Apache Tomcat中部署。當(dāng)Glassfish開(kāi)發(fā)停止時(shí),下一個(gè)最好的事情是J Boss Wild Fly。
5、溝通的能力是我們做好一切事情的關(guān)鍵。我們必須與我們周?chē)沫h(huán)境保持互動(dòng),無(wú)論是在我們的私人還是職業(yè)生活中。一個(gè)良好的程序員知道如何在各種團(tuán)體面表達(dá)自己。也許對(duì)你來(lái)說(shuō)顯而易見(jiàn)的東西在他人的角度來(lái)看并非如此。從大的尺度來(lái)看,一個(gè)程序員知識(shí)積累的多少只決定于其自學(xué)能力和他對(duì)編程本身的興趣。
6、自學(xué)能力是一個(gè)非常重要的技能,在你自己的空閑時(shí)間學(xué)習(xí)新的技能。不要等待公司為你提供培訓(xùn)。你需要自己去學(xué)習(xí)新技術(shù),提升自己在相關(guān)領(lǐng)域的水平。從WEB前端開(kāi)發(fā)到架構(gòu)模式,總是有一些新事物值得學(xué)習(xí)。經(jīng)常閱讀博客和論壇,嘗試加入本地聚會(huì)小組。你學(xué)到的東西可以幫助你的事業(yè)。知識(shí)刷新頻率極快讓人無(wú)法追趕的這個(gè)時(shí)代,難免會(huì)有超出自己知識(shí)范圍的時(shí)候,此時(shí)你的自學(xué)能力決定了你能多快的完成任務(wù)。
7、良好的團(tuán)隊(duì)合作精神是所有開(kāi)發(fā)人員都是作為團(tuán)隊(duì)的一部分在協(xié)同工作。你需要致力于團(tuán)隊(duì)的目的,或幫助新的團(tuán)隊(duì)成員克服障礙。不要存在這種“我只要做好我的本職工作,下班就直接回家”的態(tài)度。成為團(tuán)隊(duì)的一部分,幫助周?chē)耐拢瑢?duì)自己的能力也是不小的提升。
第三篇:一個(gè)合格的JAVA程序員需具備的素質(zhì)(模版)
一個(gè)合格的JAVA程序員需具備的素質(zhì)
對(duì)于一個(gè)剛從學(xué)校畢業(yè)的應(yīng)屆生,怎樣才能較好地適應(yīng)企業(yè)的發(fā)展,而不被企業(yè)所淘汰。個(gè)人有以下一些見(jiàn)解。
首先,JAVA程序員畢竟是一項(xiàng)技術(shù)工作,所以我們必須從技術(shù)上和業(yè)務(wù)上不斷地提升自我。那提升自己的技術(shù)水平和業(yè)務(wù)水平又需要大家具備以下能力。
一、扎實(shí)的理論基礎(chǔ)
假若理論知識(shí)不扎實(shí),遇到問(wèn)題通過(guò)百度、google或者請(qǐng)教別人,雖然也能把問(wèn)題解決,但是需要花比別人多的多的時(shí)間才能把問(wèn)題解決,而且大部分情況下還不能很完美的解決。那有人說(shuō),如果我的理論知識(shí)本身就是那樣,如何才能使自己有扎實(shí)的理論基礎(chǔ)呢?我覺(jué)得這個(gè)也比較簡(jiǎn)單,多看看別人的代碼,多進(jìn)行總結(jié)。當(dāng)然也可以多看看書(shū)本。
二、要有較強(qiáng)的自學(xué)能力
許多企業(yè)非常看重個(gè)人的自學(xué)能力。因?yàn)镮T行業(yè)技術(shù)更新太快,只有通過(guò)不斷地學(xué)習(xí)才跟得上社會(huì)的進(jìn)步,因此,個(gè)人的自學(xué)能力對(duì)于企業(yè)的發(fā)展非常的重要。
三、注重編碼規(guī)范
一般來(lái)說(shuō),IT行業(yè)離職率較高,因此,讓新來(lái)的員工看懂以往的代碼也是企業(yè)非常關(guān)注的。有良好的編碼習(xí)慣,注重代碼的注釋,都是一個(gè)程序員必不可少的能力。
四、注重團(tuán)隊(duì)精神和較好的溝通能力
對(duì)于一個(gè)項(xiàng)目來(lái)說(shuō),獨(dú)立開(kāi)發(fā)的項(xiàng)目幾乎不存在,都是由多人協(xié)作開(kāi)發(fā)的,特別是產(chǎn)品化的項(xiàng)目,因此,具備較好的團(tuán)隊(duì)精神和較好的溝通能力非常重要。
五、較好的文檔能力
一個(gè)程序員不僅要掌握一定的技術(shù)能力,還需要具有一定的文檔編寫(xiě)能力。良好的文檔能力能幫助我們更好地進(jìn)行開(kāi)發(fā)。一般來(lái)說(shuō),軟件項(xiàng)目的發(fā)展需要經(jīng)過(guò)需求調(diào)研,概要設(shè)計(jì),詳細(xì)設(shè)計(jì)等一系列的步驟,這些都是編碼前的準(zhǔn)備工作,一般項(xiàng)目特別是大項(xiàng)目會(huì)把大部分時(shí)間都花在文檔整理上。
第四篇:一個(gè)程序員的邏輯思維
一個(gè)程序員的思維邏輯
程序員最基礎(chǔ)的素質(zhì)是什么? 答:實(shí)事求是,對(duì)就對(duì),錯(cuò)就錯(cuò); 程序員一個(gè)最需要的的是什么? 答:耐心 程序員作品追求 答,零缺陷(no bugs)
1、不要說(shuō)在我好的,看生產(chǎn)環(huán)境的結(jié)果 如何獲得成功感 為每次正確的感到自豪。寫(xiě)程序,以最簡(jiǎn)單的入手。
是因?yàn)槌绦虿皇菍?duì)就錯(cuò)。錯(cuò)了一個(gè)逗號(hào)也錯(cuò)。程序是具有嚴(yán)謹(jǐn)性。
1、單元測(cè)試(Junit,main)
2、代碼分析與異常的定位(有什么方案)(10)出了問(wèn)題:
如果出了異常,不會(huì)將異常信息打印到控制,負(fù)分。
1、第一步,想看到看控制臺(tái),1
2、第二步,想到看看什么異常,分析為什么報(bào)這個(gè)異常,2
3、第三步,在異常堆棧信息找自己寫(xiě)的類分析(入口),3
4、第四步,通過(guò)在異常信息里找到相關(guān)的類,設(shè)置斷點(diǎn),知道斷點(diǎn)需要什么數(shù)據(jù)。通過(guò)數(shù)據(jù)分析出異常原因,4
5、第五步,能夠設(shè)置不同類的斷點(diǎn),設(shè)置分析邏輯,5
6、第六步,如果發(fā)現(xiàn)異常信息沒(méi)有自己可以調(diào)試的類,可以看懂異常信息,6(耐心)
7、第七步,如果發(fā)生異常信息,找不到自已調(diào)試類,異常沒(méi)有很具體說(shuō)明。如果通過(guò)分析異常信息,找到類庫(kù)需要調(diào)試的(入口)7
8、第八步,如果發(fā)現(xiàn)一個(gè)很奇怪的問(wèn)題。無(wú)法定位。以排除法排除對(duì)的東西定位。8分
9、第九步,新技術(shù),不懂概念。問(wèn)題也找不到定位,還可以找解決的方法。我的方法,做DEMO。
10、只有程序都不是問(wèn)題!!10 總結(jié):定位問(wèn)題,分析解決
斷點(diǎn)調(diào)試(只是一個(gè)工具)
BUG出現(xiàn)是必然,出現(xiàn)BUG不是問(wèn)題,問(wèn)題是能不能找到解決方案。
如何創(chuàng)建一個(gè)屬于自己的產(chǎn)品
1、有沒(méi)有獲得需求的能力。(對(duì)社會(huì)有沒(méi)有想法)
2、沒(méi)有設(shè)計(jì)的能力,(系統(tǒng)設(shè)計(jì),數(shù)據(jù)庫(kù)設(shè)計(jì))
(1)技術(shù)基礎(chǔ)(JAVA,解決方案(StringMVC+mybatis+ajax+json....))(2)三層架構(gòu)(設(shè)計(jì)理念,面向?qū)ο螅?/p>
(3)數(shù)據(jù)設(shè)計(jì),將需求變成數(shù)據(jù)庫(kù)表(DDL,DML,設(shè)計(jì)理念)(4)頁(yè)面的設(shè)計(jì)(HTML,CSS,JS)
3、組織以及管理能力
(1)如何協(xié)同開(kāi)發(fā)(管理目錄,SVN)(2)如何找到適合人員(能力,角色)
思考
1、一個(gè)程序需要哪些技能?
2、對(duì)于一個(gè)希望做某個(gè)職業(yè)的人來(lái)說(shuō),能不能能圈。
3、進(jìn)圈以后,再思考位置。、
第五篇:一個(gè)程序員的總結(jié)
2011總結(jié)
人生易老、時(shí)光易去。不知不覺(jué),又到了年終。
回首這一年,細(xì)細(xì)思量,有歡樂(lè),有憂愁;有收獲的喜悅,亦有遇到挫折的沮喪。更多的還是每天一點(diǎn)一滴的積累起來(lái)的成長(zhǎng)。
在這一年,認(rèn)識(shí)了很多良師益友,獲得了很多經(jīng)驗(yàn)教訓(xùn),也要感謝公司給我成長(zhǎng)的空間。
接近年終,有必要對(duì)將要結(jié)束的一年做一下總結(jié)。
一、工作內(nèi)容
今年四月份左右,加入了‘***’項(xiàng)目組,第一次了解了進(jìn)銷(xiāo)存系統(tǒng)的邏輯,第一次使用聯(lián)通封裝的框架進(jìn)行開(kāi)發(fā)。主要實(shí)現(xiàn)了銷(xiāo)售、采購(gòu)、合同、庫(kù)存等功能。在實(shí)際開(kāi)發(fā)過(guò)程中,對(duì)我個(gè)人的成長(zhǎng)起了很重要的作用;一方面對(duì)技術(shù)有了更深入的了解,增強(qiáng)了個(gè)人自信。在項(xiàng)目開(kāi)發(fā)過(guò)程中,我們遇到了一些問(wèn)題,但也克服了許多的問(wèn)題。并完成一期的開(kāi)發(fā)任務(wù)。
七月份左右,加入‘**’項(xiàng)目組。主要實(shí)現(xiàn)廚房質(zhì)檢、接待部、申購(gòu)、管理者、信息反饋等表單web端及wap端的功能,并實(shí)現(xiàn)表單的動(dòng)態(tài)配置功能。在項(xiàng)目組所有項(xiàng)目成員齊心協(xié)力的努力下,我們基本在客戶要求的時(shí)間內(nèi)完成了項(xiàng)目的開(kāi)發(fā)、測(cè)試并最終上線。在這段時(shí)間,吸取了原來(lái)開(kāi)發(fā)中的一些問(wèn)題,養(yǎng)成了較好的開(kāi)發(fā)習(xí)慣,并積累了wap端開(kāi)發(fā)的經(jīng)驗(yàn)。
十一月底,加入‘**’項(xiàng)目組,這個(gè)項(xiàng)目剛剛開(kāi)始,有一些以前未曾遇到的問(wèn)題,但每一個(gè)挑戰(zhàn)都是一個(gè)新的成長(zhǎng),每個(gè)挑戰(zhàn)都代表著自身能力的增加。
二、在這一年的工作過(guò)程中,總結(jié)了一下個(gè)人不足。
1、在開(kāi)發(fā)中,經(jīng)常會(huì)遇到調(diào)好一個(gè)BUG出現(xiàn)一個(gè)新的BUG,或者遇到一個(gè)問(wèn)題,調(diào)試半天才發(fā)現(xiàn)是一個(gè)很小的問(wèn)題。而出現(xiàn)這種問(wèn)題的原因完全都是因?yàn)椴粔蚣?xì)心。
2、在項(xiàng)目開(kāi)發(fā)完之后的一段時(shí)間,會(huì)出現(xiàn)懶惰的心態(tài),沒(méi)能保持長(zhǎng)期的工作積極性。
三、一年的結(jié)束意味著新的一年的開(kāi)始,在此,計(jì)劃明年要實(shí)現(xiàn)以下事情
1、加強(qiáng)對(duì)新技術(shù)的學(xué)習(xí),尤其是要一些前臺(tái)功能所涉及到的知識(shí)。
2、加強(qiáng)自身邏輯思維能力,以及業(yè)務(wù)分析能力。
四、對(duì)公司的建議
1、希望公司組織人力開(kāi)發(fā)一套自己的框架,這樣可避免每做一個(gè)項(xiàng)目都要
先熟悉開(kāi)發(fā)架構(gòu),降低學(xué)習(xí)成本。
2、希望定期舉行聚會(huì),這樣可為員工提供技術(shù)交流的平臺(tái),并促進(jìn)同事之間感情,增強(qiáng)公司凝聚力。
五、結(jié)言
善始者未必善終,善做者未必善成,成功的過(guò)程是一個(gè)學(xué)習(xí)并堅(jiān)持的過(guò)程。每一天成長(zhǎng)一點(diǎn)點(diǎn),長(zhǎng)期堅(jiān)持,必然從一個(gè)菜鳥(niǎo)成長(zhǎng)為一名經(jīng)驗(yàn)豐富的人才,如此才能勝任更多更重要的工作。
未來(lái)一年,我將繼續(xù)拼搏,認(rèn)真對(duì)待工作,完善自我,為公司發(fā)展盡自己最大的努力。