大学计算机系最努力的同学都是怎样学习的

上篇我是如何在一晚上拿到阿里巴巴offer一文分享给大家后,获得大家一致好评,都说学到了很多面试技巧。但这次我要说的是面试技巧只能让你提高获得面试资格的概率,最终能不能拿到offer还得看你的硬实力。我在准备10几天的时间下顺利通过面试,也许有人会说是运气,但运气为什么有的人有而有的人没?因为运气是留给有准备的人的。就算彩票中奖起码也得比大部分人多做一步,首先得去买张彩票。因此本篇我不讲速成论,而是让你扎扎实实打牢基础,然后等着运气降临。看过我的编程人生一文的同学应该知道里面我提到自己读了很多书,专业的非专业的都有。在这过程中我也踩了不少坑,好书读过,烂书也读过。当然话说回来,你不读也不知道它是好是烂,这是个悖论。这次我就结合自己的真实学习经验,并结合大学里的课来给大家分享那些年我读过的书。注意,本文提到的书不是网上随便找的书单,全部是自己亲自看过的。1.屠龙术为什么这节标题是屠龙术,因为我认为读这些书能让你了解计算机科学的本质,掌握屠龙之技。了解了本质,一切就变得容易了。以下书籍重要程度分先后。
1.汇编语言(王爽版)



没看错,就是汇编语言。为什么是汇编语言,因为我认为现在大家对这门古老的语言都不重视。这本书是我在大三上汇编语言这门课时买的。当时上课用的教材不是这本,因为个人感觉教材不太友好,在网上搜索后买了这本书。这本书不厚,由浅到深的介绍了汇编语言,重要的是还有实践代码。学完后会让你对汇编语言有一定的了解,不深,但是足够用了。我汇编语言课最后考了94分,这本书功不可没。很多人会问,汇编语言都淘汰了,学了有什么用,你看现在哪家公司招汇编语言开发?我想说是的,现在公司很少有用汇编语言的了,毕竟有了农耕机,谁还用牛耕地?但是,我要说的是,只有用牛耕过地,你才会更了解这片孕育万物的土地。学任何东西只有了解它的本质,你才能学的更快,学的更深,学的更好。而汇编语言就是能让你了解语言本质的东西,是所有高级语言的源。所以不管你是计算机科班出身还是半路出家,我都建议你去看看这本书。如果你本身就是计算机专业,那你上课时候一定要认真去学,为你的“专业性”打基础。如果你是中途转行或者经过培训上岗,我也建议你有空的时候去看看,能让你更了解计算机的本质,缩小和科班的差距。当然花了这么多篇幅介绍此书,我也不是让你成为汇编语言的高手,只是让你对这门语言有一定的认识。不会汇编语言不会影响你成为编程高手,但是一定成为不了大师。
2.深入理解计算机系统



这本书很多人应该都知道,是经典书。能让你对整个计算机硬件和软件体系有所了解,建议计算机从业者收藏,反复阅读,常读常新。如果是计算机专业学生,建议和计算机组成原理这门课搭配使用,可以出奇效。
3.现代操作系统



这本书是我大三上操作系统这门课时看的书,当时上课用的教材不是这本,是我在图书馆看到的。当时看后觉得讲的比较详细,就自己买了本当作教材使用了。这本书如书名,讲操作系统原理,计算机专业学生应该都会上这门课。建议大家上这门课时候都能认认真真上,尤其是考研的同学,考研会考里面的知识。为什么我建议认认真真上,因为这门课比较枯燥,内容也比较难,所以逃课率很高。我是为数不多从来不逃这门课的学生之一。
4.计算机网络



这本书是我大二上学期上计算机网络这门课时买的。同样学校教材也不是这本书,是自己在图书馆查资料时发现的。这本书讲的比较全面,可以提高对计算机网络系统的认识,同样建议准备考研的同学好好学这么课。
4.离散数学及其应用



这是大二下学期我们上离散数学课的教材,主要讲计算机中的数学知识。计算机学科本就是从数学发展出来的分支,因此数学对程序员的重要性不言而喻。写程序最重要的是逻辑性,学习这本书能系统性的提高逻辑推理能力,学的时候最好把每章后面的题做一下。
5.数据结构与算法分析



这是大一下学期上数据结构课时我搭配的一本书。同样上课教材不是这本,是我在图书馆发现的。讲数据结构的书很多,为什么选这本书?因为这本是用C语言来描述的,示例代码都是C语言。我认为学数据结构算法最合适的语言是C,用纯面向过程的语言去学习数据结构和算法才更能理解其本质。算法本质是对空间复杂度和时间复杂度的优化。空间上C语言没有面向对象的特性,声明变量后完全可以根据变量类型计算出程序总共消耗的内存,可以更准确的评估程序运行过程中到底消耗了多少内存。时间上C作为面向过程语言,可用函数库很少,通过自己写代码能让你清楚的了解程序运行时执行了多少指令,让你对你算法效率有更精确的评估。当然随着计算机CPU性能的提高,内存的不断增长,程序员对时间和空间的要求也没那么严格了。但在系统性能优化和虚拟机优化等难度较高领域对算法还是有严格的要求。虽然用Java、Python、JavaScrpit等语言介绍算法的书市面上很多,也能让你对算法有一定了解。但我认为通过这些书去学习算法,还是有隔靴搔痒的感觉,虽然你懂了,但是没有那么透彻,换种语言说不定也就写不出来了。而用C语言能让你更透彻的理解算法的本质,因此我建议有C语言基础的同学最好用这本书去学算法。尤其是计算机专业学生,因为大部分专业课教材里涉及到的代码都是用C语言写的。
6.数据库系统概念



这是大三下学期学数据库课时我搭配的一本书,同样不是上课教材,是在图书馆发现的。作为一名程序员,或多或少肯定会用到数据库,有的人只会简单的SQL语句或者熟练使用MySql、Oracle、SQLServer等软件就说自己懂数据库了。其实数据库是一套很完善的数据存储系统,SQL语句只是和用户交互的通道。不了解数据库系统的知识充其量只是个数据库软件熟练工。而通过看这本书,你可以系统的了解到数据库知识的全貌,学完后甚至可以自己去实现一个小型数据库,这样对别人说自己懂数据库时才更有自信。
7.C++程序设计语言



这本书是我们大一上C++课程时的教材,发的教材其实是英文版的,这里我给大家介绍中文版。毕竟是C++之父写的,比世面上其它C++书好太多。由浅入深,知识很全面,书上的代码也都很有代表性。如果把书上的代码都上机打一遍,C++绝对入门了。不知道是不是所有计算机专业都会把C++当作第一门语言课,因为C++相对其它语言来说,入门上手会相对比较难,可能会打消掉一部分同学的积极性。但学任何东西其实都有一个学习曲线,只要你沉下心去学,多花点时间,总会跨过那个曲线,后面学习过程就会变得很平滑。学C++也类似,建议大家不要知难而退,而是要迎难而上,翻过大山也许就能看到彩虹。这里我也提自己一个观点,我认为把C++当成编程语言的入门课其实是有好处的。因为只要你学会C++,其它面向对象的语言学起来都会很快,只要看一遍语法就能立马上手。毕竟难的都会了,简单的不更轻松吗?
8.编码:隐匿在计算机软硬件背后的语言



这本书是我研究生时看到的课外书,也推荐给大家。书很有趣,像讲故事一样把计算机的前世今生和重要知识点娓娓道来。如果想偷懒,不想读厚厚专业书的同学可以通过看这本书来了解计算机体系的整体脉络。
2.乘龙术介绍完可以屠龙的书,再来讲讲自己读过的一些比较好的书。这些书可以提高你的专业技能,让你的职业道路走的更扎实,更长远,所以我称为乘龙术。
1.C语言
《C程序设计语言》,机械工业出版社,作者BrianW.Kernighan/(美)DennisM.Ritchie。C语言之父写的,入门经典书籍,建议大家作为C语言入门的第一本书。
《CPrimerPlus》,人民邮电出版社,作者StephenPrata。可以作为C语言工具书,也可以作为入门。
《C和指针》深入了解指针,看完以后对指针不再害怕。
《C陷阱与缺陷》看完后可以避免C语言开发的一些坑。
2.Windows开发
《Windows程序设计(第5版珍藏版)》这是我在大二学C#时候看的一本书,里面的代码我全部在电脑上手打了一遍。这本书主要介绍Window系统桌面软件的开发,想了解和从事这方面开发的同学可以看看。看过这本书,你会对你电脑上用到的软件有一个更深的体会。窗口是怎么出来,菜单点击后是怎么处理的,动画是怎么绘制的,软件又是怎么和操作系统通信的,看完这本书你通通都会知道。
《Windows核心编程》如果想对Windows系统有更深的了解可以看看这本书,我当时在图书馆看到了这本书,讲的也挺不错。
3.Linux
《鸟哥的Linux私房菜》Linux入门书籍。我记得在大一下学期,有段时间自己痴迷安装各种版本的Linux系统,到最后虚拟机上把当时各种Linux发行版都装全了。
4.数据结构与算法
《编程之美》这本书我没有看完,但里面的讲的算法都很不错,想对算法有提高的同学这本书一定要看看。
5.Java:
《Java核心技术卷1》,《Java核心技术卷2》这两本书是在上Java课时看的,同样不是我们教材,在图书馆发现的。讲的很好,可以作为Java入门书籍。
《Java并发编程实战》讲Java并发库的一本书,这本书强烈推荐。自己看这本书的时间很晚,是研究生找工作时候看的。找工作时基本都会问到书里的知识点,看这本书可以在找工作时给你带来直接的价值。
《Java并发编程艺术》同样是讲Java并发编程的。Java并发编程实战相对来说全是干货,看起来可能比较晦涩。这本书可能看起来更通熟易懂些,但是没有Java并发编程实战全面,大家可以搭配着读。
6.Android
《第一行代码Android》Android开发入门书籍。因为我当时学Android时候这本书还没有,所以自己不是通过这本书入门的。但是后面看过,讲的不错,可以作为入门书籍之一。
《Android开发艺术探索》这本书强烈推荐。是从Android初级向中高级进阶的必看书籍,里面讲的知识点都很好。重要的是Android面试会问到很多这本书里面的知识点,找Android开发必看。
《Android系统源码代码情景分析》从源码分析Android系统的书。自己找工作时候反复看了很多遍,面试时候也问到了一些知识点,找Android开发的也可以看看。
7.JavaWeb
《深入JavaWeb技术内幕》从Android向后台转型过程中看的一本书。比较全面的介绍了JavaWeb知识,可以当作入门辅助书籍。
《Springinaction中文版》学习Spring时候看的书,主要介绍了官方文档的知识。讲的很全面,准确度也高。
《SpringMVC学习指南》SpringMVC入门书籍,可以快速上手SpringMVC。
《Maven实战》学JavaWeb离不开Maven,这本是Maven入门书籍,讲的很全面。
《大型网站技术架构》找工作时看的书,主要讲网站从小到大发展过程中技术架构的演进。看完以后你就知道为什么一个淘宝首页会有那么多程序员维护了,也能让你有理有据回怼对产品提出的“给我做一个淘宝,美团”的需求。
《大型分布式网站架构设计与实践》主要介绍大型网站建设过程中使用到的一些技术,可以作为技术参考书。
《大型网站系统与Java中间件开发实践》从中间件角度介绍大型网站的建设。
8.编码素质
《大话设计模式》大二上设计模式课时看的书。当时的教材晦涩枯燥,在图书馆闲逛时看到了这本书。这本书以讲故事的形式逐一介绍了23种设计模式,生动形象。还有代码示例,可以变学边实践,是入门设计模式的一本好书。
《程序员修炼之道:从小工到专家》大四时候看的书,可以学习书里提到的编码技巧。
《代码大全》大四时候看的书,同样可以提高自己的专业素质,构建专业的编码风格。
9.人文
《疯狂的程序员》大一时候看的一本小说。讲了一个程序员大学、工作、创业、以及爱情故事经历的励志书籍。我在手机上看完的,看的时候热血澎湃,让我在大一就对程序员这个职业有了一个初步的认识。