大咖推荐!程序员必看的七本书(附下载链接)
全文共3184字,预计学习时长6分钟
图源:Ehud Neuhaus\Unsplash
我喜欢创造东西,所以先学习了编程(当然也可能是因为我有点太喜欢电脑了)。或许有很多人和我一样。
从某些方面来看,计算机编程是人类创造力的最终实践。我曾经担任过青年志愿顾问,那时我们将创造力定义为“从无到有”的过程。
这就是程序员的工作:推动“从无到有”的过程。
从一个空白的文本编辑器开始,程序员可以创造出自动驾驶汽车、互联网和超现实VR。
作为一名程序员,想要锤炼编程水平绝非易事,但这个过程可以是趣味盎然的。
你以为学了几种编程语言之后,学习之路就已经走到了尽头,但事实上一切才刚刚开始。
工具在手,打遍天下无敌手,接下来我们需要思考的就是:如何运用它们。熟练掌握一种语言自然有所裨益,但关键还在于如何使用。
如果你擅长解决难题,也很有耐心,那么阅读以下书籍将帮助你从一名普通码农变成一名编程专家。
注意:本文中所有书本封面图像所有权均属原作者所有。
1、《编码:隐匿在计算机软硬件背后的语言》(Code:The Hidden Language of Computer Hardware and Software)
作者:Charles Petzold
出版社:微软出版社
本书并未教读者如何编程,也未分享在技术行业找到工作的技巧。
但这本书却是走向职业程序员的第一步。许多程序员常常因为编程痛苦挣扎,这是因为他们缺少对技术的必要深入认知。本书解决的就是这个问题。
“计算机处理器做的往往是一些简单到近乎愚蠢的事——将一个字节从内存转移到寄存器,给一个字节加上另一个字节,将结果返回到内存。这个过程最有意义的地方在于它极快的速度。用 RobertNoyce的话来说:‘如果你理解了纳秒,那么从概念上来说,计算机操作就非常简单了。’”
就算读者已经接触了很久的编程,仍然可以从本书中学到一些新东西,最起码也可以从新角度看待某些旧事物。
这是任何技术行业的起点,也是成为高级程序员必不可少的一步。
2、《程序员修炼之道》(ThePragmatic Programmer)
作者:Andrew Hunt, DaveThomas
出版社:Addison-WesleyProfessional
版本:20周年纪念版;第2版
在本书中,两位作者为读者分享了一系列提高编程输出能力的实用技巧。
这些技巧主要围绕一个原则展开——编程的核心在于追求协作。如果你立志要成为一名软件工程师,或任何种类的程序员,那么你接触的大多数代码往往是别人写的。本书就旨在引导读者如何在此类环境中工作。
书中的技巧都非常实用,通过实践来学习效果最佳。读者阅读时可以放慢速度,下次写代码时可以回过头来想想书中的建议。这不是一次性的阅读,而是通过不断实践获得真知的过程。
以下是一些例子:
建议11:避免重复代码
建议30:没有人能写出完美的软件
建议44:成功的代码不是靠运气的
建议50:不要使用你不懂的向导代码
建议70:记得给你的成果署名
对任何从事与代码相关工作的人来说,本书提出的建议都珍贵异常,每位程序员都应当对其进行阅读。
3、《算法导论》(Introductionto Algorithms)
作者:Thomas H.Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
出版社:麻省理工学院出版社
版本:第3版
已经拿到计算机科学学士学位的读者或许知道这本书,甚至已经做过了一些练习。但如果你还没有,请仔细阅读下面的内容。
在没有老师的情况下,读这样一本书可能会让人望而生畏,但这也有好处,那就是你可以慢慢读。对于任何认真对待自身职业发展的程序员来说,花再长时间阅读本书中有关基本数据结构和算法的知识都是有价值的。
当然,即使记不住QuickSort的时间复杂性,或者根本不知道在不去Stack Overflow复制或者不使用内置库的情况下该如何写出DFS代码,你仍然可以勉强当几年的软件工程师。
但是,认为数据结构和算法不必要的这种概念已经过时了。程序员正是用数据结构和算法来解决问题的,它们是现代软件工程师的饭碗。
如果不熟悉本书(或者其他你所选择的算法书)的内容,无论是程序员、软件工程师,还是计算机科学家,都很难继续向前发展。
4、计算机程序设计艺术(第1卷:基本算法)(The Art of ComputerProgramming: Volume 1Fundamental Algorithms)
作者:Donald E.Knuth
出版社:Addison-WesleyProfessional
和前面几本书一样,阅读《计算机编程的艺术》也是一项艰巨的任务,很少有人能够坚持不懈地将它从头看到尾,能够仔细阅读前几章中所有数学运算的读者更是寥寥无几。
虽然并未通读这系列书,但我仍然向大家强烈推荐这本著作。这本书有自己的问题,主要是因为作者Knuth提出的MIX语言往往很难被现代读者接受。但如果跨过这一道坎,你会发现这本书对基本算法和数据结构提供了深入独到的精彩见解。
此书对读者的智力和毅力提出了双重挑战,但也蕴含着巨大的信息财富。
比尔·盖茨都说,如果你能读完这本书,应该给他寄一份简历。这够有诱惑力了吧?
5、程序员面试金典 (Cracking the Coding Interview)
作者:GayleLaakmann McDowell
版本:第6版
作者本人出版
你是否想成为一名软件工程师?即使不想,这本书也值得一读。
虽然有关算法和数据结构的教科书是必读书目,但这些书其实很少、甚至并未提供实践练习。前面提到的两本书在每次介绍概念时都会提供许多练习,但要注意的是:你必须始终清楚应该用什么工具。
在实际操作中,想解决一个软件问题,并没有人会告诉你该用哪种数据结构、算法或技术。
本书先介绍了基本的数据结构和算法(顺便提示一下,这本书的内容并不适合初学者),并在后面额外添加了两个章节,分别列出了中等难度和高级难度的问题。
这些问题随机排列,读者需要努力找出最好的解决方案。如果在阅读前面章节的时候,你已经开始留心这些问题,那么在解决过程中,当你需要选择正确的数据结构或者算法时,你往往能想出与众不同的解决模式和解题线索。
本书能让读者更游刃有余地解决计算机编程问题,所以即使你在近期没有面试的打算,本书也值得一读。
6、人月神话 (The MythicalMan-Month)
作者:Frederick P.Brooks Jr.
出版社:Addison-WesleyProfessional.
版本:第2版
这是一本具有历史性意义的软件工程类书籍,是软件项目管理的必读书目。
如果要与一些工程师进行团队合作,本书中提出的一些概念将有利于扩展你的思维,并提醒你在开发软件时哪些是有效的,哪些是无效的。
这本书的核心信息在于,软件工程并不同于其他那些人力和时间可以互为替代的学科。作者指出,如果一定要说,那么在软件工程领域,人力和时间是完全不可以互换的。“好的烹饪是需要时间的。如果你等上菜等了很久,那都是为了你能享受到更好的服务和佳肴。”作者在第二章的副标题如是引用。
本书及许多其他有关软件工程实践的文章都有助于避免程序员掉入软件工程中的陷阱,也有助于程序员正确认识自己在团队中的角色,甚至是在整个科技行业中的角色。
总之本书值得阅读,也值得巧妙地推荐给你的经理阅读。
7、《算法之美》(Algorithms to LiveBy: The Computer Science of Human Decisions)
作者:BrianChristian, Tom Griffiths
出版社:Henry Holt and Co.
本文要推荐的最后一本书并不完全与写代码有关,而更多的是在研究从某些算法设计中衍生出来的问题解决技术(或许你已经遇到过这些问题,因为你看到了最后)。
作者在人类心理学和计算机科学之间建立起了绝妙的联系,将一些精心挑选的算法的原理融入了日常生活中的问题。
除了在电脑上写代码,程序员也经常怀疑自己所学的概念究竟有多适用于生活。幸运的是,本书为此提供了答案——两位作者将通用算法应用于非计算机科学问题,并将答案量化成了日常琐碎。
学习算法和数据结构,一方面当然是为了写出更好的代码,另一方面也是为了如何跳脱出文本编辑器而更好地运用这些知识,这会让学习变得更为有趣。
看到这里,是不是巨心动巨想要?
小芯福利时间到~
历经千辛万苦,九九八十一难,小芯终于将这七本书的电子原版凑齐,给大家安排上啦。(是不是很棒棒?快夸我快夸我)
想要的小伙伴可以关注微信公众号:读芯术,微信公众号后台回复“20191118”,就可以免费获得全部电子书啦~(惊不惊喜?意不意外?记得是微信公众号后台回复哦~)
集齐七本书,接下来大家就可以召唤神龙,迈上大神的阶梯啦。加油!米娜桑!
留言点赞关注
我们一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”
如转载,请后台留言,遵守转载规范