做计算机,C/C++大概是绕不过去的。就现在这个时代的语言而言,所有的语言其实都和「计算机本身」间隔了一层。这一层就是语言的规范和标准。C/C++基本上是唯一能够直接提供机械代码级操作的语言,也即是,它允许直接调用机器语言。使用计算机,最本质无过于调用机械指令来操作CPU和内存。这是计算机的边界,更是它的本质。如果要说大彻大悟,要说能够最最多的事情,那其极限无非就是直接组合机械指令来构建你想创造的世界。其它的语言,总是会间隔一层,间隔一层语言设计者的偏好:如内存的回收方式,指令的细节隐藏。也即是,你其实使用的并不是计算机本身,而是这个计算机的子集,一个被语言设计者所限制了的子集。从这个角度来理解C/C++的话,其缺陷(过分灵活)也就是其优势了。因为从极端情形上讲,它没有加入语言设计者任何主观偏见,它直接将计算机的所有能力呈现给你。那么所谓的灵活、不安全,其实只不过是因为它为你开发了最全面的功能:计算机的、无所不能的上帝视角。那么当然,作为凡人干活可不能处处使用上帝视角,你必须添加限制来使凡人的生产力变得高效。但如果从「理解」的视角,则必须掌握这个上帝视角,它是计算机能力的全量,是计算机无所不能的边界。从另一个角度来讲,所谓的「系统构建」并非一定需要依托于机械指令。例如,我们完全可以使用Java和Python来构建一个操作系统,而构建的基础,当然就是这些编程语言各自的语法基础。这等价于,我们把这些「语法基础」当做了「机械指令」。从这个意义上来讲,「机械指令」只不过是一个抽象概念,一个构建工具体系中的“原子操作集合”。阅读每一门语言的库函数是有趣的,因为你可以看到如何使用这门语言的原子操作,来重新构建一些通用性的技能(API)。只不过,C所使用的原子操作集合,就是计算机的机械指令集本身罢了。而其它现代语言,大多建立在「虚拟机」之上,因而是概念上的机械指令。从理解的角度讲,「虚拟机」是中间层,为我们透彻领悟整个计算机体系提供了障碍;从使用角度讲,「虚拟机」帮我们屏蔽了底层硬件系统的不同,能够真正实现同一份代码跨平台、跨机器的使用。也即是,「学习」的话,当然是要剥开这个middle man,而使用的话,当然是一定要引入middle man。这个意义上讲,这也是“反读佛经”的具体应用:理解一定要揭开表象看本质;而做事,则一定要铺陈好表象,用表象来保护自己、用表象来提高「做事效率」。