第1步:設計出簡單造形(做為地圖) – 架構設計造形的<簡單性> by 高煥堂 2013/02 一、前言 茲回憶,于十七世紀中,牛頓提出了簡單公式(即造形):F=ma;讓人們能輕易理解物體運動的復雜<關系>。再如,于二十世紀初,愛因斯坦發表了簡單公式:E=MC平方;讓人們能理解復雜的質量、能量與光速之間的復雜關系。同樣地, 在軟件方面,著名專家Fred Brooks(“人月神話”一書作者)在40年前就說道: ”軟件的復雜性是本質性的,并非表象而已。” (The complexity of software is an essential property, not an accidental one.) 于是,高煥堂老師提出簡單的”EIT”軟件造形;則讓人們能理解Android多層框架體系里的復雜關系。有了架構設計造形的<簡單性>,人們就很容易理解軟件的復雜關系,進而提升了掌握軟件系統復雜多變的能力,唯有熟諳此道,才能創造架構和產品的<未來性>。 二、領悟與形(Form) 著名的建筑大師路康(Louis I. Kahn)說:<對事物本然的領悟,然后具像化為心內的形>(I think of form as the realization of a nature)>。事物在身外,領悟其本然而成形(即具像化),存于心內,是具像的、但沒有外貌。由于形沒有外貌,所以設計師設計出贗品來呈現出形的外貌。 依據路康設計哲學,我們對同一個本然領悟而成<形>,并實存于心,具像化了領悟和感受。首先的感受就是<美>,這個感受必須被<感動>。此刻,美中的驚奇觸動我的心,期盼透過設計品(贗品)來做為真美的獻禮。于是,讓作品的欣賞者(或用戶)心中充滿著無限感動。(請參閱:<<高煥堂的架構師之路>>文章) 三、形與設計(Design) 被尊稱為「史上最偉大的平面設計師」的保羅.蘭德(Paul Rand)說道:設計是關系(Relationship),設計化解形式(Form)和內容(Content)之間的沖突;當形式和內容整合為一體時,就實現藝術了。(請參閱<<保羅.蘭德談形式、內容與設計>>文章) 依據保羅.蘭德的設計思維,內容就是想法(Idea),或主題(Subject)。而想法就是這些事情的全部。形式就是我們如何處理想法,如何做它,如何展現它。當形式與內容結合在一起,那就是設計的實現了。茲以圖示如下: 圖1. 形與設計 在討論某個主題之前,必須先定義討論的內容。大多數時候,大家都只是談論設計;而且有些人以為,設計就是他在領帶、浴室壁紙或地毯花紋上看到的東西。這就是一般人所理解的設計,但其實不然。那是設計過程的一部分,僅只是裝飾而已。蘋果公司前CEO喬布斯(Steve Jobs)也說到: ”在大多數人的詞匯中,設計意味著華麗的虛飾,是室內裝潢,是沙發皮革的質料。但對我來說,沒有什么能遠離設計。設計是產品的靈魂,靈魂通過產品或服務的外觀來呈現它自己。” (In most people’s vocabularies, design means veneer. It’s interior decorating. It’s the fabric of the curtains of the sofa. But to me, nothing could be further from the meaning of design. Design is the fundamental soul of a human-made creation that ends up expressing itself in successive outer layers of the product or service.) 所以我們必須用心思考問題,而不是思考設計。設計是思維的產物。問題的解決方案會在一秒鐘突然浮現。但是在聚焦于解決方案之前,必須做地毯式的思考、搜索和感受。思考是設計過逞中的第一要務。 四、設計是思考(領悟)的產物 保羅.蘭德推薦華勒斯(Graham Wallas)在他的<<思考的方法>>(Art of Thought, 1926)這本書里,所發明了一套思考方法。 此方法的第一階段,會先調查問題的所有面向,做出粗略或精細的的概要,然后忘了那個問題,把它拋到腦后。這是思考過程的第一階段,稱為準備期(Preparation)。 接著,第二階段是醞釀期(Incubation)。把問題忘掉,讓它蘊釀。讓它在我們心中慢慢熬煮,隔一個禮拜或隔個一天再回來想,然后就會有些念頭出現。這個蘊釀期非常重要,給它充分的時間,就能做出好的決定。 第三階段是豁朗期(Illumination),問題整個浮現出來。逐漸地,全部設想完畢,解決方法自己浮現了;然后就要仔細觀察,進行評估。評估它可不可行? 大家會不會接受? 或你滿不滿意? 這就是設計的過程,或稱為創造性的過程。這是設計師一直要做的事。茲以圖示如下: 圖2. 設計的過程 其中,醞釀期需要投入許多熱情。喬布斯(Steve Jobs)曾說到: “要把某些東西設計好,你就必須熟悉它、真正了解它到底是什么? 這必須投入很大熱情才能徹底地明白它。這需要反復地咀嚼回味,不能急就章。”(To design something really well, you have to get it. You have to really grok what it’s all about. It takes a passionate commitment to really thoroughly understand something, chew it up, not just quickly swallow it.) 那么,這個蘊釀過程,由沒有什么蜘絲馬跡可循呢? 還是像一條在夜里摸黑航行的船(A ship passing in the night)呢? 五、暗室里抓黑貓的線索:從愿景到現實的<連線> 保羅.蘭德(Paul Rand)說道,設計是一種關系系統。這里所謂的關系,涵蓋了一個問題的所有面向,包括設計元素之間的關系,例如顏色是黑或白,線條或色塊等。只要順著<關系>這個角度想下去,而且這類關系是無止境的,所以設計很難到達完美的。喬布斯(Steve Jobs)曾說到: “創造無非就是把事物聯系起來”。 (Creativity is just connecting things.) 從自己生活經驗中點點滴滴的聯系中,將相關的事物,以某種形式(form)串聯起來。他又提到: “你不可能在眺望未來時把生活中的點點滴滴連接起來,只有回顧時才能連點成線。你必須相信,你今日所做的點點滴滴將會連結到(影響)你的未來。”(You can’t connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future.) 人們對未來事物或情境的期待,就是人的愿景(Vision)。從未來愿景回顧現在的事實,有助于找到從愿景到現實之間的<連線>(即關系)。這通稱為: “Mapping from the vision to reality” 愿景是對未來的期待,有助于引導反思我們心中長期以來不自覺的假設(Assumption);調整心中假設,能調整到更好的視角(View),以便擴大視野,讓原來躲在屏幕后面的關系浮現出來。一旦關系充分浮現、全部設想完畢;接著要仔細觀察,進行評估驗證。檢驗它是否滿足各層面的限制(Constraint),包括可不可行? 大家會不會接受? 或我們自己滿不滿意? 等等。如下圖所示: 圖3. 設計的過程 就像谷歌(Google)公司的基本法則是: 「創意與限制心心相印。」(Creativity loves constraint.) 限制檢驗創意,創意滿足限制,創意突破限制,實現完美設計。 設計師不斷尋覓和檢驗多條行得通的途徑(連線),然后選擇一條<較具有未來性>的途徑給開發團隊施工。由于是一條具有未來性的途徑,其意味著繼續走下去,遇到阻力時,會有足夠的轉圜空間。所謂阻力,就包括各方既得利益者的阻礙。因之,架構師會持續不斷地尋找<無異走廊(Corridors of indifference)>;經由這走廊,開發團隊可以邁向(主人的)目標,但避免傷害伙伴(如客戶)或別人的私利而招惹阻力。 六、面對復雜<關系>,只能簡單<造形> 保羅.蘭德提到,設計就是要順著<關系>這個角度想下去。這類關系是無止境的。這正是設計很難到達完美的原因之一。因為其中的每一項動作,都有無窮無盡的犯錯可能。設計是化復雜為簡單的過程。復雜的部分充滿了各式各樣可怕的問題。要試著去評估所有的問題,然后把它們變簡單,這是非常不容易的事情。 有許多復雜的關系是本質性的(Essential),人們無法刪除它。于是想辦法提升人們管理復雜的能力。試想,當我們去觀察太陽星系時,如果在腦海里沒有阿基米得(Archimedes)幾何學的簡單”橢圓”造形,你會覺得各星體運行的軌跡非常復雜。這個復雜性是本質的,無法刪除,怎么辦呢? 等到你學了幾何,腦海里有了”橢圓”造形之后,再去看太陽系,就會發現只不過是9個橢圓形軌道而已,非常簡單。此時,并沒有去刪除你身外星球的復雜關系;但卻簡化了腦海里的想象,提升了內心面對復雜事物的能力。所以說,沒有簡單,我們就無法理解復雜;亦即,面對復雜,只能簡單。 前面說過了,軟件的復雜性是本質性的,并非表象而已。我們也需要借助于簡單造形,來理解軟件的復雜關系。此時,高煥堂老師提出的簡單”EIT”軟件造形;則讓人們能理解Android多層框架體系里的復雜關系。如下圖所示: 圖4. 面對軟件框架的復雜,只有簡單EIT造形 這種軟件的復雜性是本質的,無法刪除;然而當我們心懷簡單EIT造形時,就會發現只不過是一堆EIT造形的有機(Organic)組合而已,非常簡單。例如,在 圖4. 復雜外貌來自于EIT造形的簡單組合 七、簡單造形與美感 當我們心懷阿基米得幾合學的橢圓造形去看待太陽系星球的運行時,就會發現其單一造形所創造出來的整體之美。同樣地,當我們心懷楓葉單純造形去看待楓葉樹林時,也立即會發現其單一造形所創造出來的整體之美。以此類推,當我們心懷EIT單純造形去看待Android系統框架時,也會發現其單一造形所創造出來的整體之美。 這項美感來自于自然造物法則。自然界的造形主要來自「信息的有限性」( Information Limitations)。由于這項限制,一個生物形體的造成,是出自一個概括性的計劃:「單純的造形」。隨著生物的成長、與環境的交互信息愈多,逐漸在細節上修修補補,就發展出「不同的內涵」。然后,基于單純的造形,不斷進行「重復地組合」。例如,漂亮的楓葉林,就是合乎「單純造形、不同內涵、重復組合」三項特性。許多造形相同(且不同細節)的楓葉,組合出一遍美麗的樹林。如下圖: 圖5. 造形的簡單組合創造出整體之美 八、簡單造形與<未來性> 造形概念有兩層作用:1)規范<小>元素組合規律,讓人們容易組合出<中>間模塊。2)規范中間模塊組合規律;讓人們容易組合出<大>系統。例如,玫瑰花就是一個造形,規范了花瓣、花蕊、花襯葉等有限<小>元素的組合規律。同時它無限重復也大大影響(和簡化)了整體<大>樹系統的組合規律。這項造物法則,提升了掌握自然界復雜多變的能力,唯有熟諳此道,才能創造架構和產品的未來性。 于是,樹是一個單一造形,含葉、枝、干、根等共同元素種類,也有元素之間的簡單組合規律。然后依循將樹這種造形依循簡單規律,無限重復和組合就成為林。再從太陽系有九大行星的運行軌跡而觀之,其單一造形就是橢圓形。每個造形都含有兩個元素:太陽和行星。如果太陽系本身不是一位出色的幾何學家,那么一定有一位杰出的幾何學家創造了太陽系。 在軟件上也是把復雜多變的內涵封裝于一個簡單的造形里。例如,面向對象的類別(Class),其內部只有兩個元素:函數(Function)和數據項(Data Item)。基于這簡單造形,人們掌握能力增強了,不再畏懼了,就敢大膽去嘗試各項組合,成為形形色色的應用軟件(Application)。一般而言,造形的組成元素種類,大多為2或3種,并且有簡單的元素組成規律。例如: ◆ 太陽系的行星運行軌跡,呈現單純的橢圓造形。每個造形都只含有兩種元素:太陽和行星。 ◆ 政府架構,其造形也只有三種元素:行政、立法和司法。 ◆ 軟件的類別,其造形也只有兩種元素:函數和數據項。 ◆ 軟件XML的造形也只有兩種元素:Tag和Content。 ◆ 物理的原子,其造形只有三種元素:質子、中子和電子。 ◆ 等等。 同樣地,EIT造形也是基于固定而有限的元素種類(如引擎、接口、輪胎三種元素),加上簡單的組合規律(如引擎透過接口來呼叫輪胎),也形成了「單純造形」。雖然造形的輪廓相同,組成元素種類也相同,然而其內部元素,以及元素的不同組合,覆予各個造形不同的內涵。(請參閱<<10分鐘讀懂EIT造形>>文章) 在物理學上的原子造形也是如此,氫原子(H)和氧原子(O)兩者的都是原子造形。這兩個造形輪廓相同(都是原子造形),但是內涵不同。從EIT 造形與原子造形的對比,很容易理解到造形內部元素之間,有其組合與互動的韻律(或規律)。基于固定而有限的元素種類(如質子、中子、電子三種元素),加上簡單的組合規律(如電子圍繞質子和中子),形成所謂的「單純造形」。同樣地,EIT造形也是基于固定而有限的元素種類(如引擎、接口、輪胎三種元素),加上簡單的組合規律(如引擎透過接口來呼叫輪胎),也形成了「單純的造形」。 九、結語 畫家畢加索曾說過,繪畫是減法的過程(process of elimination)。畫出的作品具有<簡單性>,引領人們去領悟具<復雜性>的真實。他說道: “藝術不是真實,它是一種謊言,讓我們去領悟真實。” (Art is not truth. Art is a lie that makes us realize truth.) 設計師保羅.蘭德也說,我們會從最復雜的部分開始著手,最后的成品卻具有<簡單性>。這個減法過程本身是復雜的,然而一旦達到簡單了,就能發揮杠桿作用,讓人們能面對變化、掌握復雜。喬布斯(Steve Jobs)也曾說到: “簡單比復雜更難,你必須努力讓你的想法變得清晰明了,讓它變得簡單。但終究是值得的,因為只要你獲得其<簡單性>,就能搬動大山了。”(Simple can be harder than complex:you have to work hard to get your thinking clean to make it simple. But it’s worth it in the end because once you get there, you can move mountains.) 設計,就是把一件復雜的事簡單化,在把簡單化出的形式(Form),用事實(reality)和邏輯(logic)加以檢驗( verify),最后,再以直覺把形與復雜本質結合在一起。就像愛因斯坦所設計的公式”E=MC平方”具有<簡單性>,讓人們能掌握復雜的質、能與光速的關系。同樣地,架構設計造形(如EIT造形)的<簡單性>,提升了人們擁有面對軟件復雜多變的能力;唯有熟諳此道,才能創造架構和產品的<未來性>,才能掌握未來意想不到的機會。 (請參閱<<架構設計決策的未來性>>文章) |