假設我們身邊的一切都是用製造材料加以描述的:「空調」不是「空調」,而是「由金屬和塑料做成的物體」;「書」不是「書」,而是「由纖維和墨做成的物體」。溝通時我們也不用「空調」和「書」這樣的詞彙,而是「金屬和塑料做成的物體」和「纖維和墨做成的物體」。可以想象大腦在面對這些資訊時會讓我們覺得多麼的痛苦,顯然這樣的事情在現實中很少發生,因為我們的大腦具備很強的抽象能力 ,會通過抽象塑造「空調」和「書」這樣的概念提公升溝通效率和維持思維秩序。我們學習知識的過程其實就是不斷精確掌握(抽象)概念和建立思維秩序的過程。
對於程式設計師來說除了生活在現實世界,還「身處」由程式所構建的虛擬世界中。程式設計其實是在個人頭腦中構建虛擬世界的過程,而維護**則首先是通過程式所表達的虛擬世界與其他程式設計師間接溝通的過程。為了提高程式設計師間的間接溝通效率,我們一定希望虛擬世界也象現實世界那樣充滿著象「空調」和「書」這樣的概念,也希望程式設計師們在虛擬世界所使用的概念相似。由於現實世界中程式設計師們已掌握了大量的相似概念,如果能將這些概念帶入虛擬世界,那將顯著提公升程式設計師間通過虛擬世界(即程式)溝通的效率。因此,作者認為軟體設計的真諦,是通過程式構建與現實世界相似的虛擬世界。通常,設計質量越高就越能在虛擬世界中找到現實世界的影子。
軟體設計活動的關鍵又是什麼呢?還是讓我們回到現實世界去尋找答案吧!
在遠古時期,人類只能通過徒步從乙個地方到達另乙個地方。後來發現馬可以被馴服,通過馬車能更快地從一處到達另一處。再後來,人類逐步發明了自行車、汽車和飛機,且每一次發明都使得交通效率得以大幅提高。在這裡,馬車、自行車、汽車和飛機都共同地為了解決交通效率問題。很顯然,馬車、自行車、汽車和飛機都是不同的概念,人類通過抽象發明這些概念,並通過相互學習的方式使得大家掌握其含義。如果將焦點放在交通工具上,我們會發現交通效率越高則其概念越抽象,複雜度也越高。或者說,越是抽象的概念,其所隱藏的複雜度就越高。
從這個關於交通的例子中我們不難發現,現實世界中我們是通過轉移複雜度的方式解決複雜問題的,且每一次不同的轉移都伴隨著抽象概念的建立,轉移的複雜度越多所建立的概念就越抽象。由於複雜度被轉移了後,使得一小部分人專注於被轉移的複雜度(比如製造飛機),而其他絕大部分人在享用複雜度被轉移所帶來好處的同時不用關心被轉移走的複雜度(乘飛機的人不用關心飛機的駕駛與製造)。同樣的事情也發生在軟體行業!不同的是軟體行業「製造」的不是汽車和飛機,而是程式語言、資料庫、平台和框架等。
不難發現,軟體設計的關鍵活動應是抽象,通過抽象建立新的概念並將部分複雜度轉移到概念背後。儘管不斷的抽象增加了新概念的複雜度,但也簡化了所需解決問題的複雜度。顯然,好的設計應是其所簡化的複雜度要大於因為抽象所創造的複雜度。
本文出自李雲的部落格,請務必保留此出處:
軟體設計的真諦
假設我們身邊的一切都是用製造材料加以描述的 空調不是 空調 而是 由金屬和塑料做成的物體 書不是 書 而是 由纖維和墨做成的物體 溝通時我們也不用 空調 和 書 這樣的詞彙,而是 金屬和塑料做成的物體 和 纖維和墨做成的物體 可以想象大腦在面對這些資訊時會讓我們覺得多麼的痛苦,顯然這樣的事情在現實中...
軟體設計的真諦
假設我們身邊的一切都是用製造材料加以描述的 空調不是 空調 而是 由金屬和塑料做成的物體 書不是 書 而是 由纖維和墨做成的物體 溝通時我們也不用 空調 和 書 這樣的詞彙,而是 金屬和塑料做成的物體 和 纖維和墨做成的物體 可以想象大腦在面對這些資訊時會讓我們覺得多麼的痛苦,顯然這樣的事情在現實中...
軟體設計的真諦
假設我們身邊的一切都是用製造材料加以描述的 空調不是 空調 而是 由金屬和塑料做成的物體 書不是 書 而是 由纖維和墨做成的物體 溝通時我們也不用 空調 和 書 這樣的詞彙,而是 金屬和塑料做成的物體 和 纖維和墨做成的物體 可以想象大腦在面對這些資訊時會讓我們覺得多麼的痛苦,顯然這樣的事情在現實中...