18-21年读过的那些技术书

  1. 总览
  2. 最□□的那些书
    1. 最厚最长的书
    2. 最给人启发的书
    3. 最实用的大书
    4. 最优雅的软件开发书
    5. 最应该早点读的书
  3. 数据库相关书籍
    1. 数据库系统概论
    2. MySQL必知必会
    3. 你不可不知的关系数据库理论
    4. 七周七数据库
    5. 数据库系统概念
    6. Redis 设计与实现
  4. C++ 相关书籍
    1. Essential C++ 中文版
    2. Effective STL 中文版 :50条有效使用STL的经验
    3. Effective C++:改善程序与设计的55个具体做法 / Effective Modern C++ :中文版
    4. C++编程规范 :101 条规则、准则与最佳实践 :101 Rules, Guidelines, and Best Practices
    5. C++ 程序设计语言/ C++ 语言的设计和演化
    6. C++ Primer
    7. C++ Primer Plus
  5. 待更新中
  6. Java 相关书籍
    1. 写给大忙人看的Java核心技术
    2. 有趣的二进制
  7. Python 相关书籍
    1. 流畅的Python
    2. Python 3 Cookbook
    3. Python自然语言处理
    4. 自然语言处理综论
    5. Erlang趣学指南
    6. 数据结构邓俊辉
    7. 数据结构与算法分析 :C++语言描述
    8. 递归与函数式的奥妙
    9. ACM/ICPC算法基础训练教程
    10. 七周七语言言 :理解多种编程范型 :a pragmatic guide to learning programming language
    11. 点石成金 :访客至上的Web和移动可用性设计秘笈
    12. C程序设计新思维
    13. Git高手之路
    14. 程序员的数学
    15. Qt 5开发及实例 :含典型案例视频分析
    16. More Exceptional C++中文版 :40个新的工程难题、编程疑问及解决方法 :40 new enginee 5开发及实例 :含典型案例视频分析
    17. Qt编程快速入门
    18. 程序员的数学
    19. 数据结构
    20. 轻量级Django
    21. Python UNIX和Linux系统管理指南
    22. Python网络数据采集
    23. Flask :基于Python的Web应用开发实战 :developing web applications with python
    24. 交互式计算机图形学
    25. 实现模式
    26. 代码之外的功夫 :程序员精进之路 :be more than just a code monkey
    27. ACM国际大学生程序设计竞赛亚洲区预选赛真题题解
    28. 中文版Effective
    29. 递归与函数式的奥妙
    30. Node.js实战
    31. 七周七语言

总览

这篇博客总结了我在 2018-2021 年读过的技术书籍。我会在每本书的具体描述里说明自己读这本书的详尽程度(粗读/部分细读/整体细读/多次品味),我对这本书的总体评价(值得一读/给人启发/偶有精华/厕纸)

无论书的好坏,只要我有读过一部分,我都会在文章里面提及,因为我希望我踩过的坑后人不要再踩了。

最□□的那些书

这一部分的书是我心目中最重要的一些计算机书籍。我没资格给这一部分书总体评价,大家看着乐乐就好。

最厚最长的书

计算机程序设计艺术》(The Art Of Computer Programming 简称 TAOCP),是由计算机科学巨匠 Donald Ervin Knuth 所著的一系列书籍,描述了计算机科学不同方面的知识。

我精读了这系列书大约0.1%的部分。我精读过的两个部分如下:第一卷MMIX描述了二叉树遍历的部分和第二卷半数值算法的为了讲解随机数生成部分。我是先读的第二卷,当时我以为这本书对数学算法的讲解还挺有意思的。但直到我看到了第一卷书之后我就知道我永远不可能用这套书学会编程和算法了: Knuth 在这本书里自创了一套汇编语言MMIX,并用这门语言描述书中的算法。

Knuth 其人非常厉害,他和人合作发明了 KMP 算法,也写出了 Tex,METAFONT 两个软件,提出了文学编程的概念(我觉得启发了Jupyter Notebook?)。但人厉害与书好看不完全相关,如果你不希望斥巨资买了一套用来膜拜巨佬的巨书,建议还是先在图书馆翻翻这套书你能否看得下去。最后,我个人认为 Knuth 的《具体数学》比这套书更具可读性。

如果你完完整整读完了TAOCP,请立刻给我发一份简历。——比尔盖茨

总体评价:不适合智商低于比尔盖茨的人看。

最给人启发的书

计算机科学并不只是关于计算机,就像天文学并不只是关于望远镜一样。

计算机程序的构造与解释》(Structure and Interpretation of Computer Programs 简称 SICP。注意,译者是裘宗燕!!)应该配合着 MIT 的 SICP 课一起看。然后你可以在短短的几天内了解到这些问题的答案:什么是类 Lisp 的语言Scheme?什么是抽象?什么是自上而下编程?什么是函数式编程?什么是面向对象?什么是面向过程?并行编程中会出现什么样的问题?什么是解释器?什么是垃圾回收?什么是编译器?

读了这本书,做了其中1-2章相关的课后习题就会明白 Lisp 语言和函数式编程的精髓,再做第3章习题你就明白了Alan Kay说的“面向对象就是消息传递”。但是后面几章我只看了课没有做习题,只有一些粗略的印象了,例如如何用 Scheme 写一个 Scheme Parser 这种。

如果你在我看这本书之前跟我聊函数式编程,我绝对不知所以然,并可能会被什么“闭包”之类的术语骗的团团转。但是我在看了这本书之后,我暗自为不了解函数式编程“函数作为一等公民”这一思想的人惋惜,因为他们不知道自己没接触到多么大的一个世界。

这本书首次出版是在 1984 年,但在 2022 年这本书第一次更换了书中使用的编程语言:从 Scheme 更换到了JavaScript。我认为这个更换是有道理的,因为 JavaScript 设计的时候就参考了 Scheme 的函数作为第一公民的设计,并且我在亲身使用的时候确实感受到 ES6 之后的 JavaScript 有着类 Scheme 的使用体验。期待 2022 版 SICP 能够重现旧版的荣光。

总体评价:无论是什么语言版本的 SICP,都不可不读。

最实用的大书

《代码大全》(Code Complete。注意,裘宗燕强力审校!!)由微软的一位程序员编写。我一开始以为这本书是一本算法大全,翻了才知道原来从编码到管理无所不包。这本书的英文名意思是编码完成,但是由于第一版已经被某人翻译成了代码大全,于是积重难返第二版还是叫做了代码大全。具体你需不需要读这本书,请你来看看这本书中文版的译序,摘抄如下:

这本书适合谁看,该怎么看?
任何想写出好程序的人,或者想带领一群程序员写出好软件的人,都不应该错过这本好书。作者在前言中指明了本书的读者群(包括经验丰富的程序员、技术带头人、自学的程序员、学生等),请您参阅。
这是一本 800 多页的大部头,从头到尾阅读要花不少时间,谁都希望能尽快找到对自己有用的内容。译者大致针对不同的读者群提一点阅读建议,仅供参考。

• 初级程序员,请先看第18章 “表驱动法”:将复杂的逻辑判断转换为查表,从而简化代码的编写与维护。另外,本章中的一个示例说明了,面向对象设计并不只要因为它是“面向对象”,就一定会好于其他的设计。
• 高级程序员,请先看第4章“关键的‘构建,决策”,本章关注的焦点是程序员和技术带头人个人必须(直接或间接)负责的项目准备工作。
• 高级程序员,请先看第4章“关键的‘构建,决策”,本章关注的焦点是程序员和技术带头人个人必须(直接或间接)负责的项目准备工作。
• 项目经理,请先看第33章“个人性格”,程序设计是一项纯粹的脑力劳动,本章对挑选和培养优秀程序员提出了建议。事实证明,相对于聪明程度(智商),个人性格(情商)对于造就出程序员高手更具有决定性的意义。
• 低年级学生,请先看第 11 章“变量名的力量”。这本书用了整整一章(30多页)的篇幅来讲解“为变量命名”这一编程中最常见的活动,这里提供的建议在别的书里是很难见到的。
• 高年级学生,请先看第8章“防御式编程”,本章讲述如何面对严酷的充斥非法数据的真实世界,在遇到“绝不会发生”的事件和其他程序员犯下的错误时如何保护自己。对于那些正在从学术环境转向专业开发环境的学生来说,这是必备的一课。
• 制定编码标准的人,请先看第32章“自说明代码”,本章中有一段关于注释的精彩对话,它可能会改变您在制定编码标准时对注释的要求。
• 自学编程的人,请先看第7章 “高质量的子程序”,本章详细讨论了子程序的命名和參数选择等问题,其中对子程序最佳长度的讨论颇有借鉴意义。
• 喜欢参与网上争论的人,请先看第13.3节“全局数据〞 和第17.3节“goto 语句”,听听学术界在这些问题上的争论也挺有意思。

当然,这整本书都非常值得一读,准确地说,值得反复阅读。书中不仅有实实在在的数据和论述,也有一些有趣的比喻,作者偶尔还开开玩笑,读起来一点也不枯燥,

总体评价:如果你对以上话题感兴趣,推荐你读一下这本书看看作者观点吧。如果你没有感兴趣的话题,你真的想从事计算机相关工作吗!?

最优雅的软件开发书

《实现模式》(Implementation Patterns)是由敏捷开发的发起人之一 Kent Beck 所著的一本小书。Kent Beck 提出了测试驱动开发,并且发明了 JUnit 测试框架。

在这本书里,Kent Beck 手把手教你写代码。里面的每个实现模式都是你可能想问的问题:什么是双重/多重分派?我应该在创建对象的时候初始化一个属性还是在第一次访问的时候初始化?这本书深入浅出的风格非常适合读者理解其中的思想。

这本书我反复读了 3 遍。我在看完这本书之后才第一次理解了设计模式里面的 Visitor 模式,而且想出来了Visitor模式的出现是因为语言拿不到类型导致要绕两下才能执行真正逻辑。如果你在设计 Java 类的时候觉得某一步的选择太多,不如来看看这本书里的例子找找灵感。

总结:被很多人轻视的好书。

最应该早点读的书

深入理解计算机系统》(Computer Systems: A Programmer’s Perspective 简称 CSAPP)这本书是 CMU 的计算机导论课课本,也是哈工大等学校的计算机导论课的计算机课本。也就是说,很多学校的计算机导论课也应该覆盖这本书里讲的很多内容:数据与程序的二进制表示,机器语言,机器指令集,程序的缓存相关性,操作系统、并发和网络编程。这本书对于计算机相关专业的学生而言越早读越好,因为可以更早的拥有对整个计算机系统的大局观。

这本书我详细阅读了其中的几个部分,记忆中机器指令集那个部分我跳过了。总体而言,因为这本书深入浅出的写作风格、有意思的课后 Lab 和网上详尽的相关资料,使这本书成为了我心目中计算机导论相关书籍的 No.1。

总体评价:越早读越好。

数据库相关书籍

数据库系统概论

数据库系统概论》这本书是我们的数据库课程的课本。我很感谢这本书为我启蒙了许多概念例如先写日志,还有事务隔离性、也教会了我 SQL 的基本使用。在我大学四年用的课本里面,这本课本是优秀程度仅次于《计算机网络》的课本。

我的阅读程度:部分精读。
我的推荐程度:给人启发

MySQL必知必会

MySQL必知必会》。很小的一本工具书,学 SQL 用的。我觉得学 SQL 看这本书没啥问题。

我的阅读程度:整体粗读。
我的推荐程度:偶有精华。

你不可不知的关系数据库理论

你不可不知的关系数据库理论》讲的主要是关系型数据库中的精华概念。很多书讲关系型数据库上来就要先谈 SQL ,这本书就是在教你没有 SQL 怎么理解表之间的交、并、笛卡尔积、除、连接。这本书篇幅很小,如在没接触过关系型数据库的情况下看这本书可以快速入门。

我的阅读程度:部分精读。
我的推荐程度:偶有精华。

七周七数据库

七周七数据库》是一本谈了多种数据库范式的书。7个数据库依次是:postgresql、riak、apache hbase、mongodb、apache couchdb、neo4j和redis。如果你对于 NoSQL、NewSQL、列式数据库、图数据库等概念感兴趣却又一无所知,可以通过阅读此书来快速获得大局观。

我的阅读程度:部分精读。
我的推荐程度:给人启发。

数据库系统概念

数据库系统概念》此书我直截了当的承认自己展示还没怎么读。此书太厚,我当时读的时候也是为了具体了解1NF,2NF,BNF,3NF等范式,这本书上的解释对我而言还算是能够看懂。这本书豆瓣评分很高,但是实在太厚太长了。

我的阅读程度:部分粗读。
我的推荐程度:我没怎么看,没法客观评价。

Redis 设计与实现

Redis 设计与实现》这本书我当时是好奇 Redis 中的跳表数据结构去看的,但是但是我才大一上,C语言都用不利索,看这个书属于自讨苦吃。但是我能确定的是这本书里图很多,而且有仔细的讲 Redis 里面的数据结构,文笔也还可以。

我的阅读程度:部分粗读。
我的推荐程度:我没怎么看,没法客观评价。

C++ 相关书籍

C++ 是我认真学习的第一门面向对象语言。这门语言在所有领域的雄心壮志和其曾经的语言基础设施严重不符,这导致这门语言涌现出了无数 Effective 系列,无数最佳实践书籍,以及 RAII, move sementic, SFINAE, CRTP,等等让人自我感觉良好的黑话术语。在后 C++11 时代,比老书有用的是多 CPPCON 上的演讲,和 cppreference

Essential C++ 中文版

Essential C++ 中文版》这本书面向的读者是只会 C 语言的人,目的是让读者快速感受到 C++ 面向对象的封装、继承和多态是怎么体现的。我仔细地读过此书 3 遍,是通过此书入门 C++ 的,我将此书推荐给所有人。这本书的精神续作是 C++ 之父写的《A Tour of C++》,在后 C++11的今天我推荐大家先看 A Tour of C++.

阅读程度:多次品味。
推荐程度:值得一读。

Effective STL 中文版 :50条有效使用STL的经验

Effective STL中文版》这书里全是怎么用 C++98 的 STL 的相关经验,经过我的观察,其中至少还有一半以上还在 C++11 以上适用,例如不要用std::vector<bool>等,但也有许多不适用的。我认为 STL 的数据结构库的学习直接打好数据结构基础然后看 cppreference即可,而学 STL 的算法部分推荐大家先看一小时内学会105个STL算法

阅读程度:多次品味。
推荐程度:值得一读。

Effective C++:改善程序与设计的55个具体做法 / Effective Modern C++ :中文版

前书写于 C++98 时代,后书写于 C++14 时代,两本书之间没有多少冲突,可以互相补充阅读。看前书你会了解到很多最佳实践,但如果你要在现在写库,你必须看后书了解什么 TMD 是 TMD decltype(auto) 还有 TMD 右值引用,std::move 和完美转发。说实话,我觉得 C++ 写到这个份上已经没什么意思了,很难受(两本书的作者 Scott Meyers 选择了退出 C++ 世界)。
最后,给大家一句话讲明白右值引用吧:右值引用是用来实现移动语义(即资源所有权的转移)而加入 C++ 的类型。

阅读程度:多次品味。
推荐程度:值得一读。

C++编程规范 :101 条规则、准则与最佳实践 :101 Rules, Guidelines, and Best Practices

C++编程规范》是 C++98 时代的书籍,但其中的很多东西现在依然是对的,例如优先 const,优先使用组合,少用宏等等等等,这本书能帮助你写出品味良好的 C++ 代码,推荐大家值得一读。

阅读程度:多次品味。
推荐程度:值得一读。

C++ 程序设计语言/ C++ 语言的设计和演化

两本书都是由 C++ 之父 Bjarne Stroustrup 所著,裘宗燕译!

C++程序设计语言》此书的第一版由裘宗燕所译,这本书里面很多用词什么的和一般书籍不同,例如 Interface 被翻译成界面(一般译为接口),但这丝毫不影响信息传达的效率。假如你对某些 C++ 语言中的语法有疑惑,这本书可以给出最详尽且带例子的讲解。这本书的最大问题就是厚的要命,尤其是最新版,厚的分出一本书专门讲标准库。

C++语言的设计和演化》这本书说明了 C++98 设计过程中的取舍,对于 C++ 中很多设计有疑惑的可以看一下这本书,例如为什么异常是 try catch 而不是其他方式,以及为什么有多继承等等。当然,如果想看新的 C++ 语言特性为何是那样,可以看 C++ 之父在 CPPCON 上的演讲以及他投稿到 HOPL 上的讲述 C++ 历史的论文。

阅读程度:部分精读。
推荐程度:值得一读。

C++ Primer

C++ Primer》这本书适合每一个正在学习 C++ 的人阅读。作为一本教学用书,文字详略得当,描述深入浅出。在深度广度两个方面同时做的非常好,我认为适合作为所有人学习 C++ 的第二本书。

阅读程度:部分精读。
推荐程度:值得一读。

C++ Primer Plus

如果说上一本 C++ Primer 是李逵,那么这一本《C++ Primer Plus》就是李鬼。书又厚又长,目标读者是完全的初学者,但是内容详略严重不当,读起来枯燥无味。我觉得只能当写的不太好的语法手册用,因此我很后悔购买此书。

阅读程度:部分精读。
推荐程度:厕纸。

待更新中

Java 相关书籍

写给大忙人看的Java核心技术

有趣的二进制

Python 相关书籍

流畅的Python

Python 3 Cookbook

Python自然语言处理

自然语言处理综论

Erlang趣学指南

数据结构邓俊辉

数据结构与算法分析 :C++语言描述

递归与函数式的奥妙

ACM/ICPC算法基础训练教程

七周七语言言 :理解多种编程范型 :a pragmatic guide to learning programming language

点石成金 :访客至上的Web和移动可用性设计秘笈

C程序设计新思维

Git高手之路

程序员的数学

Qt 5开发及实例 :含典型案例视频分析

More Exceptional C++中文版 :40个新的工程难题、编程疑问及解决方法 :40 new enginee 5开发及实例 :含典型案例视频分析

Qt编程快速入门

程序员的数学

数据结构

轻量级Django

Python UNIX和Linux系统管理指南

Python网络数据采集

Flask :基于Python的Web应用开发实战 :developing web applications with python

交互式计算机图形学

实现模式

代码之外的功夫 :程序员精进之路 :be more than just a code monkey

ACM国际大学生程序设计竞赛亚洲区预选赛真题题解

中文版Effective

递归与函数式的奥妙

Node.js实战

七周七语言


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 [email protected]

Title:18-21年读过的那些技术书

Count:4.9k

Author:emon100

Created At:2022-02-04, 15:46:00

Updated At:2022-12-25, 13:42:55

Url:https://blog.emon100.com/2022/02/04/18-21%E5%B9%B4%E8%AF%BB%E8%BF%87%E7%9A%84%E9%82%A3%E4%BA%9B%E6%8A%80%E6%9C%AF%E4%B9%A6/

Copyright: 'Attribution-non-commercial-shared in the same way 4.0' Reprint please keep the original link and author.