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