出版時間:2012-7-10 出版社:機械工業(yè)出版社華章公司 作者:Boswell, D.,Foucher, T. 頁數(shù):178 譯者:尹哲,鄭秀雯
Tag標簽:無
前言
我們曾經(jīng)在非常成功的軟件公司中和出色的工程師一起工作,然而我們所遇到的代碼仍有很大的改進空間。實際上,我們曾見到一些很難看的代碼,你可能也見過。 但是當我們看到寫得很漂亮的代碼時,會很受啟發(fā)。好代碼會很明確告訴你它在做什么。使用它會很有趣,并且會鼓勵你把自己的代碼寫得更好。 本書旨在幫助你把代碼寫得更好。當我們說“代碼”時,指的就是你在編輯器里面要寫的一行一行的代碼。我們不會討論項目的整體架構(gòu),或者所選擇的設(shè)計模式。當然那些很重要,但我們的經(jīng)驗是程序員的日常工作的大部分時間都花在一些“基本”的事情上,像是給變量命名、寫循環(huán)以及在函數(shù)級別解決問題。并且這其中很大的一部分是閱讀和編輯已有的代碼。我們希望本書對你每天的編程工作有很多幫助,并且希望你把本書推薦給你團隊中的每個人。本書內(nèi)容安排 這是一本關(guān)于如何編寫具有高可讀性代碼的書。本書的關(guān)鍵思想是代碼應該寫得容易理解。確切地說,使別人用最短的時間理解你的代碼。 本書解釋了這種思想,并且用不同語言的大量例子來講解,包括C++、Python、JavaScript和Java。我們避免使用某種高級的語言特性,所以即使你不是對所有的語言都了解,也能很容易看懂。(以我們的經(jīng)驗,反正可讀性的大部分概念都是和語言不相關(guān)的。)每一章都會深入編程的某個方面來討論如何使代碼更容易理解。本書分成四部分:?表面層次上的改進 命名、注釋以及審美——可以用于代碼庫每一行的小提示。?簡化循環(huán)和邏輯 在程序中定義循環(huán)、邏輯和變量,從而使得代碼更容易理解。?重新組織你的代碼 在更高層次上組織大的代碼塊以及在功能層次上解決問題的方法。?精選話題 把“易于理解”的思想應用于測試以及大數(shù)據(jù)結(jié)構(gòu)代碼的例子。如何閱讀本書 我們希望本書讀起來愉快而又輕松。我們希望大部分讀者在一兩周之內(nèi)讀完全書。章節(jié)是按照"難度"來排序的:基本的話題在前面,更高級的話題在后面。然而,每章都是獨立的。因此如果你想跳著讀也可以。代碼示例的使用 本書旨在幫助你完成你的工作。一般來說,可以在程序和文檔中使用本書的代碼。如果你復制了代碼的關(guān)鍵部分,那么你就需要聯(lián)系我們獲得許可。例如,利用本書的幾段代碼編寫程序是不需要許可的。售賣或出版書中示例的D-ROM需要我們的許可。引用本書回答問題以及引用示例代碼不需要我們的許可。將本書的大量示例代碼用于你的產(chǎn)品文檔中需要許可。
內(nèi)容概要
細節(jié)決定成敗,思路清晰、言簡意賅的代碼讓程序員一目了然;而格式凌亂、拖沓冗長的代碼讓程序員一頭霧水。除了可以正確運行以外,優(yōu)秀的代碼必須具備良好的可讀性,編寫的代碼要使其他人能在最短的時間內(nèi)理解才行。本書旨在強調(diào)代碼對人的友好性和可讀性。
本書關(guān)注編碼的細節(jié),總結(jié)了很多提高代碼可讀性的小技巧,看似都微不足道,但是對于整個軟件系統(tǒng)的開發(fā)而言,它們與宏觀的架構(gòu)決策、設(shè)計思想、指導原則同樣重要。編碼不僅僅只是一種技術(shù),也是一門藝術(shù),編寫可讀性高的代碼尤其如此。如果你要成為一位優(yōu)秀的程序員,要想開發(fā)出高質(zhì)量的軟件系統(tǒng),必須從細處著手,做到內(nèi)外兼修,本書將為你提供有效的指導。
·簡化命名、注釋和格式的方法,使每行代碼都言簡意賅。
·梳理程序中的循環(huán)、邏輯和變量來減小復雜度并理清思路。
·在函數(shù)級別解決問題,例如重新組織代碼塊,使其一次只做一件事。
·編寫有效的測試代碼,使其全面而簡潔,同時可讀性更高。
作者簡介
Dustin
Boswell畢業(yè)于加州理工大學,資深軟件工程師,在Google就職多年,負責Web爬蟲和程序設(shè)計相關(guān)的工作。他專注于前端、后端,服務器架構(gòu)、機器學習、大數(shù)據(jù)、系統(tǒng)和網(wǎng)站等技術(shù)領(lǐng)域的研究和實踐,經(jīng)驗十分豐富。他現(xiàn)在是MyLikes的軟件工程師。
Trevor
Foucher資深軟件工程師和技術(shù)經(jīng)理,先后在Microsoft和Google工作了數(shù)十年,在Microsoft擔任軟件工程師、技術(shù)經(jīng)理以及安全產(chǎn)品技術(shù)主管,在Google從事廣告應用開發(fā)和搜索基礎(chǔ)結(jié)構(gòu)研發(fā)相關(guān)的工作。
書籍目錄
前言
第1章 代碼應當易于理解
是什么讓代碼變得“更好”
可讀性基本定理
總是越小越好嗎
理解代碼所需的時間是否與其他目標有沖突
最難的部分
第一部分 表面層次的改進
第2章 把信息裝到名字里
選擇專業(yè)的詞
避免像tmp和retval這樣泛泛的名字
用具體的名字代替抽象的名字
為名字附帶更多信息
名字應該有多長
利用名字的格式來傳遞含義
總結(jié)
第3章 不會誤解的名字
例子:Filter()
例子:Clip(text, length)
推薦用first和last來表示包含的范圍
推薦用begin和end來表示包含/排除范圍
給布爾值命名
與使用者的期望相匹配
例子:如何權(quán)衡多個備選名字
總結(jié)
第4章 審美
為什么審美這么重要
重新安排換行來保持一致和緊湊
用方法來整理不規(guī)則的東西
在需要時使用列對齊
選一個有意義的順序,始終一致地使用它
把聲明按塊組織起來
把代碼分成“段落”
個人風格與一致性
總結(jié)
第5章 該寫什么樣的注釋
什么不需要注釋
記錄你的思想
站在讀者的角度
最后的思考——克服“作者心理阻滯”
總結(jié)
第6章 寫出言簡意賅的注釋
讓注釋保持緊湊
避免使用不明確的代詞
潤色粗糙的句子
精確地描述函數(shù)的行為
用輸入/輸出例子來說明特別的情況
聲明代碼的意圖
“具名函數(shù)參數(shù)”的注釋
采用信息含量高的詞
總結(jié)
第二部分 簡化循環(huán)和邏輯
第7章 把控制流變得易讀
條件語句中參數(shù)的順序
if/else語句塊的順序
?:條件表達式(又名“三目運算符”)
避免do/while循環(huán)
從函數(shù)中提前返回
臭名昭著的goto
最小化嵌套
你能理解執(zhí)行的流程嗎
總結(jié)
第8章 拆分超長的表達式
用做解釋的變量
總結(jié)變量
使用德摩根定理
濫用短路邏輯
例子:與復雜的邏輯戰(zhàn)斗
拆分巨大的語句
另一個簡化表達式的創(chuàng)意方法
總結(jié)
第9章 變量與可讀性
減少變量
縮小變量的作用域
只寫一次的變量更好
最后的例子
總結(jié)
第三部分 重新組織代碼
第10章 抽取不相關(guān)的子問題
介紹性的例子:findClosestLocation()
純工具代碼
其他多用途代碼
創(chuàng)建大量通用代碼
項目專有的功能
簡化已有接口
按需重塑接口
過猶不及
總結(jié)
第11章 一次只做一件事
任務可以很小
從對象中抽取值
更大型的例子
總結(jié)
第12章 把想法變成代碼
清楚地描述邏輯
了解函數(shù)庫是有幫助的
把這個方法應用于更大的問題
總結(jié)
第13章 少寫代碼
別費神實現(xiàn)那個功能——你不會需要它
質(zhì)疑和拆分你的需求
保持小代碼庫
熟悉你周邊的庫
例子:使用Unix工具而非編寫代碼
總結(jié)
第四部分 精選話題
第14章 測試與可讀性
使測試易于閱讀和維護
這段測試什么地方不對
使這個測試更可讀
讓錯誤消息具有可讀性
選擇好的測試輸入
為測試函數(shù)命名
那個測試有什么地方不對
對測試較好的開發(fā)方式
走得太遠
總結(jié)
第15章 設(shè)計并改進“分鐘/小時計數(shù)器”
問題
定義類接口
嘗試1:一個幼稚的方案
嘗試2:傳送帶設(shè)計方案
嘗試3:時間桶設(shè)計方案
比較三種方案
總結(jié)
附錄 深入閱讀
章節(jié)摘錄
版權(quán)頁: 插圖: 然后,隨著項目的增長,你的目錄中加進了越來越多的源文件。很快你就需要多個目錄來組織它們了。很難再記得哪個函數(shù)調(diào)用了哪個函數(shù),而且跟蹤bug也要做多一點的工作。 最后,你就有了很多源代碼分布在很多不同的目錄中。項目很大,沒有一個人自己全部理解它。增加新功能變得很痛苦,而且使用這些代碼很費力還令人不快。 我們所描述的是宇宙的自然法則——隨著任何坐標系統(tǒng)的增長,把它粘合在一起所需的復雜度增長得更快。 最好的解決辦法就是"讓你的代碼庫越小,越輕量級越好",就算你的項目在增長。那么你就要: ?創(chuàng)建越多越好的"工具"代碼來減少重復代碼(見第10章)。 ?減少無用代碼或沒有用的功能(見下圖)。 ?讓你的項目保持分開的子項目狀態(tài)。 ?總的來說,要小心代碼的"重量"。讓它保持又輕又靈。 園丁經(jīng)常修剪植物以讓它們活著并且生長。同樣地,修剪掉礙事和沒用的代碼也是個好主意。 一旦代碼寫好后,程序員往往不情愿刪除它,因為它代表很多實際的工作量。刪掉它可能意味著承認在上面所花的時間就是浪費。不要這么想!這是一個有創(chuàng)造性的領(lǐng)域——攝影家、作者和電影制版人也不會保留他們所有的工作。 刪除獨立的函數(shù)很簡單,但有時"無用代碼"實際上交織在你的項目中,你并不知情。下面是一些例子: ?你一開始把系統(tǒng)設(shè)計成能處理多語言文件名,現(xiàn)在代碼中到處都充滿了轉(zhuǎn)換代碼。然而,那段代碼不能很好地工作,實現(xiàn)上你的程序也從來沒有用到過任何多語言文件名。 ?為什么不刪除這個功能呢? ?你希望你的程序在內(nèi)存耗盡的情況下仍能工作,因此你有很多耍小聰明的邏輯來試著從內(nèi)存耗盡的情況下恢復。這是個好主意,但在實踐中,當系統(tǒng)內(nèi)存耗盡時,你的程序?qū)⒆兂刹环€(wěn)定的僵尸——所有的核心功能都不可用,再點一下鼠標它就死了。 為什么不通過一句簡單的提示"系統(tǒng)內(nèi)存不足,抱歉"并刪除所有內(nèi)存不足的代碼,終止程序呢?
編輯推薦
《編寫可讀代碼的藝術(shù)》寫出的代碼能讓人快速理解、輕松維護、容易擴展的程序員才是專業(yè)的程序員?!毒帉懣勺x代碼的藝術(shù)》簡化命名、注釋和格式的方法,使每行代碼都言簡意賅;梳理程序中的循環(huán)、邏輯和變量來減小復雜度并理清思路;編寫有效的測試代碼,使其全面而簡潔,同時可讀性更高。
名人推薦
"軟件開發(fā)的一個重要部分是要意識到你的代碼以后將如何影響查看這些代碼的人。兩位作者高屋建瓴,帶你領(lǐng)略這一挑戰(zhàn)的各個方面,并且使用有指導意義的例子來解釋細節(jié)。" ——Michael Hunger,軟件開發(fā)人員
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載