01 2009 檔案
摘要: “叫我看看……”小P開始比較代碼,“哦,在這個版本你用 game 代替了 queue,用 child 代替了 one, 但是有什么實質區別?”小P有些不解。
“嗯,這個是一個用問題域詞匯編程而不是解決域詞匯編程的例子,最大的優點是意圖明確,容易理解,代碼可讀性強;另外一個好處是相對穩定——比如用 game 代替 queue——其一,評審代碼的人可能會不明白這個queue是做什么的,為什么和下面的初始化函數格格不入,從而造成你頻繁的回答大量的溝通性的問題,這將大大影響你生活的穩定性和質量;其二,如果我們將來——我是說如果——使用list數據結構來替換queue,避免了還要更改注釋的風險——代碼更新而注釋陳舊,正是我們在進行項目開發時一個特別特別特別的n次冪嚴重的問題……而使用問題域的詞匯,只要需求不發生變更,則我們就不需要修改什么而導致一些……代碼人格上的分裂……”
閱讀全文
摘要: “嗯,雖然理論上說只要保證你的代碼縮進風格前后統一就可以了,但是在現實生活中我們不會也不允許千人千面,因為大家還是要互相交流的,讓任何人去適應別人的縮進風格都是低效率和不公平的,因此形成了很多約定俗成的東西,哪怕它們不合理,但是它們的確形成了,而且你最好也遵守這樣的規矩,如果你違背了這些東西,只能說明要么你是搗亂,要么你是絕對的新手。”
“哦?”
“這些有點像江湖黑話,如果你不是混江湖的,在打切口的時候鬧了笑話,道上的兄弟一定會笑話你,新警察吧……”
“哈哈哈哈……”
“就我所知,目前江湖上有幾種常用的黑話格式,K&R,BSD和GNU等,無論你采用哪一種,別人看了就知道你是道上混的,而且知道了你的山頭,也就會高看你一眼……”
閱讀全文
摘要: “我看不懂……”老P才看了30秒就決定放棄了。
“不會吧,我覺得我寫得邏輯性還挺清楚的啊。”小P有些得意老C看不懂他寫的代碼,覺得可能自己寫的邏輯過于高深了。
“……”老C沉默了半分鐘,“這個不是C代碼!”他肯定的說道,“所以我看不懂,也不想看懂。”
“?”小P有些奇怪,“這明明就是C語言寫的代碼啊,你看,我來給你解釋解釋……”
“哦,算了,這些根本不是C代碼,我沒有必要看懂。”
“那你說這些是什么?”小P有些不高興了。
“這些是……”老C找著合適的形容詞匯,“這些是貓爬過屏幕的腳印,我沒有必要看懂腳印所代表的含義……”看到小P有些驚愕,然后開始有些生氣,逐漸開始惱羞成怒了,老C趕快對他說:“呵呵,別生氣了,我開玩笑的,不過,”老C的語氣嚴肅起來,“這些的確是很糟糕的代碼,哪怕它的算法多么高效,執行效率多么高,它都是糟糕的代碼!”
閱讀全文
摘要: “呵呵,”老C停止了和小P的說笑,覺得下午的疲倦一掃而空,“對了,剛才你在忙什么呢?”
“喔,我在做C++的練習題目。”
“是么?這么刻苦,厲害。什么題目?”
“呵呵,還挺有趣的,說是用C++的格式輸出cout在屏幕上輸出各種對齊的數據,用*號組成一個五角星,還有……”
“天,功不是這樣用的,習不是這樣學的……”老C有些囧,“扔掉那本爛書吧,沒有這樣學習C++的。”
閱讀全文
摘要: “好像一段代碼對其具體實現了解的越少,它的維護性就會越好?”小P有些猜測。
“呵呵,的確,那么我們通過各種不同的方法達到了什么樣的看似相同的目的?”老C開始掉小P的胃口。
“信息隱藏?”小P不太確定。
“信息隱藏是手段,但不是目的。”老C很確定的否決掉小P,“我們達到的目的是控制問題的規模!”
老C覺得有必要給小P講講哲學:“我們寫軟件的目的是為了解決現實生活中的具體問題,沒錯吧?”
“沒錯,的確是這樣,可是這個和C++有什么關系的?”小P覺得有些莫名其妙。
“那么你覺得使用高級的語言、先進的設計和合理的開發流程,問題的復雜度會降低嗎?”
“那是啊,問題的復雜度當然會降低啊。”
“唉,錯了,問題的復雜度不會降低的,因為問題的復雜度是客觀存在,不會因為人主觀的原因而改變!”
閱讀全文
摘要: “*^*”小P看的有些眩暈,“我有些頭暈,像暈車……”
“沒有關系,只是你不熟悉罷了。”老C摸著下巴,“這就是我說的風格問題,因為思考問題的方式不同導致代碼的風格看起一時難以接受而已。”
“哦?看來只是習慣問題?那么我再看看……”克服了暈車般的頭痛,小P又看了幾遍代碼,感覺依照自己的C基礎,看懂是沒有問題的,畢竟自己還是很油菜的。“的確是習慣問題,但是為什么老C會這樣思考問題呢?”小P想。
“因為信息隱藏……”
閱讀全文