Tech Reflections

晶片戰爭

通用計算機

差分機(Difference Engine)

  • 由查爾斯·巴貝奇(Charles Babbage)在 19 世紀初設計的機械計算機。
  • 因為計算 $\log$ 等指數對數運算會需要查表,且每個表可能還會有誤差,德普羅尼發現所有複雜的指數運算都可以轉成複雜的多項式,而多項式的計算可以透過「差分」來進行,這樣就不需要查表了。
  • 差分機的設計理念是利用齒輪和連桿來實現數字的加減乘除運算,並且能夠自動進行多次計算。
  • 但是差分機過於龐大且複雜,當時的技術無法實現完整的差分機。

分析機(Analytical Engine)

  • 由查爾斯·巴貝奇在差分機的基礎上設計的更為先進的計算機。
  • 分析機引入了「程式」的概念,使用打孔卡 (punch cards) 來控制計算過程。
  • 但是分析機同樣因為技術限制和資金問題,未能完成。

繼電器 (Relay)

  • 控制開關的裝置
  • 被克勞德·夏農(Claude Shannon)用來實現布林代數運算,奠定了數位電腦的基礎。

軟體開發的第一原則

  1. Make it work
  2. Make it right
  3. Make it fast

Make it work

  • 如果總是糾結於 refactor、優化,沒有完整能運作的系統,一切都是空談。
  • 軟體的生命始於上線,一個沒有上線、沒有被實際使用過的軟體,無論架構多好、程式碼多漂亮,都是毫無意義的。

Make it right

  • 隨著對問題的理解,會接觸到更多的 edge case 和新技術,會逐漸改變對「正確」的認知,不太可能一開始就做出正確的東西。
  • 市面上所謂的「state-of-the-art」也是漸進演變的,不是一夕之間決定的,不會是某個人突然發明了一個完美無缺的解法。
  • 軟體開發不存在絕對的 right 或 wrong,只有 better 跟 worse ,應該把目標放在 good enough。

Make it fast

大多數的軟體根本不會走到這一步。

  • 一般使用者感覺不出來。
  • 外部優化 >> 程式碼優化: 用好的 CDN 服務商、設計合理的部署策略,對使用者體驗的提升遠大於在程式碼層面的優化。
  • 優先級很低,等到 work 和 right 兩大根基打穩了,追求極致的效能優化才有意義。
    `

Tech Reflections
https://933yee.github.io/notes/2025/11/01/tech-reflections/
Author
Kevin Lee
Posted on
November 1, 2025
Licensed under