约耳的程式师书柜

作者:周思博(Joel Spolsky)
译:Paul May 梅普华
Wednesday, March 13, 2002 A part of Joel on Software, http://www.joelonsoftware.com


“对任何程式师都近乎完美的短书单” — Jan Derk

由所看的书可以深入了解一个人。而且我一直认为如果我看过的书你通通都看过,你的想法还会变得和我很像。

所以我列了这东西-约耳的程式师书柜。这份短书单列出所有我真心认为每个工作的程式师都要读的书,我把我自己的书也偷偷列进去。万一你没注意到买了这本书,我就能拿到大约两块钱。


无痛软体管理

[Peopleware.gif](http://www.amazon.com/exec/obidos/ASIN/0932633439/ref=nosim/ joelonsoftware/)

Peopleware: Productive Projects and Teams
Tom Demarco and Timothy R. Lister
Peopleware: 脑力密集产业的人才管理之道
方亚澜钱一一译
经济新潮社

我和朋友在微软暑期实习时,习惯到公司的库房做「田野调查」,补充一些学校用品。在磁碟片、滑鼠垫、立可贴之间发现一叠小本的平装书,于是就带了一本回家看。这本书就是Tom DeMarco和Timothy Lister写的Peopleware。这本书是我所读过最有影响力的书。要叙述这本书最佳的方式就是反呆伯特宣言。曾经想过为什么微软里人人都有专属的办公室吗?每间都有墙还有可以关起来的门。这本书里有答案。为什么经理人要让团队在做事时有很大的弹性。书里也有答案。为什么微软内有那么多生产力超高的固定特种部队?主要是因为比尔盖茨建立的这家公司里充满了读过Peopleware的经理。我极力的推荐这本书。它是每个软体经理人都必须读的书,而且不是读一次就好,要每年都读一次。

[MythicalManMonth.jpg](http://www.amazon.com/exec/obidos/ASIN/0201835959/ref=nosim/ joelonsoftware/)

The Mythical Man- Month
Frederick P. Brooks
人月神话:软体专案管理之道(20周年纪念版)
钱一一译
经济钱潮社

25年前问世的人月神话绝对是软体专案管理的经典书籍。当时Fred Brooks尝试执行第一个超大型软体工程专案(IBM的OS/360作业系统),同时也率先叙述软体与其他工程类型间极重大的差异。这本书最有名的一点就是发现了以下这个原则:在已落后的专案中增加更多程式师,只会让进度更加落后。不过对这本书来说这只是冰山一角。想要正确地思考软体团队管理,了解这本书是个先决条件。

[RapidDevelopment.jpg](http://www.amazon.com/exec/obidos/ASIN/1556159005/ref=nosim/ joelonsoftware/)

Rapid Development: Taming Wild Software Schedules
Steve C. McConnell
微软开发快速秘笈
邹正平编译
微软出版社

Steve McConnell捕捉了许多微软在开发大规模软体前十年间找出的开发管理想法。你会看到这本书中有很多想法和我绝非原创的[fog0000000043.html 约耳测试]重复(惊奇吧),不过书里的重点是在于排定时程程序的控制。


程式工艺

[CodeComplete.gif](http://www.amazon.com/exec/obidos/ASIN/1556154844/ref=nosim/ joelonsoftware/)

Code Complete: A Practical Handbook of Software Construction
Steve C. McConnell
如何进入程式设计的专业领域(两册)
黄昕伟译
旗标出版(已绝版)

Code Complete是本良好程式设计实务的百科全书,着重在个别的工艺,也就是综合起来成为我们直觉上称之「撰写简洁程式码」的所有东西。这是那种用50页篇幅只谈论程式码编排和空白分隔文字的书。

[PragmaticProgrammer.jpg](http://www.amazon.com/exec/obidos/ASIN/020161622X/ref=nosim/ joelonsoftware/)

The Pragmatic Programmer: From Journeyman to Master
Andrew Hunt and David Thomas
程序员修炼之道:从小工到专家(简体版)
马维达译
电子工业出版社

对已经学过程式设计技术(可能在学校里学的),却不太有把握决定要做什么的程式师来说,这是本很好的书。这就像是画草图和真正建筑设计间的差异。你在学校上课学到的是画草图,你也能画得很漂亮,不过当某人要你自己写个P2P音乐交换网路时,如果你还是不太知道怎么开始,这本书就非常适合。


程式设计的哲学

[Microserfs.jpg](http://www.amazon.com/exec/obidos/ASIN/0060987049/ref=nosim/ joelonsoftware/)

Microserfs
Douglas Coupland

刚离开学校就到微软工作的人得了解一件重要的事情。你很年轻,身处一个陌生的城市,一个人都不认识。没什么事好做,而你又是个电脑狂,对你来说工作就是乐趣,所以开车去买了外带午餐后很可能就会觉得无聊,然后只好回豪华办公室面对一片山景和高树以及程式码。这些年轻程式师中很多人在工作以外的生活都相当寂寞空虚,但在微软的工作表现杰出,因为你把全部精力都投入真正有趣的部份,也就是开发出很酷的软体。

没有什么能像Microserfs那样,真正捕捉到身为大软体公司内年轻程式师的感觉。Douglas Coupland对90年代初期身处微软的生活描写的非常生动,完完全全的打动我。不过他却更进一步,在大家都还没察觉之前,对所发生的事提供了道德及伦理上的理解。没有人像Coupland那么了解空虚、平凡的孤独、以及现代北美人际间的联系的追寻。

[ZenAndTheArt.jpg](http://www.amazon.com/exec/obidos/ASIN/0553277472/ref=nosim/ joelonsoftware/)

Zen and the Art of Motorcycle Maintenance
Robert M. Pirsig
万里任禅游
罗若苹,李昆圳译
时报出版

有些人认为程式设计只是个赚钱的好方法。不过对其他人来说这理由并不足够。程式设计工作是我们生活中很重要的一环,我们需要一个哲学上的认知才能理解它的意义。这本书对连结工程与哲学很有帮助。

[GodelEscherBach.jpg](http://www.amazon.com/exec/obidos/ASIN/0465026567/ref=nosim/ joelonsoftware/)

Godel, Escher, Bach: An Eternal Golden Braid
Douglas R. Hofstadter
哥德尔、艾舍尔、巴赫—集异璧之大成(简体版)
郭维德译
商务印书馆(北京)

这本书是在我进大学前读的,读完就决定我要主修「哥德尔、艾舍尔、巴赫」。我选课的主要原则就是要涵盖这本重要而全面而且极为有趣的书中所提出的科目:人工智慧,认知科学,电脑科学,哲学,心理学,音乐以及艺术全都神奇地交织在一起。

[APatternLanguage.jpg](http://www.amazon.com/exec/obidos/ASIN/0195019199/ref=nosim/ joelonsoftware/)

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模式的软体也比较容易理解。

几年前类似的东西也在程式设计界短暂地流行过一阵子;我认为程式设计界的模式运动从来没有真正成功,因为它只是尝试模仿本书的形式,而非复制书中的智慧。


使用介面设计

[UIForProgrammers.jpg](http://www.amazon.com/exec/obidos/ASIN/1893115941/ref=nosim/ joelonsoftware/)

User Interface Design for Programmers
Joel Spolsky

我也可以列我自己的书,对吧?

UI for Programmers一书尝试教导我所认为最上层最重要,每个程式师都必须知道的UI设计原则。我所听到读者最常见的反应就是:「读了你的书之后,我发现我的程式有三个地方一定得改。」

[Dont_Make_Me_Think.jpg](http://www.amazon.com/exec/obidos/ASIN/0789723107/ref=nosim/ joelonsoftware/)

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."(翻不出来)

[AboutFace.jpg](http://www.amazon.com/exec/obidos/ASIN/1568843224/ref=nosim/ joelonsoftware/)

About Face: The Essentials of User Interface Design
Alan Cooper
软体观念革命 - 交互设计精髓(简体版)
詹剑锋等译
电子工业出版社

一本UI设计的经典。这是来自Visual Basic发明者的GUI设计重要圣经。

[Design_of_Everyday_Things.gif](http://www.amazon.com/exec/obidos/ASIN/0385267746/ref=nosim/ joelonsoftware/)

Design of Everyday Things
Donald A. Norman
设计心理学
卓耀宗博士译
远流出版

虽然内容讨论门和冰箱多过电脑,不过Donald Norman的经典作品The Design of Everyday Things (也用"The Psychology of Everyday Things"的书名出版过)却是UI设计相关书中最好的一本。书中对于其 情境支持(Affordances) 理论有突破性的成果。情境支持在我UI书中的[fog0000000060.html 第4章]也有谈到,而且仍旧是对日常物品良好设计最有影响力的想法。

[DesigningWebUsability.jpg](http://www.amazon.com/exec/obidos/ASIN/156205810X/ref=nosim/ joelonsoftware/)

Designing Web Usability
Jakob Nielsen
Web可用性设计(简体版)
潇湘工作室译
人民电邮出版社

我知道,我知道,可怜的Jakob因为「ClearType…每年可以替使用者节省2,000美元」和「小额付款机制就是答案」等奇怪的发言被骂得很惨。嗯,是没错。不过在这所有愚蠢的数学之间,Nielsen还是提出了很多你一定要知道而且 完全正确 的见解。如果你在设计任何形式的网页,一定得了解这本书里的原则。如果你设计的并不是网页,可以把它当作针对可使用度工程的优异案例研究来看。


针对程式师的资本主义

[RandomWalk.jpg](http://www.amazon.com/exec/obidos/ASIN/0393315290/ref=nosim/ joelonsoftware/)

A Random Walk Down Wall Street
Burton Gordon Malkiel
漫步华尔街:超越股市涨跌的成功投资策略
杨美龄译
天下文化

如果你在这个业界待得够久,几乎无可避免地突然发现自己得管理一大笔钱。如果你不想把事情搞砸,有几件事是一定得知道的。

噢,不过你会说这些东西看起来如此地_复杂_ ,怎么比得过那么吃人不吐骨头的华尔街狡猾老狐狸呢?光是想投资获得合理收益,似乎都得不断的研究,研读,工作,阅读还有学习才做得到。有那么多的年度报表。而你还得订阅各种写得密密麻麻的无聊报纸,上面满是用小字印刷的专栏。

如果我说你只要读_一本书_ 就能学到管理投资所有必须了解的东西,你觉得怎么样?我是说所有东西哦。没错,这是事实。答案就是这本书。如果你没工夫去看_其他_ 有关投资的东西,就读这一本书吧。


创业

[GrowingABusiness.jpg](http://www.amazon.com/exec/obidos/ASIN/0671671642/ref=nosim/ joelonsoftware/)

Growing a Business
Paul Hawken
[http://www.books.com.tw/exep/prod/booksfile.php?item=0010032171

实现创业的梦想]
吴程远,齐若兰译
天下文化

人们常常写电邮给我说:「啊,我好喜欢你那个以Ben and Jerry's方式[fog0000000056.html 创业]的理论,不过我要怎么开始呢?」这就是你要看的书。可能会有一点平淡无味,不过这本书能为你提供让公司有组织地成长的哲学。


绘图设计

[NonDesigners.jpg](http://www.amazon.com/exec/obidos/ASIN/1566091594/ref=nosim/ joelonsoftware/)

The Non-Designer's Design Book
Robin Williams

写给大家的平面设计书

哇!每个人或多或少都得做一些绘图设计,不过并非所有软体团队都能拥有专业的设计师。这本出色的薄书能让你掌握页面编排以及字型等等背后的原理。好消息是你可以在洗澡水凉之前看完,然后第二天你的对话盒和powerpoint投影片以及网页就会开始好看许多。


差异化

[Influence.jpg](http://www.amazon.com/exec/obidos/ASIN/0688128165/ref=nosim/ joelonsoftware/)

Influence: The Psychology of Persuasion
Robert B. Cialdini
影响力:你为什么会说“是”?(简体版)
中国社会科学出版社

Robert B. Cialdini的经典作品Influence是另一本值得一读再读的书。慈善组织请求你捐款时几乎都会在信封里附一个「礼物」,比如印有你的地址的自黏标签或是几张空白贺卡。他们会送礼物给你是基于 互惠 的社会性原理;因为这样你就会觉得要回馈一些东西。你也可能常常在电视购物频道上听过「快快快,数量有限!」这种台词,听到都没感觉了。不过这种台词是基于 罕见(scarcity) 原理,也就是你会自然地假设罕见的物品会比较值钱。业务员,行销人员以及广告主会运用这些手法以及其他技俩,影响人们进行某些行为。Cialdini出色的书中讨论了影响其他人行为的科学与实务背后的心理学理论。你得赶快在他们进行之前先看这本书!

[Helplessness.gif](http://www.amazon.com/exec/obidos/ASIN/071672328X/ref=nosim/ joelonsoftware/)

Helplessness: On Depression, Development, and Death
Martin EP 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这位先驱发现,对抗忧郁已知最有效的非药物疗法,就是鼓励人们小幅地逐渐控制他们的环境。


我想当个程式师

针对想学习程式设计的非程式读者的几本书。

[Code.jpg](http://www.amazon.com/exec/obidos/ASIN/0735611319/ref=nosim/ joelonsoftware/)

Code
Charles Petzold
编码的奥秘(简体版)
伍卫国,王宣政,孙燕妮译
机械工业出版社

这本书的对象绝对不是程式师,它是针对非程式师的读者,不管是想要成为程式师,或是想了解程式师所做的事,还是仅仅想探索一下位元与位元组的疯狂世界,通通都可以。你可以先看这本书作为开始,如果你觉得它很迷人,认为自己想成为程式师,接下来就去读(而且要彻底的精读)The C Programming Language。

[KandR.jpg](http://www.amazon.com/exec/obidos/ASIN/0131103628/ref=nosim/ joelonsoftware/)

The C Programming Language
Brian W. Kernighan and Dennis M. Ritchie
C语言程式设计(增订版)
蔡文能译
培生教育

程式设计教学上最误导的想法,就是必须由简单有趣图形化的东西开始,才能引诱人们来设计程式。有些人认为学程式设计最好的方法是由HTML(举个例子)开始,然后再学习如何剪贴javascript程式,再慢慢深入。另一个误解是应该由流行有需求的程式设计技术(如Java或Web资料库程式设计)开始。

好吧,这些人都错了。

基于各种太复杂无法在此详述的[fog0000000319.html 理由],我相信你必须由一个尽可能合理地接近机器的层级开始学程式设计。我认为这本俗称为K&R的书,正是每个想当程式师的人必须先学习的书籍。找一本来彻底的研读。如果你在研读过程中都很快乐,就可以当个程式师。如果你觉得这种老旧文字式的程式设计很无聊,或者发现指标让你发狂,相信我吧,你不会衷心喜欢程式设计的。如果你必须被引诱来设计程式,或者你并没有耐性找出这些疯狂星号的意义,去做别的事会比较快乐。我是说真的。不过如果你可以自己读完这整本书,就已经获得成为精英程式师所需的条件,同时也奠定要学习其他东西所需的厚实基础。

读者对自己最爱的书的讨论。有其他应该列在这里的书吗?把你的意见写在讨论区吧!

这些网页的内容为表达个人意见。
All contents Copyright © 1999-2006 by Joel Spolsky. All Rights Reserved.