編程極端主義
函數的概念太棒了。為什么我們不編寫一個全由函數構成的程序呢?
對象的概念太棒了。為什么我們不編寫一個所有東西都是對象的程序呢?
延后執行的概念太棒了。為什么我們不編寫一個程序讓所有的數據類型都是lazy的呢?
編程極端主義 (跟極限編程沒有關系)是一種接受某種理論、在所有事情上檢驗它、在所有地方運用它的行為。一通實驗,塵埃落定后,人們通常會回想這次極端行為,認識到“不錯,這很有趣,但很明顯,在Y上使用X明顯不合適。干這個事情我們需要使用合適的技術!”
這樣做的收獲:有時候我們應該使用錯誤的技術干某種工作——因為它有可能是正確的方法,只是你不知道而已。如果你沒有嘗試過著任何東西都是函數的編程,你可能不會明白函數的功用,例如把函數當作參數,或方便的lambdas。如果你沒有嘗試過在所有地方都使用對象,你也許就不會明白數字或對象的類都可以是對象。如果你沒嘗試過著任何地方都使用延后執行,你也許就不會明白純函數可能是一種更重要的語言特征。
所以會有下面兩個建議:
- 學習一種新理論時,請嘗試著在所有地方都使用它。這樣一來,你能更快更迅速的知道它適合干什么和不適合干什么,有時甚至你會發現和你最初對它的直覺是錯誤的。(在這種事情上,這種方法很好,但在另一方面,如果你不知道這種理論方法只適合某些情況,你就錯失了更好的認識它的機會)。
- 如果你想更清楚的了解某種理論方法,使用一種極端的語言或框架系統是最好的方法。如果你想知道延遲執行的程序究竟是什么樣的,你就該使用Haskell語言,而不是其它的把延遲執行作為可選行為的語言。雖然這種比較極端的系統的實用性并不是很強,但它們能讓你更快的獲取學習目標的真諦。
當然,有很多的情況中極端主義是不適合的,但如果是一些有趣的項目,小項目,研究性的項目,這種方法真的可以讓你學到很多東西。我的印象最深刻的事情是發生在去年,和Adam Chlipala一起工作。當時我們給Coq做一些校驗,我采用常見的方法一步一步的測試,當我大概清楚了整個測試的全貌后,我才開始使用Ltac自動化測試。Adam告訴我:“最初你就應該使用自動化測試,而不是手工的探索。”這一句圣言讓我醍醐灌頂:我還不夠極端!
文件系統很有趣。為什么我們不開發一個操作系統,讓里面的所有東西都是文件形式?
Cons cells太棒了。為什么我不做一個所有東西都是cons cells構成的程序呢?
數學太神奇了。為什么我們不編寫一個所有東西都是來自數學的程序呢?
數組太有趣了。為什么我們不編寫一個所有東西都是數組的程序呢?
[本文英文原文鏈接:Extremist Programming ]
載自: 外刊IT評論 http://www.aqee.net/