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

2023-11-10

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从技术小白到编程大神的技术书籍推荐 的相关文章

  • 为什么 cygwin 无法读取我的主目录中的 .ssh/config 文件?

    我正在使用 cygwin 并且正在尝试设置 ssh config 文件 Cygwin 的文件夹位于我的 C 驱动器中 我的主目录是 C Users USER 我注意到 当我编辑 C Users USER ssh config 时 cygwi
  • Linux shell 从用户输入中获取设备 ID

    我正在为一个程序编写安装脚本 该程序需要在其配置中使用 lsusb 的设备 ID 因此我正在考虑执行以下操作 usblist lsusb put the list into a array for each line use the arr
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • Python 无法在 git bash 命令行中工作

    Python 不会在 git bash Windows 中运行 当我在命令行中输入 python 时 它会将我带到一个空行 而不会像在 Powershell 中一样显示它已输入 python 2 7 10 它没有给我错误消息 但 pytho
  • .wav 文件长度/持续时间,无需读入文件

    有没有办法提取有关 wav 文件长度 持续时间的信息 而无需在 R 中读取文件 我有数千个这样的文件 如果我必须阅读每个文件才能找到其持续时间 那将需要很长时间 Windows 文件资源管理器为您提供了打开 长度 字段的选项 并且您可以查看
  • 如何更改选项卡控件的名称

    我在 C WinForms 应用程序中使用选项卡控件 我想更改选项卡的标题 默认情况下它们是 tabPage1 tabPage2 等 一种无需代码即可实现的懒惰方法 选择选项卡控件 Go to properties use F4 to do
  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 移动/调整窗口大小时闪烁

    我开发了一个显示 jpeg 图像的应用程序 它可以显示 4 个图像 屏幕的每个象限各一个 为此 它使用了 4 个窗口 窗口没有边框 框架 也没有标题栏 当加载新图像时 窗口大小会根据新图像进行调整 然后显示该图像 尤其是当窗户做得较大时 经
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • 设置 Form.KeyPreview = true 的缺点?

    我想知道 Form KeyPreview 属性实际上有什么用处 它为什么存在以及将其设置为 true 会带来什么 风险 我想它一定有some负面影响 否则它根本不应该存在 或者至少默认情况下是正确的 EDIT 我很清楚what确实如此 我问
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • 在 Windows 上不使用 OpenSSL 从 pfx 文件或证书存储中提取私钥

    正如标题所示 我想在不使用 OpenSSL 或任何其他第三方工具的情况下导出我的私钥 如果我需要一个 cer文件或 pfx我可以通过 MMC 或 PowerShell 轻松导出这些文件pkiclient但我找不到获取私钥的方法 https

随机推荐

  • 【Java 集合 & 数据结构】优先队列 PriorityQueue

    优先队列 PriorityQueue 一 概述 二 结构 三 解析 1 核心属性 2 核心方法 offer 方法 入队列 poll 方法 出队列 peek 方法 队头元素 最小元 四 特点 优点 缺点 一 概述 优先队列 PriorityQ
  • Android String字符串截取方法总结

    Android String字符串截取方法总结 指定字符 截取字符串 返回字符串数组 String str abcd efg 123456 hijk 345 String strs str split 指定索引号 截取字符串 将字符串从索引
  • 服务器上创建Python虚拟环境

    应用场景 不同的项目 或者同一项目的不同版本 需要安装不同的Python解释器和依赖库 对于有python版本依赖的程序来说 为了安全可靠的管理环境 需要创建不同版本的 独立 隔离 的虚拟环境 virtualenv 是一个创建隔绝的Pyth
  • Java设计与实现“秒杀”活动之抢粽子【完整版】

    五月榴花妖艳烘 绿杨带雨垂垂重 五月新丝缠角粽 金盘送 生绡画扇盘双凤 正是浴兰时节动 正值端午佳节 实习公司也是例行放假三天以及给每一位员工发放了节日小礼品 过完端午又将迎来618活动专场 秒杀抢单活动也是此起彼伏 从而产生刺激性消费 由
  • 使用HiBurn烧录鸿蒙.bin文件到Hi3861开发板

    使用HiBurn烧录鸿蒙 bin文件到Hi3861开发板 鸿蒙官方文档的 Hi3861开发板第一个示例程序 中描述了 如何使用DevEco Device Tool工具烧录二进制文件到Hi3861开发板 本文将介绍如何使用HiBurn工具烧录
  • 网站服务器放本地还是云上,服务器放本地还是云上安全

    服务器放本地还是云上安全 内容精选 换一换 在弹性云服务器上安装完成后输入公网IP 无法连接目的虚拟机 端口无法访问工具 源端网络未连通目的端 目的端安全组未开放8084端口 目的端网络ACL禁用了8084端口 登录源端服务器后 在源端服务
  • Leetcode 计算质数 -- 埃氏筛、线性筛解析

    0 题目描述 leetcode原题链接 204 计数质数 1 埃氏筛 很直观的思路是我们枚举每个数判断其是不是质数 枚举没有考虑到数与数的关联性 因此难以再继续优化时间复杂度 介绍一个常见的算法 该算法由希腊数学家厄拉多塞 Eratosth
  • C语言/实现MD5加密

    本文详细视频讲解 已经发布到B站 https www bilibili com video BV1uy4y1p7on 更多仔细 请关注公众号 一口Linux 一 摘要算法 摘要算法又称哈希算法 它表示输入任意长度的数据 输出固定长度的数据
  • C语言头文件路径相关问题总结说明

    聊聊系统路径位置 绝对路径与相对路径 正斜杠 与 反斜杠 使用说明 by 矜辰所致 目录 前言 一 C语言中的头文件引用 二 KEIL 中的头文件路径 2 1 IncudePaths 指定的路径 绝对路径和相对路径 正斜杠 与 反斜杠 与双
  • SpringBoot Sleuth Zipkin Dubbo日志链路追踪全流程(2)

    SpringBoot SpringCloud Sleuth Zipkin Dubbo日志链路追踪全流程 看这篇文章之前 你最好看一下 之前的文章 SpringBoot SpringCloud Sleuth Zipkin Http Log4j
  • RC电路(一):微分

    1 充放电时间常数 在模拟 数字电路中 常常用到由电阻 和电容 组成的 电路 和 的取值不同 会导致输出波形和输入波形之间的关系也不同 由此也会产生不同的应用 当 时 电容电压 0 63E 当 时 电容电压 0 86E 当 时 电容电压 0
  • 通用嵌入式系统测试平台 ETest简介

    通用嵌入式系统自动化测试平台 通用嵌入式系统测试平台 Embedded System Interface Test Studio 简称 ETest 是针对嵌入式系统进行实时 闭环 非侵入式测试的自动化测试平台 适用于嵌入式系统在设计 仿真
  • 《阵列信号处理及MATLAB实现》绪论、矩阵代数相关内容总结笔记

    第一章 绪论 1 1 研究背景 1 1 1 阵列信号处理简介 将一组传感器按照一定方式布置在空间的不同位置 形成传感器阵列 用传感器阵列来接收空间信号 相当于对空间分布的场信号采样 得到信号源的空间离散观测数据 通过对阵列接受的信号进行处理
  • Lex和Yacc应用方法(一).初识Lex

    Lex和Yacc应用方法 一 初识Lex 草木瓜 20070301 Lex Lexical Analyzar 词法分析生成器 Yacc Yet Another Compiler Compiler编译器代码生成器 是Unix下十分重要的词法分
  • Feign的使用

    基于Feign远程调用 Feign说明 Feign是一个声明式的http客户端 其作用是帮助我们优雅的实现http请求的发送 官网地址 https github com OpenFeign feign Feign的使用 修改服务的pom x
  • MVC中的项目案例

    我们先一起来看看超期的效果图吧 以上就是超期的效果图 我来解析一下 超期操作的模态窗体弹出的条件与归还一样 应选择需要超期的书籍 再弹出模态窗体 模态窗体弹出 数据自动回填上去 罚款金额 超期天数 0 2 获取当前时间为罚款时间 罚款成功后
  • 解决python3在import cv2时报错问题

    在安装了ros 在import cv2时会报错 如下 import cv2 ImportError opt ros kinetic lib python2 7 dist packages cv2 so undefined symbol Py
  • CMake(七):函数和宏

    回顾到目前为止涉及的材料 CMake的语法已经开始看起来很像一门编程语言 它支持变量 if then else逻辑 循环和包含要处理的其他文件 毫无疑问 CMake还支持常用的函数和宏编程概念 就像它们在其他编程语言中的角色一样 函数和宏是
  • vistual studio 2017中导入pthread.h的配置方法

    1 下载pthread h的相关库文件 下载路径 https www mirrorservice org sites sourceware org pub pthreads win32 pthreads w32 2 9 1 release
  • 从技术小白到编程大神的技术书籍推荐

    本人算不上大神 也非计算机专业出身 本着一股热爱技术的精神 研究过各种计算机技术 对于知识的索取方式 比较习惯看书 当然 随着认识的加深 以及新技术的层出不穷 也常接触各种技术文档 早些时候阅读过很多不错的计算机书籍 对于计算机底层的深入认