第一性原理思考 vs 站在巨人的肩膀上:兩種思維

2025 年 04 月 11 日

本文探討「第一性原理思考」與「站在巨人肩膀上」兩種思維模式在程式開發中的應用與平衡。作者分析這兩種看似對立的方法如何互補:一種鼓勵從基本原理重新構建解決方案,另一種則倡導善用既有工具。文章以 Web 開發實例說明,優秀程式設計師應靈活運用兩種思維,依據不同情境動態切換,在創新與效率間取得平衡。

請聽,哈佛管理學

第一性原理思考 vs 站在巨人的肩膀上:程式設計師的思維工具箱

為什麼會寫這篇文章

前陣子在聽 Podcast「請聽,哈佛管理學」中的"S2#24-3 行銷大撒幣,轉單卻卡關?掌握「存量」與「增量」雙增長的品牌策略,讓顧客主動幫你「一傳千里」!Ft. 汪志謙|哈佛人物面對面",其中提到了「第一性原理思考」這個概念,讓我產生了興趣。

Google 了幾篇文章了解後,突然意識到:「第一性原理思考」似乎與我們在學習過程中常聽到的「站在巨人的肩膀上」、「不要重複發明輪子」這些建議形成某種對比,甚至可能有些矛盾。一個鼓勵我們回歸基本重新思考,另一個則勸我們善用前人智慧。

作為一個程式設計師,這引發了我對這兩種思維方式的好奇:它們到底有什麼不同?哪種更適合軟體開發?是否可能融合使用?

第一性原理思考:從基本原則出發的創新之道

第一性原理(First Principles)源自物理學,指的是那些不能再被簡化的基本前提或假設。採用第一性原理思考,就是將問題拆解到最基本的元素,然後從這些元素重新構建解決方案,而非依賴現有的模式或類比。

在程式開發中的應用

作為程式設計師,第一性原理思考表現為:

  1. 質疑既有框架和庫:不盲目追隨技術潮流,而是思考:「這個工具真的是解決我特定問題的最佳方案嗎?」
  2. 理解底層運作原理:不僅會用API,還了解為何它被如此設計,以及它在底層是如何實現的
  3. 適時重新發明輪子:當現有工具過於臃腫或不符合特定需求時,敢於創建量身定制的解決方案

老實說,在講求快速迭代的開發環境中,這種追根究底的思考模式看起來簡直是天方夜譚。「專案下週就要上線了,你還想研究底層原理?」——我彷彿已經聽到 PM 的咆哮聲。

但有趣的是,「重新發明輪子」這件事在實際開發中其實時常發生。多少次我在面對特定需求時,先是去搜尋現有套件,結果發現它們為了滿足各種使用場景而變得異常複雜,不僅效能堪憂,連理解文檔都要花上半天。這時,從需求的本質出發,寫一個小巧精準的解決方案反而更高效。

這讓我想起大學時期的計算機概論課,老師要求我們自己寫一個簡易的程式編譯器作為期末專案。當時我想:「這不是已經有現成的編譯器了嗎?為什麼要重複發明輪子?」現在看來,那正是一次很好的第一性原理思考訓練。只有真正理解了編譯原理,才能在需要時靈活運用或改進它。

站在巨人的肩膀上:善用積累的智慧

「站在巨人的肩膀上」這一概念源自牛頓爵士的謙遜之言:「如果說我看得比別人更遠,那是因為我站在巨人的肩膀上。」它強調了知識的累積性和繼承性。

在程式設計中的實踐

這種思維方式在開發中體現為:

  1. 善用開源庫和框架:React、Vue、Laravel、Django...為什麼要重寫別人已經優化了數年的工具?
  2. 學習經典設計模式:單例、工廠、觀察者模式...這些經過時間檢驗的架構解決方案能幫助我們構建更健壯的系統
  3. 遵循業界最佳實踐:從前人的經驗中學習,避免踩同樣的坑

想象一下,如果每次開發網站都要從設計 HTTP 協議和 TCP/IP 開始,那現代 Web 世界恐怕還停留在九十年代。正是因為我們可以站在各種前後端框架、容器技術的肩膀上,才能以驚人的速度構建複雜的應用。

看似矛盾,實為互補:兩種思維的平衡與融合

表面上看,這兩種思維方式確實存在張力:一個鼓勵從零思考,一個建議善用現成工具。但仔細想想,它們真的不能共存嗎?

何時該回歸第一性原理?

  • 當發現現有解決方案效率低下或無法滿足特定需求
  • 當面對的是前人未曾遇到的全新問題
  • 當需要徹底的突破性創新,而非漸進式改進
  • 當有足夠的時間和資源深入研究問題本質

何時該站在巨人肩膀上?

  • 當解決的是常見問題,有經過驗證的成熟方案
  • 當項目時間緊迫,需要快速交付
  • 當穩定性和可靠性是首要考量
  • 當處於學習階段,需要先了解領域知識

融合的藝術:兩種思維的協同

真正的創新智慧往往來自於這兩種思維的動態平衡:

  1. 以知識為基,以原理為工:深入了解現有解決方案,但不被其條條框框所束縛
  2. 策略性重新發明:80% 依賴成熟技術,20% 在關鍵環節從原理出發重新思考 (80 天註定 20 靠打拼?)
  3. 辯證思維循環:在既有知識和基本原理之間不斷切換視角,發現新的可能性

實例:一個 Web 開發者的日常決策

以我最近的一個項目為例,我們需要開發一個數據可視化儀表板:

  • 站在巨人肩膀上:我選擇了 Django 作為後端框架,使用了 Django REST Framework 處理 API,前端則採用了 Bootstrap 快速構建響應式界面
  • 第一性原理思考:但在數據處理層面,現有的圖表庫無法滿足我們特殊的交互需求,於是我們回到問題本質,根據實際數據結構和用戶需求,設計了一套定制的數據轉換和渲染引擎

結果証明,這種混合方法不僅節省了開發時間,還讓成品在功能上擁有了獨特性。

結論:成為擁有兩把思維利器的程式設計師

我認為,優秀的程式設計師不應該將第一性原理思考和站在巨人肩膀上視為非此即彼的選擇,而是應該靈活運用這兩種思維工具:

  • 站在巨人的肩膀上讓我們走得更快
  • 第一性原理思考幫助我們走得更遠
  • 兩者結合使用則讓我們既快又遠

在現實的軟體開發中,我逐漸學會了這種平衡之道:對於基礎架構和通用功能,我毫不猶豫地利用成熟框架;而對於核心業務邏輯和關鍵性能瓶頸,我願意花時間回歸問題本質,重新思考最優解法。

或許,軟體工程的真正藝術不在於選擇哪種思維模式,而在於知道何時切換,以及如何將它們融為一體。


後記:寫完這篇文章後,我忍不住想:程式就是生活模式的寫照,那在生活中,有哪些情況也是如此?也許下次有機會再寫,是乖寶寶該睡覺的時間了