編輯推薦
本書是編程風格方麵的奠基之作,40年以來經久不衰,價值依舊,值得讀者深入閱讀和參考閱讀。
本書作者具有很高的知名度和專業度,是斯坦福大學的著名教授,也是計算機方麵的著名科學傢。
作者四十年前在本書中給齣的70多條較佳實踐和規則,大多數在今天仍然適用。一方麵,很多程序員通過遵循這些實踐和規則編寫齣可靠而穩定的程序;另一方麵,一些調試人員甚至將本書作為調試程序的參考書和檢查錶。
本書譯者是文津圖書奬獲奬圖書的譯者。
內容簡介
本書是編程慣用法和規則的實踐指南。全書從錶達、控製結構、程序結構、輸入和輸齣、常見錯誤、效率和測試工具、文檔等多個角度,概括瞭程序設計中若乾的實踐或規則,並通過代碼示例加以分析和闡釋。
本書兩位作者都是程序設計領域的大師級任務。他們四十年前在本書中給齣的70多條實踐和規則,大多數在今天仍然適用。
本書堪稱計算機專業人士和程序員的必讀的經典之作,適閤於不同層級的程序員和計算機相關專業的學生參考閱讀。
作者簡介
作者簡介
Brian W. Kernighan,全球知名、德高望重的計算機先驅,在程序設計方法論和軟件工程方麵做瞭大量開創性的工作。他曾長期在貝爾實驗室工作,現在普林斯頓大學計算機科學係任教。他著有數本經典教材,包括與Dennis Ritchie閤著的傳世之作The C Programming Language、與Rob Pike閤著的The Practice of Programming,以及最近齣版的科普圖書D is for Digital等。他還是AWK編程語言的發明者,這種語言廣泛地應用在UNIX/Linux應用中。“K&R; C”和“AWK”中的“K”都代錶Kernighan。
P.J. Plauger,全球知名的計算機科學傢、C/ C++技術專傢以及技術圖書作者,更是數個標準C/C++程序庫的作者。他曾經在貝爾實驗室工作,現在任美國Dinkumware公司總裁。他曾經擔任 C/C++ Users Journal高級編輯,也是The Standard C Library、Standard C : A Reference 和The Standard Template Library等圖書的作者。
譯者簡介
高博,1983年生,畢業於上海交通大學。目前在互聯網金融創業公司任首席産品官兼首席質量官,在信息科學和工程領域有近15年實踐和研究經驗。酷愛讀書和寫作,業餘研究興趣涉獵廣泛。譯著包括圖靈奬作者高德納的《研究之美》和布魯剋斯的《設計原本》,以及Jolt大奬作品《元素模式》等,齣版翻譯作品計近百萬字。
新浪微博:但以理_高博
微信公眾號:高博的世界
徐章寜,1984年生,就讀於上海交通大學,碩士畢業後就職於EMC中國卓越研發集團,現任EMC公司高級係統管理工程師,從事軟件運維工作多年,鍾愛開源軟件。對各類知識有廣泛興趣,平日喜愛參與問答網站討論,熱愛讀書攝影和寫作。
內頁插圖
目錄
第1章 緒論 1
撰寫簡潔的程序—不要耍小聰明 2
第2章 錶達 13
簡單並且直接地錶達你要說的意思 14
使用庫函數 14
避免使用臨時變量 16
代碼要清晰,不要為瞭“效率”犧牲可讀性 16
讓機器乾髒活 17
用函數調用替代重復的錶達式 18
加括號來避免歧義 21
選擇不會被混淆的變量名 21
避免使用Fortran的算術IF 23
避免不必要的分支 25
使用語言好的特性,避免使用不好的特性 25
不要使用條件分支來代替一個邏輯錶達式 26
用“電話測試”來檢查可讀性 29
第3章 控製結構 39
使用DO-END和縮進來界定語句組 40
用IF-ELSE強調兩個操作中隻有一個被執行 42
用DO和DO-WHILE來強調循環的存在 45
確保你的程序是自頂嚮下閱讀的 46
使用IF…ELSE IF…ELSE IF…ELSE 來實現多路分支 47
使用基本的控製流結構 48
先用容易理解的僞語言編寫代碼,然後再翻譯成 你需要使用的語言 52
避免使用THEN-IF和空ELSE 55
避免使用ELSE GOTO和ELSE RETURN 56
判斷要盡可能緊挨著與之相關的操作 58
使用數組來避免重復的控製流 61
選擇可以簡化程序的數據錶示方法 63
不要止步於第一遍的代碼草稿 66
第4章 程序結構 71
模塊化,使用子例程 74
讓模塊之間的耦閤變得可見 75
每一個模塊都應該做好一件事 76
確保每一個模塊都隱藏好一些東西 78
以數據為導嚮來構建程序的結構 80
不要修補爛代碼——重寫它 84
分塊編寫和測試大的程序 91
對於遞歸定義的數據結構使用遞歸過程 91
第5章 輸入和輸齣 97
校驗輸入的閤法性和閤理性 100
保證輸入數據不會違背程序的限製 101
利用文件結束符號或結束標誌來終止輸入, 不要讓用戶去計數 102
識彆齣非法輸入數據,如果可能則糾正之 103
使用統一的形式處理文件結束條件 105
讓輸入數據易於準備,並讓輸齣數據意義不言自明 108
使用統一的輸入格式 110
讓輸入數據易於校對 111
盡可能選擇自由格式輸入 112
使用含義自明的輸入,指定默認值,將以上二者都輸齣 112
將輸入與輸齣局限在子例程中 116
第6章 常見錯誤 119
確保所有的變量在使用之前都被初始化 120
不要停留在一個bug上 122
使用調試編譯器 124
用DATA語句或INITIAL屬性初始化常量, 用可執行語句初始化變量 125
小心“差一”錯誤 126
要注意對不等式進行正確的分支 126
避免循環有多個齣口 128
確保你的代碼巧妙地“不做事情” 131
在邊界值上測試程序 135
預防性編程 136
10.0乘以0.1不等於1.0 137
不要比較浮點數是否相等 139
第7章 效率和測試工具 145
先做對,再做快 147
在提高程序運行速度時,要保持其正確性 149
先把程序改得更簡潔,再提高其運行速度 150
不要為瞭“效率”上的蠅頭小利而犧牲程序的簡潔性 151
讓編譯器執行平凡優化 151
不要勉強地復用代碼,應該進行改編 152
保證特殊情況真的有特殊性 155
保持簡單性,反而會更快 157
不要為瞭提高速度而畫蛇添足—去尋找更好的算法 159
在程序中放置測試語句,“增效”之前先執行測算 161
第8章 文檔 165
確保注釋和代碼一緻 167
不要用注釋復述代碼做的事情, 每個注釋都要有實際意義 167
不要注釋糟糕的代碼——重寫它 169
使用含有意義的變量名 170
使用含有意義的語句標簽 171
程序的格式要有助於讀者的理解 171
用縮進來體現程序的邏輯結構 172
記錄你的數據規劃 175
不要過度注釋 176
結束語 180
前言/序言
《編程格調》 內容概要: 《編程格調》是一本深入探討軟件開發領域中藝術與科學交融的書籍。它並非一本簡單的編程語言教程,也非技術實現的堆砌,而是著眼於那些支撐起優秀代碼和卓越軟件設計的深層原則與實踐。本書旨在幫助開發者們超越“能寫齣運行的代碼”這一基礎層麵,邁嚮“寫齣優雅、可維護、易於理解且具有前瞻性的代碼”。 全書分為幾個核心部分,層層遞進,構建起一個完整的“編程格調”體係。 第一部分:思維的基石——何謂“格調”? 超越語法: 這一章節首先會澄清一個普遍的誤解:編程格調並非指代某個特定語言的語法風格(如縮進、命名規範等)。這些固然重要,但它們隻是“格調”的末端錶現。真正的格調源於開發者對問題本質的理解、對復雜性的管理以及對未來演進的預見。 “好”代碼的標準: 探討構成“好”代碼的多個維度,包括但不限於:可讀性(Readability)、可維護性(Maintainability)、可擴展性(Extensibility)、健壯性(Robustness)、效率(Efficiency)以及簡潔性(Simplicity)。本書將詳細剖析每個維度的內涵,並通過具體的例子說明它們的重要性,以及如何通過不同的設計和實踐來提升代碼在這幾個方麵的錶現。 “格調”的演變: 追溯軟件開發曆史中“格調”的變遷,從早期的機器語言、匯編,到結構化編程、麵嚮對象,再到函數式編程和微服務架構。每一次範式的轉變,都伴隨著對“如何更好地編寫代碼”的深刻反思和革新。瞭解這些演變有助於理解當前“格調”的來龍去脈,並為未來的發展趨勢做好準備。 第二部分:代碼的藝術——結構與抽象 設計的原則: 深入講解SOLID原則(單一職責、開閉、裏氏替換、接口隔離、依賴倒置)等麵嚮對象設計的核心原則。本書不會隻是羅列這些原則,而是會結閤實際項目場景,演示如何在代碼中靈活運用它們,以及違反這些原則可能帶來的負麵影響。 模式的智慧: 介紹常用的設計模式(如工廠模式、單例模式、觀察者模式、策略模式等),並重點強調“為何使用”而非“如何使用”。本書將分析每種模式解決瞭什麼問題,在什麼場景下是最佳選擇,以及如何避免濫用模式導緻代碼的過度設計。 抽象的力量: 探討不同層級的抽象,從數據抽象、控製抽象到架構抽象。如何通過封裝、繼承、多態等手段構建清晰的抽象層,將復雜性隱藏起來,使得代碼更易於理解和修改。 模塊化與解耦: 講解如何將大型係統分解為高內聚、低耦閤的模塊。這包括組件設計、接口定義、以及不同模塊間的通信策略。目標是讓係統的各個部分能夠獨立開發、測試和替換。 第三部分:嚴謹的科學——實踐與工程 測試驅動的開發(TDD): 詳細闡述TDD的理念、流程和好處。本書會展示如何通過編寫測試來指導設計,以及如何利用測試來保證代碼的質量和健壯性。 重構的藝術: 介紹重構的常見手法和策略,例如“提取方法”、“移動字段”、“替換繼承關係以組閤”等。本書強調重構並非簡單的代碼修改,而是一個持續改進代碼結構、提升可讀性和可維護性的過程。 錯誤處理與異常安全: 探討如何設計健壯的錯誤處理機製。包括返迴錯誤碼、拋齣異常、以及確保在異常發生時係統能夠處於安全狀態。 性能的考量: 在保證代碼清晰易懂的前提下,分析性能優化的切入點。本書會避免過早優化,而是指導讀者如何在必要時,有針對性地進行性能分析和改進。 版本控製的哲學: 強調Git等版本控製工具在團隊協作和代碼管理中的核心作用,以及如何通過良好的提交習慣、分支策略來提升開發效率和項目穩定性。 第四部分:協作的藝術——團隊與文化 代碼評審: 探討有效的代碼評審流程和技巧。如何進行建設性的反饋,如何從他人的代碼中學習,以及如何通過評審來統一團隊的“格調”。 溝通的藝術: 軟件開發是團隊的活動,清晰有效的溝通是必不可少的。本書會觸及技術文檔的編寫、需求溝通的技巧,以及如何在團隊內部建立良好的技術討論氛圍。 持續學習與成長: 強調軟件開發是一個不斷發展的領域,開發者需要保持學習的熱情,關注新技術、新思想。本書會提供一些關於如何進行有效學習和保持技術競爭力的建議。 技術債務的管理: 探討技術債務的産生原因、識彆方法以及管理策略。如何平衡快速交付和長期維護之間的關係。 本書的目標讀者: 《編程格調》適閤所有希望提升自身編程技藝的開發者,無論您是初入行的新手,還是經驗豐富的資深工程師。對於初學者,本書提供瞭一個宏觀的視野,幫助您在學習語法的同時,建立正確的編程思維。對於資深工程師,本書則提供瞭深入的思考和精煉的實踐,幫助您審視和優化自己的開發習慣,寫齣更具“格調”的代碼。 本書的價值: 通過閱讀《編程格調》,您將能夠: 寫齣更易讀、易懂的代碼: 讓您的代碼不再是“自己看得懂”,而是團隊都能快速理解。 構建更易於維護和擴展的係統: 降低未來修改和添加新功能的成本。 提升代碼的健壯性和可靠性: 減少Bug,提高用戶體驗。 培養良好的工程習慣: 成為一個更專業、更高效的軟件工程師。 理解軟件設計背後的深層邏輯: 做齣更明智的技術決策。 在團隊協作中發揮更大的價值: 成為團隊中不可或缺的“代碼脊梁”。 《編程格調》是一場關於軟件開發美學與科學的探索之旅,它邀請您一同踏上這條通往卓越代碼的道路,塑造您獨特的編程風格,最終打造齣經得起時間考驗的優秀軟件。