編程智慧:編程鬼才的經(jīng)驗(yàn)和思考
定 價(jià):99 元
叢書名:程序員書庫
- 作者:[美]喬治·V.內(nèi)維爾-尼爾(GeorgeV.Neville-Neil)著
- 出版時(shí)間:2023/12/1
- ISBN:9787111740162
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP311.1
- 頁碼:255
- 紙張:膠版紙
- 版次:1
- 開本:16開
本書是ACM Queue雜志和Communications of the ACM上“Kode Vicious”專欄系列文章的一個(gè)合集,主題涉及編程風(fēng)格、軟件工程、系統(tǒng)設(shè)計(jì)、網(wǎng)絡(luò)通信及項(xiàng)目管理這五大方面,每章都由針對(duì)軟件開發(fā)人員所面臨的日常問題的信件、回復(fù)和建議組成,旨在解決這些與每位軟件專業(yè)人員相關(guān)的問題,適合有一定經(jīng)驗(yàn)的軟件開發(fā)人員閱讀。
適讀人群 :軟件開發(fā)人員
以Kode Vicious(KV)的身份,George V. Neville-Neil花了15年多的時(shí)間向每一位程序員以及與程序或程序員打交道的人分享深刻的見解和中肯的建議。在本書中,他匯集了自己關(guān)于構(gòu)建更有效的計(jì)算機(jī)系統(tǒng)的隨筆和蘇格拉底式對(duì)話!癒ode Vicious”專欄一直是ACM Queue和Communications of the ACM上最受歡迎的部分。本書還補(bǔ)充了KV的一些有趣和敏銳的探究,這些新材料闡述了更廣泛的主題,并解決了與每個(gè)軟件專業(yè)人員相關(guān)的問題。
本書作者直指問題核心,并就以下主題為程序員新手和老手提供了實(shí)用的經(jīng)驗(yàn)。
? 手頭的代碼:對(duì)特定的一段代碼該做什么和不該做什么
? 編程難題:諸如測(cè)試和文檔編寫之類的圍繞代碼的問題
? 系統(tǒng)設(shè)計(jì):從抽象、線程到安全的整體系統(tǒng)設(shè)計(jì)主題
? 機(jī)器對(duì)機(jī)器:分布式系統(tǒng)和計(jì)算機(jī)網(wǎng)絡(luò)
? 人類對(duì)人類:與開發(fā)人員、管理人員和其他人打交道
本書每章都匯集了直接針對(duì)計(jì)算機(jī)系統(tǒng)工作人員日常問題的信件、回復(fù)和建議。作者雖然對(duì)所提問題的回答總是以幽默的筆調(diào)撰寫,但給出的建議卻是嚴(yán)肅認(rèn)真的。
Preface 前 言
最壞的情況是什么?
—著名的遺言
歡迎來到我從未想過的嘗試—關(guān)于“Kode Vicious”的第一本書。事實(shí)上,我從未想過會(huì)為一本雜志寫專欄,也從未想過這個(gè)專欄會(huì)連載15年多,發(fā)表了100多篇文章。但生活就是充滿了奇怪的波折,尤其是當(dāng)你沒有足夠快地躲開一桌正在尋找受害者(我是說志愿者)的同伴時(shí)!
“所以現(xiàn)在我想拋出有史以來最糟糕的主意。”隨著Wendy A. Kellogg的這句話,創(chuàng)辦“Kode Vicious”專欄的想法誕生了。“專欄負(fù)責(zé)人應(yīng)該是編委會(huì)成員,態(tài)度‘有問題’的人,光頭的人!痹赒ueue創(chuàng)辦的早期,我是唯一光頭的編委會(huì)成員,盡管那時(shí)我已經(jīng)剃了十年的光頭。
2004年2月,我和Queue編委會(huì)的其他成員一起參加月度會(huì)議,我們聚在一起,試圖為Queue提出有趣的主題和作者。那時(shí)正值這本雜志的早期,剛創(chuàng)辦第四年,雖然已經(jīng)有幾期比較成功,但我們沒有固定的專欄作家。Eric Allman邀請(qǐng)我參加編委會(huì)會(huì)議,然后我為雜志寫了幾篇文章,并正在與人合著我的第一本書。但我從來沒有當(dāng)過專欄作家,盡管這個(gè)想法在當(dāng)時(shí)看起來很有趣—也許是因?yàn)橥聿蜁r(shí)喝了太多酒,當(dāng)時(shí)我不知道如何著手。
創(chuàng)辦“Kode Vicious”專欄的想法實(shí)際上最初來自一個(gè)更具“禮儀小姐”風(fēng)格的專欄,基于Judith Martin的著名作品,我小時(shí)候和媽媽一起讀過她的作品。我會(huì)用其他人稱的方式來寫這些文章,這似乎是一個(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)。比如:“記住,在將代碼簽入源代碼樹之前,請(qǐng)確保你的代碼已構(gòu)建!
最后,出于幾個(gè)原因,這被證明是行不通的。最初的文章不成功,最重要的原因是以其他人稱來寫作非常困難。雖然一兩篇文章可能會(huì)以某種完全不同的形式出現(xiàn),但以更貼近自己的角色來寫作要比作為一個(gè)完全不同的人來寫作容易得多。面對(duì)現(xiàn)實(shí)吧,我駕馭不了“禮儀小姐”風(fēng)格。
實(shí)際上,我花了很長一段時(shí)間來確定要使用的角色,包括一些比較直觀的,如“Code Confidential”(代碼機(jī)密)和“Code Critic”(代碼評(píng)論家),以及令人尷尬的“Captain Safety”(安全隊(duì)長)、“Bug Basher”(Bug破壞者)和“Lint Picker”,然后才想到用“Vicious”(邪惡)這個(gè)詞作為筆名。接下來,它很快就從“Kid Vicious”“Code Vicious”和“Vicious Kode”最終變成了聽起來比較對(duì)的“Kode Vicious”。
隨著新名字而來的是一個(gè)新的個(gè)性素描:
有一顆金子般內(nèi)心的“壞蛋”?偸窃敢饨虅e人,但不想教那些不愿意學(xué)習(xí)的人。想象一個(gè)穿著Sex Pistols樂隊(duì)T恤的僧人,你會(huì)擔(dān)心如何帶他去吃飯。經(jīng)常用鼻子來給學(xué)生指路。
得以順利開始。我重寫了最初以Mother Code身份所寫的關(guān)于選擇編程規(guī)范的文章“So Many Standards”,并開始了我的專欄作家生涯。
那么,“Kode Vicious”背后的作者真的是一個(gè)大壞蛋嗎?他把同事扔出窗外?扎破討厭的營銷人員的輪胎?酗酒?毆打和斥責(zé)他的同事?答案既是肯定的也是否定的。
KV是一位諷刺家,認(rèn)識(shí)我并與我共事過的人可以很容易地看出我是如何在文章中寫出我所做的事情的。當(dāng)然,KV是我可能想成為的人,或者時(shí)不時(shí)地變成我的化身。通常,當(dāng)我參加一些會(huì)議,摘下眼鏡,大聲地把它扔在桌子上,然后用手摸著自己的光頭,心想怎么會(huì)有人這么笨時(shí),我就想成為KV。如果你和我一起開會(huì)時(shí)看到我這樣做了,那就說明我覺得剛才說話的人是個(gè)傻瓜。事實(shí)是,與其去毆打或斥責(zé)那些愚蠢的人,不如把這些想法以KV的名義寫成文章,爭(zhēng)取給他們一些幫助。
想想文學(xué)對(duì)KV的影響是很奇怪的,但和其他作家一樣,我受好幾個(gè)人影響,其中最重要的是我的母親,我在“Standards Advice”中提到了她,她是一位嚴(yán)厲的批評(píng)家。我最喜歡的作家總是嚴(yán)厲的、直接的、喜歡招惹別人的。老實(shí)說,KV的很多特點(diǎn)是在效仿Hunter S.Thompson,他寫了三本真正偉大的書:Hell's Angels、Fear and Loathing in Las Vegas以及Fear and Loathing on the Campaign Trail'72。
另一個(gè)直接影響是Queue本身。15年來,與我們的編委會(huì)成員和客座專家(那些來參加Queue會(huì)議并幫助我們制定議題以及閱讀和評(píng)論雜志文章的人)交流,是我職業(yè)生涯中最令人驚嘆的學(xué)習(xí)經(jīng)歷之一。我很幸運(yùn)地遇見了一些真正有頭腦的人—有點(diǎn)醉心于葡萄酒,粗暴地用牛排刀指著桌子對(duì)面的我,告訴我為什么某個(gè)想法要么很有趣,要么完全是胡說八道。
我曾多次(包括在一封信中)被問到,我是否既寫了問題又寫了答案。在我最初寫這些文章的時(shí)候,沒有來信,所以我必須同時(shí)寫問題和答案。起初這是相當(dāng)困難的,我會(huì)盯著屏幕,離最后期限還有幾小時(shí)(我總是在最后期限甚至之后提交我的文章),我的編輯欄里除了“親愛的KV”之外什么都沒有。然后我學(xué)到了一個(gè)很好的技巧,從那以后我就一直在用。如果素材用完了,我所要做的就是打開一段源代碼并閱讀它。
作者簡(jiǎn)介 About the Author
George V. Neville-Neil從事安全、網(wǎng)絡(luò)和操作系統(tǒng)方面的探索、寫作、教學(xué)和咨詢工作。作為FreeBSD基金會(huì)董事會(huì)成員,自2004年以來,他一直為Queue和Communications of the ACM撰寫“Kode Vicious”專欄文章。他是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)一書。他擁有美國東北大學(xué)計(jì)算機(jī)科學(xué)學(xué)士學(xué)位。在從事計(jì)算機(jī)和開源項(xiàng)目工作之余,George熱衷于旅行,會(huì)說多國語言,包括英語、日語、法語、荷蘭語和一些漢語。他也是一個(gè)狂熱的自行車愛好者。George目前住在紐約布魯克林,盡管他一生中有三分之一的時(shí)間都在為各種項(xiàng)目奔波。
Contents 目 錄
Donald E. Knuth(DK)撰寫的序
前言
致謝
作者簡(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 五大編程問題36
1.15 語言上的迷失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 開啟測(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 健全性與可見性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 穿針引線121
3.6 線程是否依然不安全123
3.7 身份驗(yàn)證與加密125
3.8 身份驗(yàn)證回顧127
3.9 身份驗(yàn)證的例子129
3.10 編寫跨站腳本133
3.11 網(wǎng)絡(luò)釣魚和感染138
3.12 用戶界面設(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è)來的167
4.5 網(wǎng)絡(luò)調(diào)試170
4.6 延遲174
4.7 長跑177
4.8 網(wǎng)絡(luò)即計(jì)算機(jī)180
4.9 擴(kuò)展失敗184
4.10 端口占用186
4.11 原始網(wǎng)絡(luò)189
4.12 毫無意義的PKI191
4.13 標(biāo)準(zhǔn)的標(biāo)準(zhǔn)193
第5章 人類對(duì)人類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 神話219
5.9 過時(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 開源許可證241
5.17 如此多的標(biāo)準(zhǔn)244
5.18 書籍246
5.19 更多有關(guān)書籍的信息250
5.20 保持與時(shí)俱進(jìn)252
5.21 我的最后一招254