簡單是優勢,但為何複雜性還受歡迎?

banq發表於2024-05-14


Eugene Yan 撰寫的文章《Simplicity is An Advantage but Sadly Complexity Sells Better》,這篇文章探討了為什麼簡單性在某些情況下可能不被充分重視,儘管它本身是一個巨大的優勢,以及為什麼複雜性在某些情況下會賣得更好。文章還討論了簡單性的優勢,以及如何正確地思考複雜性。

我們有時會聽說論文提交因方法過於簡單而被拒絕,或者晉升因工作工件缺乏複雜性而被拒絕。我認為這可以部分地用 Dijkstra 的話來解釋:

“簡單是一種偉大的美德,但它需要努力工作才能實現,並需要接受教育才能欣賞它。更糟糕的是:複雜性賣得更好。” —埃茲格·迪傑斯特拉


複雜性為何更受歡迎:
複雜性傳達了努力的訊號:由於所付出的努力,它們通常被認為具有更高的質量。

複雜性標誌著精通:如果外行人很難理解複雜的想法或系統,那麼它的創造者一定是專家。

複雜性傳達了創新:具有從頭開始構建的元件的系統被認為比重複使用現有部件的系統更具創造性。僅僅構建或重用現有工作的工作並不是那麼創新。

複雜性意味著更多的功能:相對於簡單系統,複雜系統具有更多的樂高積木,因此它們被認為更具適應性並且能夠更好地響應變化。

總而言之,上述情況導致了複雜性偏見,我們對複雜的想法和系統給予了不適當的信任,並偏愛複雜的想法和系統,而不是簡單的想法和系統。

為什麼簡單是一個優勢?
簡單的想法和功能更容易理解和使用:相比之下,複雜的系統更難以解釋和管理,使使用者很難弄清楚要做什麼以及如何做。由於旋鈕太多,錯誤更頻繁。因為步驟太多,所以效率低下。

簡單的系統更容易構建和擴充套件:更簡單的系統具有更少的複雜性、程式碼和系統內互動,因此它們更容易理解和測試。更輕鬆地找到能夠實施和維護該技術的合格人員。

簡單的系統具有較低的運營成本:大部分工作是在系統投入生產之後進行的,很可能是由構建該系統的原始團隊以外的其他人完成的。透過保持系統簡單,我們降低了維護成本並延長了使用壽命。

  • 簡單的系統具有更少的可能損壞的移動部件,使其更可靠且更容易修復。由於系統內的互動較少,因此升級或更換各個元件也更加容易。
  • 相比之下,複雜的系統更加脆弱,維護成本也更高,因為有太多元件需要由有限的團隊來處理。擁有更多相互依賴的部分也會使故障排除變得更加困難。

“任何事情越簡單,就越不容易混亂,而且混亂後也更容易修復。” ——托馬斯·潘恩,
《常識》,1776 年

具體到機器學習,簡單的技術不一定比更復雜的技術表現更差。
示例的非詳盡列表包括:

  • 基於樹的模型 > 45 箇中型表格資料集上的深度神經網路
  • 貪心演算法 >組合圖問題上的圖神經網路
  • 多工學習問題上的簡單平均≥複雜最佳化器
  • 32 篇論文中簡單方法 > 複雜方法的預測準確性
  • 點積 >專案推薦和檢索中的神經協同過濾

複雜性受到歡迎會造成什麼影響?
它激勵人們讓事情變得不必要的複雜化:最簡單的解決方案不再是最明顯的解決方案。複雜性會變得更加複雜,最終導致工作變得不可能。

它鼓勵“非此處發明”的心態,即人們傾向於從頭開始構建,而不是重用現有的元件。

banq注:
其實上面這句上下文背景有問題,把軟體等同於機械元件或建築,軟體元件與上下文使用方式有很大耦合,雖然我們可以切割成模組 包或微服務,但是最終跨包 跨模組和跨微服務呼叫的場景比比皆是,隨著業務發展,上下文實際情況會發生嚴重變化,而軟體程式碼的最大優勢是可以刪除,刪除成本很低,不像建築材料,一旦生產出來就已經有成本,扔掉不用就是浪費。

在軟體領域,重用元件好像與重用建築磚塊一樣迷人,其實軟體元件帶有建立者的嚴重偏見,潛藏的預設前提是最大危險,如同毒藥,喝了之後才知道有毒,在根本方向上已經無法改變,南轅北轍了。為何一個本來成本如此低廉,再用AI輔助程式設計情況下,成本幾乎為零的程式碼不能輕易拋棄?這隻能是自戀者過於愛惜自己羽毛所致。

我們應該如何考慮複雜性?

  • 目標應該是用盡可能簡單的解決方案解決複雜的問題。
  • 考慮多個專注的解決方案,而不是一個複雜的、通用的解決方案。

我們的目標應該是用盡可能簡單的方法解決複雜的問題。與其關注解決方案的複雜性,不如關注問題的複雜性。簡單的解決方案體現了對問題的深刻洞察力,以及避免更復雜、更昂貴解決方案的能力。通常,最好的解決方案就是簡單的解決方案。

"一切都應儘可能簡單,但不能更簡單"--愛因斯坦

與其制定一個複雜的、包羅永珍的解決方案,不如考慮多個重點突出的解決方案。一刀切 "式的解決方案通常沒有預期的靈活和可重用性。而且,由於它服務於多個用例和利益相關者,往往會 "緊密耦合",在規劃和遷移過程中需要更多協調。相比之下,單一用途的系統更容易操作,而且不可避免地會被淘汰。

果汁值得榨嗎?
克服複雜性偏見的方法之一是奧卡姆剃刀。它指出,最簡單的解決方案或解釋通常就是正確的。因此,我們不要急於否定簡單的想法,也不要為了證明自己的價值而增加不必要的複雜性。

或者,捫心自問:考慮到複雜性的代價,果汁是否值得擠壓?

banq注:產品時思維或語言對話的中間產物,複雜與否是辯證法 思維的一個體現,想象有兩個專家辯論:一個說複雜了;一個說不復雜。兩個人永遠辯論下去。

其實拋開辯論內容,我們拋開到底複雜與否,而是看看他們辯論的形式,是一種對話思考過程,是一種計算過程,也許未來某天在這個解決方案上得到一個大道至簡的解決方案,但是我們因為最後一個饅頭吃飽了,就說前面十個饅頭白吃嗎?

因此,在實踐中,本著對話原則,如果你覺得對方把問題想得簡單了,因為才遭遇今天需要重構的困境,人非聖賢,沒有人能提前預知未來的情況,更不可能脫離他當時處於的上下文情況。如果你覺得原方案太簡單,愚蠢,那麼就按照複雜來,這是一種思考過程,計算過程,沒有任何事物是透過一次計算得到。

 

相關文章