本人算不上大神,也非计算机专业出身,本着一股热爱技术的精神,研究过各种计算机技术。对于知识的索取方式,比较习惯看书。当然,随着认识的加深,以及新技术的层出不穷,也常接触各种技术文档。早些时候阅读过很多不错的计算机书籍,对于计算机底层的深入认识很有帮助,这里整理记录下来,供感兴趣的人参考。
第一阶段,大脑对于计算机的认识应该是一张白纸,要看的其实还是专业课要学习的东西。主要有
1. C语言 - 计算机领域的大门,如果你开始就想往深处研究,C语言是逃不掉的,C语言是所有语言的开始
2. 数据结构与算法(最好是C/C++版本的,这样才能更好地理解数据结构的本质)
3. 操作系统 - 对操作系统内核有个大致的认识
4. 计算机组成原理 - 对计算的硬件结构有个大致的认识
5. 计算机网络(对七层模型应该有所了解)
6. 编译原理(对于程序的诞生及运行原理,得有个大致的认识)
第二阶段,去深入理解C语言的指针,推荐的书籍有
1. C和指针
2. C专家编程
3. C陷阱与缺陷
4. C++沉思录
其实,这是一套书,通过这些书,你可以清楚地认识到,C/C++的特征和缺陷。以及如何避免各种问题。
第三阶段,学习面向对象的编程方法,C++和Java可以一起学习。
关于C++的书:
1. C++ Primer/C++ Primer Plus可以当作工具书,因为实在是太厚了,查漏补缺
2. 深度探索C++对象模型 - 深入理解C++的对象是怎样从底层构造起来的,这里你需要跟java的对象对比起来思考,理解他们的差异和共同点
3. Effective C++改善程序与设计55个具体做法
4. More effective C++ - 跟上面一样,都是经典的书籍,可以借此了解C++的很多技巧与写法
5. C++ API设计 - C++版设计模式,学习编写规范的C++方言
6. C++ Templates - C++模板也需要深入的研究一下,理解其在编译时发挥的作用
7. 程序设计实践 - 编程规范系列的书,经典书
关于java的书,java在语言层面相对比较简单,但对于设计模式的追求是永无止境的,这也是为什么很多大型系统都是java写的。
1. 深入理解Java虚拟机 - java必读之一,理解jvm底层的原理,可以更好的理解Java,对于之后学习jvm系的语言也非常有帮助
2. Head first设计模式 - 设计模式需要多学习一下,并且最重要的是要将其应用到代码中,但也不是所有的设计模式都能用的到,但用到的时候,说明你对项目的架构领悟已经上升了一大层
3. Java核心技术 卷一卷二 也是Java领域不错的书籍,可以用作工具书
第四阶段,框架应用能力的提升,主要是Java方面
1. spring实战
2. spring微服务实战
3. springboot实战
一个系列的书,spring三剑客。其实,对于框架,可以自己去网上学习。多尝试多练习即可。微服务,spring和springboot大约是在18年的时候在Java领域兴起的,之前基本都是JavaSE(核心)+JavaEE(后端)+JavaME(移动)的时代,像ssh,ssm等各种框架层出不穷。虽然现在有时候也会使用,但基本都被springboot所取代。
当然,新技术也是会不断地被创造出来,谁知道下一个5年或10年会出现什么,来替换掉springboot呢?
就像最近,又提出一个领域驱动设计的概念,也是一种对Java项目构建的新认识。
JVM系语言,Scala还是有必要买本书研究研究的,像clojure,groovy等可以看官方文档。
1. Scala函数式编程 - 将scala编程范式的优秀书籍
2. 快学Scala - 用作scala参考书是个不错的选择
3. 第一行代码Android - 移动端学习必读,最新版本应该是Kotlin描述了
在这里顺便把前端的书也推荐了,前端也是一条很庞大的分支,但从语言来说,思想都是相通的。VUE,React等框架,可以参考在线教程。
1. JavaScript高级程序设计 - 红包书,经典书
2. 你不知道的JavaScript - 最新系列的经典书
第五阶段,以CPU为核心,深入理解计算组成原理。理解CPU的架构,从硬件层面理解程序的执行
1. 汇编语言 - 王爽版本的经典教材,用于入门汇编是个不错的选择
2. 深入理解计算机系统 - 理解底层的经典书籍
3. 现代X86汇编语言程序设计 - 指导你进行Windows平台编写X86汇编,对于理解各种指令集是很有帮助的
4. X86汇编语言从实模式到保护模式 - 绝版书,你会知道操作系统其实也是个软件而已
第六阶段,深入操作系统及其内核,如果可以,最好学习Linux,越早接触越好。为了更好的编程体验,最好抛弃掉Windows系统。
1. 深入理解LINUX内核 - 书较厚,可供查漏补缺,想深入研究那部分的时候,可以着重看
2. UNIX环境高级编程
3. UNIX网络编程 - 这两本能让你学会系统编程,以更好地利用好操作系统
4. UNIX编程艺术 - 经典书
5. 操作系统真象还原 - 从实践的角度,带你从零构建操作系统,这对于操作系统的认识,会有史诗级别的提升,当然我说的不是书本身。
6. 程序员的自我修养-链接装载与库 - 带你理解程序编译和执行的整个环节,让你知道进程的本质
第七阶段,更好地理解Windows。虽然不推荐Windows进行编程,但对于技术而言,Windows的技术也是需要攻克的。
Windows的技术也是比较多的,C/C++虽然仍然可以编写,但对于项目构建而言,已然成为过去。.NET与C#是现在的主流。
对于性能游戏而言,C++还是会被使用。当然,如果你想攻破所有Windows技术,你还需要研究vb,bat,power shell等技术。
1. windows核心编程 - 老书,但可以更清楚地理解windows系统及其内核
2. windows程序设计 - 使用C/C++进行win32 api的编程,也即Windows系统编程
3. C#高级编程 - 可作为C#工具书
第八阶段,理解图形化与并行计算技术
1. OpenGL编程指南 - 俗称红宝书,介绍OpenGL的核心概念,但你并不能借此设计出好看的作品,因为你还是需要建模加渲染方面的知识
2. CUDA编程 - cuda方面,目前还没有出现特别的经典书
以上就是我所推荐的一些书籍,可能并不一定适合你,当然我也只是推荐。技术阶段的排序也不是很合理,大概地参考下就行。