推荐给程序员的七本书
代码:计算机硬件和软件的隐藏语言
这本书不会教你如何编程,也不会教你如何在科技行业找到工作。
另一方面,这是迈向这一旅程的第一步。很多时候我看到人们在编程方面苦苦挣扎,因为他们缺乏必要的技术精通来完成工作。这本书解决了这个问题。
“计算机处理器做的事情非常简单——它将一个字节从内存移到寄存器,将一个字节添加到另一个字节,将结果移回内存。完成任何实质性工作的唯一原因是这些操作发生得非常快。引用 Robert Noyce 的话说,'在你适应纳秒之后,计算机操作在概念上就相当简单了。'”
即使您已经使用计算机很长时间了,Petzold 也有可能教您一些新东西,或者至少从您以前从未考虑过的角度向您展示一些东西。
这是所有技术的切入点,并且有必要完成您作为一名有成就的程序员的教育。
务实的程序员
在本书中,Andrew Hunt 和 Dave Thomas 为读者提供了一系列提高编程输出的技巧。
这些技巧主要围绕这样一个原则,即编程的核心是协作追求。如果您渴望成为任何类型的软件工程师或程序员,那么您将使用的大部分代码都不是您的。Hunt 和 Thomas 的技巧指导您在这样的环境中工作。
他们的技巧很实用,最好通过实践来学习。当你拿起这本书时,试着慢慢来,并在下次编程时反思作者的建议。这不是一次性阅读,而是关于良好实践的研讨会。
一些例子:
复制
Tip 11: DRY — Don’t Repeat Yourself
Tip 30: You Can’t Write Perfect Software
Tip 44: Don’t Program by Coincidence
Tip 50: Don’t Use Wizard Code You Don’t Understand
Tip 70: Sign Your Work
“实用程序员”为任何使用代码的人提供了宝贵的建议,它应该出现在每个程序员的库中。
算法导论
如果您拥有计算机科学学士学位,您可能已经知道这一点。你可能也经历过一些练习。如果你还没有,请忍受我。
在没有导师的情况下阅读这样的书似乎令人生畏,但不再上学的好处是你可以慢慢来。不管你花多长时间,本书中介绍的基本数据结构和算法对于任何认真对待自己职业发展的程序员来说都是无价的。
当然,作为一名软件工程师,您可以在不记得 QuickSort 的时间复杂度的情况下生存几年。您可以在无法编写 DFS 代码的情况下生存,而无需从 Stack Overflow 粘贴它或使用内置库。
但是过去学校不需要数据结构和算法的概念是幼稚的。它们是程序员解决问题的工具。它们是现代软件工程师的基础。
如果您不熟悉本书(或您选择的算法书)的内容,您就不可能希望成为程序员、软件工程师或计算机科学家。
计算机编程艺术:第 1 卷
与此列表中的前一个条目非常相似,通过“计算机编程艺术”是一项艰巨的任务。很少有人能够始终如一地通读整本书。在前几章中花时间通读所有数学知识的人更少。
我还没有读完整本书,但我仍然不能再推荐它了。它有它的问题,主要是关于 Knuth 的 MIX 语言对现代观众的支持程度,但如果你超越了这一点,他提供了对基本算法和数据结构的难以置信的洞察力和深度。
这本书是对智力和毅力的真正挑战,但它也是大量信息的来源。
比尔盖茨自己说过,如果你读完这本书,你应该给他寄一份简历。值得一试,对吧?
破解编码面试
希望找到一份软件工程师的工作?不管你的答案是什么,这本书还是值得的。
虽然算法和数据结构教科书是必不可少的读物,但它们几乎没有提供实际实践。我知道我在这本书之前列出的两本书都有针对它们介绍的每个概念的无数练习,但有一个问题:你总是知道使用什么工具。
在现实世界中,软件问题不会提示使用什么数据结构、算法或技术。
在解释了基本的数据结构和算法之后(顺便说一句,不要直接跳到这本书),作者在书的末尾增加了两个部分,列出了中等和困难难度的问题。
这些问题以随机顺序出现,并挑战读者找出解决它们的最佳方法。如果您在阅读前面的章节时一直在注意,那么在选择正确的数据结构或算法来解决问题时,您会发现不同的模式和提示。
本书使您成为计算机编程背景下更好的问题解决者,因此即使您不打算很快进行面试,这本书也是必不可少的。
神话般的人月
这本关于软件工程的历史书籍取代了关于管理软件项目的必读书籍。
如果您计划与工程师团队合作,本书中介绍的概念将拓宽您的视野,了解在开发软件的背景下哪些有效,哪些无效。
核心信息是软件工程不能直接与人力与时间直接互换的其他学科相比较。如果有的话,布鲁克斯声称情况正好相反。“好的烹饪需要时间。如果让你等待,那是为了更好地为你服务,取悦你,”布鲁克斯在本书第二章的副标题中引用。
这篇文章和其他十多篇关于软件工程实践的文章有助于让任何程序员了解该学科中的陷阱。本书旨在确保您不会误解自己作为团队、组织和整个技术行业的一部分所扮演的角色。这是一本很棒的书,可以阅读然后巧妙地推荐给您的经理。
生活算法
此列表中的最后一本书并不完全与编写代码相关,而是与检查源自某些算法设计的问题解决技术有关(通过将列表深入列出,您可能已经遇到过)。
这本书的作者在人类心理学和计算机科学之间建立了绝妙的联系,将一些精心挑选的算法背后的基本原理与日常问题联系起来。
程序员有时会怀疑他们正在学习的概念在计算机上编写代码之外的适用性并不罕见。幸运的是,Christian 和 Griffiths 对此提供了答案,将通用算法应用于非计算机科学问题,并对日常问题的答案进行量化。
虽然学习使用算法和数据结构来编写更好的代码是一项值得的追求,但学习如何在文本编辑器之外的上下文中使用它们会使研究它们变得更加有趣。