《傳世經典書叢:UNIX編程藝術》內容涉及社群文化、軟件開發設計與實現,覆蓋麵廣、內容深邃,完全展現瞭作者極其深厚的經驗積纍和領域智慧。
《傳世經典書叢:UNIX編程藝術》主要介紹瞭Unix係統領域中的設計和開發哲學、思想文化體係、原則與經驗,由公認的Unix編程大師、開源運動領袖人物之一Eric S.Raymond傾力多年寫作而成。包括Unix設計者在內的多位領域專傢也為本書貢獻瞭寶貴的內容。本書內容涉及社群文化、軟件開發設計與實現,覆蓋麵廣、內容深邃,完全展現瞭作者極其深厚的經驗積纍和領域智慧。
Eric S.Raymond,從1982年開始就是UNIX開發者。作為開源社區文化的倡導和呼籲者,他在《大教堂與市集》中寫下瞭這場運動的宣言,同時他還是《新黑客詞典》的編輯。
序
Part I
第1章 哲學
1.1 文化?什麼文化
1.2 Unix的生命力
1.3 反對學習Unix文化的理由
1.4 Unix之失
1.5 Unix之得
1.5.1 開源軟件
1.5.2 跨平颱可移植性和開放標準
1.5.3 Internet和萬維網
1.5.4 開源社區
1.5.5 從頭到腳的靈活性
1.5.6 Unix Hack之趣
1.5.7 Unix的經驗彆處也可適用
1.6 Unix哲學基礎
1.6.1 模塊原則:使用簡潔的接口拼閤簡單的部件
1.6.2 清晰原則:清晰勝於機巧
1.6.3 組閤原則:設計時考慮拼接組閤
1.6.4 分離原則:策略同機製分離,接口同引擎分離
1.6.5 簡潔原則:設計要簡潔,復雜度能低則低
1.6.6 吝嗇原則:除非確無它法,不要編寫龐大的程序
1.6.7 透明性原則:設計要可見,以便審查和調試
1.6.8 健壯原則:健壯源於透明與簡潔
1.6.9 錶示原則:把知識疊入數據以求邏輯質樸而健壯
1.6.10 通俗原則:接口設計避免標新立異
1.6.11 緘默原則:如果一個程序沒什麼好說的,就保持沉默
1.6.12 補救原則:齣現異常時,馬上退齣並給齣足量錯誤信息
1.6.13 經濟原則:寜花機器一分,不花程序員一秒
1.6.14 生成原則:避免手工hack,盡量編寫程序去生成程序
1.6.15 優化原則:雕琢前先得有原型,跑之前先學會走
1.6.16 多樣原則:決不相信所謂“不二法門”的斷言
1.6.17 擴展原則:設計著眼未來,未來總比預想快
1.7 Unix哲學之一言以蔽之
1.8 應用Unix哲學
1.9 態度也要緊
第2章 曆史——雙流記
2.1 Unix的起源及曆史,1969-1995
2.1.1 創世紀:1969-1971
2.1.2 齣埃及記:1971-1980
2.1.3 TCP/IP 和Unix內戰:1980-1990
2.1.4 反擊帝國:1991-1995
2.2 黑客的起源和曆史:1961-1995
2.2.1 遊戲在校園的林間:1961-1980
2.2.2 互聯網大融閤與自由軟件運動:1981-1991
2.2.3 Linux 和實用主義者的應對:1991-1998
2.3 開源運動:1998年及之後
2.4 Unix的曆史教訓
第3章 對比:Unix哲學同其他哲學的比較
3.1 操作係統的風格元素
3.1.1 什麼是操作係統的統一性理念
3.1.2 多任務能力
3.1.3 協作進程
3.1.4 內部邊界
3.1.5 文件屬性和記錄結構
3.1.6 二進製文件格式
3.1.7 首選用戶界麵風格
3.1.8 目標受眾
3.1.9 開發的門坎
3.2 操作係統的比較
3.2.1 VMS
3.2.2 MacOS
3.2.3 OS/2
3.2.4 Windows NT
3.2.5 BeOS
3.2.6 MVS
3.2.7 VM/CMS
3.2.8 Linux
3.3 種什麼籽,得什麼果
Part II
第4章 模塊性:保持清晰,保持簡潔
4.1 封裝和最佳模塊大小
4.2 緊湊性和正交性
4.2.1 緊湊性
4.2.2 正交性
4.2.3 SPOT原則
4.2.4 緊湊性和強單一中心
4.2.5 分離的價值
4.3 軟件是多層的
4.3.1 自頂嚮下和自底嚮上
4.3.2 膠閤層
4.3.3 實例分析:被視為薄膠閤層的C語言
4.4 程序庫
4.4.1 實例分析:GIMP插件
4.5 Unix和麵嚮對象語言
4.6 模塊式編碼
第5章 文本化:好協議産生好實踐
5.1 文本化的重要性
5.1.1 實例分析:Unix口令文件格式
5.1.2 實例分析:.newsrc格式
5.1.3 實例分析:PNG圖形文件格式
5.2 數據文件元格式
5.2.1 DSV 風格
5.2.2 RFC 822 格式
5.2.3 Cookie-Jar格式
5.2.4 Record-Jar格式
5.2.5 XML
5.2.6 Windows INI 格式
5.2.7 Unix文本文件格式的約定
5.2.8 文件壓縮的利弊
5.3 應用協議設計
5.3.1 實例分析:SMTP,一個簡單的套接字協議
5.3.2 實例分析:POP3,郵局協議
5.3.3 實例分析:IMAP,互聯網消息訪問協議
5.4 應用協議元格式
5.4.1 經典的互聯網應用元協議
5.4.2 作為通用應用協議的HTTP
5.4.3 BEEP:塊可擴展交換協議
5.4.4 XML-RPC,SOAP和Jabber
第6章 透明性:來點兒光
6.1 研究實例
6.1.1 實例分析:audacity
6.1.2 實例分析:fetchmail的-v選項
6.1.3 實例分析:GCC
6.1.4 實例分析:kmail
6.1.5 實例分析:SNG
6.1.6 實例分析:Terminfo數據庫
6.1.7 實例分析:Freeciv數據文件
6.2 為透明性和可顯性而設計
6.2.1 透明性之禪
6.2.2 為透明性和可顯性而編碼
6.2.3 透明性和避免過度保護
6.2.4 透明性和可編輯的錶現形式
6.2.5 透明性、故障診斷和故障恢復
6.3 為可維護性而設計
第7章 多道程序設計:分離進程為獨立的功能
7.1 從性能調整中分離復雜度控製
7.2 Unix IPC 方法的分類
7.2.1 把任務轉給專門程序
7.2.2 管道、重定嚮和過濾器
7.2.3 包裝器
7.2.4 安全性包裝器和Bernstein鏈
7.2.5 從進程
7.2.6 對等進程間通信
7.3 要避免的問題和方法
7.3.1 廢棄的Unix IPC方法
7.3.2 遠程過程調用
7.3.3 綫程——恐嚇或威脅
7.4 在設計層次上的進程劃分
第8章 微型語言:尋找歌唱的樂符
8.1 理解語言分類法
8.2 應用微型語言
8.2.1 案例分析:sng
8.2.2 案例分析:正則錶達式
8.2.3 案例分析:Glade
8.2.4 案例分析:m4
8.2.5 案例分析:XSLT
8.2.6 案例分析:The Documenter's Workbench Tools
8.2.7 案例分析:fetchmail的運行控製語法
8.2.8 案例分析:awk
8.2.9 案例分析:PostScript
8.2.10 案例分析:bc和dc
8.2.11 案例分析:Emacs Lisp
8.2.12 案例分析:JavaScript
8.3 設計微型語言
8.3.1 選擇正確的復雜度
8.3.2 擴展和嵌入語言
8.3.3 編寫自定義語法
8.3.4 宏-慎用
8.3.5 語言還是應用協議
第9章 生成:提升規格說明的層次
9.1 數據驅動編程
9.1.1 實例分析:ascii
9.1.2 實例分析:統計學的垃圾郵件統計
9.1.3 實例分析:fetchmailconf中的元類改動
9.2 專用代碼的生成
9.2.1 實例分析:生成ascii顯示的代碼
9.2.2 實例分析:為列錶生成HTML代碼
第10章 配置:邁齣正確的第一步
10.1 什麼應是可配置的
10.2 配置在哪裏
10.3 運行控製文件
10.3.1 實例分析:.netrc文件
10.3.2 到其它操作係統的可移植性
10.4 環境變量
10.4.1 係統環境變量
10.4.2 用戶環境變量
10.4.3 何時使用環境變量
10.4.4 到其它操作係統的可移植性
10.5 命令行選項
10.5.1 從-a到-z的命令行選項
10.5.2 到其它操作係統的可移植性
10.6 如何挑選方法
10.6.1 實例分析:fetchmail
10.6.2 實例分析:XFree86服務器
10.7 論打破規則
第11章 接口:Unix環境下的用戶接口設計模式
第12章 優化
第13章 復雜度:盡可能簡單,但彆簡單過瞭頭
Part Ⅲ
第14章 語言:C還是非C
第15章 工具:開發的戰術
第16章 重用:論不要重新發明輪子
Part Ⅳ
第17章 可移植性:軟件可移植性與遵循標準
第18章 文檔:嚮網絡世界闡釋代碼
第19章 開放源碼:在Unix新社區中編程
第20章 未來:危機與機遇
附錄A 縮寫詞錶
附錄B 參考文獻
附錄C 貢獻者
附錄D 無根的根:無名師的Unix心傳
Colophon
索引
讀者評論
terminfo本身使用文件係統作為一個簡單的層級數據庫。這種偷懶相當具有建設性,符閤經濟性原則和透明性原則。這意味著對文件係統進行瀏覽、檢查和修改的所有普通工具都可以用於對terminfo數據庫進行瀏覽、檢查和修改;無需編寫和調試專用工具(用於打包和解包單個記錄的tic(1)和infocmp(1)工具除外)。這也意味著要加速數據庫的訪問就得要加速文件係統本身,知道這一點可以使更多應用程序受益,而不僅僅是curses(3)的用戶。
這種結構還有另外一種優點,但在terminfo例子中沒有展示齣來:你開始使用Unix的授權機製而不用自己編寫帶來額外bu9的訪問控製層。這也是采納而不是對抗Unix“一切皆文件”基本原則的結果。
terminfo目錄的布局在大多數Unix文件係統上都很浪費空間。每條目長度通常在400~1400字節之間,但是文件係統通常為每一個非空磁盤文件至少分配4k的空間。齣於選擇壓縮二進製格式的同一個原因,即為瞭把terminfo使用的程序的啓動延時降到最小,設計者接受瞭這個代價。同一價格所能買到的磁盤容量已經猛增瞭一韆倍,更能證明這個決定的正確。
比較這種格式和Microcsoft Windows的注冊錶文件所用的格式很有啓發意義。注冊錶是Windows本身及應用程序都使用的屬性數據庫。所有注冊記錄都存放在一個大文件中。注冊記錄既包含文本也包含二進製數據,需要專用的編輯工具。彆的不說,這種“一個大文件”的方法還導緻瞭臭名昭著的“注冊錶蠕變”現象;平均訪問時間隨著新記錄的加入而無限上升。因為係統沒有提供標準APl來編輯注冊錶,應用程序本身使用專用代碼編輯注冊錶,使得注冊錶極易受損,甚至能夠鎖定整個係統。
使用Unix文件係統作為數據庫是一種策略,對數據庫要求簡單的其它應用程序可以效仿並從中受益。不這樣做的充分理由通常與性能問題無關,更可能的情形是數據庫關鍵字不太適閤做文件名。無論如何,這是在原型設計時非常有用的一種很好的快速編程方法。
6.1.7 實例分析:Freeciv數據文件
Freeciv是一款受到Sid Meier經典的Civilization H啓發而製作的開源策略遊戲。在該遊戲中,每個玩傢從一群到處流浪的新石器遊牧民開始締造一個文明。玩傢的文明可以探索並拓殖世界,參與戰爭,從事貿易和研究先進技術。有些玩傢實際上可能是人工智能;和這些電腦玩傢玩單機遊戲很有挑戰性。如果誰統治瞭整個世界,或者第一個研製齣先進技術從而獲得宇宙飛船飛往半人馬座阿爾法星(Alpha Centauri),誰就是遊戲的勝利者。源碼和文檔可以在處獲得。
……
這本書的名字引起瞭我對 UNIX 曆史的好奇。它不僅僅是一個操作係統,更是一種文化,一種哲學。我一直對那些奠定行業基礎的技術充滿瞭敬意,因為它們往往蘊含著最根本的原理和最精妙的設計。這本書的標題讓我覺得,它可能不僅僅是教你如何寫代碼,更重要的是讓你理解 UNIX 的設計思想,以及這些思想是如何影響瞭後來的整個計算機科學領域。
評分這本書的書名讓我想起瞭小時候在書店裏看到的那些大部頭的技術書籍,封麵樸實無華,但翻開來卻能學到很多實在的東西。雖然我接觸計算機的時間不算特彆長,但聽聞過很多關於 UNIX 的傳說,它就像是計算機世界裏的“老祖宗”,很多現代操作係統都能看到它的影子。這本書的名字聽起來就有一種“傳世”的感覺,仿佛是前人留下的寶貴財富,等著我們去挖掘和學習。
評分我對這本書的第一印象是它帶來的那種“匠人精神”的聯想。在如今快節奏、追求“速成”的時代,一本以“藝術”來命名編程的書,本身就顯得格外有分量。這不僅僅是關於代碼的堆砌,更像是一種對編程哲學、對係統設計思路的深入探討。我猜想,這本書或許能帶我窺見那些優秀程序員是如何思考問題、如何構建健壯而優雅的係統的,這對我來說是一種極具吸引力的學習方嚮。
評分這本書的封麵設計就有一種沉靜而深邃的感覺,淡淡的古銅色搭配著燙金的字體,仿佛訴說著一種曆史的厚重感。拿到手裏,紙張的質感也相當不錯,不是那種輕飄飄的閤成紙,而是帶著一絲溫潤的觸感,翻閱起來頁麵的摩擦聲都帶著一種儀式感。我一直對那些能夠沉澱下來、經久不衰的經典著作情有獨鍾,總覺得它們蘊含著超越時代的智慧和經驗。
評分當我看到這本書的標題時,腦海中立刻浮現齣那些曆經時間考驗的經典作品。它們往往不是最時髦的,但卻是最實在、最能解決根本問題的。我尤其喜歡那種能夠將復雜概念講得清晰透徹,並且能引發讀者深入思考的書。這本書的名字給我一種預感,它可能會是一本打開我技術視野的書,讓我從更宏觀、更本質的角度去理解編程和係統設計。
評分怎麼說呢?Raymond在Unix上麵的著作應該是公認的好口碑吧,慢慢的看。
評分還不錯啊啊啊啊啊啊啊啊
評分unix真的是傳世經典啊,嗯,現在迫切需要一颱macbook
評分活動很優惠。配送也很快。會繼續支持的。
評分大神推薦的讀物,買來準備看看,提升下自己的水平,希望對自己有用
評分藝術,藝術,懂麼
評分感覺還可以,包裝到位,送貨快,推薦
評分風雲大神,推薦推薦的書必須要看呀,而且要認真的看。
評分幫同事買的,說是經典書籍!很值得一讀
本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度,google,bing,sogou 等
© 2025 book.cndgn.com All Rights Reserved. 新城书站 版權所有