無痛軟件管理類(Painless software Management)
人件(第2版) (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
(此書第二版中譯本[ISBN]7-121-?????[/ISBN])
一本經典的界面設計書籍,是一本偉大的圖形用戶界面設計寶典,作者是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
( Web可用性設計 )
我知道,我明白,可憐的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
( 編碼的奧秘CODE )
這本書明確地說不是給程序員看的,它是給那些想要成為程序員的非程序員們(新手?)看得,或者是那些想理解程序員是做什么的人,也可能只是想探索一下位和字節的古怪世界的人。通過讀這本書開始,如果你覺得編碼很迷人,然后想成為一個程序員,那么接著讀下面這本C程序設計語言。
《C程序設計語言》(The C Programming Language)
Brian W. Kernighan and Dennis M. Ritchie
( C程序設計語言(第2版?新版) 、[ISBN]0131103628[/ISBN])
一個最被誤導的在編程教學總的觀點是必須通過以簡單的有趣的圖形化的素材開始誘導人們深入到程序設計之中。一些人認為學習編程的最好的方法是從HTML開始,也許,然后學習如何剪切粘貼一些javascripts,然后繼續。另外一個誤解是從一個新潮的市場化的編程技術比如java或者web數據庫編程開始。
好吧,這些人都搞錯了。
因為各種原因,深入編程的世界太復雜了,我相信你必須開始于一個更加接近機器的層次學習編程(Joel的另一篇關于為什么這么做的文章)。這本書,傳說中的K&R,就是任何想成為程序員的人必須首先學習的。把它拿起來然后仔細研讀。如果你喜愛和它在一起的每一分鐘,你能夠成為一個程序員。如果你發現這本老學校程序設計教材充滿了無聊,或者指針那些東西讓你變得瘋狂,相信我,你似乎不是非常適合成為程序員。如果你需要被誘導的進入編程世界或者你沒有耐心領會所有那些讓人發瘋的星號的意義,你做其他的事情應該會開心一點,真的!但是如果你能夠獨自搞定這本書,你有了成為頂級程序員的資本,你有了一個掌握所有將來要學習的內容的極好的基礎。
--------------------------------------------------------------------------------
注:對于初學者,外國人的書未必是最好的選擇,哪怕是中譯本也會因為英語表達習慣的差異而難以讀懂,就算是再好的翻譯也難以翻譯好那些在英語中也算是晦澀的句子。候捷等人的書已經算是中譯本中的極品了,但是翻開這些書,你還是會發現很多句子不太好理解。也許譚浩強的C程序設計教材更加適合中國人的閱讀習慣,那也是一本好書,中國人自己用心寫的書最適合中國人來讀了。可惜情況不是很樂觀,最好的書依舊是英文的,而且我已經好幾年沒看到中國人自己寫的值得所有人都看看的新書了。所以良好的英語幾乎成了頂尖程序員的必備技能,不光能看懂普通英文,我們還必須得能看懂一些專業得術語以及那些作者為了賣弄而故意寫得很“高深”得句子,當然也包括一些為了表達確實艱深得理論而必須采用得晦澀得表述。
OK,這個列表我終于翻譯完了,這完全出自個人得愛好,我覺得這是一個很棒得列表,里面得書確實值得好好研讀一番。在翻譯過程中,因為對一些英文文化背景得不了解,加上水平實在有限,會存在很多錯誤。我也理解了被罵得譯著者得苦衷,其實他們大部分還是用心去翻譯得,只不過有時候確實有些無可奈何得句子存在。不過還是特別鄙視那些看得出來是用翻譯軟件打稿得譯書,作者的不負責任是對一本好書得侮辱。文中翻譯不周之處希望各位海涵。
--------------------------------------------------------------------------------