每個程式設計師都應該讀《Unix程式設計藝術》

飢人谷前端發表於2018-02-01

本文為飢人谷講師方方原創文章,首發於 前端學習指南

我已經向飢人谷的學員不止十次地推薦過《Unix程式設計藝術》這本沒有程式碼的程式設計書。 如果你想寫出優雅的程式碼,這本書必讀。

而且,知乎上各種程式設計大神說話時,經常會提到什麼「自底向上」、「模組化」,該書都有很詳細的解釋。該書用來提升bigger效果十分顯著。

看不完不要緊,能看多少是多少。

以下是該書對「模組化」的闡述:

  • 軟體設計有兩種方式:一種是設計得極為簡潔,明顯沒有缺陷;另一種是設計得極為複雜,沒有明顯的缺陷。第一種設計方式要難得多。——《皇帝的舊衣》
  • 模組化原則就是:要編寫複雜軟體又不至於一塌糊塗的唯一方法,就是用定義清晰的介面把若干簡單模組組合起來,這樣一來,多數問題只在出現在區域性,那麼我們還有希望對區域性進行改寫或優化,不會牽一髮而動全身。
  • 模組化程式碼的首要特質就是封裝。封裝良好的模組不會過多向外部披露自身的細節,不會直接呼叫其他模組的實現程式碼,也不是胡亂共享全域性資料。模組之間通過 API ——一組嚴密的、定義良好的程式呼叫和資料結構來通行。
  • 正交性是有助於使複雜設計也能緊湊的最重要的特性之一。在純粹的正交設計中,任何操作均無副作用;每一個動作只改變一件事情,不會影響其它。無論你控制的是什麼系統,改變每個屬性的方法有且只有一個。
  • 重複的程式碼會導致前後矛盾,產生質量差的程式碼。原因是當你修改這些程式碼的時候,往往只修改了一部分而不是全部。通常,這也意味著你對程式碼的組織沒有想清楚。
  • 軟體是多層的。一般來說,設計函式或物件的層次結構可以選擇兩個方向——自頂向下和自底向上。
  • 一個方向是自底向上,就是從具體到抽象——先從要解決的問題中,確定要進行的具體操作,然後向上進行抽象。另一個方向是自頂向下,就是從抽象到具體——從最高層面描述整個專案的功能和邏輯,層層向下,直到各個具體的操作。
  • 實際程式碼往往是自頂向下和自底向上的綜合產物,同一個專案中經常同時兼有自頂向下的程式碼和自底向上的程式碼,這就導致了「膠合層」的出現。
  • 膠合層是個挺討厭的東西,必須儘可能的薄,這一點極為重要。膠合層用來將東西粘在一起,但不應該用來隱藏各層的裂縫和不平整。
  • 物件導向理念的價值最初在圖形系統、圖形使用者介面和某些模擬程式中被認可。令大家驚訝並逐漸失望的是,我們很難發現物件導向在其他領域有多少顯著的優點。
  • 面嚮物件語言讓抽象變得很容易——有點太容易了。面嚮物件語言鼓勵「厚重的膠合和複雜的層次」。所有的面嚮物件語言都顯示出某種使程式設計師陷入過度分層陷阱的傾向。

Unix程式設計藝術,教你如何優雅地程式設計。

加微訊號: astak10或者長按識別下方二維碼進入前端技術交流群 ,暗號:寫程式碼啦

每日一題,每週資源推薦,精彩部落格推薦,工作、筆試、面試經驗交流解答,免費直播課,群友輕分享... ,數不盡的福利免費送

每個程式設計師都應該讀《Unix程式設計藝術》

相關文章