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