對「約耳談軟體」(Joel on Software) 的這篇文章頗有共鳴。
「抽象」(abstraction) 是系統化增加生產力的有力工具,因為它可以將許多複雜的東西,隱藏在一組簡單的概念或動作之下。它讓開發人員能夠經由這組簡單的概念思考,運用這組簡單的動作寫程式,因而簡化了系統開發的複雜度。
有意思的是, Joel 說「所有重大的抽象機制在某種程式上都是有漏洞的」,並舉了許多實例來說明。
我看到這句話的第一個感覺像遭到小小的電擊。喔,對啦,他說出了我心底對軟體開發「為什麼總覺得某些地方怪怪地」的一個重要原因,他也用這個「抽象滲漏法則」(The Law of Leaky Abstractions) 說明為什麼「漂亮的理論模型」在實務中不見得可以幫上我們太多忙。
因為... 如果實際上的系統頗複雜或頗新穎(因此,很少實際的他人經驗可以借鑑),在套用這個模型之前,我們必須弄懂那個抽象模型的原理、以及它所隱藏的東西。否則,當我們遇到問題時,就很可能被卡住,然後不知道該如何解決問題!
不是嗎?即使先進的程式語言都提供了各式套件來處理 unicode 或各類文字編碼的問題,但實務上每隔一陣子就會看見有人卡在「中文轉碼」的問題上。即使自認為已經對中文轉碼頗有經驗,碰到問題時(例如,先前在「又遇編碼問題」的狀況)也很難在短時間內找到好的解決方式。
所以,Joel 說「這一切都似非而是地表示,即使我們擁有愈來愈高階的程式設計工具,抽象化也做得愈來愈好,要成為一個純熟的程式師卻是愈來愈難了」。
真是令人感傷。
沒有留言:
張貼留言