工具的設計哲學


Posted by 林子暘 on 2020-02-20

在 C++ 裡面,常會看到像是 i ++ (遞增運算子)來搭配 for-loop 的寫法,但是在 python/ruby 裡就沒有這個運算子,未來也很可能不會有。為什麼會這樣呢?
 
因為 C++ 算是很早期的高階語言。在以前,有些處理器會對遞增/遞減這類的操作用獨立的指令集做優化,就可能可以在每次 iterate 時少花 1 個 instruction cycle ,達到提升效能的效果。
 
根據上述,這樣一個運算子是建立在一個強假設:遞增/遞減這類操作會有 CPU 指令集的搭配優化,所以才誕生出來的,跟硬體高度相關,從這裡也可以看出 C/C++ 雖然是高階語言,但其實有很多貼近硬體的思維,視效能為重要考量。
 
而相較之下, python/ruby 屬於比較新的高階語言,更加著重在使用者的易用程度。對於使用者來說,i ++ 這種需要知道硬體設計的運算子沒什麼意義,寫成 i = i + 1 會多一兩個 instruction cycle 也不是什麼罪大惡極的事情,何必增加使用者的學習難度呢?
 
每個程式語言、框架、工具,都有他設計出來的目的、使用情境,以及核心的思想:

rails 的哲學是 "convention over configuration(約定優於配置)",因此有很多設計讓你不用深入探索細節,只要照著流程走就可以順利建出一套系統。

react 的哲學之一是 "unidirectional data flow(單一方向資料流)",資料永遠是由上層組件傳至下層組件,由下層觸發事件更新上層,可有效控管狀態變化。

python 的哲學是 "simple is better than complex",對於使用者來說使用起來越簡單直覺越好,但可能就會以一些效能損失作為交換。
 
了解一個工具的哲學之後,會更容易理解為什麼該工具會這樣設計,以及為什麼即使他能做到某些功能,大家仍不會鼓勵這樣子做,因為可能會違背這個工具本身的核心價值。












Related Posts

Go json and embedded struct

Go json and embedded struct

自動化測試 x Puppeteer - 玩偶QA參一咖 Day03

自動化測試 x Puppeteer - 玩偶QA參一咖 Day03

CS 50  Pointers

CS 50 Pointers


Comments