編程智慧:編程鬼才的經(jīng)驗(yàn)和思考
定 價(jià):99 元
叢書(shū)名:程序員書(shū)庫(kù)
- 作者:[美]喬治·V.內(nèi)維爾-尼爾(GeorgeV.Neville-Neil)著
- 出版時(shí)間:2023/12/1
- ISBN:9787111740162
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類(lèi):TP311.1
- 頁(yè)碼:255
- 紙張:膠版紙
- 版次:1
- 開(kāi)本:16開(kāi)
本書(shū)是ACM Queue雜志和Communications of the ACM上“Kode Vicious”專(zhuān)欄系列文章的一個(gè)合集,主題涉及編程風(fēng)格、軟件工程、系統(tǒng)設(shè)計(jì)、網(wǎng)絡(luò)通信及項(xiàng)目管理這五大方面,每章都由針對(duì)軟件開(kāi)發(fā)人員所面臨的日常問(wèn)題的信件、回復(fù)和建議組成,旨在解決這些與每位軟件專(zhuān)業(yè)人員相關(guān)的問(wèn)題,適合有一定經(jīng)驗(yàn)的軟件開(kāi)發(fā)人員閱讀。
適讀人群 :軟件開(kāi)發(fā)人員
以Kode Vicious(KV)的身份,George V. Neville-Neil花了15年多的時(shí)間向每一位程序員以及與程序或程序員打交道的人分享深刻的見(jiàn)解和中肯的建議。在本書(shū)中,他匯集了自己關(guān)于構(gòu)建更有效的計(jì)算機(jī)系統(tǒng)的隨筆和蘇格拉底式對(duì)話(huà)!癒ode Vicious”專(zhuān)欄一直是ACM Queue和Communications of the ACM上最受歡迎的部分。本書(shū)還補(bǔ)充了KV的一些有趣和敏銳的探究,這些新材料闡述了更廣泛的主題,并解決了與每個(gè)軟件專(zhuān)業(yè)人員相關(guān)的問(wèn)題。
本書(shū)作者直指問(wèn)題核心,并就以下主題為程序員新手和老手提供了實(shí)用的經(jīng)驗(yàn)。
? 手頭的代碼:對(duì)特定的一段代碼該做什么和不該做什么
? 編程難題:諸如測(cè)試和文檔編寫(xiě)之類(lèi)的圍繞代碼的問(wèn)題
? 系統(tǒng)設(shè)計(jì):從抽象、線(xiàn)程到安全的整體系統(tǒng)設(shè)計(jì)主題
? 機(jī)器對(duì)機(jī)器:分布式系統(tǒng)和計(jì)算機(jī)網(wǎng)絡(luò)
? 人類(lèi)對(duì)人類(lèi):與開(kāi)發(fā)人員、管理人員和其他人打交道
本書(shū)每章都匯集了直接針對(duì)計(jì)算機(jī)系統(tǒng)工作人員日常問(wèn)題的信件、回復(fù)和建議。作者雖然對(duì)所提問(wèn)題的回答總是以幽默的筆調(diào)撰寫(xiě),但給出的建議卻是嚴(yán)肅認(rèn)真的。
Preface 前 言
最壞的情況是什么?
—著名的遺言
歡迎來(lái)到我從未想過(guò)的嘗試—關(guān)于“Kode Vicious”的第一本書(shū)。事實(shí)上,我從未想過(guò)會(huì)為一本雜志寫(xiě)專(zhuān)欄,也從未想過(guò)這個(gè)專(zhuān)欄會(huì)連載15年多,發(fā)表了100多篇文章。但生活就是充滿(mǎn)了奇怪的波折,尤其是當(dāng)你沒(méi)有足夠快地躲開(kāi)一桌正在尋找受害者(我是說(shuō)志愿者)的同伴時(shí)!
“所以現(xiàn)在我想拋出有史以來(lái)最糟糕的主意。”隨著Wendy A. Kellogg的這句話(huà),創(chuàng)辦“Kode Vicious”專(zhuān)欄的想法誕生了!皩(zhuān)欄負(fù)責(zé)人應(yīng)該是編委會(huì)成員,態(tài)度‘有問(wèn)題’的人,光頭的人。”在Queue創(chuàng)辦的早期,我是唯一光頭的編委會(huì)成員,盡管那時(shí)我已經(jīng)剃了十年的光頭。
2004年2月,我和Queue編委會(huì)的其他成員一起參加月度會(huì)議,我們聚在一起,試圖為Queue提出有趣的主題和作者。那時(shí)正值這本雜志的早期,剛創(chuàng)辦第四年,雖然已經(jīng)有幾期比較成功,但我們沒(méi)有固定的專(zhuān)欄作家。Eric Allman邀請(qǐng)我參加編委會(huì)會(huì)議,然后我為雜志寫(xiě)了幾篇文章,并正在與人合著我的第一本書(shū)。但我從來(lái)沒(méi)有當(dāng)過(guò)專(zhuān)欄作家,盡管這個(gè)想法在當(dāng)時(shí)看起來(lái)很有趣—也許是因?yàn)橥聿蜁r(shí)喝了太多酒,當(dāng)時(shí)我不知道如何著手。
創(chuàng)辦“Kode Vicious”專(zhuān)欄的想法實(shí)際上最初來(lái)自一個(gè)更具“禮儀小姐”風(fēng)格的專(zhuān)欄,基于Judith Martin的著名作品,我小時(shí)候和媽媽一起讀過(guò)她的作品。我會(huì)用其他人稱(chēng)的方式來(lái)寫(xiě)這些文章,這似乎是一個(gè)有趣的挑戰(zhàn)。第一個(gè)名字是Mother Code,我使用這個(gè)角色名向我們的編輯提交了兩篇文章。
我們討論時(shí)的一些個(gè)性素描可能有助于更好地了解當(dāng)時(shí)的情況:盡管母親從不嚴(yán)厲地提出建議或批評(píng),但她的信念很堅(jiān)定。這是一個(gè)堅(jiān)強(qiáng)但靈活和善良的建議者形象。她在每篇文章上都有一句標(biāo)志性的簽名行,比如“別忘了擦鞋”或“記得穿膠鞋”,這與我們的受眾有關(guān)。比如:“記住,在將代碼簽入源代碼樹(shù)之前,請(qǐng)確保你的代碼已構(gòu)建!
最后,出于幾個(gè)原因,這被證明是行不通的。最初的文章不成功,最重要的原因是以其他人稱(chēng)來(lái)寫(xiě)作非常困難。雖然一兩篇文章可能會(huì)以某種完全不同的形式出現(xiàn),但以更貼近自己的角色來(lái)寫(xiě)作要比作為一個(gè)完全不同的人來(lái)寫(xiě)作容易得多。面對(duì)現(xiàn)實(shí)吧,我駕馭不了“禮儀小姐”風(fēng)格。
實(shí)際上,我花了很長(zhǎng)一段時(shí)間來(lái)確定要使用的角色,包括一些比較直觀(guān)的,如“Code Confidential”(代碼機(jī)密)和“Code Critic”(代碼評(píng)論家),以及令人尷尬的“Captain Safety”(安全隊(duì)長(zhǎng))、“Bug Basher”(Bug破壞者)和“Lint Picker”,然后才想到用“Vicious”(邪惡)這個(gè)詞作為筆名。接下來(lái),它很快就從“Kid Vicious”“Code Vicious”和“Vicious Kode”最終變成了聽(tīng)起來(lái)比較對(duì)的“Kode Vicious”。
隨著新名字而來(lái)的是一個(gè)新的個(gè)性素描:
有一顆金子般內(nèi)心的“壞蛋”?偸窃敢饨虅e人,但不想教那些不愿意學(xué)習(xí)的人。想象一個(gè)穿著Sex Pistols樂(lè)隊(duì)T恤的僧人,你會(huì)擔(dān)心如何帶他去吃飯。經(jīng)常用鼻子來(lái)給學(xué)生指路。
得以順利開(kāi)始。我重寫(xiě)了最初以Mother Code身份所寫(xiě)的關(guān)于選擇編程規(guī)范的文章“So Many Standards”,并開(kāi)始了我的專(zhuān)欄作家生涯。
那么,“Kode Vicious”背后的作者真的是一個(gè)大壞蛋嗎?他把同事扔出窗外?扎破討厭的營(yíng)銷(xiāo)人員的輪胎?酗酒?毆打和斥責(zé)他的同事?答案既是肯定的也是否定的。
KV是一位諷刺家,認(rèn)識(shí)我并與我共事過(guò)的人可以很容易地看出我是如何在文章中寫(xiě)出我所做的事情的。當(dāng)然,KV是我可能想成為的人,或者時(shí)不時(shí)地變成我的化身。通常,當(dāng)我參加一些會(huì)議,摘下眼鏡,大聲地把它扔在桌子上,然后用手摸著自己的光頭,心想怎么會(huì)有人這么笨時(shí),我就想成為KV。如果你和我一起開(kāi)會(huì)時(shí)看到我這樣做了,那就說(shuō)明我覺(jué)得剛才說(shuō)話(huà)的人是個(gè)傻瓜。事實(shí)是,與其去毆打或斥責(zé)那些愚蠢的人,不如把這些想法以KV的名義寫(xiě)成文章,爭(zhēng)取給他們一些幫助。
想想文學(xué)對(duì)KV的影響是很奇怪的,但和其他作家一樣,我受好幾個(gè)人影響,其中最重要的是我的母親,我在“Standards Advice”中提到了她,她是一位嚴(yán)厲的批評(píng)家。我最喜歡的作家總是嚴(yán)厲的、直接的、喜歡招惹別人的。老實(shí)說(shuō),KV的很多特點(diǎn)是在效仿Hunter S.Thompson,他寫(xiě)了三本真正偉大的書(shū):Hell's Angels、Fear and Loathing in Las Vegas以及Fear and Loathing on the Campaign Trail'72。
另一個(gè)直接影響是Queue本身。15年來(lái),與我們的編委會(huì)成員和客座專(zhuān)家(那些來(lái)參加Queue會(huì)議并幫助我們制定議題以及閱讀和評(píng)論雜志文章的人)交流,是我職業(yè)生涯中最令人驚嘆的學(xué)習(xí)經(jīng)歷之一。我很幸運(yùn)地遇見(jiàn)了一些真正有頭腦的人—有點(diǎn)醉心于葡萄酒,粗暴地用牛排刀指著桌子對(duì)面的我,告訴我為什么某個(gè)想法要么很有趣,要么完全是胡說(shuō)八道。
我曾多次(包括在一封信中)被問(wèn)到,我是否既寫(xiě)了問(wèn)題又寫(xiě)了答案。在我最初寫(xiě)這些文章的時(shí)候,沒(méi)有來(lái)信,所以我必須同時(shí)寫(xiě)問(wèn)題和答案。起初這是相當(dāng)困難的,我會(huì)盯著屏幕,離最后期限還有幾小時(shí)(我總是在最后期限甚至之后提交我的文章),我的編輯欄里除了“親愛(ài)的KV”之外什么都沒(méi)有。然后我學(xué)到了一個(gè)很好的技巧,從那以后我就一直在用。如果素材用完了,我所要做的就是打開(kāi)一段源代碼并閱讀它。
作者簡(jiǎn)介 About the Author
George V. Neville-Neil從事安全、網(wǎng)絡(luò)和操作系統(tǒng)方面的探索、寫(xiě)作、教學(xué)和咨詢(xún)工作。作為FreeBSD基金會(huì)董事會(huì)成員,自2004年以來(lái),他一直為Queue和Communications of the ACM撰寫(xiě)“Kode Vicious”專(zhuān)欄文章。他是ACM Queue編委會(huì)成員,也是USENIX協(xié)會(huì)、ACM和IEEE的會(huì)員。
George與Marshall Kirk McKusick和Robert N. M. Watson合著了FreeBSD Operating System, Second Edition (Addison-Wesley, 2015)一書(shū)。他擁有美國(guó)東北大學(xué)計(jì)算機(jī)科學(xué)學(xué)士學(xué)位。在從事計(jì)算機(jī)和開(kāi)源項(xiàng)目工作之余,George熱衷于旅行,會(huì)說(shuō)多國(guó)語(yǔ)言,包括英語(yǔ)、日語(yǔ)、法語(yǔ)、荷蘭語(yǔ)和一些漢語(yǔ)。他也是一個(gè)狂熱的自行車(chē)愛(ài)好者。George目前住在紐約布魯克林,盡管他一生中有三分之一的時(shí)間都在為各種項(xiàng)目奔波。
Contents 目 錄
Donald E. Knuth(DK)撰寫(xiě)的序
前言
致謝
作者簡(jiǎn)介
第1章 手頭的代碼1
1.1 資源管理4
1.2 大內(nèi)存7
1.3 代碼排列10
1.4 代碼濫用12
1.5 嵌套傾向15
1.6 令人窒息的變化17
1.7 被詛咒的代碼19
1.8 強(qiáng)制異常21
1.9 一段不錯(cuò)的代碼24
1.10 一些惡臭的東西27
1.11 日志記錄29
1.12 丟失31
1.13 復(fù)制33
1.14 五大編程問(wèn)題36
1.15 語(yǔ)言上的迷失39
1.16 簽入注釋41
第2章 編程難題43
2.1 方法的頌歌44
2.2 C++里的“+”有多少47
2.3 時(shí)尚而現(xiàn)代的事物50
2.4 緩存缺失52
2.5 代碼探索55
2.6 輸入驗(yàn)證63
2.7 與文檔打交道65
2.8 文檔都記錄什么68
2.9 暴躁的測(cè)試人員70
2.10 如何測(cè)試73
2.11 開(kāi)啟測(cè)試模式76
2.12 維護(hù)模式78
2.13 盡早合并81
2.14 多核怪獸84
2.15 這不是一個(gè)產(chǎn)品86
2.16 海森堡bug89
2.17 我不想要你骯臟的PDF文件92
2.18 渴望PIN碼94
2.19 重新啟動(dòng)97
2.20 代碼掃描器99
2.21 調(diào)試硬件101
2.22 健全性與可見(jiàn)性104
第3章 系統(tǒng)設(shè)計(jì)107
3.1 抽象109
3.2 驅(qū)動(dòng)113
3.3 重新審視驅(qū)動(dòng)115
3.4 變化的變化118
3.5 穿針引線(xiàn)121
3.6 線(xiàn)程是否依然不安全123
3.7 身份驗(yàn)證與加密125
3.8 身份驗(yàn)證回顧127
3.9 身份驗(yàn)證的例子129
3.10 編寫(xiě)跨站腳本133
3.11 網(wǎng)絡(luò)釣魚(yú)和感染138
3.12 用戶(hù)界面設(shè)計(jì)143
3.13 安全日志146
3.14 Java150
3.15 安全P2P154
第4章 機(jī)器對(duì)機(jī)器157
4.1 踩到腳趾158
4.2 匱乏的端口161
4.3 協(xié)議設(shè)計(jì)164
4.4 第一個(gè)來(lái)的167
4.5 網(wǎng)絡(luò)調(diào)試170
4.6 延遲174
4.7 長(zhǎng)跑177
4.8 網(wǎng)絡(luò)即計(jì)算機(jī)180
4.9 擴(kuò)展失敗184
4.10 端口占用186
4.11 原始網(wǎng)絡(luò)189
4.12 毫無(wú)意義的PKI191
4.13 標(biāo)準(zhǔn)的標(biāo)準(zhǔn)193
第5章 人類(lèi)對(duì)人類(lèi)197
5.1 關(guān)于驕傲和其他198
5.2 你的是什么顏色201
5.3 被破壞的構(gòu)建203
5.4 什么是智能206
5.5 設(shè)計(jì)審查209
5.6 主機(jī)的命名213
5.7 主持面試216
5.8 神話(huà)219
5.9 過(guò)時(shí)的程序員221
5.10 擁有強(qiáng)大的力量224
5.11 信226
5.12 標(biāo)簽229
5.13 螺絲刀和錘子231
5.14 安全審查233
5.15 勿忘初心238
5.16 開(kāi)源許可證241
5.17 如此多的標(biāo)準(zhǔn)244
5.18 書(shū)籍246
5.19 更多有關(guān)書(shū)籍的信息250
5.20 保持與時(shí)俱進(jìn)252
5.21 我的最后一招254