推荐给程序员看的书籍

无痛软件管理类(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,这个列表我终于翻译完了,这完全出自个人得爱好,我觉得这是一个很棒得列表,里面得书确实值得好好研读一番。在翻译过程中,因为对一些英文文化背景得不了解,加上水平实在有限,会存在很多错误。我也理解了被骂得译著者得苦衷,其实他们大部分还是用心去翻译得,只不过有时候确实有些无可奈何得句子存在。不过还是特别鄙视那些看得出来是用翻译软件打稿得译书,作者的不负责任是对一本好书得侮辱。文中翻译不周之处希望各位海涵。
 

你可能感兴趣的:(推荐给程序员看的书籍)