書評

作者:周思博 (Joel Spolsky)
譯:Paul May 梅普華

Wednesday, March 13, 2002

A part of Joel on Software, http://www.joelonsoftware.com

“對任何程式師都近乎完美的短書單” — Jan Derk

由所看的書可以深入瞭解一個人。而且我一直認為如果我看過的書你通通都看過,你的想法還會變得和我很像。

所以我列了這東西-約耳的程式師書櫃。這份短書單列出所有我真心認為每個工作的程式師都要讀的書,我把我自己的書也偷偷列進去。萬一你沒注意到買了這本書,我就能拿到大約兩塊錢。

無痛軟體管理

[Image]
Peopleware: Productive Projects and Teams
Tom Demarco and Timothy R. Lister

天才當家
方亞瀾 譯
藍鯨

我和朋友在微軟暑期實習時,習慣到公司的庫房做「田野調查」,補充一些學校用品。在磁碟片、滑鼠墊、立可貼之間發現一疊小本的平裝書,於是就帶了一本回家看。這本書就是Tom DeMarco和Timothy Lister寫的Peopleware。這本書是我所讀過最有影響力的書。要敘述這本書最佳的方式就是反呆伯特宣言。曾經想過為什麼微軟裡人人都有專屬的辦公室嗎?每間都有牆還有可以關起來的門。這本書裡有答案。為什麼經理人要讓團隊在做事時有很大的彈性。書裡也有答案。為什麼微軟內有那麼多生產力超高的固定特種部隊?主要是因為比爾蓋茨建立的這家公司裡充滿了讀過Peopleware的經理。我極力的推薦這本書。它是每個軟體經理人都必須讀的書,而且不是讀一次就好,要每年都讀一次。

[Image]
The Mythical Man-Month
Frederick P. Brooks

人月神話:軟體專案管理之道(20週年紀念版)
錢一一 譯
經濟錢潮社

25年前問世的人月神話絕對是軟體專案管理的經典書籍。當時Fred Brooks嘗試執行第一個超大型軟體工程專案(IBM的OS/360作業系統),同時也率先敘述軟體與其他工程類型間極重大的差異。這本書最有名的一點就是發現了以下這個原則:在已落後的專案中增加更多程式師,只會讓進度更加落後。不過對這本書來說這只是冰山一角。想要正確地思考軟體團隊管理,瞭解這本書是個先決條件。

[Image]
Rapid Development: Taming Wild Software Schedules
Steve C. McConnell

微軟開發快速秘笈
鄒正平 編譯
微軟出版社

Steve McConnell捕捉了許多微軟在開發大規模軟體前十年間找出的開發管理想法。你會看到這本書中有很多想法和我絕非原創的約耳測試重複(驚奇吧),不過書裡的重點是在於排定時程程序的控制。

程式工藝

[Image]
Code Complete: A Practical Handbook of Software Construction
Steve C. McConnell

如何進入程式設計的專業領域(兩冊)
黃昕偉 譯
旗標出版(已絕版)

Code Complete是本良好程式設計實務的百科全書,著重在個別的工藝,也就是綜合起來成為我們直覺上稱之「撰寫簡潔程式碼」的所有東西。這是那種用50頁篇幅只談論程式碼編排和空白分隔文字的書。

[Image]
The Pragmatic Programmer: From Journeyman to Master
Andrew Hunt and David Thomas

程序員修煉之道:從小工到專家(簡體版)
馬維達 譯
電子工業出版社

對已經學過程式設計技術(可能在學校裡學的),卻不太有把握決定要做什麼的程式師來說,這是本很好的書。這就像是畫草圖和真正建築設計間的差異。你在學校上課學到的是畫草圖,你也能畫得很漂亮,不過當某人要你自己寫個P2P音樂交換網路時,如果你還是不太知道怎麼開始,這本書就非常適合。

程式設計的哲學

[Image]
Microserfs
Douglas Coupland

剛離開學校就到微軟工作的人得瞭解一件重要的事情。你很年輕,身處一個陌生的城市,一個人都不認識。沒什麼事好做,而你又是個電腦狂,對你來說工作就是樂趣,所以開車去買了外帶午餐後很可能就會覺得無聊,然後只好回豪華辦公室面對一片山景和高樹以及程式碼。這些年輕程式師中很多人在工作以外的生活都相當寂寞空虛,但在微軟的工作表現傑出,因為你把全部精力都投入真正有趣的部份,也就是開發出很酷的軟體。

沒有什麼能像Microserfs那樣,真正捕捉到身為大軟體公司內年輕程式師的感覺。Douglas Coupland對90年代初期身處微軟的生活描寫的非常生動,完完全全的打動我。不過他卻更進一步,在大家都還沒察覺之前,對所發生的事提供了道德及倫理上的理解。沒有人像Coupland那麼瞭解空虛、平凡的孤獨、以及現代北美人際間的聯繫的追尋。

[Image]
Zen and the Art of Motorcycle Maintenance
Robert M. Pirsig

萬里任禪遊
羅若蘋,李昆圳 譯
時報出版

有些人認為程式設計只是個賺錢的好方法。不過對其他人來說這理由並不足夠。程式設計工作是我們生活中很重要的一環,我們需要一個哲學上的認知才能理解它的意義。這本書對連結工程與哲學很有幫助。

[Image]
Godel, Escher, Bach: An Eternal Golden Braid
Douglas R. Hofstadter

哥德爾、艾舍爾、巴赫—集異璧之大成(簡體版)
郭維德 譯
商務印書館(北京)

這本書是在我進大學前讀的,讀完就決定我要主修「哥德爾、艾舍爾、巴赫」。我選課的主要原則就是要涵蓋這本重要而全面而且極為有趣的書中所提出的科目:人工智慧,認知科學,電腦科學,哲學,心理學,音樂以及藝術全都神奇地交織在一起。

[Image]
A Pattern Language: Towns, Buildings, Construction
Christopher Alexander, Sara Ishikawa, Murray Silverstein, et al.

建築模式語言 - 城鎮.建築.構造
王聽度,周序鴻 譯
六合?

是的,沒錯,這是一本有關建築學的書。你知道的,房子之類的東西。我不認為整本書有任何地方提到電腦。會買這本書是因為我對建築有興趣。然後就注意到某件事:這本書裡的內容幾乎都可以應用在軟體設計者的工作上。舉例來說,CityDesk的開始畫面就是基於Zen View這個極具影響力的模式。另外Dave WinerRadio Userland之所以能吸引大家,就是因為它遵循Windows Overlooking Life的模式。另外能體會Hierarchy of Space模式的軟體也比較容易理解。

幾年前類似的東西也在程式設計界短暫地流行過一陣子;我認為程式設計界的模式運動從來沒有真正成功,因為它只是嘗試模仿本書的形式,而非複製書中的智慧。

使用介面設計

[Image]
User Interface Design for Programmers
Joel Spolsky

我也可以列我自己的書,對吧?

UI for Programmers一書嘗試教導我所認為最上層最重要,每個程式師都必須知道的UI設計原則。我所聽到讀者最常見的反應就是:「讀了你的書之後,我發現我的程式有三個地方一定得改。」

[Image]
Don't Make Me Think
Steve Krug

如何設計好網站
上奇出版

Don't Make Me Think是一本出色而有趣的書,討論的是網頁UI設計。終於有書嘗試瞭解良好UI設計的原則,而不僅只是列些世俗的規則(比如「不要改變連結的色彩」)。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."(翻不出來)

[Image]
About Face: The Essentials of User Interface Design
Alan Cooper

軟體觀念革命 - 交互設計精髓(簡體版)
詹劍鋒等 譯
電子工業出版社

一本UI設計的經典。這是來自Visual Basic發明者的GUI設計重要聖經。

[Image]
Design of Everyday Things
Donald A. Norman

設計心理學
卓耀宗博士 譯
遠流出版

雖然內容討論門和冰箱多過電腦,不過Donald Norman的經典作品The Design of Everyday Things (也用"The Psychology of Everyday Things"的書名出版過)卻是UI設計相關書中最好的一本。書中對於其情境支持(Affordances)理論有突破性的成果。情境支持在我UI書中的第4章也有談到,而且仍舊是對日常物品良好設計最有影響力的想法。

[Image]
Designing Web Usability
Jakob Nielsen

Web可用性設計(簡體版)
瀟湘工作室 譯
人民電郵出版社

我知道,我知道,可憐的Jakob因為「ClearType...每年可以替使用者節省2,000美元」和「小額付款機制就是答案」等奇怪的發言被罵得很慘。嗯,是沒錯。不過在這所有愚蠢的數學之間,Nielsen還是提出了很多你一定要知道而且完全正確的見解。如果你在設計任何形式的網頁,一定得瞭解這本書裡的原則。如果你設計的並不是網頁,可以把它當作針對可使用度工程的優異案例研究來看。

針對程式師的資本主義

[Image]
A Random Walk Down Wall Street
Burton Gordon Malkiel

漫步華爾街:超越股市漲跌的成功投資策略
楊美齡 譯
天下文化

如果你在這個業界待得夠久,幾乎無可避免地突然發現自己得管理一大筆錢。如果你不想把事情搞砸,有幾件事是一定得知道的。

噢,不過你會說這些東西看起來如此地複雜,怎麼比得過那麼吃人不吐骨頭的華爾街狡猾老狐狸呢?光是想投資獲得合理收益,似乎都得不斷的研究,研讀,工作,閱讀還有學習才做得到。有那麼多的年度報表。而你還得訂閱各種寫得密密麻麻的無聊報紙,上面滿是用小字印刷的專欄。

如果我說你只要讀一本書就能學到管理投資所有必須瞭解的東西,你覺得怎麼樣?我是說所有東西哦。沒錯,這是事實。答案就是這本書。如果你沒工夫去看其他有關投資的東西,就讀這一本書吧。

創業

[Image]
Growing a Business
Paul Hawken

實現創業的夢想
吳程遠,齊若蘭 譯
天下文化

人們常常寫電郵給我說:「啊,我好喜歡你那個以Ben and Jerry's方式創業的理論,不過我要怎麼開始呢?」這就是你要看的書。可能會有一點平淡無味,不過這本書能為你提供讓公司有組織地成長的哲學。

繪圖設計

[Image]
The Non-Designer's Design Book
Robin Williams

哇!每個人或多或少都得做一些繪圖設計,不過並非所有軟體團隊都能擁有專業的設計師。這本出色的薄書能讓你掌握頁面編排以及字型等等背後的原理。好消息是你可以在洗澡水涼之前看完,然後第二天你的對話盒和powerpoint投影片以及網頁就會開始好看許多。

差異化

[Image]
Influence: The Psychology of Persuasion
Robert B. Cialdini

影響力:你為什麼會說“是”?(簡體版)
中國社會科學出版社

Robert B. Cialdini的經典作品Influence是另一本值得一讀再讀的書。慈善組織請求你捐款時幾乎都會在信封裡附一個「禮物」,比如印有你的地址的自黏標籤或是幾張空白賀卡。他們會送禮物給你是基於互惠的社會性原理;因為這樣你就會覺得要回饋一些東西。你也可能常常在電視購物頻道上聽過「快快快,數量有限!」這種台詞,聽到都沒感覺了。不過這種台詞是基於罕見(scarcity)原理,也就是你會自然地假設罕見的物品會比較值錢。業務員,行銷人員以及廣告主會運用這些手法以及其他技倆,影響人們進行某些行為。Cialdini出色的書中討論了影響其他人行為的科學與實務背後的心理學理論。你得趕快在他們進行之前先看這本書!

[Image]
Helplessness: On Depression, Development, and Death
Martin E. P. Seligman

幾個月前當我們剛推出新版CityDesk時,我收到一封客戶寄來的電子郵件,抱怨他習慣按Alt+F及Alt+S來儲存檔案。不幸的是,由於某個沒注意到的小問題,這個快速鍵組合會儲存檔案然後惹人厭地關閉檔案。我從來沒注意到這個問題,因為我習慣按Alt+F,S來存檔而不是Alt+F,Alt+S(差別非常的小),而Alt+F,S完全沒有問題。

當你習慣按Alt+F,Alt+S存檔之後,整個動作會變成非常自發,你完全不會把這個動作想成Alt+F,Alt+S。你會直接把它想成儲存。當你按下腦海裡的「儲存」鈕,工作中的檔案卻消失不見,就會讓你感覺無法控制你的環境。這是件小事,不過發生個四次你就會開始很不爽。這也是我會花幾個小時追蹤並修正這個問題的原因。不過由於墨菲定律神奇的作用,這個修正動作引發一連串的事件,讓我們浪費了大約一個星期,不過那不是重點。我們花的時間是值得的。這就是重視可使用度的意義。如果你仍舊認為,Alt鍵要壓多久才能叫出功能表,是件無關緊要的小事,那麼你的軟體就會讓使用者不快樂。Swing的應用程式正是因為這些細微的不協調,才會讓人覺得無法忍受的厭惡。就我的意見來看,這也是沒有成功的商業化Java GUI應用程式的原因。

我不時地一再說過,良好UI設計之所以重要,是因為它會讓大家快樂。我講這個話是很實在的。如果你的UI設計良好,使用你的軟體的人就會比較快樂。如果設計不良,他們就會不快樂

這個講憂鬱症的書有什麼關係呢?是這樣的,當人們感覺無法控制自己的生命和環境時,就會轉變成臨床上的憂鬱症。而Seligman這位先驅發現,對抗憂鬱已知最有效的非藥物療法,就是鼓勵人們小幅地逐漸控制他們的環境。

我想當個程式師

針對想學習程式設計的非程式讀者的幾本書。

[Image]
Code
Charles Petzold

編碼的奧秘(簡體版)
伍衛國,王宣政,孫燕妮 譯
機械工業出版社

這本書的對象絕對不是程式師,它是針對非程式師的讀者,不管是想要成為程式師,或是想瞭解程式師所做的事,還是僅僅想探索一下位元與位元組的瘋狂世界,通通都可以。你可以先看這本書作為開始,如果你覺得它很迷人,認為自己想成為程式師,接下來就去讀(而且要徹底的精讀)The C Programming Language。

[Image]
The C Programming Language
Brian W. Kernighan and Dennis M. Ritchie

C語言程式設計(增訂版)
蔡文能 譯
培生教育

程式設計教學上最誤導的想法,就是必須由簡單有趣圖形化的東西開始,才能引誘人們來設計程式。有些人認為學程式設計最好的方法是由HTML(舉個例子)開始,然後再學習如何剪貼javascript程式,再慢慢深入。另一個誤解是應該由流行有需求的程式設計技術(如Java或Web資料庫程式設計)開始。

好吧,這些人都錯了。

基於各種太複雜無法在此詳述的理由,我相信你必須由一個儘可能合理地接近機器的層級開始學程式設計。我認為這本俗稱為K&R的書,正是每個想當程式師的人必須先學習的書籍。找一本來徹底的研讀。如果你在研讀過程中都很快樂,就可以當個程式師。如果你覺得這種老舊文字式的程式設計很無聊,或者發現指標讓你發狂,相信我吧,你不會衷心喜歡程式設計的。如果你必須被引誘來設計程式,或者你並沒有耐性找出這些瘋狂星號的意義,去做別的事會比較快樂。我是說真的。不過如果你可以自己讀完這整本書,就已經獲得成為精英程式師所需的條件,同時也奠定要學習其他東西所需的厚實基礎。

 

讀者對自己最愛的書的討論。有其他應該列在這裡的書嗎?把你的意見寫在討論區吧!

 

這些網頁的內容為表達個人意見。
All contents Copyright © 1999-2006 by Joel Spolsky. All Rights Reserved.