|
前些日子在熊節(jié)先生的blog上看到一段文章“Why Ruby is Simple”,試著翻譯了一下,譯文如下(原文摘自《The Ruby Way》一書):
Ruby的一大優(yōu)點就是簡單。對于這一點我想引用一個思想家的話來說明——正如Antoine de St. Exupéry所說“所謂完美,并不是說不需要加入新的內(nèi)容了,而是說沒有什么應該被去掉的了。” 然而Ruby語言實際上也有它復雜的一面。那么為什么我還要說它是簡單的呢? 如果你對宇宙感興趣的話,那你應該聽說過“復雜性守恒定律”——即,事實上我們不可能完全避免復雜性,不過我們卻可以對它進行重新分配。 這就是問題的關(guān)鍵——復雜性不可能被完全避免,但我們卻可以在某一階段對它置之不理,視而不見。這也就是現(xiàn)在流行的傳統(tǒng)的“黑箱”理論,一個“黑箱”可以在內(nèi)部完成一個相當復雜的任務,但是對于外部使用者來說它卻又非常易于操作。 就像愛因斯坦說的:“每件事情都應該盡可能的簡單,但也不能過分簡單。” 在Ruby當中我們會發(fā)現(xiàn),程序員的想法可以以非常簡單的形式表現(xiàn)出來(當然對于維護解釋器的那些程序員而言,情況也許不是這樣)。不過,Ruby也作了一些折衷的處理。畢竟在現(xiàn)實世界中,我們多少要做一點妥協(xié)。比如,在一段Ruby程序中每一個實體(entity)都應該是一個真正的對象(true object),然而在實際執(zhí)行的時候,某些象整數(shù)(integer)這樣的值卻是以直接值(immediate value)的形式存儲的。在計算機科學發(fā)展的數(shù)十年間,類似的折衷對我們來說并不陌生,為了獲得能夠運轉(zhuǎn)起來的實際作品,我們往往會放棄優(yōu)雅的設(shè)計。事實上我們總是以犧牲一種簡潔性(理論的簡潔性)為代價來換取另一種簡潔性(實現(xiàn)的簡潔性)。 “當你用一個較小的語言表述你的思想的時候,你會寫出一大堆東西來。而當你用一個較大的語言來做同樣事情的時候,你只需要寫一點就夠了。”Larry Wall的這一段關(guān)于Perl語言的評論同樣也適用于英語(以及大多數(shù)編程語言)。比如生物學家Ernst Haeckel就曾經(jīng)用“Ontogeny recapitulates phylogeny”這3個單詞來概括他的工作,當然我們知道在這3個高度濃縮的單詞背后,包含著大量具體而復雜的意義——而這也正是我們程序員要做的工作——我們應該讓語言具有“內(nèi)在的復雜性”,這樣我們才能保持簡單的表達方式,而把復雜的細節(jié)隱藏起來。 我個人對簡潔性的理解是:如果你能用10行代碼搞定一個程序,那就不要把它寫成200行。 我相信簡短通常來說是一件好事。對于程序員來說,一段短小精悍的程序更容易記憶,也更容易把握其整體思路。同時它還會帶來一個好的“副作用”——寫代碼的時候,不容易出現(xiàn)bug。 當然我們也不能忘記愛因斯坦的警告。如果過于強調(diào)簡潔性,那我們的代碼最終也許會變成一堆沒人能夠理解的垃圾。信息論的研究結(jié)果表明:信息被過分“壓縮”的時候往往會令人費解——如果你見過或者親自用C、APL之類的常規(guī)表達式語言編寫過程序的話,你就會體會到惡劣的編碼方式帶來的危害。簡單,但不過于簡單;讓代碼盡量簡短,同時又保持可讀性。這才是我們應該做的。 |
|
|