英文版:《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多年的图书有力地证明了一个观点:计算机也许会变,但人不会变。
花点时间读一读这本经典之作是值得的,跟你埋头苦读上千页的技术资料比起来,它一定能给你带来更大的效益。
英文版:《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引擎,还是卑微的鞋子,设计的细微差别会渗入你能触摸到的每一个角落。“魔鬼藏在细节之中。”读过这本书之后,你将对这句话有一个全新的体会。如果设计一扇门不像我们当初想的那样不费吹灰之力,也许我们也该停下来想一想了:为什么我们设计不出完美的软件呢?
英文版:《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”。那篇文章很好地概括了这本书的内容,它也可以作为你“修炼”时候的便捷参考。
英文版:《Mastering Regular Expressions》
中文版:《精通正则表达式》
作者:Jeffrey E.F.Friedl
译者:余晟
出版社:电子工业出版社
出版日期:2012年7月
Jeff Atwood的推荐:UNIX因为其复杂、令人费解而臭名昭著。正则表达式与它同病相怜。
我应该算得上是“保持通俗易用”俱乐部的正式会员,但我要为正则表达式破一回小例。如果正则表达式书写得当的话,它们可以在字符串操作方面为你节省大把大把的时间。我还从来没碰到过一个正则表达式派不上用场的项目呢!
一旦你钻进正则表达式的世界,你可能会沉醉于它们惊人的力量和潜能。请记住,绝对的权力导致绝对的腐败。不过,它也绝对可以让你酷毙了!