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