[轉]推薦給程序員看的書

原文鏈接

作者:Joel Spolsky 是紐約市一家小軟件公司,Fog Creek Software, 的創始人。他畢業於耶魯大學,曾在美國微軟公司,Viacom,  Juno 任軟件設計師及經理。
知道這個人是因爲看了被刊登在《程序員》雜誌上的他的文章《給計算機系學生的建議》。最近在他的blog裏面提到了他有一個推薦給程序員的讀書列表。
OK,這是一篇Joel早在2002年以前就整理出來的列表,而我在最近纔開始訂閱他的Blog。不過還好,這些書因爲太經典了,以至於現在還不算過時。而且發現Joel的中文Blog並沒有給出翻譯。我最近也正好在制定讀書計劃,乾脆翻譯一下吧。
一位叫Jan Derk的人評價這一列表時說:“Pretty close to the perfect short list for any programmer.”(幾乎是爲任何一個程序員準備的完美的精簡列表。)
以下是正文:
你能夠通過一個人讀過的書來了解關於這個人的很多事情。而我一直認爲如果你讀了所有我所讀過的書,那麼你也會和我想的一樣。
那麼下面就是Joel的程序員書架。這是一個簡短的列表,列出了所有我真的認爲每個程序員都需要讀讀的書。如果你沒有注意到的話,其中混雜了我自己的書,因爲這樣我可以在你買它的時候得到兩個美元。(我喜歡Joel的幽默)
無痛軟件管理類(Painless software Management)
《人件》Peopleware: Productive Projects and Teams
Tom Demarco and Timothy R. Lister
(有中譯本
當我夏天在微軟實習的時候,我和我的朋友們曾經去公司用來存儲授課資料的倉庫進行短期考察。在軟盤,鼠標墊,便籤記錄中發現了一堆小書,於是我拿了一本回家去讀。這本書便是《人件》,Tom DeMarco和Timothy Lister寫的那本。這本書是我讀過最有影響力的書之一。描述它的最恰當的方可能是“反對Dilbert宣言”(Dilbert呆伯特,美國Scott Adams的有名職場卡通人物。意指在工作上被主管過份要求、被主管虧待或利用。)曾經想知道爲什麼在微軟每個人都有一個有牆和門隔斷的辦公室?在書中有答案。爲什麼管理者給他們的團隊如此多的迴旋餘地來完成任務?答案也在書裏。爲什微軟有如此多得有凝聚力的“全壘打”團隊,他們很明顯的能幹?主要是因爲Bill Gates創建了一個充滿着讀過《人件》的管理者的公司。我不能夠以足夠的高度來推薦這本書。這本書每個軟件管理人都需要去讀,不只是讀一次,而是每年一次。
《人月神話》The Mythical Man-Month
Frederick P. Brooks
(有影印版中譯本
這當然是一本軟件項目管理類的經典書籍,這本書出現於25年前,當時Fred Brooks正在試圖實施第一個超大規模軟件工程項目之一(OS/360 IBM的操作系統),他是第一個提軟件開發和其他工程有多大的根本性差異。這本書最著名的一點是提出了向一個已經延誤的項目添加更多的程序員只會使得項目更加延誤的原理,但是那只是冰山的一角。理解這本書是正確思考關於軟件團隊管理的基礎。
《快速開發》Rapid Development: Taming Wild Software Schedules
Steve C. McConnell
(有影印版 中譯本
Steve McConnell捕獲了很多微軟在他們開發大規模軟件的大約第一個十年的開發管理思想。你會發現這本書中的觀念與我那本根本不是獨創的《Joel Test》有很多重疊(Joel在謙虛),儘管這本書的重點是獲得對計劃進度的控制。

編碼技術類(Code Craftmanship)
《完善編碼》(Code Complete: A Practical Handbook of Software Construction
Steve C. McConnell
(中譯本名爲《編碼大全》,英文版已有第二版)
良好編程實踐的百科全書,完善編碼聚焦於個人技能——所有的內容都來說明我們稱之爲“編寫巧妙的代碼”(write clean code,clean可以翻譯多種意思,只能意會了,有些英語翻譯成漢語會很痛苦的)。這本書就是那種用50頁來談論代碼版式和留白的書。
《注重實效的程序員》(The Pragmatic Programmer: From Journeyman to Master
Andrew Hunt and David Thomas
(有中譯本
那些可能還在大學中的人,如果他們已經學到了編程機制,但是感到對於決定去做什麼沒有把握的話,這是一本非常合適的書。就像製圖和建築的差別一樣。你在課堂中學到的是製圖,你可以畫的很漂亮,但是當有人讓你獨自編寫一個基於P2P的音樂交換網時,你仍然會感到似乎你並不是很清楚從哪裏開始。這恰好是給你準備的書。
編程哲學類(Philosophy of Programming)
《微軟信徒》(Microserfs
Douglas Coupland
(國內未引進)
(注:microserf的解釋是那些只使用微軟的產品而拒絕承認其他品牌的存在——A Microserf is somebody who only uses Microsoft products and refuses to ackknowledge the existance of Linux. Typically, a Microserf evolves to MSCE, or suffers BSOD after BSOD)
有一件重要的事情就是理解剛剛從大學畢業到微軟工作的情況。你是年輕的,在一座新的城市中。你不認識任何其他人,沒有事情可做。而你是一個“電腦小丑”,在工作中是笑柄,而可能發生的是,當你在墨西哥快餐店吃了你的外賣晚餐後,你會厭煩這些所以你會回到你那豪華的可以看到山脈的辦公室裏,和常綠植物還有代碼呆在一起。對於這些年輕的程序員來說,工作之外的生活是孤單和空虛的,他們爲微軟乾的很出色,因爲他們把所有的能量都用到一天中最有趣的部分——開發酷酷的軟件。
沒有比微軟信徒這個詞更能表述一個在大型軟件公司工作的年輕員工的感覺了。Douglas Coupland對90年代早期微軟的生活的描述如此美妙的達到了擊倒我的目的——但是他之後進一步提供了道德和倫理上的關於那些任何人都沒有想到的到底在發生些什麼的理解。沒有人明白那樣的空虛,那樣的平庸的孤獨,以及像Coupland那樣尋求個人與現代的北美的聯繫。
(注:這本書的介紹翻譯的很爛,水平有限,見諒)
《摩托車維護藝術》(Zen and the Art of Motorcycle Maintenance
Robert M. Pirsig
(國內未引進)
一些人對待編程的態度就是那是一種付帳單的手段。對於其他人,這還不夠……我們的工作是我們生活有意義的重要部分,我們需要一種哲學上的理解來搞清楚他的含義。這本書深入的探究了工程和哲學的關係。
《歌德爾、埃舍爾、巴赫》(Godel, Escher, Bach: An Eternal Golden Braid
Douglas R. Hofstadter
中譯本信息
我在開始讀大學之前讀了這本書,然後決定我打算以“歌德爾 埃舍爾 巴赫”爲我的專業方向。我選課的主要標準就是覆蓋這本崇高的,全景的,輝煌的有趣的書中的話題:AI(人工智能)、認知科學,計算機科學,哲學,心理學,音樂和藝神奇的交織在一起。
《建築模式語言》(A Pattern Language: Towns, Buildings, Construction
Christopher Alexander, Sara Ishikawa, Murray Silverstein, et al.
中譯本
好吧,這是一本關於建築學的書。你知道,建築物和原料。我不認爲整本書中有哪怕提到一點有關計算機的地方。
我買了這本書因爲我對建築學有興趣。然後我注意到了一些東西,這本書中的每樣東西我們都可以應用到我們作爲軟件設計者的工作中來。比如,(注:這部分因爲對相關內容不瞭解所以暫時不作翻譯) the splash screen in CityDesk is based on the highly influential pattern of Zen View. Dave Winer's Radio Userland appeals to people because it follows the pattern of Windows Overlooking Life. 理解了空間模式的層次的軟件很容易來領會。
一個相似的而稍微有點短命的運動曾在幾年前在編程中流行;我認爲編程中的模式運動永遠不會完全達到,因爲這是一個嘗試來拷貝這本書的形式而不是這本書的智慧。

用戶界面設計類(User Interface Design)
《程序員用戶界面設計》(User Interface Design for Programmers
Joel Spolsky
(注意,這就是Joel自己的書)
我可以插播我自己的書的廣告,對嗎?
《程序員用戶界面設計》是我對教授我認爲是最高層次內容的嘗試,其中包括了每個程序員都需要知曉的最重要的關於界面設計的原則。我從讀者那裏聽到的最普遍的迴應是:“在讀過你的書以後,我在我得程序中找到了三處必須修改的地方。”
別讓我想(Don't Make Me Think
Steve Krug
《別讓我想》是一本關於網站界面設計的出色和有趣的書。決定性地,這本書試圖理解好的用戶界面設計的原則,而不僅僅是那些平凡的規則(比如“不要改變鏈接的顏色”)。Steve Krug主要的論題是你讓用戶想的越少,你的站點就越容易被使用。"What a waste it is to lose one's mind. Or not to have a mind is being very wasteful. How true that is."
《關於臉面》(About Face: The Essentials of User Interface Design
Alan Cooper
(此書第二版中譯本《軟件觀念革命——交互設計精髓》
一本經典的界面設計書籍,是一本偉大的圖形用戶界面設計寶典,作者是Visual Basic之父。
《日常物品設計》(Design of Everyday Things
Donald A. Norman
(應該有中譯本,但是我只找到了它的姐妹篇《情感化設計》
Donald Norman的經典之作《Design of Everyday Things》(也以《The Psychology of Everyday Things》爲名出版過)是最好的關於用戶界面設計的書籍之一,儘管它相比計算機談論了更過關於諸如門和電冰箱之類的東西。這是Affordances理論的奠基石,Affordances理論仍舊是日常物品優秀設計的最有影響力的觀點之一,我在我得用戶界面書中第四章談到過它。
《Web可用性設計》(Designing Web Usability
Jakob Nielsen
中譯本
我知道,我明白,可憐的Jakob因爲他的類似“ClearType ... can save users $2,000 per year" 和 "Micropayments are the answer”的奇異的聲明受到了不少指責。恩,好吧,我仍然要說,在那些愚蠢的數學之中,Nielsen提出了一系列你需要明白的極好的嚴密的正確的觀點。如果你正在從事任何一種的Web設計,你需要知道這本書中的原理。如果你正在從事和Web無關的設計,考慮一下這是一個出色的關於可用性工程的學習案例。
程序員資本類(Capitalism for Programmers)
《在華爾街隨機遊走》(A Random Walk Down Wall Street
Burton Gordon Malkiel
(中譯本《漫步華爾街》,其實random walk並不是隨意散步的意思,random walk:a process (as Brownian motion or genetic drift) consisting of a sequence of steps (as movements or changes in gene frequency) each of whose characteristics (as magnitude and direction) is determined by chance。所以我翻譯爲隨機遊走)
如果你在這個行業裏花費了足夠的時間,幾乎不可能避免你會發現你擁有了一大筆錢需要管理一下。如果你不想讓它變得一團糟,你需要知道一些事情。
哦,你說,但是好像看起來很複雜。你怎麼能比華爾街老謀深算的狐狸們更加精明呢?看起來做一個有道理的投資應該持續的進行研究,分析,工作,閱讀,學習所有的年度報告。你必須預定所有非常令人厭煩的印有一欄一欄的小字的報紙。
如果我告訴你:你可以通過閱讀一本書就知曉管理你的投資的所有事情,你會怎麼想?我說得是所有的事情。好吧,這是真的。而這就是那本書,如果你不耐煩去閱讀任何其他的關於投資的東西,讀這本書吧。
看來成爲一個合格的程序員還真的是不容易,另外我們可以看到Joel推薦了大量的UI設計書籍,而相對的UI設計在國內得到的重視是遠遠不夠的,書籍也相對較少,只是近幾年才逐漸多了起來。UI是和用戶字節打交道的部分,一個軟件成功與否90%要取決於UI。

創業類(Striking Out On Your Own)
《企業發展》(Growing a Business
Paul Hawken
人們經常Email給我說:“唉,我喜歡你關於像Ben和Jerry那樣開一個公司的理論,但是,我怎樣開始呢?”這本書你會想讀的。它有點粗淺,但是確實會給你關於有機的讓一個公司成長的哲理。
圖形設計類(Graphic Design)
《非設計師的設計手冊》(The Non-Designer's Design Book
Robin Williams
哇!每個人都必須做一些圖形設計,而且不是每個軟件團隊奢侈到擁有專業設計師。這本出色的小冊子會給你一個關於頁面佈局,字體等方面原理的一個深刻的理解。好消息是,你能在浴室中等待水變涼一點的時候讀它,而第二天,你的對話框和幻燈片以及網頁就會開始看起來更好。
變得不同/有影響力(Making a Difference)
(注:這裏我迷惑於這兩種釋義了,於是都寫上了)
《影響》(Influence: The Psychology of Persuasion
Robert B. Cialdini
另一本值得不斷閱讀的書就是Robert的經典之作《影響》。當慈善組織發給你捐贈請求的時候,他們通常會在信封裏附上一份小禮品。在禮品上面貼上有你地址的標籤。或者一對空的賀卡。他們給你禮品的原因是基本的社會原理:“互惠”;現在你會感到不得不給點東西回去。你可能聽過這樣的腔調:“儘快購買,數量有限!”,這句話如此多次的出現在電視廣告當中以致沒有辦法再註冊了。但是它還是會出現,因爲“稀缺”原理;你會自然的假定稀缺的東西就會值更多的錢。這些陷阱與其他招數一起被銷售人員,市場商人,和廣告人所使用以此來影響人們來做特定的事情。Cialdini的這本出色的書討論了在影響其他人的科學和實踐背後的心理學理論。最好在被影響以前讀讀它!
《無助》(Helplessness: On Depression, Development, and Death
Martin E. P. Seligman
幾個月前當我們發佈CityDesk的時候,我收到了一個客戶的email,信中他抱怨他過去習慣於用Alt+F,Alt+S來保存文件。不幸的是,因爲一個微小的被忽視的bug,這個快捷鍵保存了文件然後關閉了它,這很令人惱火。我從來沒有注意到這個因爲我的習慣是用Alt+F,然後S來保存文件,而不是Alt+F,Alt+S——僅僅一個微小的差別,而Alt+F,S可以正常工作。
一旦你養成了用Alt+F,Alt+S來保存,那麼自動的你不回想到那是Alt+F,Alt+S,你把它看作就是“保存”。而當你在你的腦子裏按“保存”按鈕的時候文件被關閉了,這讓你感覺你控制不了你的環境。這是件小事情,但是在它發生大概第四次的時候,你會變得非常不開心。這就是爲什麼我花費了幾個小時來追蹤這個bug然後修正它。在墨菲法則的奇異適用下,這個修改會導致一系列的時間而使得我們浪費比如一週的時間,但是那是無關緊要的,這值得花費時間。這就是所謂的要關心可用性。如果你還是認爲這種像當你激活菜單的時候按下Alt鍵多長時間一類的小事情沒關係的話,好吧,你的軟件會使得人們不高興。這些微小的矛盾就是使得基於Swing的應用程序如此的惱人而不能忍受去使用,以我之見,這就是爲什麼事實上沒有成功的java圖形界面的商業應用。
我一遍一遍的說,好的用戶界面設計如此的重要是因爲它使得用戶開心。也就是說,如果你的界面設計是好的,使用你的軟件的人們會是高興的,否則,他們會不高興。
那爲什麼必須去讀一本關於沮喪的書呢?好吧,當人們感覺他們不能控制自己的生活和他們的環境的時候,他們會真的成爲臨牀上的抑鬱症患者。在這個研究領域的先鋒Seligman,發現了最有效的非藥物治療抑鬱症的手段之一就是鼓勵人們採取少量措施來儘量控制他們的環境。
我想做個程序員( I Wanna Be A Programmer)
一組爲想學習關於編程的非程序員讀者推薦的書。
《編碼的奧祕》(CODE
Charles Petzold
中譯本
這本書明確地說不是給程序員看的,它是給那些想要成爲程序員的非程序員們(新手?)看得,或者是那些想理解程序員是做什麼的人,也可能只是想探索一下位和字節的古怪世界的人。通過讀這本書開始,如果你覺得編碼很迷人,然後想成爲一個程序員,那麼接着讀下面這本C程序設計語言。
《C程序設計語言》(The C Programming Language
Brian W. Kernighan and Dennis M. Ritchie
中譯本原版
一個最被誤導的在編程教學總的觀點是必須通過以簡單的有趣的圖形化的素材開始誘導人們深入到程序設計之中。一些人認爲學習編程的最好的方法是從HTML開始,也許,然後學習如何剪切粘貼一些javascripts,然後繼續。另外一個誤解是從一個新潮的市場化的編程技術比如java或者web數據庫編程開始。
好吧,這些人都搞錯了。
因爲各種原因,深入編程的世界太複雜了,我相信你必須開始於一個更加接近機器的層次學習編程(Joel的另一篇關於爲什麼這麼做的文章)。這本書,傳說中的K&R,就是任何想成爲程序員的人必須首先學習的。把它拿起來然後仔細研讀。如果你喜愛和它在一起的每一分鐘,你能夠成爲一個程序員。如果你發現這本老學校程序設計教材充滿了無聊,或者指針那些東西讓你變得瘋狂,相信我,你似乎不是非常適合成爲程序員。如果你需要被誘導的進入編程世界或者你沒有耐心領會所有那些讓人發瘋的星號的意義,你做其他的事情應該會開心一點,真的!但是如果你能夠獨自搞定這本書,你有了成爲頂級程序員的資本,你有了一個掌握所有將來要學習的內容的極好的基礎。
注:對於初學者,外國人的書未必是最好的選擇,哪怕是中譯本也會因爲英語表達習慣的差異而難以讀懂,就算是再好的翻譯也難以翻譯好那些在英語中也算是晦澀的句子。候捷等人的書已經算是中譯本中的極品了,但是翻開這些書,你還是會發現很多句子不太好理解。也許譚浩強的C程序設計教材更加適合中國人的閱讀習慣,那也是一本好書,中國人自己用心寫的書最適合中國人來讀了。可惜情況不是很樂觀,最好的書依舊是英文的,而且我已經好幾年沒看到中國人自己寫的值得所有人都看看的新書了。所以良好的英語幾乎成了頂尖程序員的必備技能,不光能看懂普通英文,我們還必須得能看懂一些專業得術語以及那些作者爲了賣弄而故意寫得很“高深”得句子,當然也包括一些爲了表達確實艱深得理論而必須採用得晦澀得表述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章