修煉一名程序員的職業(yè)水準(zhǔn)[3]
有自己debug的特點,下面的說法作者不敢太肯定,只是經(jīng)驗之談。即使在VC這種高度完善的開放環(huán)境下,你仍然應(yīng)該要求自己僅憑打印語句就能debug.這也有兩點好處,第一個好處是,遇到bug你會認(rèn)真想問題所在,而不是用debug工具一步步簡單地追蹤卡在哪兒了,你定位bug范圍的方式是從大到小、從粗到精,這是一種自頂向下的思維方式,而用工具追蹤,容易形成自底向上的思維方式,這不算好,你應(yīng)該先看到森林,再看到樹木。我反復(fù)提及:程序就是邏輯過程,大多數(shù)程序從main函數(shù)開始,是由數(shù)據(jù)結(jié)構(gòu)和功能子程序組成的一個樹形結(jié)構(gòu)的邏輯過程(要認(rèn)清即使是面向?qū)ο蟮某绦蛘Z言也是一樣的),它的執(zhí)行過程是深度優(yōu)先的,但你定位bug應(yīng)該是廣度優(yōu)先的,好好想想這一點,嗯?第二個好處是強(qiáng)迫你思考并記住而不是用工具看到調(diào)用過程,你大腦的抽象邏輯思維能力和胳膊上肌肉的力量一樣,都是練出來的,如果你的bug是程序結(jié)構(gòu)上的邏輯錯誤引起的,這一點就非常重要了,順便說一句,最難打的bug就是程序邏輯結(jié)構(gòu)錯誤導(dǎo)致的bug.你要是真正明明白白地認(rèn)識到這兒了,那我就沒什么東西可以告訴你了?傊绦騿T的職業(yè)水準(zhǔn):生產(chǎn)效率和程序質(zhì)量,主要是取決于源碼中bug的數(shù)量和debug的速度,而不是取決于編寫源碼的速度。給你一個我自己定義的考查一個職業(yè)程序員的指標(biāo):一個合格水準(zhǔn)的職業(yè)程序員,編程的時間如果算一份的話,其累計debug的時間不能超過一份,真正職業(yè)高手累計debug的時間應(yīng)該控制在0.5份以下,如何?你關(guān)上門悄悄問問自己,你花費在編程和debug上的時間比例是多少?如果你把程序員作為自己一生的職業(yè),那么就永遠(yuǎn)都要牢記一點:追求做一個0 bug的優(yōu)秀程序員!這是任何一個想成為職業(yè)程序員的人的理想,請相信:堅忍不拔地追求實現(xiàn)這個理想將讓你出類拔萃! 做好程序的單元測試,這是另一項考查你是否是一名具有合格職業(yè)水準(zhǔn)的程序員的.一個必要指標(biāo)。其實在你拿到需求的時候就要準(zhǔn)備單元測試用例了,并且這些用例將直接影響你的詳細(xì)設(shè)計(有關(guān)軟件設(shè)計本來是該放在第四節(jié)講的).我們還是打比方吧,當(dāng)你拿到一個需求時,除了分析它靜態(tài)的功能外,還應(yīng)明確它動態(tài)的操作/執(zhí)行過程,把這個動態(tài)過程明確地用流程圖畫出來,比如分為A~Z的26步,其中A又可以進(jìn)一步分解為A1~A5的5步,直到不能再分解為止。又比如說A3步不可分解了,那么你應(yīng)該把A3步的正常操作和所有五花八門的異常操作都列出來,確保正常的操作肯定正確,異常的操作起碼程序不退出才行。這樣你就要寫好多好多的測試用例,說句老實話,我也從來不寫!但我一般會列一個提綱,比如A3步有正常的操作a、b、c、d、e共5項,異常的操作有f、g、h、i、j、k、l、m、n共9項,你在進(jìn)行單元測試時都應(yīng)該跑一遍,這樣的程序都還不敢說質(zhì)量如何好,但起碼可以說較穩(wěn)定吧!如果要想在進(jìn)行單元測試時干得快、效率高,那么在進(jìn)行詳細(xì)設(shè)計時,你就應(yīng)該把A3步中對所有正常操作和異常操作的判斷都設(shè)計好,在編程實現(xiàn)A3步時,使得程序的結(jié)構(gòu)合理高效,對不對?所以,如果你在工作中是割裂地看待軟件工程中從需求、分析、設(shè)計、編程、測試等各個環(huán)節(jié),恐怕水平很有限喔!但如果你在分析需求時就能看到測試的問題,并改進(jìn)設(shè)計和實現(xiàn),為此做好相應(yīng)的準(zhǔn)備工作,嘿嘿,整個軟件開發(fā)過程你的效率會高很多,通常你在一個開發(fā)團(tuán)隊中就會高度自信的,你已越過當(dāng)一名偏頗、露骨的高手的境界,成為一個平靜的高手,這可是The best in the best!,用周星星的話說:是高手之高高手,因為別人看不出你高在哪兒,沒見你有什么高招或特拚命干,但反正你就是干得又快又好、又省力。關(guān)于進(jìn)行單元測試還有很多復(fù)雜的方法,在此本文只提到了最基本的一點,目的是讓你在工作上考慮周全、安排有序,其它的自己琢磨吧,沒有人能替你吃飽飯! 如果你是用C++編程,我再簡單談?wù)動嘘P(guān)內(nèi)層釋放的一個小技巧,就是對所有你編寫的類,在構(gòu)造和析構(gòu)函數(shù)中加打印語句,統(tǒng)計每個類在運行程序時構(gòu)造和析構(gòu)的地方,如果是配對的,那么起碼沒有對象類一級的內(nèi)層在程序運行結(jié)束時沒有釋放,然后你就可以把打印語句刪掉了,招數(shù)雖土,但管用! 還有其它一些好習(xí)慣,在這里我隨筆寫一些,你要是有不同看法也請一笑過之吧。編程時應(yīng)該對齊縮進(jìn),一個縮進(jìn)用一個tab鍵,一般是4個空格,嚴(yán)格遵守開發(fā)團(tuán)隊的編程規(guī)范也是非常重要的。一個子程序不應(yīng)超過30行(不算空行),其內(nèi)多重循環(huán)不應(yīng)超過3層,否則都應(yīng)該分裂成兩個子程序,個別算法程序可以長一些,但也不宜超過200行。通常一個類的所有成員函數(shù)總和不宜超過1500行,多了就應(yīng)該考慮分解成兩個類(這個工作最好在設(shè)計時就完成).每完成一小段程序,比如15~30行,就立即編譯運行,不要假裝高手,先敲它一大堆程序,再編譯運行,妄想一次成功,體驗一種假爽的、虛榮的快感,或炫耀給別人看,這么做只能證明自己是一個不折不扣的傻瓜,裝酷而已。因為只要有一次不成功,你就會花費大量的時間來調(diào)程序,別人的進(jìn)度在這時就遠(yuǎn)遠(yuǎn)地超過你了,平常心是道,還是修煉真功夫吧!孫子兵法里關(guān)于這一點有明確的闡述,我就不引用了,但建議你真的不要這么干,除非你確實就是這樣總是一次就成功的天才,那你還看這篇文章干什么呢?我又不是寫給你們這些天才們看的。再就是有學(xué)會買好書、讀好書,關(guān)于計算機(jī)和軟件方面的書太多了,時間有限,比如有一個叫侯捷的家伙,幾乎寫的每本書都不錯,張國峰的C++編程也不錯,這只是我的個人意見啊,好書多著呢,列出來比這篇文章長好多倍,我就不多說了。還有一招,要是你運氣好,能搞到一些著名軟件系統(tǒng)的源碼,好好讀讀吧,在此我只能告訴你,Linux操作系統(tǒng)的一些源碼不錯,是開放的,你可以合法地搞到,其它的不要說是我建議你侵犯知識版權(quán)!
【修煉一名程序員的職業(yè)水準(zhǔn)[3]】相關(guān)文章:
職業(yè)道德修煉08-21
職業(yè)心態(tài)的修煉與提升10-06
職業(yè)人的植物修煉法則11-21
職業(yè)經(jīng)理人的修煉職業(yè)化的心態(tài)09-08
《教師職業(yè)道德修煉》讀后感08-29