从技术小白到编程大神的技术书籍推荐

本人算不上大神,也非计算机专业出身,本着一股热爱技术的精神,研究过各种计算机技术。对于知识的索取方式,比较习惯看书。当然,随着认识的加深,以及新技术的层出不穷,也常接触各种技术文档。早些时候阅读过很多不错的计算机书籍,对于计算机底层的深入认识很有帮助,这里整理记录下来,供感兴趣的人参考。

第一阶段,大脑对于计算机的认识应该是一张白纸,要看的其实还是专业课要学习的东西。主要有

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方面,目前还没有出现特别的经典书

以上就是我所推荐的一些书籍,可能并不一定适合你,当然我也只是推荐。技术阶段的排序也不是很合理,大概地参考下就行。

在软件设计里到处都是模式,框架。有次朋友问什么是模式?我也在学习中,就我的学习经验,给出以下小结。(注意:个人观点,仅供参考,欢迎指正。)??1.什么是模式???模式,即pattern。其实就是解决某一类问题的方法论。你把解决某类问题的方法总结归纳到理论高度,那就是模式。??Alexander给出的经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。??模式有不同的领域,建筑领域有建筑模式,软件设计领域也有设计模式。当一个领域逐渐成熟的时候,自然会出现很多模式。??什么是框架???框架,即framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。??2.为什么要用模式???因为模式是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出一个优良的设计方案,达到事半功倍的效果。而且会得到解决问题的最佳办法。??为什么要用框架???因为软件系统发展到今天已经很复杂了,特别是服务器端软件,设计到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。??框架一般处在低层应用平台(如J2EE)和高层业务逻辑之间的中间层。??软件为什么要分层???为了实现“高内聚、低耦合”。把问题划分开来各个解决,易于控制,易于延展,易于分配资源…总之好处很多啦:)。??3.以下所述主要是JAVA,J2EE方面的模式和框架:??常见的设计模式有什么???首先,你要了解的是GOF的《设计模式--可复用面向对象软件的基础》一(这个可以说是程序员必备的了),注意:GOF不是一个人,而是指四个人。它的原意是Gangs Of Four,就是“四人帮”,就是指此的四个作者:Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides。这本讲了23种主要的模式,包括:抽象工厂、适配器、外观模式等。??还有其他的很多模式,估计有100多种。??软件设计模式太多,就我的理解简单说一下最常见的MVC模式。??MVC模式是1996年由Buschmann提出的:??模型(Model):就是封装数据和所有基于对这些数据的操作。??视图(View):就是封装的是对数据显示,即用户界面。??控制器(Control):就是封装外界作用于模型的操作和对数据流向的控制等。??另外:??RUP(Rational Unified Process)软件统一过程,XP(Extreme Programming)极端编程,这些通常被叫做“过程方法”,是一种软件项目实施过程的方法论,它是针对软件项目的实施过程提出的方法策略。也是另一个角度的模式。??4.常见的JAVA框架有什么???WAF:??全称:WEB APPLICATION FRAMEWORK??主要应用方面:EJB层,(WEB层也有,但是比较弱)。??主要应用技术:EJB等??出处:http://java.sun.com/blueprints/code/index.html??简述:这是SUN在展示J2EE平台时所用的例子PetStore(宠物商店系统)里面的框架。是SUN蓝皮例子程序中提出的应用框架。它实现了 MVC和其他良好的设计模式。SUN的网站上有技术资料,最好下载PetStore来研究,WEBLOGIC里自带此系统,源码在beaweblogic700samplesserversrcpetstore。这是学习了解J2EE的首选框架。??免费。??Struts:??主要应用方面:WEB层。??主要应用技术:JSP,TagLib,JavaBean,XML等??出处:http://jakarta.apache.org/struts/index.html??简述:这是APACHE的开源项目,目前应用很广泛。基于MVC模式,结构很好,基于JSP。Jbuilder8里已经集成了STRUTS1.02的制作。??免费。??简述WAF+STRUTS结合的例子:WEB层用STRUTS,EJB层用WAF:??JSP(TagLib)——>ActionForm——>Action ——> Event——>EJBAction——>EJB ——>DAO——>Database JSP(TagLib)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值