为什么有些技术原理你怎么看也看不懂
不知道你有没有过这样的感受,就是特别想弄懂一个技术原理,翻来覆去找了好多资料、书籍、视频,但就是怎么看也看不懂,一直在原地打转一样,非常痛苦。
写这篇文章是因为,之前我在根据 Linux 0.11 源码尝试弄懂 execve 的原理的时候,就是这种感受。
我无数次静下心来,硬着头皮看它的源码,看讲解它的书籍,看那些用"通俗"的语言解读它的视频。但就是一直原地打转,不知道是因为哪里卡住了,就是缕不顺它的原理。
也正因为是这里的心病,我才决定写一个 Linux 0.11 源码解读的系列,你管这破玩意叫操作系统源码,这样可以逼迫我夯实前面的细节,说不定对理解它有帮助呢。
历时了几个月,我终于写到了 execve 的原理,也就是 第35回 | 扒开 execve 的皮 这篇文章。
也不知道是什么魔力,我这几个月完全没有再盯着 execve 的原理去看,但当我再次尝试理解它的时候,我已经没有之前那种障碍了,而是比较顺畅地根据源码、书籍等资料,把它的原理搞懂了。
------
这就很奇怪了,为什么我看专门讲它的文章和资料无法理解它,反而是看了与它不直接相关的东西使得我最终很轻松地把它弄懂了呢?
现在想想看,其实 execve 本身并不复杂,它就是利用了中断、内存管理、文件系统、进程管理、可执行文件结构等多种底层知识结合起来的产物。
所以,我看不懂 execve 实际上是因为我对底层的那些乱七八糟的细节不熟悉而间接导致的。
比如它的 EIP 和 ESP 的重置就是利用中断返回指令的效果实现的,假如对中断压栈过程和栈空间布局不熟悉的话,那这部分的代码就跟看天书一样。但要是熟悉的话,那就跟看小儿书一样了。
而这些知识,和 execve 本身又无直接关系。
------
所以,为什么有些技术原理你怎么看也看不懂,我猜大部分情况和我这种情况是类似的。就是和这个技术本身无关,而是支撑这个技术背后的底层技术,也就是你的内功不过关。
当然,你说我就为了搞懂一个 execve,花了这么长时间把下面的东西搞清楚,是不是太浪费时间了?
以前我也是这么认为的,但现在我发现,一直原地打转才是浪费时间,有些技术债是必须要"浪费"很多时间去还的。
而你花时间去搞明白了这些你觉得"没什么用"的底层知识后,就会发现他们真的很有用,能够帮助你秒懂好多你原来怎么看也看不懂的技术。
无论花多少时间在操作系统、组成原理、数据结构、网络这些地方,都不会浪费,也不会过时,放心去研究吧!
当然同时也要记得实践,记得去拓宽自己的视野,这方面我这些年做的就不好,最近正在努力调整,因为其实实践和技术视野也是会反哺到你的技术原理理解上的。