Joel 總是能將事情解釋地比別人更好:《 The Law of Leaky Abstractions》(相關討論) 是 Joel 的文章中我最喜歡的幾篇之ㄧ。
寫過 Java 或是 .NET 程式的人大概都知道什麼是 garbage collection,甚至連 garbage collection 是什麼都不知道的人還是可以寫出一個正確無誤的程式。在這裡 garbage collection 就是一個簡化記憶體配置機制的抽象概念,這概念大大簡化了程式員要花在追蹤記憶體配置情況的心力;然而從此程式員就過著幸福快樂的日子了嗎?喔不… 根據 The Law of Leaky Abstractions,garbage collection 在某些情況下反而會帶來更多問題。其中一個明顯的漏洞就是它的不可預期性,也就是你無法預期系統那時候會進行 garbage collection,因此這漏洞逼迫你要了解 garbage collection 的基本運作原理,並且要用另外一個方法來彌補它。因此 garbage collection 帶給我們的並不是完美的世界,如果你不了解其中的運作原理,很容易誤入背後潛藏的陷阱而不自知。
所以最好的策略就是:Try your best to know what’s under the hood.
附帶一提,對 .NET Framework 的 garbage collection 機制有興趣的人可以參考 Jeffrey Richter 的兩篇文章,《Garbage Collection: Automatic Memory Management in the Microsoft .NET Framework》及《Garbage Collection-Part 2: Automatic Memory Management in the Microsoft .NET Framework》。
對於我們這些喜歡鑽研系統底層運作原理的人,感謝 The Law of Leaky Abstractions 讓我們在激烈的競爭之下還能混口飯吃。 :-)