![de07d84fa9e32ca53ea220d358ad6137.png](https://i-blog.csdnimg.cn/blog_migrate/75ecf39156e207da9afa7c008279f12f.jpeg)
配图是我住所的办公桌,一个不到40平的单间,我每天下班和周末就在这里写文、写代码。
不久前,我写了一篇文章
二胖:和刻苦学习相比,选择一本好书更重要zhuanlan.zhihu.com![eba50cf07d1154c991d9a0e3c280c690.png](https://i-blog.csdnimg.cn/blog_migrate/cfbe47334337e777e14730027988aa9f.jpeg)
分享了一下我对读书的看法,在这篇文章下有很多朋友给我留言,让我推荐一下书单。
其实,网上有很多热心的前辈们分享过自己的书单,里面也不乏很多好书。
可是,当我们打开其中某些书来阅读的时候,又发现很难看下去。
是别人推荐的书不好吗?
我想不是的。
一种可能的原因是:
现阶段的你,还不适合看这本书。
其中有一位朋友私信我,提到了一本书:
《深入理解计算机系统》
他问我这本书怎么样,好不好。
他所提到的这本书就是在豆瓣上评分几乎满分的书。
![08599c3662c93750263699f392679a9d.png](https://i-blog.csdnimg.cn/blog_migrate/4ed978358c407d02a98c0fd75a74c5e5.jpeg)
其中第三版,评分高达9.9分,可以说是豆瓣上计算机相关书籍中评分最高的一本了。
毋庸置疑,这是一本再好不过的书。
也是我推荐的第一本书。
这本书讲的是什么?
它从你的计算机讲起,描述你的主机中有什么部件,你的主板上有什么零件,CPU、内存和硬盘之间怎么连接的。
它还描述了你写的程序是怎么从一个文本文件被编译、链接变成汇编码,又是怎么从汇编语言变成机器码,以及怎么被计算机执行的。
它还会讲到计算机网络、组成原理、进程、线程等等,从硬件讲到软件,从里讲到外。
它就像一张网,把我们整个计算机生涯中可能遇到的知识给组织起来了。
![1a28098bb647c4921e13cab91af431a5.png](https://i-blog.csdnimg.cn/blog_migrate/cc6a4a033be20ca803531be028aa4447.jpeg)
读了这本书我们有什么收获呢?
它能让我们明确我们在某一阶段欠缺什么知识。
这本书特别适合那些喜欢刨根问底的同学。
当你写完程序之后,如果你很想知道你写的代码怎么就能被计算机给执行了;
如果你不知道自己学了数据结构、操作系统等课程有什么用。
那么这本书非常适合你。
可是,这是一本对新手不友好的书。
![bc1bd17ff02d4abeaaf02016647df6d3.png](https://i-blog.csdnimg.cn/blog_migrate/3c6388e73a78119831cbddfccb235d17.jpeg)
怎么去理解呢?
本书是建立在你会使用C或者Java等高级编程语言的基础上编写的。
全书使用了大量的C程序作为例子。
所以,如果你还不会基础的C,那么这本书看起来就会比较吃力。
部分同学看到这里又觉得丧失了兴趣,因为你不会C,你可能要错过这本书了。
其实没必要着急,谁都是从不会到会学起来的。
我也是在不太会编程的时候开始看这本书的,也是慢慢去理解的。
我在大学二年级购买了这本书的第二版,去年又购买了本书第三版。
我一开始也看不懂,后来重复地翻开,断断续续看了好几年,每一次读都有新的感受。
虽然到现在我也还没看完。
这本书对得起它接近满分的评分。
![7dc5e1c4f7157fb2e32e132c6d25aea0.png](https://i-blog.csdnimg.cn/blog_migrate/327af65ee562c6c1c2a0f97add018e59.jpeg)
学习的过程是不能急的,特别是还在上大学的朋友,你们有大把连续的时间,这就是资本。
所以,如果真的是想把编程变成自己职业的人。
你需要一本这样的书。
彻头彻尾地学习计算机的原理后,你会变成一个能去设计程序的人。
而那种一上来就直接照葫芦画瓢、不求甚解、还想去编程的同学,最后多半从事重复性的工作。
随着时间一天天过去,这两种人的差距会越来越大。
![a1b057c61d0168146e7d707d21f0f574.png](https://i-blog.csdnimg.cn/blog_migrate/11d54cae4ec89da907311938bc488373.jpeg)
在看这本书之前,我想先推荐一门课。
哈佛大学的CS50。
这门课对新手是友好的。
这门课是上述那本书内容的精简版,简单而有趣,所以在看上面那本书之前,可以先看看这门课。
![a0050110d4d8f0ff52540504124f8263.png](https://i-blog.csdnimg.cn/blog_migrate/77553d057afa911229624f122d21644d.jpeg)
我很庆幸自己在大二就看了这门课,在第一堂课上,这位极具魅力的老师为了给大家讲解什么是二分查找,撕了他手中的这本书。
名校就是名校。
Always learn from the best!
这门课一共20集,一天看一集也就只需要20天。
所以,对于真正对计算科学感兴趣和将来要进入这个行业的初学者们。
为了以后能做一个设计程序的人,我们一定要学习计算机相关原理,否则真的很难走远。
这是一个学习编程5年的初学者给你的建议。
说了这么多,下面我们来看书单吧。
今天一共推荐两门课,三本书。
一种比较合理的学习顺序是:
1.哈佛大学的CS50
![a0050110d4d8f0ff52540504124f8263.png](https://i-blog.csdnimg.cn/blog_migrate/77553d057afa911229624f122d21644d.jpeg)
这门课只要是正常高中毕业的同学应该都能听懂,应该算是面向零基础的课程了。
课程地址:
哈佛大学公开课:计算机科学cs50_全20集_网易公开课open.163.com![47ec0c0ac1d0533c3d1d71fd7044d409.png](https://i-blog.csdnimg.cn/blog_migrate/1d343b28373430182bd102ee7fe4f5e4.jpeg)
2.《C Primer Plus》
![6f169177676ccc56944b8e503a0a81f7.png](https://i-blog.csdnimg.cn/blog_migrate/328a1758b45f9ce136d7349147cd1fd1.jpeg)
这本书是讲解C语言的,不知道大家发现没有,很多讲解计算机科学相关的书籍,如描述操作系统、计算机网络、数据库等学科的书,里面的例子几乎都是用C语言描述的。
虽说很多人认为C语言很古老,可是它还真的挺有用,毕竟我们的unix系统是用C实现的,贴近系统的编程语言,更适合系统编程。
![826989a6ff4ca029327af98beb020345.png](https://i-blog.csdnimg.cn/blog_migrate/a9191f700e1e85afb51f64e10026e5ea.jpeg)
所以,如果你有时间,我建议你看看这本书,它能让我们更好地理解计算机。并且,这是一本对新手友好的书,由浅入深。
3.《深入理解计算机系统(第三版)》
你都开始看C语言了,那么也就可以开始看这本圣书了,前文我已经对这本书有了基本介绍,在这里就不再赘述了。
4.《C++ Primer》
![59de73382d59f10c29100fb51d4eb3da.png](https://i-blog.csdnimg.cn/blog_migrate/79086460f0b70580c87e4f98274fd77c.jpeg)
既然都学了C语言,为什么不继续学一下C++呢?
我认为,C++是最能让我们理解什么是面向对象的编程语言。
和其他高级编程语言相比,如Java、Python,C++ 的语法更加严格,更贴近系统和底层。
![79f4989805e0783eedd8031d562d05b9.png](https://i-blog.csdnimg.cn/blog_migrate/f865fcc02b12dd2cc09fa9415cfa4715.jpeg)
C++中也使用到了一些它特有的东西,如指针,当然,这也让我们更容易出错。
但是,也能让我们印象更深刻。
这本书也是对初学者友好的,由浅入深。
我在工作中,写的最多的就是C++,我也是看这本书入门C++的。
C++真的挺有意思的。
5.邓俊辉《数据结构》
![e16e887c00ae9aa583b23b232b94702e.png](https://i-blog.csdnimg.cn/blog_migrate/7186e8c1038eae8f082a928051ccc955.jpeg)
学完C++基础之后,就可以看看这本数据结构了,这本书是由清华大学的邓俊辉教授编写。
想要成为一个能设计程序的人,数据结构是必学的。
在本书中,邓老师会给你讲解C++中一些模板的底层实现原理,如Vector模板的扩容原理,学完之后我们就能明白动态的数组是怎么创建的,它是如何巧妙地扩容来保证它的高可用的。
这本书还会讲解一些基本的数据结构,数组、链表、树、图,以及平衡二叉树、hash等原理。
当然也少不了基本的算法,如动态规划、贪心算法、基本排序算法。
当然,看这本书还有一个优点,就是有免费的,由邓俊辉老师亲自录制的课程。
在看书的同时,可以结合视频查缺补漏。
书上看不懂的内容,看一看视频就明白了。
![95403ac102b435bac3ac75b621de4b1a.png](https://i-blog.csdnimg.cn/blog_migrate/9df4af00bb2918ad4799f16544310b9c.jpeg)
这本书和对应视频我都学过了,二胖建议你看这本书之前要了解基本的C++编程,并对计算机有一定的了解。
对新手是非友好的。
课程地址:
数据结构上:
http://www.xuetangx.com/courses/search?query=%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84&qt=1&page=1
数据结构下:
http://www.xuetangx.com/courses/course-v1:TsinghuaX+30240184_2X+sp/about
(一个在17年校招中拿到10家名企offer的同学悄悄告诉大家),这本书不仅能让你学到不少知识,还能让你在计算机招聘的面试中相对容易获得offer,因为很多面试题和这本书脱不了干系,加油吧。
![2748b2f86689fdb496b6b9e4f9480fbb.png](https://i-blog.csdnimg.cn/blog_migrate/3f1e896bc9ac854ae9622098f14468df.jpeg)
以上这两门课和三本书就是今天二胖推荐给大家的干货。
不必完全按照上面的排列顺序去看,因为要完全看完一本书或一门课再去看下一门是很有难度的。
可以这样,先看完CS50,然后开始看《C Primer Plus》,有了C语言的基础之后就可以开始学《深入理解计算机系统》,一段时间后再上手《C++ Primer》,了解C++之后就可以看《数据结构》了。
写在最后:
你们要的Python书单我已写好,点击下方链接即可查看:
二胖:Python学习资料中的战斗机,早看早牛逼zhuanlan.zhihu.com![c7bd45cc982651aad1894ac3aba10bf8.png](https://i-blog.csdnimg.cn/blog_migrate/4935964805db8b1e3576147c2e6c0bb2.jpeg)
除了本文,以下文章也很有意思哦,一篇上了知乎日报,一篇被编辑收录:
二胖:这可能是我见过最好的编程指南了!
二胖:开源一段代码-微信好友分析
![68b8cae0be2e49c38320841a527af064.png](https://i-blog.csdnimg.cn/blog_migrate/3fa4af32bef463f809891b5c148a1554.jpeg)