前两天刷知乎,看到一个做编译器的老哥被猎头“三顾茅庐”的经历,给我笑坏了。老哥原话是“第一次感觉自己这么牛逼”,因为尽管他每次都拒绝,可猎头就是一直抓着他不放,电话打了一次又一次,真实中透着好笑。
不过基础软件领域,确实经常出现这种结构性缺人的事儿。你看华为和 BAT,大家都在紧锣密鼓地研发自己的软硬件技术,所以对做底层开发的系统级程序员的需求只会多不会少。尤其像编译器这种领域,招聘周期可能会拉长到一至两年。
主要还是因为,编译器原理本身非常枯燥,需要上承算法,下接指令集,以及高水平的布尔代数和计算机架构和算法知识,光它一个,就称得上是知识大杂烩了。更别提还要掌握其他的 CPU 核设计知识、操作系统的内存管理模块、编译器的内存分配、并发锁、基础库的设计原理等其他基础软件开发必备的知识点了。
不过要是你想从这些庞大的知识体系中选择一条脉络去学习的话,我倒是看过一个建议说 以内存管理为线索最佳。
就比如,在 C 语言编写的程序中,一个变量要经过编译器、链接器、加载器和操作系统的进程管理,然后再经过 CPU 的 MMU 模块,才能最终出现在真正的物理内存里。如果你能把这个过程讲清楚,那就说明你对这一串的工作原理有了相当的理解。所以说,内存管理的知识就相当于纲领,纲举则目张。
上面的这些感悟,不是我的原创,而是我最近看了海纳老师在极客时间的直播,摸出的一些门道。海纳不仅直播讲得清晰易懂,特别有趣,他还是知乎的高赞达人,有好几万的粉丝,我第一次知道他还是因为几年前看过他写的一个关于如何零基础学习计算机的良心回答,是那种文笔和表达都非常厉害的人。
而为了让像我一样听到内存和基础软件开发就一脸懵逼的人能更系统全面的掌握相关知识点,海纳最近专门跟极客时间推出了一个叫 《编程高手必学的内存知识》 的课程。听说专栏还没上线,预售就已经卖了几百份,三场直播也是反响热烈,累计几万人观看,看专栏留言,有不少人和我一样,是看完直播和开篇词果断入手,内容真心不错。
如果你对上面提到的任何一个知识点感兴趣,都应该去看看,现在用口令能便宜 30 块钱左右。
作者海纳,原是 Huawei JDK 团队的负责人,现在担任华为资深编译器专家,主要负责华为编译器领域的相关创新工作。这两年,他笔耕不辍,不仅在极客时间连载新的内存专栏,还在业余时间筹备了《从零开始写 Linux 内核》的新书,估计 2022 年上市,是真的很勤奋了。
海纳的工作,主要涉及的都是数据库、操作系统、编译器和图像处理,以及计算机视觉等方面,因此也让他积累了大量相关的一线实战经验。
在这个专栏里,海纳秉承着“垂直化学习”的理念,避免了水平式讲解难以形成体系的问题,带你将内存知识的繁多、复杂等难点问题层层突破。课程主要分为三个部分:软件篇,硬件篇和自动内存管理篇。
这一部分,以操作系统为核心,将进程和内存的关系彻底讲清楚,让你对操作系统、编译器,以及应用程序的运行原理有深入的理解。
编译器和应用程序都是围绕着操作系统这个核心来构建的。因此,在具体的讲述上,海纳采取的是由核心向外延方式,把软件篇的知识都给你串联起来,如下图所示。
这一部分,主要讲解的是与内存相关的计算机体系架构,包括存储器电路、存储体系结构和多核 CPU 内存模型,让你最大限度地使用好缓存,写出正确而高效的代码。同时,还可以让你掌握 CPU 设计一些简单原理,并且在此基础上,深入地学习 RISC-V 等开源 CPU 的实现。
从下面这张图可以看到,硬件的结构是从下到上层层搭建的。所以,这部分会采用自底向上的讲解方式,带你理解存储系统是怎样由简单的器件一步步变得越来越复杂的。
在这一部分关注点会从计算机软硬件,转向对具体内存管理算法的学习。
学习内存管理算法,能够让我们正确地使用各种不同语言,例如在 Python 和 Swift 中你要注意解循环引用等等。
在专栏中遇到不懂的问题,都可以在交流群中提问,海纳老师都能及时详细的回复,还有很多具体内容,一起看看课程目录。
未来,越来越多的企业会需要开发者做到能自主可控的芯片设计和进行基础软件设计,届时这个专栏会是你最好的启蒙,它不仅仅包含计算机方向的内存知识,还能帮你掌握 CPU 设计、操作系统、编译器开发等热门领域,带上它,就从现在开始吧。
粉丝专属福利: