Jeff Atwood傾情推薦——程序員必讀之書




英文版:《Code Complete 2》
中文版:《代碼大全(第二版)》
作者:Steve McConnell
譯者:金戈  湯凌  陳碩  張菲
出版社:電子工業出版社
出版日期:2007 年8月
Jeff Atwood的推薦:Steve McConnell的這本書是軟件開發領域裏的《烹飪的樂趣》。如果你對這本書感興趣,說明你熱愛你現在的工作,你對你正在做的事情是認真的,並且你想不斷地提升自己。Steve在這本書裏指出,普通程序員每年所讀的技術書籍不足一本。僅僅只需閱讀這本書,你就有可能超越身邊90%的程序員。這絕對是個好主意!

我非常喜歡這本書,以致於我在給自己的博客網站取名的時候也受到了它的啓發——我把我們應該避免去做的事情都打上了“Coding Horror”的標籤。沒有比編程方面的恐怖案例更能給人帶來樂趣了。但如果你不得不自己去應對某些恐怖,那麼你的樂趣就會蕩然無存。請你幫自己一個忙吧!要想讀書,這本書是首選;要給身邊其他的程序員推薦圖書,這本書也是首選。



英文版:《The Mythical Man-Month》
中文版:《人月神話》
作者:Frederick P.Brooks Jr.
譯者:UML China翻譯組 汪穎
出版社:清華大學出版社
出版日期:2007 年9月
Jeff Atwood的推薦:毫無疑問,這是我們領域裏惟一的一本經典圖書。如果你還沒讀過,你應該覺得丟臉!

你知道關於IBM的那個廢棄已久的OS/360系統及其開發團隊的故事嗎?如果你讀了《人月神話》還不明白OS/360那回事,那你就是白讀了!這本已經出版了30多年的圖書有力地證明了一個觀點:計算機也許會變,但人不會變。

花點時間讀一讀這本經典之作是值得的,跟你埋頭苦讀上千頁的技術資料比起來,它一定能給你帶來更大的效益。

 


英文版:《Don't Make Me Think》
中文版:《點石成金:訪客至上的網頁設計祕笈》
作者:Steve Krug
譯者:DeDream'(蔣芳)
出版社:機械工業出版社
出版日期:2006 年8月
Jeff Atwood的推薦:這是我曾讀過的、在“可用性”方面講得最好的一本書。儘管這本書的副標題說的是“Web可用性”,但你不要被它迷惑了。Steve Krug在這本書裏談到了“可用性”所有的重要概念,而且入木三分。這本書讀起來很有樂趣。如果“可用性”方面的書你只打算讀一本,那就選這本吧!這本書包含有豐富的信息,而且以一種簡潔、切實可行的方式展現在讀者面前。它廣泛適合於各類羣體閱讀,包括技術人員、非技術人員、用戶、開發者、管理人員等等。

看一看下面的幾幅漫畫吧。是不是很糾結?永遠也不要參加那樣的會議!順便說一下,解決這個問題的方法就是“可用性測試”。好好想一想:我們做決定的時候,是要無休無止地爭吵、最後誰吵贏了誰說了算呢,還是要基於真實的數據?這種改變是一場革命!

 

 

 


英文版:《Rapid Development》
中文版:《快速軟件開發》
作者:Steve McConnell
譯者:席相霖等
出版社:電子工業出版社
出版日期:2002年1月
Jeff Atwood的推薦:這本書完整的標題應該是《快速軟件開發——有效控制與完成進度計劃》。我故意沒把它寫全,不僅僅因爲副標題太長了、有點唐突,還因爲它確實不怎麼恰當。

這本書其實不是關於快速軟件開發的。它講的是失敗的現實。絕大部分軟件開發項目都會失敗——他們的開發進度滯後於計劃,做出來的東西不符合要求,甚至有時候根本就沒有完成。這已經不存在爭議了,因爲它是一個統計事實。令人不快的現實是,你的團隊必須非常優秀才能避免失敗,要想成功概率就更小了。儘管這聽起來讓人沮喪——沒錯,現實讓人很沮喪——但你還是要讀一讀這本書。

爲什麼呢?因爲如果你能避免重複去犯你或者其他人犯過的錯誤,你就已經成功了一半。(嚴格來說,書裏面說是成功了四分之一。但是,我覺得應該會更多一點。)這本書可以給我們的啓示是,犯錯誤是好事,只要這些錯誤是全新的、活蹦亂跳的(可能會重複發生)。如果你一直在犯同樣的錯誤,其實你在一開始就已經失敗了。可悲的是,你對你正在犯的錯誤可能還渾然不知。

在我們的領域裏,“惟一不變的就是變化”。這樣的領域是不多的,而我們很不幸就身處其中。因此,我們惟一能做的就是擁抱變化,並且嘗試各種不同的“快速”開發技巧。但不要走極端!我們不能假設:“自1970 年以來發生的變化是如此之大,以致於跟我們最新、最熱門的技術比起來,所有的傳統軟件開發經驗都已經過時、毫無用處了。”還是那個說法:計算機已經變了,但人沒有變。在你開始做任何事之前,至少了解一下什麼是行得通的、什麼是行不通的。拿Steve McConnell的話來說,“在開始刷漆之前要先讀一讀油漆罐上的說明。”這聽起來似乎是理所當然的,但在讀了這本書之後你就會發現,我們領域裏真正那樣做的人簡直就是鳳毛麟角。

 


英文版:《Peopleware》
中文版:《人件》
作者:Tom DeMarco / Timothy Lister
譯者:UML China翻譯組
出版社:清華大學出版社
出版日期:2003年6月
Jeff Atwood的推薦:如果你曾經親眼目睹一支全明星運動隊在一個糟糕教練的帶領下表現平平,你一定會喜歡這本書。不管你有多少“編程高手”,如果他們相互之間沒有溝通,或者互不認同,結果你還是會失敗。這本書還指出,不管開發人員多麼有天賦,如果他們持續不斷地受到各種干擾(哪怕干擾很細微),沒有人能在這種情況下有效地開展工作。說白了,開發人員在人際技能方面並不見長,但具有諷刺意味的是:項目成功與否常常取決於人際的問題。如果你渴望成爲真正的“團隊領導”(而不是徒有虛名),你必須好好地讀一讀這本書。

儘管這本書裏充斥着絕妙的、完全正確的觀點,但它也暗示了:員工需要對工作場所有一定的控制權——這在大部分公司裏完全是癡心妄想。不過,至少你會認識到,工作環境或你的團隊有時候就是癥結所在。更重要的是,你將學會如何去處理這些情況。

 

 

英文版:《The Design of Everyday Things》
中文版:《設計心理學》
作者:Donald A.Norman
譯者:梅瓊
出版社:中信出版社
出版日期:2010年3月
Jeff Atwood的推薦:開發軟件可能給人帶來難以置信的挫折感,因爲過程中有太多的陷阱。我們所做的事中很多都是帶有預防性質的:在一件事情還沒出錯之前,先試想它將會出錯。這能使人心智衰弱,而且最終可能以一些負面的方式讓人“心想事成”。在向不懂技術的人解釋的時候,我有時候會說:這就像製造一塊有1000個零件組成的手錶一樣,在哪怕最輕微的震動之下,任何一個零件都可能隨機出錯。這真是一份“好差事”啊!

毫無疑問,設計軟件是很難的。但是,設計一扇門也是很難的。不管是熱門的SQL引擎,還是卑微的鞋子,設計的細微差別會滲入你能觸摸到的每一個角落。“魔鬼藏在細節之中。”讀過這本書之後,你將對這句話有一個全新的體會。如果設計一扇門不像我們當初想的那樣不費吹灰之力,也許我們也該停下來想一想了:爲什麼我們設計不出完美的軟件呢?

 


英文版:《About Face 3: The Essentials of Interaction Design》
中文版:《About Face 3:交互設計精髓》
作者:Alan Cooper / Robert Reimann / David Cronin
譯者:劉松濤
出版社:電子工業出版社
出版日期:2012年3月
Jeff Atwood的推薦:Alan Cooper是“Visual Basic之父”,他還是“可用性”方面的教父。說實話,我是很多年前讀的這本書。這本書大約在1995年第一次出版,我就是在那時候買的。也就是說,我買的是最“老”的第一版。而如今已是第三版了!(用新版淘汰舊版,這可以認爲是一種糟糕的可用性嗎?)

在展現風格一致的圖形用戶界面方面,這本書和《GUI設計禁忌》一起被認爲是具有教育性質的規則手冊。但這本書滿滿地記錄了更爲通用的指導原則。在用來做範例的GUI問題中(很多都是古老的Windows 95界面),評判一下哪些已經基本被解決了(使用可視化的方式來展示對話框選擇的效果)以及哪些還沒有被解決(白癡的模態對話框讓程序中止運行),這其實挺有趣的!

與《GUI設計禁忌》不同的是,這本書是在互聯網應用盛行之前寫的,因此它沒有討論到Web應用以及Web對GUI設計的影響。但這不要緊,它仍然是一本非常有用的書。在最近的一個.NET項目中,我在錯誤消息的處理方面所遵循的模型就源自於這本書。

 


英文版:《The Inmates Are Running the Asylum: Why High Tech Products Drive UsCrazy and How To Restore The Sanity》
中文版:《交互設計之路——讓高科技產品迴歸人性》
作者:Alan Cooper
譯者:Chris Ding(丁全鋼)
出版社:電子工業出版社
出版日期:2006年3月
Jeff Atwood的推薦:Alan Cooper就是從這本書開始給大家推介了“人物角色”這個概念:與其把用戶想象成抽象的、難以描述的、琢磨不透的一羣人,還不如用“人物角色”來促使我們談論一些具體的用戶,他們有名字、有個性、有需求、也有目標。我們的用戶想要一個打印預覽的功能嗎?誰知道呢?但如果作爲客戶經理的Gerry Manheim必須每週打印他的費用報告(這是他工作的一部分),你最好相信打印預覽功能是必需的。其實沒什麼神奇的;像以前一樣,歸根結底你還是要知道你的用戶是誰,以及他們真正想要的是什麼——“人物角色”這個方法用來達到那個目的是再適合不過的了。

書裏面還有一個有趣的分析:開發者傾向於認爲自己能夠代表“普通”用戶來做出“可用性”方面的決定,但實際上,他們根本就不夠格。開發者充其量只能算是異想天開的極端用戶——“邏輯人”與“智人”的對抗。除非你碰巧是在開發一個編譯器,而開發者正是最終用戶……

這本書裏還有一個容易被人忽視的“教訓”:有時候,不管你的設計有多麼優秀,你還是可能會失敗。Alan Cooper在書中舉了兩個例子——一個是掃描儀軟件,另一個是Web應用軟件——Alan參與了諮詢工作,事實也證明它們都是非常出色的軟件,但因爲某些原因它們沒有取得商業上的成功,而這些原因跟“可用性”沒有任何關係。有時候,不管你多麼努力,偉大的產品還是會因爲一些不受你控制的原因而失敗。記住這些案例吧,不要被書裏有些地方自鳴得意的論調衝昏了頭腦!(順便說一下,書中提到的“放在鍵盤後面的”USB掃描儀,我恰好也買過一個。我對它附帶的掃描軟件印象非常好。後來,我把這個掃描儀送給了我父親。有一次我和父親通電話的時候,在沒有任何暗示的情況下,他居然向我說起了他非常非常喜歡那個掃描軟件。這還是發生在這本書出版以前的事呢!)

不管怎麼樣,這是Alan Cooper的另一本傑作,它也是《About Face》的合理進化。在《About Face》裏,Alan把目標用戶都看成是“中庸的”;而在這本書裏,他提煉出了更具體、也更容易在實踐中應用的“人物角色”。

 

 

英文版:《GUI Bloopers》
中文版:《GUI設計禁忌》
作者:Jeff Johnson
譯者:王蔓   劉耀明
出版社:機械工業出版社
出版日期:2005年2月
Jeff Atwood的推薦:遙想微軟的Windows 95和蘋果的System 7流行之時,那時候還真有一些關於GUI(圖形用戶界面)的設計準則。這本書就收錄了這些核心準則,包括菜單上的省略號、對話框上按鈕和文字的對齊方式等等。但有多少用戶能真正理解這些準則呢?這是有爭議的。不過,如果你遵循這些準則,你至少可以期望A程序的用戶界面會跟B程序的表現得很相似。現如今,網絡內容的表現形式魚龍混雜,特別是每天都會有一些Flash設計新手另起爐竈,標新立異地自創一套GUI。因此,溫故一下這門“經典的”關於GUI設計準則的課程還是很有好處的。

事實上,傳統的GUI風格和基於瀏覽器的風格正在漸漸融合,它們彼此之間取長補短。現在,你會發現有很多桌面應用程序都採用了酷似瀏覽器的界面風格。這就是所謂的“引導性用戶界面”(Inductive User Interface)。依稀記得大概是在2000年,我在Microsoft Money(一款財務管理軟件)上第一次看到了這種界面風格。你應該能在WindowsVista、Windows7、Windows 8上看到更多的這種變化。

 


英文版:《Programming Pearls》
中文版:《編程珠璣》
作者:Jon Bentley
譯者:謝君英   石朝江
出版社:中國電力出版社
出版日期:2004年3月
Jeff Atwood的推薦:對於是否要推薦這本書,我曾經猶豫過,因爲它包含了一些非常底層的編碼技術。但這本書裏同時也蘊藏了相當多的軟件工藝方面的“珍珠”,這使得它仍然值得所有開發者都去讀一讀。任何包含下面這種圖片的圖書都是很有價值的寶書。它就用來展示TRS-80與DEC Alpha之間48n比n3算法複雜度差異嗎?兄弟,拜託……沒有比那更好的了!如果你不能幸運地跟一位大師級的程序員並肩而坐,並且在一起工作大約一年的時間,那麼買一本《編程珠璣》就是退而求其次的最佳選擇了。這本書是集體智慧的結晶,凝聚了很多技能嫺熟的程序員的貢獻,並最終彙編成了一個個精粹而容易被人理解的專題欄目。

 

我不想騙你!其實,這本書的很多章節你都可以忽略。比如說,像第11、13和14章談到的排序、堆或者哈希算法,當今有很多成熟的庫早已實現了這些基本技術,我想不出任何理由你需要去把它們重新實現一遍。但對於每一個枯燥的課本練習,這本書的確給出了一些實用的建議。你儘可以快速翻閱這本書,碰到有代碼的部分就跳過去……聽我的準沒錯!第7章“封底計算”是要點,那也許是我曾見過的在“估算”這個專題上最好的論述。它還用很大的篇幅去解釋了那些瘋狂的面試問題,而一些公司往往熱衷於用那些問題來考驗我們……

如果你還在猶豫,建議你到網上去讀一讀這本書的樣章。最近,我把從“珍珠字符串”那一章學到的東西付諸實踐,我在生成合成數據填入一個空數據庫的時候使用了馬爾科夫鏈——這也證明了在“封底計算”那一章談到的性能估算技術。

 


英文版:《The Pragmatic Programmer: From Journeyman to Master》
中文版:《程序員修煉之道:從小工到專家》
作者:Andrew Hunt / David Thomas
譯者:馬維達
出版社:電子工業出版社
出版日期:2011年1月
Jeff Atwood的推薦:這本書讓我想起了《編程珠璣》裏的很多內容,但它事實上比《編程珠璣》更好,因爲它不再拘泥於代碼。作者擺脫了代碼的束縛,轉而專注於真實世界裏已經被證明切實可行的方法,並把它們統統都收錄進了這本書。嚴格來說,不是所有的事情都跟編程有關係。比如,自問“我爲什麼要做這件事?它究竟值得去做嗎?”並不算是創意性思維,你恰恰應該每天都這麼問問自己,以使你和你的同事始終保持清醒的頭腦。這也正是這本書的可貴之處!

如果你想對這本書做更多的瞭解,你可以去看一看我在博客網站上發表的那篇“A Pragmatic Quick Reference”。那篇文章很好地概括了這本書的內容,它也可以作爲你“修煉”時候的便捷參考。

 


英文版:《Designing Web Usability》
中文版:《Web可用性設計》
作者:Jakob Nielsen
譯者:瀟湘工作室
出版社:人民郵電出版社
出版日期:2000年11月
Jeff Atwood的推薦:Jakob Nielsen因爲創辦了關於“可用性”的網站(http://www.nngroup.com)而名噪一時。自從他在1989年出版了第一本書以來,他便開始了可用性專家的職業生涯。這是一本不折不扣的關於Web可用性設計的初級讀本,因此跟Alan Cooper專注於GUI的圖書還是有些不一樣的。

 

 

        

  • 《The Visual Display of Quantitative Information》
  • 《Visual Explanations: Images and Quantities, Evidence and Narrative》
  • 《Envisioning Information》

信息多美麗!設計優良的GUI也是這樣。

這個系列的3本書你不必都買,除非你是一個完美主義者(我猜你也許是個受虐狂),但前兩本是很關鍵的。

Chris Sells曾經在2004年6月參加過Edward R. Tufte的一次研討會,之後他對Tufte的圖書發表了一些很有意思的見解。詳見http://www.sellsbrothers.com

 


英文版:《Mastering Regular Expressions》
中文版:《精通正則表達式》
作者:Jeffrey E.F.Friedl
譯者:餘晟
出版社:電子工業出版社
出版日期:2012年7月
Jeff Atwood的推薦:UNIX因爲其複雜、令人費解而臭名昭著。正則表達式與它同病相憐。

我應該算得上是“保持通俗易用”俱樂部的正式會員,但我要爲正則表達式破一回小例。如果正則表達式書寫得當的話,它們可以在字符串操作方面爲你節省大把大把的時間。我還從來沒碰到過一個正則表達式派不上用場的項目呢!

一旦你鑽進正則表達式的世界,你可能會沉醉於它們驚人的力量和潛能。請記住,絕對的權力導致絕對的腐敗。不過,它也絕對可以讓你酷斃了!

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