#454
2020 / 公開文章 / 年份 / 形式 / 文章 / 評析

掌握複雜系統的利器 — 抽象化思考

閱讀時間 10 分鐘

你最近會不會常常覺得心神不寧,似乎原本運轉順暢的世界脫軌,每天都出現新狀況,讓人不斷地焦慮呢?

我會。例如前天我在臉書上先看到中國的蘇愷 30 戰機進入台灣東南區域,接著看到美國軍方的運輸機沿台灣西部飛過。臉書不停地更新消息,伴隨各方的謠言與揣測,我也跟著人心惶惶。

這不是錯覺。我們看到的是世界的混亂本質,只是過去被隱藏起來了。現在卻慢慢地露出來;就像掀開汽車的引擎蓋,會發現外觀優美的車子,內部卻是黝黑、醜陋的線路。

但過去是怎麼被隱藏起來的?這可以從 iPhone 來理解。

賈伯斯在 2007 年首次發表 iPhone 時,並不是直接先公開 iPhone,而是先討論了當時存在的「智慧型手機」。他指出這些「前智慧型手機」都有一個共通點:都有實體鍵盤。


實體鍵盤是好東西,功能明確,反應快。當時的我還在用黑莓機,已經熟練到可以把手機藏在會議桌下,「盲打」訊息。

但賈伯斯指出,實體鍵盤的問題是無法更換(見上圖)。而 iPhone 就沒有鍵盤:


當然 iPhone 有的是虛擬鍵盤。或者說,鍵盤由硬體變成了軟體。

軟體鍵盤其實比較沒有效率 — 我到今天還是常常輸入錯誤,氣到想摔手機。但是軟體的優點是更彈性,有更多發展空間。軟體代表使用者的輸入介面從實體中「解放」,由鍵盤轉為整個螢幕,發展出多彩多姿的形式。今天最常用的輸入不是打字,而是滑動、放大、縮小、圈選等。就算是打字,也可以選用手寫、語音辨識、表情符號或是 GIF。在遊戲中,還有連擊、「劃西瓜」、「拉弓」等輸入方法。

醜陋的鍵盤被隱藏起來了,人們看到的是光滑的 iPhone。可是鍵盤沒有消失,它的本質仍然以軟體的方式存在。只是現在變成眾多輸入選項之一。同時也有更多虛擬鍵盤的供應商出現,例如 Google 的 Gboard。

這大大增加了系統的複雜度。想像一下如果上述的新輸入方法都以實體按鍵來執行,那麼 iPhone 下方的「鍵盤區」會變得多長!因此必須想辦法來降低管理的複雜度,那就要靠抽象化(abstraction)

抽象化

在電腦科學中,抽象化是指「將資料與程式,以它的語意來呈現出它的外觀,但是隱藏起它的實作細節。抽象化是用來減少程式的複雜度,使得程式設計師可以專注在處理少數重要的部份。」

延續上述的例子,iPhone 不需要讓 Gboard「看」到作業系統的所有程式碼,只需要讓 Gboard 看到跟輸入相關的部分就好。而 Gboard 也不需要讓作業系統知道自己是怎麼運作,只要讓作業系統知道 Gboard 會獲得什麼資訊,輸出什麼資料就行。iPhone 將 Gboard「抽象化」成只是另一個 app,而 Gboard 也將 iPhone「抽象化」成只是另一個作業系統。

靠著抽象化,iPhone 可以支援數百萬個 app,數千種鍵盤與輸入法,建構一個複雜的系統。而 Gboard 也可以支援不同的作業系統。

中文將 abstraction 翻譯為「抽象化」不太貼切。這裡的 abstract 比較接近「摘要」,因此翻譯為「摘要化」或「本質化」會更精準。摘要的目標是提綱挈領,找出系統的核心,是具體的;而不是像「抽象」聽起來是模糊、不具體的。但本文還是沿用「抽象化」的翻譯。

抽象化帶來的優點是彈性、發展空間大,但代價是犧牲了效率。實體鍵盤只做一件事,因此做得特別好。但 iPhone 要支援成千上萬的使用方式,必須容納更多的無效率。

但這個交換是值得的。有更多使用方式、更複雜的系統,iPhone 就創造更多價值。更多使用方法也代表 iPhone 變得更直覺、更好用。抽象化是用效率換來彈性與易用性。

生活中其實處處可見抽象化。我們需要「抽象化」複雜的系統,才能有效的管理,也才能分工。例如我過去是神經生物學家,研究神經細胞的運作。但我不需要深入知道化學、物理的所有知識。例如我不需要知道蛋白質內部的結構;我只需要在細胞的層次理解蛋白質的交互作用,就足以產生價值。我把化學「抽象化」了。

抽象化的系統一層一層的堆疊,最終可以堆出非常神奇的應用,像變魔術一樣。賈伯斯在 2007 年就說觸控用起來就是魔術。


科幻小說作家 Arthur Clarke 則說:「任何充分進步的技術與魔術沒有差別」(any sufficiently advanced technology is indistinguishable from magic)。魔術師可以從帽子中變出兔子;我可以按一按手機,門口就出現一台車來接我。我能辦到,是因為 Uber 以及底層的所有技術,包含手機、晶片、電信、地圖、支付、衛星等,全部都抽象化了。每一「層」的開發者都能方便地取用其他「層」的技術,組合起來就成為魔術。

抽象化帶動進步

抽象化也推動科技的發展。一個系統抽象化了之後,就有更多人可以用更多方式使用,創造更高的需求。這就刺激技術不斷地前進。

半導體業的摩爾定律(Moore’s Law)就是一例。半導體的效能每 18 個月增加一倍,而其驅動力就是軟體的不斷「浪費」。90 年代科技圈的玩笑是「(英特爾 CEO)Andy 給的,(微軟 CEO)Bill 就會拿走」(what Andy giveth, Bill taketh away)意思是不論 CPU 發展多快,多餘的效能都會被軟體用光。因此再強大的電腦,過了 5 年之後總是開始運作遲緩。

這是因為多了新的效能,軟體就能抽象化更多功能,吸引開發者嘗試更多應用。於是 CPU 又跟不上,必須繼續創造的更高效能。不斷發展的結果是電腦功能越來越多、使用越來越直覺、用戶越來越多,價格卻越來越便宜。30 年前只有工程師會用 DOS 電腦算數字,一台 PC 單價 5 萬元以上。今天一位阿嬤可以用零元手機付帳、拍照、視訊會議。

社會建立在抽象化上

抽象化不僅限於電腦科學,也出現在所有的人為系統中。人們要處理社會的複雜議題,同樣需要仰賴抽象化。經濟學家 Ronald Coase 說(PDF)現代生活仰賴三個抽象化:企業、市場與法律。例如「個人所得稅 30%」這一條法律把人民與國家的權利關係「抽象化」了。我不需要知道人民與國家拉扯權利義務的歷史,只要知道這一條法律就知道該怎麼調整。

同樣的,看到好市多賣 iPhone 11,我也不需要知道 iPhone 背後的生產過程,或是好市多的產業鏈。市場把所有資訊「抽象化」成一個價格。我只要看著價錢,決定是否有錢購買?是不是比其他手機划算?

當抽象化藏不住了

然而,再好的抽象化也會有一天撐不住。有時抽象化會破洞,就像電線露出線頭一樣,讓我們一窺系統底層的原始、複雜,甚至是醜陋。例如當你找不到預定的 Uber 車子,就得回到原始狀態,手忙腳亂地打電話給司機。

前面提到抽象化會犧牲效率。有時抽象化堆疊很多層之後,已經犧牲了太多效率。此時回頭檢查「地基」,重新來過,反而會別有洞天。以 Elon Musk 的說法叫做回到「第一性原則」(first principles)。

Elon Musk 有一天意識到火箭是唯一無法回收的交通工具,很奇怪。他研究後發現,那是因為傳統火箭建立在重重疊疊的舊假設上;但科技已經能夠做到回收推進器,而且發射成本能降到原本的 1%!於是他創建了 SpaceX。

最可怕的狀況是抽象化突然不再成立,因為底層本質已經完全改變。這時堆疊起的抽象化依序崩毀,就像大廈倒塌一樣。

網路就帶來這樣一股力量。網路衝撞了資訊傳遞的本質。過去人們透過大眾媒體來「抽象化」世界。世界雖然複雜但不混亂:世界的變化存在於每天早上的報紙與少數電視新聞台之中。政黨與大眾媒體共生,藍色、綠色各自排隊站好。政治的變化率先反映在大眾媒體的輿論之中,接著反映在國會席次消長,以及執政權力更迭之上,波盪中帶著井然有序。

但網路讓所有人都能互相傳遞資訊。消息繞過了大眾媒體,像洪流一般的湧來。而我們尚未找到新的「抽象化」的方式。最有潛力的「抽象化」守門人是臉書跟 Google,但它們不想承擔這個責任。

而傳統的政治結構也為之動搖。崛起的政治人物透過社交平台直接跟特定的選民「喊話」,順勢接管政黨。各種新的路線、立場興起,擺脫傳統的框架 — 你是左 / 右 / 自由 / 保守 / 市場主義 / 社會主義 / 多元文化 / 單一文化 . . . 有多少分類?這些分類又有什麼意義?

美國黑人 George Floyd 被白人警察虐死,影片一夕之間席捲全美。觀眾看到的不再是報紙的一張照片,或是電視台的主播的評論,而是所有人的看法,源源不絕的冒出來。接著,後續的示威、暴動,以及警察反制示威、暴動的影像,也繼續伴隨所有人的意見源源不絕的湧來。我們無力處理,只能跟著憤怒或是憤怒。

美國的種族問題一直都在,但過去被一層層抽象化給隱藏起來。可是現在露出來了,逼迫人們直視它的醜惡。人們感覺無力的同時,也更加不信任過去隱藏的結構。大廈倒塌。

抽象化是人類掌握複雜系統的利器。當人類抽象化資訊、知識或是系統,就能更方便的取用,以及擴張用途。人類也才能分工。抽象化創造更多需求,帶動技術的進步,擴大系統的價值。抽象化層層疊疊,可以蓋出驚人複雜的系統。然而抽象化也會強化底層的偏見,隱藏混亂、複雜的本質。等到再也堆疊不上去,或是受到外力衝擊,本質就會重新露出,逼迫人們再次開發抽象化的方法。

推薦閱讀