修煉一名程序員的職業(yè)水準(zhǔn)[3]
]有自己debug的特點(diǎn),下面的說(shuō)法作者不敢太肯定,只是經(jīng)驗(yàn)之談,
修煉一名程序員的職業(yè)水準(zhǔn)[3]
。即使在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í)間如果算一份的話(huà),其累計(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èi)拔萃! 做好程序的單元測(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í)話(huà),我也從來(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!,用周星星的話(huà)說(shuō):是高手之高高手,因?yàn)閯e人看不出你高在哪兒,沒(méi)見(jiàn)你有什么高招或特拚命干,但反正你就是干得又快又好、又省力,資料共享平臺(tái)
《修煉一名程序員的職業(yè)水準(zhǔn)[3]》(http://www.oriental01.com)。關(guān)于進(jìn)行單元測(cè)試還有很多復(fù)雜的`方法,在此本文只提到了最基本的一點(diǎn),目的是讓你在工作上考慮周全、安排有序,其它的自己琢磨吧,沒(méi)有人能替你吃飽飯! 如果你是用C++編程,我再簡(jiǎn)單談?wù)動(dòng)嘘P(guān)內(nèi)層釋放的一個(gè)小技巧,就是對(duì)所有你編寫(xiě)的類(lèi),在構(gòu)造和析構(gòu)函數(shù)中加打印語(yǔ)句,統(tǒng)計(jì)每個(gè)類(lèi)在運(yùn)行程序時(shí)構(gòu)造和析構(gòu)的地方,如果是配對(duì)的,那么起碼沒(méi)有對(duì)象類(lèi)一級(jí)的內(nèi)層在程序運(yùn)行結(jié)束時(shí)沒(méi)有釋放,然后你就可以把打印語(yǔ)句刪掉了,招數(shù)雖土,但管用! 還有其它一些好習(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è)類(lèi)的所有成員函數(shù)總和不宜超過(guò)1500行,多了就應(yīng)該考慮分解成兩個(gè)類(lèi)(這個(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)。【修煉一名程序員的職業(yè)水準(zhǔn)[3]】相關(guān)文章: