大学四年、硕士三年、工作七年,我都读了哪些计算机经典书籍?

大学四年、硕士三年、工作七年,我因阅读经典计算机书籍而获益良多,目前人在大厂做开发,一路走来感慨万千,分享一些我不同阶段的书架吧。

学生时代书架一

学生时代书架二

工作两三年后的书架一

工作两三年后的书架二

现在的书架(部分)

翻的很破的《TCP/IP 详解》三卷书~~

我们努力读经典的计算机书籍,目的主要有两个:

  1. 提高技术能力和素养(通俗地说就是修炼内功和积累经验);

  2. 提高工程实践能力(通俗地说就是为了更好地从事编码工作)。

用一张图来概括一下不同阶段需要掌握的技术体系:

好啦,解决了大方向问题后,行动起来就容易了,以下是具体的书籍推荐:

小 Tips: 很多人选择经典计算机图书时,一上来就选各种大部头的经典书籍,有些书确实是非常经典,但是能不能坚持读完是一回事,读完能不能消化吸收成自己的知识体系又是一回事,所以建议优先选一些理论与实践结合并能够快速投入工程实践的图书。

一、算法与数据结构

建议你应该好好准备算法和数据结构,做到常见的算法和数据结构知识点都能熟悉。如果你是应届生,毕业求职的时候可以轻松拿一些大厂(BAT 等)的 offer,至少不会挂在算法数据结构上面;社招的话,也是非常重要的加分项。一毕业去大厂的好处点击这里

1. 严谨的教材

  • 《数据结构与算法分析:C 语言描述》

  • 《算法导论》

2. 轻松活泼的教材

  • 《大话数据结构》

  • 《编程之美》

《编程之美》是一本特别能锻炼思维能力的算法书。

严谨的教材适合系统学习,轻松活泼的教材适合提高学习兴趣、非科班的同学。

3. 适当刷题还是有必要的

  • 《剑指 offer》

  • 《程序员代码面试指南 IT名企算法与数据结构题目最优解》

校招的话和工作年限不长的社招,如果想去大厂,算法和数据结构题回答的不好,基本上一票被否决了。当然,这些算法题本身并不难,面试前适当准备一下,培养下自己的解题感觉,对面试还是有大的帮助的。我目前也是某大厂技术面试官,我分享一下我的算法题库 + 整理了一些常见的大厂算法题与面经: 链接: 百度网盘 请输入提取码 提取码: 1pzc 通常算法这块的题目并不难,但是一定要在面试前好好准备一下。

二、语言类

1. C语言

无论你做什么开发,个人觉得 C 语言是所有想成为高手最应该熟悉的入门语言。

  • 《C 语言程序设计:现代方法》。

2. C++

当然,如果你想掌握好 C++,《深度探索 C++ 对象模型》是一定要看的。

  • 《深度探索 C++ 对象模型》

介绍 C++ 技术和编程技巧的图书实在太多了,我这里推荐《提高 C++ 性能的编程技术》一书,这本书中介绍了常见的 C++ 编码技巧,建议做 C++ 开发的同学把书中说的技巧全部掌握,最关键的是这本书非常薄。

  • 《提高 C++ 性能的编程技术》

如果觉得自己设计 C++ 类和接口不优雅,不能很好地划分模块,大型项目不知道如何去组织和搭建,推荐下如下两本书,这两本书是你成为高手的必读书籍。

  • 《C++ API 设计》

  • 《大规模C++程序设计》

我看很多回答给C++ 学习者推荐 《Effective C++》《More Effective C++》这两本书,老实说,随便 C++11 以及之后的新标准问世以后,这两本中介绍的一些 Item 和技巧已经有点过时了,当然,这两本书仍不失为经典,如果时间比较充裕,可以看一看,但不建议作为优先学习 C++ 的重头书。

学习 C++11/14/17:

  • 《深入理解 C++11:C++11 新特性解析与应用》

  • 《深入应用 C++11:代码优化与工程级应用》

  • 《C++17 完全指南》

  • 《Cpp 17 in Detail》

3. Java

  • 《Java 核心技术 》

  • 《Effective java》

  • 《深入理解 Java 虚拟机》

  • 《Java 并发编程实战》

三、操作系统

操作系统无论是面试还是自我提高的五大基础之一,我的建议学习操作系统知识时,不一定要看完所有操作系统书籍,但一定将一些基础概念(如进程、线程、内存模式等)看懂、理清,如果你之前对操作系统的理论没有什么认知,这本书能快速地帮你构建操作系统基础理论体系。

  • Tanenbaum.A.S《现代操作系统》

你如果还有时间强烈推荐看看俞甲子的《程序员的自我修养:链接、装载与库》。这本书同时涉及到了 Windows 和 Linux 两个操作系统平台,用各种辅助工具剖析了程序从源码到二进制文件再到装载到进程地址空间里面的各个细节,甚至连进程地址空间中的堆结构、栈结构也分析得清清楚楚,同时也分析了 C Runtime(CRT)、glibc 这样的操作系统接口库的原理和执行逻辑,是一本实实在在帮你实战操作系统原理的好书。

  • 《程序员的自我修养:链接、装载与库》

如果对操作系统内核感兴趣,可以阅读下:

  • 《Linux 内核设计与实现》

  • 《Linux 内核情景分析》

  • 《Windows 内核情景分析》

四、计算机网络

学习计算机网络除了掌握网络基础知识(比如三次握手和四次挥手),还要熟悉网络编程。

  • 《计算机网络:自顶向下方法》

网络编程方面的实战书来,我推荐韩国人尹圣雨写的这本《TCP/IP 网络编程》,这本书也适合无任何 Socket API 编程经验的小白,这本书涵盖从基础的 Socket API 到高级的 IO 网络模型,有非常详细和生动的例子。

  • 《TCP/IP 网络编程》

等你有了一定的网络编程以后(熟练使用常见 Socket API),你可以看看游双的《Linux 高性能服务器编程》,这本书给没有基础的人或者基础不扎实的人的感觉是,尤其是书的前三章,这书怎么这么垃圾,又把网络理论书上面的东西搬过来凑字数,但是如果你有基础再按照书上的步骤在机器上实践一遍,你会发现,真是一本难得的、良心的书,桃李不言下自成蹊吧。如果你掌握了这本书上说的这些知识,你再看陈硕老师的《Linux 多线程服务端编程》或者去看像 libevent 这样的开源网络库,你会进一步的得到提升。这也是我学习网络编程的一些经验和经历吧。

  • 《Linux 高性能服务器编程》

网络编程高频面试题我整理在这里:

轻松搞定技术面试中常见的网络通信问题​www.zhihu.com/lives/922110858308485120icon-default.png?t=N7T8https://www.zhihu.com/lives/922110858308485120

五、操作系统 API

不管是什么开发,你都是需要基于特定的操作系统的,这里不提 Windows 系统,单单拿 Linux 操作系统来说,既然你选择做这个方面的开发,你需要熟悉这个操作系统平台提供的一些常用的 API 函数,网络通信方面上文已经说过,除了网络通信还有如操作文件、操作内存、字符串操作、进程线程系列、线程同步系列(如互斥体、条件变量、信号量)、管道等常用的各种API接口函数。这里的意思是,不是要你背诵记忆每一个接口函数的签名,而是你要知道何时该用哪个接口,如何用,有什么注意事项。

我入门的时候看的是 Robert Love 的《Linux 系统编程》,熟悉这个人的应该知道,Google 的工程师,他也《Linux 内核设计与实现》一书的作者。

  • 《Linux 系统编程》

  • 《Windows 程序设计》第五版

(《Windows 程序设计》第六版以后,这个不再是用 Windows Native API 写 C 程序了,而是转到 C# 平台上了),这本书是中国第一代程序的 Windows 启蒙书籍,你所看到的大多数桌面软件(如 QQ、360 安全卫士),的开发者可能都是通过阅读这本书启蒙起来的。

  • 《Windows 核心编程》

《Windows 核心编程》这本书搞 Windows 开发的一定都知道这本书的重要性。

  • 《Windows PE 文件权威指南》

六、汇编与安全工程

如果你熟练掌握汇编,你就比其他人多很多优势,你会能透彻地知道你写的每一行 C/C++ 代码背后的机器指令的效率。无论是做安全工程还是自己技术提升上都是非常不错的。这里推荐一本王爽老师的《汇编语言(第 3 版)》,这本书不厚,语言通俗易懂,你也不用刻意去记忆,基本上当小说书看一下就能很快看完了。汇编实战类图书还有另外一本《老码识途:从机器码到框架的系统观逆向修炼之路》。我个人是非常喜欢这本书的。当年读这本书的时候,真的有一种“笑看妻子愁何在?漫卷诗书喜欲狂”的感觉。

  • 《汇编语言(第 3 版)》

  • 《老码识途:从机器码到框架的系统观逆向修炼之路》

七、数据库

数据库需要掌握的基础知识有:

(1)熟悉基本 SQL 操作 包括增删改查(insert、delete、update、select语句),排序 order,条件查询(where 子语句),限制查询结果数量(LIMIT语句)等

(2)稍微高级一点的 SQL 操作(如 Group by,in,join,left join,多表联合查询,别名的使用,select 子语句等)

(3)索引的概念、索引的原理、索引的创建技巧

(4)数据库本身的操作,建库建表,数据的导入导出

(5)数据库用户权限控制(权限机制)

(6)MySQL的两种数据库引擎的区别

(7)SQL 优化技巧

以上属于对开发的基本的数据库知识要求,你可以找一本相关入门级的数据库图书推荐:

  • 《MySQL技术内幕(第5版)》

高级开发除了以上要求还要熟悉高可用 MySQL、主从同步、读写分离、分表分库等技术,这些技术的细节一定要清楚,它们是你成为技术专家或者高级架构的必备知识。我们在实际面试时,在讨论高可用服务服务方案时,很多面试者也会和我们讨论到这些技术,但是不少面试者只知道这些技术的大致思想,细节往往说不清楚,细节不会就意味着你的高可用方案无法落地,企业需要可以落地的方案。

这些技术我首推《高性能 MySQL》这本书,这本书高级开发者一定要通读的,另外还有 2 本非常好的图书也推荐一下:一本是《MySQL 排错指南》,读完这本书以后,你会对整个“数据库世界”充满了清晰的认识;另外一本是《数据库索引设计与优化》,这本书读起来非常舒服,尤其是对于喜欢算法和数据结构的同学来说。

  • 《高性能 MySQL》

  • 《MySQL 排错指南》

  • 《数据库索引设计与优化》

我最近在研究 MySQL 的源码,MySQL 源码有点多,以下是我用 GDB 调试器跑起来的 MySQL 源码效果:

对于 MySQL 源码感兴趣或者从事一些数据库定制开发或者存储方面的同学,推荐一下《Understanding MySQL Internals》(中文译名《MySQL技术内幕》):

链接: https://pan.baidu.com/s/1yQbIygk1CJbi8Uh-bpgsyQ 提取码: 58na

八、编译原理与计算机组成原理

  • 《编译系统透视:图解编译原理》

  • 《计算机组成与设计:硬件软件接口》

八、设计模式

  • 《大话设计模式》(阅读起来比较轻松)

  • 《图解设计模式》(口碑非常好的设计模式经典书籍,强烈推荐)

链接: https://pan.baidu.com/s/15QRlMQJY_Suv1L5kgoNu9A 提取码: dq5s

九、代码规范与风格优化

  • 《重构:改善既有代码设计》

  • 《程序设计实践》

  • 《代码整洁之道》

《程序设计实践》与代码整洁之道》这两本书特别推荐学生朋友看一下,能大幅度地提高你实际编码的技巧和编码风格,在面试的时候,现场或者在 IDE 写代码,如果代码风格和编排非常好,能大幅度提高面试官对你的印象分。

十、最后却不是结束

作为一名过来人的老学长,我码这么多字,希望想做好开发的学弟学妹们,勿在浮沙筑高台,一定多阅读经典计算机书籍去提高内功。读书不要图快,以尽量理解和吸收的多而不是以读的多为衡量标准。

对计算机相关专业的学弟学妹的建议:你有大把读书的机会,一定要珍惜大好读书时光。

对于工作年限不长的同好,应该尽量在工作的早些年(1 ~ 4 年内)把基本功打扎实。

人到三十岁以后面临着工作、家庭等各种问题,你可能再不能心无旁骛地去学习和提升了。所以前期的积累很重要,毕竟选择技术这条路,提高技术是升职加薪改善生活水平最直接的方法。

最后一点:软件开发这个行业,技术不断发展,要保持一颗不断学习的心~

书单未完待续,后面会整理得更加完善,更加成体系。

文中提到的所有电子书下载链接:

计算机必看经典书籍(含下载方式)​mp.weixin.qq.com/s/JcaLLTBWiRKlfzZIyilNIQicon-default.png?t=N7T8https://mp.weixin.qq.com/s/JcaLLTBWiRKlfzZIyilNIQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值