HiSEN

计算机科学的自我修炼

零、背景

在近两年高并发系统 DevOps 的过程中,
遇到了很多底层的问你题,eg: 网络、硬件、虚拟机等,
有些现象虽然知其然,但是不知其所以然,书到用时方恨少!
抱着深入学习的心态这两年看了一些相关书籍:

《计算机网络:自顶向下方法》
《操作系统精髓与设计原理》
《Java性能优化权威指南》
《Redis运维与开发》
《性能之巅》

收获甚大 所以想继续深入学习
误打误撞,看到了之前在 GitHub 关注的一个『自学计算机科学』仓库,很赞同下面这个观点

软件工程师分为两种:

  1. 一种充分理解了计算机科学,从而有能力应对充满挑战的创造性工作;
  2. 另一种仅仅凭着对一些高级工具的熟悉而勉强应付。

这两种人都自称软件工程师,都能在职业生涯早期挣到差不多的工资。
然而,随着时间流逝,第一种工程师不断成长,所做的事情将会越来越有意义且更为高薪,
不论是有价值的商业工作、突破性的开源项目、技术上的领导力或者高质量的个人贡献。

一、资源

1.1 摘要

科目为何要学最佳书籍最佳视频
编程不要做一个“永远没彻底搞懂”诸如递归等概念的程序员。《计算机程序的构造和解释》Brian Harvey’s Berkeley CS 61A
计算机架构如果你对于计算机如何工作没有具体的概念,那么你所做出的所有高级抽象都是空中楼阁。《深入理解计算机系统》Berkeley CS 61C
算法与数据结构如果你不懂得如何使用栈、队列、树、图等常见数据结构,遇到有难度的问题时,你将束手无策。《算法设计手册》Steven Skiena’s lectures
数学知识计算机科学基本上是应用数学的一个“跑偏的”分支,因此学习数学将会给你带来竞争优势。《计算机科学中的数学》Tom Leighton’s MIT 6.042J
操作系统你所写的代码,基本上都由操作系统来运行,因此你应当了解其运作的原理。《操作系统导论》Berkeley CS 162
计算机网络互联网已然势不可挡:理解工作原理才能解锁全部潜力。《计算机网络:自顶向下方法》Stanford CS 144
数据库对于多数重要程序,数据是其核心,然而很少人理解数据库系统的工作原理。《Readings in Database Systems》 (暂无中译本)Joe Hellerstein’s Berkeley CS 186
编程语言与编译器若你懂得编程语言和编译器如何工作,你就能写出更好的代码,更轻松地学习新的编程语言。《Crafting Interpreters》Alex Aiken’s course on Lagunita
分布式系统如今,多数 系统都是分布式的。《数据密集型应用系统设计》MIT 6.824

1.2 详情

内容值得一看,真心建议多花功夫学好底层知识。
原文:Teach Yourself Computer Science
翻译:自学计算机科学

来自亚马逊 CTO 的博文也值得一看,操作系统经典书籍
The OS Classics

三、相关资源

软件工程师面试指引