Linux的創(chuàng)始人Torvalds在一次演講中有一段涉及“什么才是優(yōu)秀程序員”的話:
“爛程序員關(guān)心的是代碼。好程序員關(guān)心的是數(shù)據(jù)結(jié)構(gòu)和它們之間的關(guān)系。” |
這句話聽起來很直白,但未必所有人都能理解其內(nèi)在的涵義。在國外知名的問答網(wǎng)站stackexchange上有人對這句話提出了自己的困惑:
■ 對這句話應(yīng)該如何理解? ■ 如何學(xué)習(xí)和應(yīng)用其中的道理? |
能問出這樣的問題需要勇氣,提問的人自己也自嘲的說:我不理解這句話也許不是一個好的征兆。但同一句經(jīng)典言論,100個閱讀會得到100種不同的領(lǐng)悟,正像stackexchange網(wǎng)站上各式各樣不同的回答一樣。下面我們來看看最被認(rèn)可的一種理解吧。
如果看一下Torvalds在此句話之前說的話,可能會對我們理解它有幫助:
git的設(shè)計其實(shí)非常的簡單,它的數(shù)據(jù)結(jié)構(gòu)很穩(wěn)定,并且有豐富的文檔描述。事實(shí)上,我非常的贊同應(yīng)該圍繞我們的數(shù)據(jù)結(jié)構(gòu)來設(shè)計代碼,而不是依據(jù)其它的,我認(rèn)為這也是git之所以成功的原因之一[...]依我的觀點(diǎn),好程序員和爛程序員之間的差別就在于他們認(rèn)為是代碼更重要還是數(shù)據(jù)結(jié)構(gòu)更重要。 |
他說的意思是,好的數(shù)據(jù)結(jié)構(gòu)設(shè)計能使代碼更容易設(shè)計和維護(hù),而再好的代碼也不能彌補(bǔ)糟糕的數(shù)據(jù)結(jié)構(gòu)帶來的危害。
如果你不理解他舉的git的例子,我再解釋一下,很多的版本控制軟件都會有規(guī)律的修改它們的數(shù)據(jù)格式來支持增加的新特征。當(dāng)你升級軟件來獲得新功能時,你通常需要一些工具來轉(zhuǎn)換到相應(yīng)的數(shù)據(jù)庫格式。
舉個例子,當(dāng)分布式版本控制系統(tǒng)剛剛開始流行時,很多人不知道,為什么相對那些集中式的版本控制軟件,分布式模式下的代碼合并會如此的干凈整潔。答案無它,分布式的數(shù)據(jù)結(jié)構(gòu)更適合這樣的任務(wù)。我相信集中式的合并算法也在快速的改進(jìn),但它需要很長的時間才能趕上,因?yàn)槔系臄?shù)據(jù)結(jié)構(gòu)限制了他們使用的某些算法,而新的數(shù)據(jù)結(jié)構(gòu)破壞了很多現(xiàn)有的代碼。
相比較而言,git里的新特征在不斷涌現(xiàn),但它底層的數(shù)據(jù)結(jié)構(gòu)幾乎沒有什么變化。先考慮數(shù)據(jù)結(jié)構(gòu),你的代碼會自然的整潔起來。