1. 程式人生 > >我編碼中的愛打#號的習慣

我編碼中的愛打#號的習慣

                審查我的程式碼,通篇如下:
printf(“##############-------sss---:%s %d”, something_a, something_b);
其噁心程度,真的令人作嘔。我面臨了N多次的批評,然而仍然不知悔改,真是屢教不改,僵化透頂。然而我這麼做有自己的理由,最終我的做法是,提交到svn的程式碼裡面保證沒有上述的列印,在我自己的實驗程式碼裡面,我仍然保留了這個style。    第一,除錯的時候,我的列印可以通過一堆#號和系統的輸出區別開來,這樣我就可以一眼看出哪裡是我自己的輸出了,即使再亂,畢竟只是我自己的除錯,我看懂即可;    第二,正式提交時,我可以在原始碼目錄下執行:grep –r –n “####” |grep printf然後簡單刪除這些很亂的語句。    第三,在除錯的時候用標準的日誌輸出我覺得很浪費時間,還要迎合日誌介面的api規範,另外我相信打日誌是造成段錯誤的元凶之一,因此我不喜歡使用標準的日誌方式來除錯,事實上,我根本就不喜歡日誌,特別是沒完沒了的日誌。    然而,我不止一次的將這些#號帶進了正式的程式碼,這是很不應該的。其實這個習慣由來已久,由於不是科班出身,系統學習程式設計已經是畢業後的事情了,那時作為交換,我每天教一個同時畢業的計科系的同事一點網路知識以及配置,他教我一些程式設計,他也就是一般人,並不是教科書,也沒有把老譚的書介紹給我,倒是把打#的習慣給我了,那時除了知道陣列,基本型別之外就知道打#號了,打#號伴隨了我5年,期間想改掉,但是沒有用,隨手就打出來了,後來想想,幹嘛非要改呢,為我所用豈不更妙,因此我敢保證,我打#號已經出神入化了~~。    不知道那傢伙,那教我打#號的傢伙現在可好,已經幾乎沒有聯絡了。那個時候,我教給他很多的網路知識,比如OSPF協議,好像連做雙絞線的方法都教會他了,為了這還花錢買了一把鉗子,好幾十大洋…據說那傢伙後來還真的到了一家做路由的網路公司,老子功不可沒,而他呢,也教會了老子一個妙招,那就是打#號,我可為此捱了不少批評,這個交換太不公平了啊!為了公平,老子也不能找他理論去,最好的辦法就是把#號打的出神入化,此招可以流傳千古而不壞。    我那時只會一點java,因此之後的日子裡,活學活用的我同樣寫出了:
System.out.println(“################”+str);
這樣的句子,要知道遇到他之前,我的列印不要太標準啊。時隔五年了,第一家公司的同事都沒什麼聯絡了,很想他們,特別是那教會我打#號的傢伙,想讓他請我喝酒…順便算一下舊賬…仔細點點,後來到過幾家公司,影響我程式設計風格的人還真的不少,而且全是壞習慣,比如為了快而簡單的命名變數,比如習慣用棧分配記憶體,比如不喜歡使用庫等等,第二家公司寫了一年暫存器,因此就習慣了硬編碼,頂多用一個巨集…    悲慘啊,今天生病請假,在家想了一天,為什麼我的一個簡單的VPN管理介面竟然返工那麼多次,都是多年積累的壞習慣的惡果啊,一個簡單的東西竟然屢次不合格,並不是做不好,也不是不上心,而是習慣的力量屢次讓自己潛意識的寫出令人作嘔的程式碼,作嘔之處在於以下幾點:1.打#號,正式程式碼沒有移除;2.邏輯不嚴謹,正常流能跑,異常流不可控,崩潰不可查;3.函式,變數命名令人費解,拼寫錯誤;4.硬編碼,魔術字到處都是,沒有註釋,不易維護;5.缺少錯誤判斷,編碼風格不統一。正是這些導致了我的屢次返工。而這些是大問題嗎?理論上都是一些小問題,邏輯不嚴謹這個多增加些異常流處理即可,變數命令認真些即可,魔術字用巨集定義或者動態計算或者給出註釋即可,(打#號我認為還比較好,只是正式程式碼一定要移除)然而這些小問題的背後卻是習慣的強大力量。    我自己是總結了,在此給出一些忠告給初學程式設計的人:1.在你形成好習慣之前,千萬別去觸動更深層次的東西,要一步一步走,否則就會成為夾生飯,和我一樣;2.先把基礎打好,再學別的。如果你連一個int型多少位元組都不知道,就不要去自己去寫更復雜的演算法;3.理解演算法,擁有更多的知識並不能使你成為一個好的程式設計師。你必須能自己完美無瑕的實現你的想法,哪怕是最簡單的想法;4.程式碼的可讀性更重要,如果你僅僅想做一名孤獨的黑客,那麼可以忽略這一點,否則為公司效力,你的程式碼必須能讓同事看懂;5.不要認為程式碼能跑就可以了,要考慮所有可能發生的情況,異常流也要處理,好的程式碼80%都在處理異常流而不是正常流;6.寫出的程式程式碼並行的要儲存文字記錄,比如文件,比如程式碼的註釋。