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