Linux 是一个非常优秀的操作系统。如果将操作系统比作一辆汽车,那 Linux 就是一辆性能优越的爬山王,上山下海飞天无所不能。
如果你能驾驭这辆爬山王,一定不会只满足于驾驶它上下班,不能只会挂挡、踩油门和控制方向之类的基本操作。我们想充分了解并掌握它,挖掘其更多潜能。但是,这个过程有相当的难度,但是你一旦能够驾驭他就能够享受其中的快乐。
01 / Linux 系统编程门槛
对于想学习 Linux 系统编程的开发人员来说,其难点在于,Linux 所囊括的技术点繁杂,往往不知从何下手,去买一本书来看发现有800页看着看着就睡啦。
对于稍有些系统编程经验的 Linux 开发者来说,难点往往在于,缺乏对底层技术的透彻理解,而不能自如地把握和控制好系统的复杂行为,同时,底层技术也经常成为中级开发者晋升到高级职位的瓶颈。
02 / 学校Linux需要指南针
Linux 发展到今天内容非常多而且复杂,这给想接触Linux的小伙伴来说不是一个好消息。虽说 Linux 开放了所有设计图纸,可如果将这些图纸全部打印出来,可能要装满整个房间,这估计得把好多人吓退,即使号称 Linux 源码航海图的《深入理解 Linux 内核》图书也有 800 多页。如果毫无方向地从头看起,苦海无边回头是岸。
在我最开始接触 Linux 系统开发,还没有多少真实项目经验时,就曾数次扑进 Linux 设计图纸里,但每次都坚持不了几个月,每次在夜深人静的时候就想起为什么受伤的都是我。
对于 Linux 开发者,这时如果能有一本 Linux 航海图的阅读指引,标注出航海图上宝藏的埋藏位置和宝藏简介,一定可以让学习过程更有方向性,也更加轻松愉悦。
03 / 想要飞的更高必须的要,根基牢固
随着时间的发展人们的需求越来越复杂,对开发人员的要求越越来越高,开发人员只有对底层实现细节有越来越透彻的理解,才能更好地把握和控制系统的复杂行为。否则一旦遇到如下这些问题,将很难从根源上解决。
程序在某个位置出现间歇性崩溃,可当我添加一行调试用的日志后,就再也没崩溃过了,这背后到底是怎么回事呢?
我写了一个多进程模型的服务器,但总感觉新进程启动地不干净,有时会有些父进程的东西掺和到子进程里来。可如果让父进程在启动子进程之前做更多的计算,或者单纯多等一会,这种情况发生的概率便大大减少了,该系统的行为让人有点捉摸不透,其背后的原因是什么呢?
我的信号处理程序与主程序使用同一个共享变量来交换信息,大多数时候都能正常工作,可总会时不时抽风一下,代码都已仔细检查过,找不出任何逻辑上的问题。这让人非常苦恼,到底是哪里出现问题了?
类似这种程序表现与预期不完全一致的情况会让开发者非常头疼,尤其是那种大部分时间表现正常,偶尔会“抽风”的情况。这些令人头疼的问题,我不止一次地经历过,数次被 Linux 伤害自信的感觉至今仍记忆犹新。
幸运的是,在经历了多次探索、踩坑之后,Linux 系统的行为特点以及如此设计的内在原因终于在我眼前逐渐明晰起来,这个系统内部精巧的设计也越来越清晰地展现在我眼前。
如今,我已从事 Linux 开发近十年,再回想那段在 Linux 世界中几度迷失的经历,已经能够明确知道问题出在了哪里——还不知道它能做什么时,便试图弄清它是如何运作的。正如还不知道一辆车发动后如何前进,便开始研究发动机、变速箱里的那一堆齿轮、联动部件,结果自然是事倍功半。