很多人问我这个问题,尤其是那些刚开启软件工程生涯的同事和朋友。
要成为一个更好的开发人员,我应该读哪些书?我真的需要读书吗?
这是一个很值得探讨的问题,而且也是我在成为软件工程师之时问了很多导师的一个问题。但问题是,很多人推荐的是不同主题的不同书籍。他们推荐的书在他们看来是伟大的,但没有人能告诉我,要想成为一个伟大的工程师,我应该阅读什么,哪些是重要的、是必读的书籍。
我从我的导师那儿学到了很多东西,并意识到,我仍然有很多东西需要学习,还有许多不同的书需要阅读。我决定每个月读一本专业领域(软件工程)的书。随着时间的积累,我总结出了我认为想要成为一个顶级开发人员必须阅读的书单。
事先声明——只是阅读这些书不会让你成为一个伟大的开发者。你还需要积累多年的工作经验,并应用这些书中的原则到现实实践中,并在现实世界中发展你解决问题的能力。
阅读这些书可以帮助你避免一些常见的陷阱和错误,一些开发人员早期经历的陷阱和犯过的错误。我多么希望在我刚进入软件领域的时候,就有人向我推荐这些书啊,并且我现在依然很庆幸自己发现并反复阅读了这些书!也许你已经在大学读计算机科学或工程课程的时候读到过其中的一些书。也许在那个时候,你觉得它们并不重要,但是我可以用我亲身经历来说明我使用和应用了许多来自于这些书的原则。
我还要指出的是,此书单并不详尽。每年都会有许多伟大的著作问世。这些只是对我和我的职业生涯影响最大的书籍。此外,这些书和使用什么语言无关,可以应用于任何软件语言。
好了,让我们开始介绍这些书吧!(请鼓掌)
(这些都是必不可少的,我将根据它们对我的影响大小从后往前介绍。)
12.《WorkingEffectivelywithLegacyCode》
我之所以喜欢这本书,是因为几乎所有的软件开发人员,在其职业生涯的某个时刻,往往会不得不支持和工作于遗留系统。在这本书中,MichaelFeathers提供了从开始到结束的策略,以便于更有效地工作于未经测试的遗留代码库。本书借鉴了Michael为其著名的ObjectMentor专题研讨会创作的材料:Michael用于指导的技术,以帮助开发人员,技术管理人员和测试人员掌控遗留系统。
11.《TheMythicalMan-Month》
本书是一本经典之作,但最近被修改和更正了。令人惊奇的是这本书仍然与软件产品开发密切相关。如果你从事软件的话,这本书是必读的。这本书最有价值的部分,我相信,是“plantothrowout”原型章节。尽管我们的目标通常是做一个更大,更好,更快,不管它是什么的东西,但是我们总会构建出一些不得不被废弃,需要重做的东西。这种情况我亲身经历过很多很多次。因此,关键是要plantothrowout(计划抛弃),这样你才能适应接下来的情况。如果你梦想第一个产品就ok,那么你就会有抛弃它们的风险,因为产品的改进和发展是不可避免的。计划抛弃也有助于通过设置合理的里程碑来达到进度目标。
10.《DesignPatterns》
如果你打算成为一名架构师或系统的设计人员,那么你很有可能会被要求阅读这本书。这是一本被誉为有史以来最伟大的有关于软件开发的书,详细讲述了许多不同的设计模式,这么多年来一直在帮助软件工程师避免和处理行业面临的常见问题。遵照这本书的策略可以助你打造更高品质,灵活和可维护的软件。传说中的“四人帮”就是这本书,因为它是由四个著名的作者共同编写的。
9.《ProgrammingPearls第二版》
这本书和这书单上的其他书籍略有不同。我想说这本书可以帮助一个人“像一个程序员一样思考”。《ProgrammingPearls》是先前发表在“CommunicationsoftheACM(美国计算机学会通讯)”的15篇专栏的一个纲要。这些专栏涵盖了广泛与编程相关的主题:从需求收集到性能优化。重点