如果你能回到过去,告诉自己在开发人员职业生涯的开始读一本书,你会读哪本书?

我希望这份清单是多样的,涵盖范围很广。

搜索:使用右上角的搜索框。要搜索当前问题的答案,使用inquestion:this。例如:

inquestion:this "Code Complete"

当前回答

虽然我同意上面的许多书都是必读的(实用程序员、神秘的人月、计算机编程艺术和SICP立刻映入我的脑海),但我想走一个稍微不同的方向,推荐Edsger Dijkstra的《编程规程》。尽管它已经有32年的历史了,但它对“可验证性设计”的强调仍然非常重要(即使“可验证性”意味着“证明”而不是“单元测试”)。

其他回答

虽然不是严格意义上的软件开发书籍,但我强烈推荐《Don’t Make me Think!》列入这个名单。

我认为代码完整将是这个问题中非常受欢迎的一个,对我来说,它纠正了我的许多坏习惯,并重新肯定了我的好实践。

对于我的Perl背景,我非常喜欢Damian Conway的Perl最佳实践。如果不使用风格和最佳实践,Perl可能是一种令人讨厌的语言,这就是我在阅读(有时编写)的脚本中看到的情况。

我喜欢Head First系列,它们非常好,当你没有心情阅读更严肃的书籍时,它们很容易阅读。

Alistair Cockburn的《敏捷软件开发:合作游戏》是一本优秀的书,虽然没有得到广泛的赞扬,但却充满了深刻的见解。

它有什么特别之处?好吧,显然每个人都听说过“敏捷”这个术语,而且现在似乎大多数人都是信徒。不管你信不信,敏捷运动存在的背后都有一些深刻的原则。这本书以精确、科学的方式揭示并阐明了这些原则。一些原则是(顺便说一下,这些是我的,不是Alistair的):

团队软件开发中最困难的事情是让每个人的大脑都有相同的理解。我们正在建造巨大的、精细的、复杂的系统,这些系统在有形世界中是看不见的。你越善于让更多的人分享更深入的理解,你的团队在软件开发中就越有效。这就是结对编程有意义的根本原因。大多数人对它不屑一顾(我一开始也这么认为),但有了这个原则,我强烈建议你再试一次。你最终得到了两个深刻理解你刚刚构建的子系统的人……没有多少其他方法可以如此快速地获得如此深入的信息传输。就像瓦肯人的心灵融合。 你并不总是需要用语言来快速表达深刻的理解。一个必然的结果是:太多的词,你就超过了听者/读者的能力,这意味着你试图实现的理解转换无法发生。考虑到孩子们通过“沉浸”和“吸收”来学习如何说语言。不仅仅是语言……他举了一个孩子在地板上玩火车的例子。走过来的是另一个从未见过火车的孩子……但通过观察其他孩子,他掌握了游戏的要点,并与他们一起玩。人与人之间经常发生这种事。这和关于太多单词的推论一起,帮助您了解在旧的“瀑布”时代,试图编写700页详细的需求规范是多么错误。

里面还有很多东西。我现在要闭嘴了,但是我强烈推荐这本书!

Brian W. Kernighan和P. J. Plauger的《软件工具》

它对我编写软件的方式产生了深远的影响。

除了它们在我书架上的排列顺序外,没有特别的顺序:

实用的程序员 福勒的rafacoring 有效地使用Feathers的遗留代码。这实际上是重构的一个伙伴卷。 Fowler提炼的UML。它的其他优点之一是简洁。 Steve Maguire编写的调试开发过程 设计模式(又名“四人组”)由Gamma等人