性能文章>白话硬核技术系列开篇:这么多技术我们该怎么学>

白话硬核技术系列开篇:这么多技术我们该怎么学原创

2年前
333036

 希望我们每一个人都能够更加高效地学习新技术,节省下来的时间多陪陪家人和朋友

 

01

 

 

现代技术人的困境

 

当今世界,技术纷杂,新技术层出不穷,我们无法像上几代人那样,能够精通或者熟悉所有的技术。

 

环境总是在变化,技术总是在发展,如果没法快速掌握新技术,我们很快会被拍在历史的沙滩上,导致所谓的“35岁危机”。新一代技术人由于无历史包袱,技术的学习热情和动力远胜于我们,我们很容易被替代。

 

但是,新技术的发展实在太快了。可能你刚学完一项新的技术,另一项相关的技术就已含苞待放,过不了多久,你所精通的那项技术就会迅速过时,你又不得不重新学习另一项新的技术。

 

我们该怎么办?

 

 

02

怎么解?

 

《技术的本质》这本书告诉我们两个基本原理

  1.  

  2. 1.所有的技术都是已有子技术的组合

  3. 2.技术到最底层最终都是依赖于一些自然现象

 

通过这两条非常简单的基本原理能够推导出所有技术的起源和演进,包括整体的计算机技术、计算机技术领域中一项具体的技术,比如:Docker,K8S 等等。

 

举个生活中的栗子:

 

一辆卡车利用了这样两种基本的物理现象:第一种物理现象是圆形的物体滑动摩擦力远远小于方形物体,第二个物理现象是燃烧的气体高速往后排的时候会产生一个反向作用力。基于这两个基本的物理现象,封装成一些基本的设备,比如轮胎系统,动力系统;然后为了确保这些设备高效运转,又有一些辅助设备围绕在他们周围运转,如刹车润滑系统,传动系统,散热系统;然后为了确保传动系统和散热系统能够正常 work,可能又会增添一些新的系统,层层叠加,一辆卡车到最后可能有成千上万个零件,但是,其最本质的东西可能就那么几个。

 

计算机技术的结构也是类似的情况,每一项具体的技术总是依赖为数不多的几个“现象”。

 

如 Spring 可以理解为最核心的就是一个大 Map,往 Map 里塞东西,取东西,形成了 IOC;往 Map 塞东西的时候,可以装饰它,就形成了 AOP,核心技术原理可能就那么几行代码。

 

再比如 Netty,核心原理就是一个 for 循环,挨个地执行连接的读写事件,所有的其他组件都是围绕在这个 for 循环周围的装饰,了解了这一点,整个框架的学习也就能够很快掌握。

 

抓核心,抓本质,这个核心本质就是底层技术,也就是我们所有技术依赖的“现象”。

 

按照 《技术的本质》一书的理论,所有技术最终都是依赖于物理现象,我们当然不要求挖到物理现象那么深,我们只需要尽可能地接近物理现象,越接近物理现象,我们未来所能创造的技术空间就越大,也就是未来我们学习新技术的速度就会越快。

 

所以,知道了这些,到底如何提升我们学习新技术的效率?

 

如果一项具体的技术和你的当前工作关系不大,而是奔着“以后可能会遇到”的目的去学习,建议不要耗费大量的精力去了解这项技术的所有的细节,比如所有的 API,所有的功能。一方面由于工作中用不着,没有实践的技术很快就遗忘,另外一方面,如果只是学到表象的浅层的知识,无法迁移到新的技术,事倍功半。

 

正确的做法是:我们可以去学习这项技术背后依赖的更本质更底层一些的技术,也就是《技术的本质》中所说的“物理现象”。

 

比如学 Docker 之前我们可以去了解 Linux 内核的 namespace 和 cgroup 技术;学一个高性能日志系统之前我们可以先去学 Linux 内核文件读写的机制以及一些关键的数据结构;学一个新的 JVM 编程语言之前我们可以先去学虚拟机字节码及相关的运行机制、编译原理相关的一些理论。只有知其所以然,才能够更快地知其然,以不变应万变才是面对当今复杂世界的解决之道。

 

即便如此,也许你也知道学底层技术很重要,但是市面上很多相关资料都太过于高深,我们也没有太多时间花在所有的底层技术上。因此,我决定做一个尝试,来帮助你更有效地学习与工作相关的底层技术,我称之为“硬核技术”,掌握这些硬核技术,潜在的上层技术空间就越大,未来的新技术的掌握速度也就也快。

 

03

白话硬核技术系列计划

 

这个系列的文章,我会站在一个普通开发者的视角,用白话文的方式来向你介绍看似高深技术背后的每一个硬核技术,初步的一些文章如下:

  • 什么是用户态和内核态?

  • 什么是系统调用?

  • 为什么不同进程访问相同的内存地址不会产生冲突?

  • 写文件为什么一定要 flush?

  • 为什么文件不使用要关闭?

  • mmap 为什么这么快?

  • 什么是工作目录?

  • 进程睡眠到底意味着什么意思?

  • 为什么 Linux 下的软件无法在 Mac 下运行?

  • 进程上下文切换为什么这么慢?

  • 程序是如何变成进程的?

  • ...

 

这个目录是动态调整的,未来我希望能够攒够一百篇,能够覆盖大部分和我们普通开发者最接近的硬核技术。

虽然叫硬核技术,但是越底层的技术,越接近物理现象,实际上反而越简单,所以你不用担心学不会。当你的工具箱里存放的这些硬核技术足够多,未来对于新技术本质的把握也就越快。

大家有好的建议也可以在底下给我留言,截止 7.31 24:00 留言点赞最多的一位同学可以免费获取我著的 《跟闪电侠学 Netty:Netty 即时聊天实战与底层原理》 一本。

PS:关,开启你的硬核技术之旅!

 

点赞收藏
闪电侠

嗯,程序员一枚

请先登录,查看3条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步

为你推荐

服务器之 ECC 内存的工作原理

服务器之 ECC 内存的工作原理

从 Linux 内核角度探秘 JDK MappedByteBuffer

从 Linux 内核角度探秘 JDK MappedByteBuffer

日常Bug排查-连接突然全部关闭

日常Bug排查-连接突然全部关闭

6
3