UNIX程式設計藝術 艾瑞克 S 理曼德

2021-10-13 16:47:13 字數 2295 閱讀 4211

總結

本書主要介紹了unix系統領域中的設計和開發哲學、思想文化體系、原則與經驗,由公認的unix程式設計大師、開源運動領袖人物之一eric s.raymond傾力多年寫作而成

摘錄:

用錯誤的方式解決正確的問題總比用正確的方法解決錯誤的問題好。

unix的這種自由放縱主義風格會讓它失去很多非技術型使用者。但從長遠考慮,最終你會發覺這個「錯誤」換來至關重要的優勢:策略相對短壽,而機制才會長存。

只提供機制不提供方針的哲學能使unix長久保鮮

既然能夠改編、重用、再造,節省自己 90%的工作量,為什麼還要從零開始編碼呢?

設計規則:程式得以形成嚴絲合縫的工具套裝,而不是應景的解決對策。

unix哲學:

1. 原則 1:你無法斷定程式會在什麼地方耗費執行時間。瓶頸經常出現在想不到的地方,所以別急於胡亂找個地方改**,除非你已經證實那兒就是瓶頸所在。

2. 原則 2:估量。在你沒對**進行估量,特別是沒找到最耗時的那部分之前,別去優化速度。

3. 原則3:花哨的演算法在n 很小時通常很慢,而n通常很小。花哨演算法的常數複雜度很大。除非你確定n總是很大,否則不要用花哨演算法(即使n很大,也優先考慮原則2)。

4. 原則4:花哨的演算法比簡單演算法更容易出bug、更難實現。盡量使用簡單的演算法配合簡單的資料結構。

5. 原則 5:資料壓倒一切。如果已經選擇了正確的資料結構並且把一切都組織得井井有條,正確的演算法也就不言自明。程式設計的核心是資料結構,而不是演算法[7]。

6. 原則6:沒有原則6。

unix哲學中更多的內容不是這些先哲們口頭表述出來的,而是由他們所作的一切和unix本身所作出的榜樣體現出來的。從整體上來說,可以概括為以下幾點:

1. 模組原則:使用簡潔的介面拼合簡單的部件。

2. 清晰原則:清晰勝於機巧。

3. 組合原則:設計時考慮拼接組合。

4. 分離原則:策略同機制分離,介面同引擎分離。

5. 簡潔原則:設計要簡潔,複雜度能低則低。

6. 吝嗇原則:除非確無它法,不要編寫龐大的程式。

7. 透明性原則:設計要可見,以便審查和除錯。

8. 健壯原則:健壯源於透明與簡潔。

9. 表示原則:把知識疊入資料以求邏輯質樸而健壯。

10. 通俗原則:介面設計避免標新立異。

11. 緘默原則:如果乙個程式沒什麼好說的,就沉默

12. 補救原則:出現異常時,馬上退出並給出足夠錯誤資訊。

13. 經濟原則:寧花機器一分,不花程式設計師一秒。

14. 生成原則:避免手工hack,盡量編寫程式去生成程式。

15. 優化原則:雕琢前先要有原型,跑之前先學會走。

16. 多樣原則:決不相信所謂「不二法門」的斷言。

17. 擴充套件原則:設計著眼未來,未來總比預想來得快。

軟體設計有兩種方式:一種是設計得極為簡潔,沒有看得到的缺陷;另一種是設計得極為複雜,有缺陷也看不出來。第一種方式的難度要大得多。

在unix歷史中,最大的規律就是:距開源越近就越繁榮。

養成在編碼前為api編寫一段非正式書面描述的習慣,是乙個非常好的辦法。實際上,一些最有能力的開發者,一開始總是定義介面,然後編寫簡要注釋,對其進行描述,最後才編寫**——因為編寫注釋的過程就闡明了**必須達到的目的。這種描述能夠幫助你組織思路,本身就是十分有用的模組說明,而且,最終你可能還想把這些說明做成路標文件(roadmap document),方便以後的人閱讀**。

hatton 的經驗資料表明,假設其它所有因素(如程式設計師能力)都相同,200 到 400 之間邏輯行的**是「最佳點」,可能的缺陷密度達到最小。

hatton 建議邏輯行與物理行之間為兩倍的折算率,即最佳物理行數建議應在400至800行之間。

無論何時,重複**都是危險訊號。

程式設計師工具箱中最強大的優化技術就是不做優化。

最聰明、最便宜、常常也是最迅速的效能提公升方法,就是等上幾個月,期望硬體效能更好。

如果有真憑實據證明應用程式執行緩慢,這時(僅當此時)才可以考慮優化**。但付諸實施前,要先估量。

最有效的**優化方法就是保持**短小簡單。

有時,按需計算出昂貴的結果,再快取起來為以後使用,通過這種方法可以兼得魚和熊掌(低延遲和高吞吐量)—合理利用快取

**多並不等於**好,至少在編寫低層次**和大量重複投入時是如此。

評估開源軟體包的方法是閱讀其文件和快速瀏覽它的部分**。如果所見的**編寫恰當,文件完備,那麼鼓勵使用。如果能夠證明軟體包已經有些年頭並且存在實質具體的使用者反饋,就可以斷定它是相當可靠的(無論如何還是測測為佳)。

**未來最好的方法就是去創造未來。2023年xerox parc會議上的發言—alan kay

《Unix程式設計藝術》

軟體設計的經典書籍,譯者語言功底也是了得 1 unix作業系統發展的歷史,武俠口吻描述的頗有趣味 2 文字化的協議設計方法,應用協議的三元老,學習協議設計的好出處 3 透明性和可顯性,讓活 還是活 讓死 還是死 4 管道之於unix的意義 將大程式劃分成多個行為簡單的子程式,定義好介面。討論了程序執...

UNIX程式設計藝術, 好書

本書寫作了五年之久,作者將unix三十年中未見紙端的艱難勝利的軟體工程智慧型融入文字,使unix家族成為最好最具創新軟體的哲學 設計模式 工具 文化和傳統,raymond將之第一次帶給我們,並向我們展示它們如何影響著當今的 linux和開源運動。通過大量來自頂尖專案的例項,你將學會如何運用這些智慧型...

總結 Unix設計哲學 Unix程式設計藝術》

學習了這句話其實常見,尤其是花過功夫學習英文的朋友.而這個原則可以應用在生活的各個方面.這一原則是歷經多少專案的檢驗結果,而我們正是站在一位巨人的肩膀上直接看到現在的理所當然的基本規則.如何翻譯呢?我覺得字面上是 簡潔,樸實 精神上可以相較於 大智若愚 哲學上則相似於 道 還要清楚的認識到,這些總結...