全文共4614字,预计学习时长14分钟 来源:Pexels 若想成为一名优秀的软件工程师,在努力写代码的同时,"读代码"同样至关重要。 在当代社会,人们的日常生活因各种各样的新奇玩意儿而变得丰富多彩,比如播客、视频以及博客等等。尽管如此,仍然有许多人会选择捧读一本好书。笔者作为一名资深"书虫",也已经涉猎过许多技术类书籍,例如软件工程。至今,笔者仍然在试图通过阅读以求新知。 软件工程领域的发展日新月异,今天的热门可能不久后就沦为明日黄花,因此要在该领域寻得一本好书,实为不易。尤其是如果要找一本与某一特定编程语言相关的书目,则更为艰难。 然而,在该领域也有一些书籍历久弥新,比如那些探讨元主题、设计模式或者一般思维模式的软件工程类书籍。 在下文笔者列出的书单中,就包括目前最热门、最畅销的软件工程类书籍。下文所推荐的书目非常经典,至今依旧光彩熠熠,并且颇受高级软件工程师们的推崇,因此常将其推荐给初级开发人员。在当今这个时代,时间的确很宝贵,尤其是对软件工程师而言。但是,如果真的能花上些许时间拜读一下这些书目,则无论对于自身的提高还是未来的职业生涯而言,必将有所裨益。在这里有必要说明一下,下文书目的排列顺序完全随机,与其重要性的大小无关,因为每本书均有其侧重且值得被推荐。 注意:下文出现的所有链接皆非附属链接。 《代码大全(第二版)》(Code Complete) 《代码大全(第二版):软件构建之实践指南》(Code Complete: a Practical Handbook of Software Construction, 2ndEdition)出自著名IT畅销书作者史蒂夫·迈克康奈尔(SteveMcConnell)之手,完全称得上是"有生之年"系列图书之一,因为几乎每一个程序员都曾拜读过此书。 此书对软件构建进行了全面分析,逻辑严密,因此在业界颇受好评。在本书中,涉及的话题主要涵盖软件设计、编码、调试以及测试等。 因此,对于有着一至三年专业编程经验的工程师而言,这本书尤其值得阅读,因为他们会受益良多。但是笔者认为,即使是软件编程的初学者也不妨试读一下,因为他们可以从这本书中获得更多的自信,以面对未来的软件编程工作。 指点迷津:软件开发人员必须要有能力处理复杂事物,编写易于维护的代码,并且手不释卷——这不仅仅是为了自己,也是为了他人。 《程序员面试金典》(Cracking the Coding Interview) 无论参加编程面试是出于个人兴趣还是职业需求,《程序员面试金典:189道知名科技公司编程面试真题及解答》(Cracking the Coding Interview: 189 Programming Questions &Solution)都是一本非常值得推荐的编程类书籍。本书作者盖尔·拉克曼·麦克道尔(GayleLaakmann McDowell)是一位经验丰富的软件工程师,不仅亲身参与过编程面试,而且还曾担任过面试官。在这本书中,她帮助面试者寻找问题背后的细枝末节,并将问题进行拆分,从而更好地理解各个概念。 此外,作者还在书中讲解了189道知名企业的编程面试真题及答案,为即将参加编程面试的人们助力。 《代码整洁之道》(Clean Code) "Bob大叔"罗伯特·马丁(RobertC. Martin)的著作《代码整洁之道:整洁代码的敏捷实践方法》(Clean Code: A Handbook of Agile Software Craftsmanship),是全世界最受追捧的编程书目之一。作者希望通过此书来教授软件工程师如何编写整洁的代码。在此书中,作者通过许多实例讲解来告诉人们如何重构现有代码,从而使其更加易于阅读与维护。但值得注意的是,本书主要针对的是Java编程语言。虽然本书所涉及的某些模式与方法也同样适用于一般编程或其它编程语言,但其主要受众仍然是Java程序员。 另外同样值得注意的一点是,由于此书著于2009年,且受限于现有的工具与IDE,因此书中某些内容已经过时,例如代码格式部分。但总体来说,这本书仍然值得拜读。 《重构(第二版)》(Refactoring) 《重构(第二版):改善既有代码的设计》(Refactoring: Improving the Design of Existing Code, 2nd Edition)的作者是世界软件开发大师马丁·福勒(Martin Fowler),正如在20前的第一版中一样,在这第二版中作者也首先向公众阐述了何为"重构"。在此书中,作者总结了人们可能会有的疑问,并一一予以解答,具体如下: · 为什么应该重构代码? · 如何辨别哪些代码需要重构? · 如何成功重构代码? 在阅读此书后,人们将能更好地理解重构的过程及其一般原则,并将其快速应用于自己的代码库。另外,此书的读者可能还会额外获赠一个灵敏的"狗鼻子",当自己的队友写的代码亟需重构时,这个鼻子就能立马闻出来并提醒对方。 《Head First设计模式》(Head First Design Patterns) 编程著作《Head First设计模式:重视大脑的学习指南》(Head First Design Patterns: A Brain-Friendly Guide)由埃里克·弗里曼(Eric Freeman)、伯特·贝茨(Bert Bates)、凯西·塞拉(Kathy Sierra)与伊丽莎白·罗伯森(Elisabeth Robson)合作完成,主要教授人们设计模式与方法,以供其他开发人员用于创建可重复使用且灵活度高的功能性软件。在该书中,有许多高质量的可视化图表,通过这些图表,读者们能够更加容易地学习新概念。 对于想要了解工厂、单例或者依赖注入等模式的人而言,这本书绝对是不二选择。由于本书所使用的案例均由Java写成,因此读者最好能对该语言或其它面向对象的编程语言有所了解。 《企业应用架构模式》(Patterns of Enterprise Application Architecture) 《企业应用架构模式》是马丁·福勒的又一力作,主要旨在探讨企业应用发展的实践。在本书中,前一部分主要是关于如何开发企业应用的教程;之后,作者又提供了40多种模式,用以解决在创建企业应用过程中可能会遇到的常见问题。此外,书中还包含许多UML图以及Java代码或C#代码示例。 通过阅读此书,人们将能够对企业应用进行分层,获悉组织业务逻辑的主要方法,使用MVC模式来组织Web应用,并且在多事务运行时处理并发数据。 然而,这本书正逐渐淘汰于时代无情的洪流中,因此许多现代术语都未及时更新,例如REST、云端、JSON等。尽管如此,此书仍然不啻为一本好书,但在真正阅读时要注意取其所长,弃其所短。 《修改代码的艺术》(Working Effectively with Legacy Code) 《修改代码的艺术》是世界级计算机专家迈克尔·费瑟(Michael Feathers)的经典之作,作者在书中提供了许多策略用于处理未经测试的大型遗留代码库。在这时,或许许多人都会心生疑惑:已经到2020年了,人们一直都有整洁且易于维护的代码和微服务,难道处理遗留代码还算得上什么大问题吗?实际上,事情绝非如此简单。目前对于大部分公司而言,遗留代码问题仍然是一大挑战。 通过阅读此书,人们将能够理解修改软件的一般机制,例如添加特性、修正缺陷、优化性能、改进设计等。除此之外,读者也能学会如何准备遗留代码的测试,以及如何确定哪些代码需要修改。 在本书中,作者还提供了包含Java、C++、C和C#的示例,并详细介绍了如何处理非面向对象的遗留代码。 《代码整洁之道:程序员的职业素养》 (The Clean Coder)《代码整洁之道:程序员的职业素养》(The Clean Coder: A Code of Conduct for Professional Programmers)是"Bob大叔"的另一著作,书中阐述了软件工艺的技术、原理、工具和实践,并且提供了一些关于估算、编码、重构与测试的实用建议。 在阅读本书后,程序员们将能够更好地处理矛盾,缓解紧迫的日程表,以及应对不近人情的上司。此外,他们也能够学会如何高效管理时间,长期应对工作压力,以及避免身体或精神上的崩溃。最后,读者也能从这本书中学会如何做到流畅编码,以及如何在开发人员与团队之间培养一种合作共赢的良好氛围。 虽然此书在业界声誉颇高,但笔者自觉其并非金科玉律。例如,书中包含许多未经证实的事件与假定情况,并且常会由此得出结论称,软件开发人员最终要为自己的工作全权负责。为此,书中竟然提出了如下建议:开发人员编写的代码如果出了问题,则由该开发人员对因此错误而受损的公司进行经济补偿。 因此笔者建议,阅读此书时注意仔细甄别,披沙拣金。 《算法导论(第三版)》(Introduction to Algorithms) 《算法导论(第三版)》由托马斯·科尔曼(Thomas H. Cormen)、查尔斯·雷瑟尔森(Charles E.Leiserson)、罗纳德·李维斯特(Ronald L. Rivest)与克利福德·斯坦(Clifford Stein)合作编撰而成,被誉为"计算机算法的圣经",可用于指导各种算法。《算法导论》一书所涵盖的内容包罗万象,并且受众广泛,无论是"菜鸟"还是"老司机"皆可入坑。此外,书中措辞言简意赅,涵盖主题丰富多样。然而,此书内容偏复杂,因此不易消化。 具体来说,书中涉及的主题包括数据结构、图论、计算几何学、快速算法,以及用于处理复杂任务的多项式时间算法等等。虽然书中还包含一些伪代码示例,但笔者认为,它依旧是一本经典的理论著作。 《程序员修炼之道》(The Pragmatic Programmer) 《程序员修炼之道》曾是笔者读过的最重要的书目之一。无论是在技术上还是专业领域,该书都热心地建言献策,最后不仅协助笔者完成了众多项目,而且也让笔者自身得以进步与发展。 即使是在现今2020年,该书也仍旧与时俱进,尤其是最新修订的"20周年典藏版"。书中,作者还谈论了诸多话题以探讨一个当代程序员应具备哪些素质,比如个人责任感、专业技能以及职业发展。 通过阅读此书,人们将能够获知持续学习的定义及其重要性,编写灵活、动态、可适应的代码,解决并发代码问题,防范安全漏洞,以及进行有效的测试等等。 因此,如果必须推荐一本书,那么《程序员修炼之道》必定是笔者的首选。 综上:在全世界程序员的圈子内,上述书单中的作品最受追捧。如若要为读者从中挑选一本,那么毋庸置疑,一定是安德鲁·亨特(Andrew Hunt)执笔的《程序员修炼之道》。