你好,我是于航。

首先,恭喜你完成了整个专栏的学习!今天是这门课中必学内容的最后一讲了,很荣幸能陪你一起走完这三个多月的 C 语言学习之旅。

其实,这趟“旅程”于我而言要更漫长一些:从去年 9 月底开始筹备这个专栏,到 12 月初课程上线,再到今天更新结束,时间跨度接近半年。这个过程也促使我对自己已有的知识体系进行了一次重新梳理。还要特别感谢那些经常在评论区提出问题、分享经验的同学,与你们的交流,让我在知识积累和认知广度上都获益良多。

在这场旅途的“终点”,想跟你聊点不一样的东西。就先从对“起点”的回顾开始吧。

“新视角”与“旧语言”

去年 9 月份的时候,得知极客时间想要出一门有关 C 语言的课程,我当时还是有点惊讶的。毕竟,与 Rust 和 Go 这类新兴语言相比,C 语言似乎显得有些基础和平常。我们知道,很多编程语言都是以 C 语法为原型来进行设计的,它们选用了同 C 类似甚至完全相同的语法形式,并且还进行了多方面的改进。虽然 C 这门语言是我在工作中使用最多的语言之一,但我还是有些担心:一些同学会不会认为 C 语言早已没什么“有特色”的内容,不值得学习了呢?

带着些许疑虑,我和这门课的编辑同学进行了大量前期调研。在调研的过程中,我们发现还是有不少同学对 C 语言感兴趣的。并且我们还发现,很多同学想要学习 C 语言,其实也是希望能通过这门抽象层次较低、贴近底层硬件的语言,来更好地理解计算机系统的底层运作机制。基于此,我对这门课的课程定位和设计思路进行了一些调整,把课程重点从对 C 基本语法的讲解,改为了从底层视角观察C 这门编程语言的实现细节。于是,就有了你现在看到的《深入 C 语言和程序运行原理》。

虽然之前担心过有些同学认为“C 不值得”,但我自身还是对 C 语言非常有信心的。我在开篇词里说过,时至今日的 C 语言仍然“老当益壮”。而今天我要说的是:C 语言不仅在过去和现在发挥重要作用,它在未来也同样会发光发热。

C 语言未来的发展方向是什么?

我们能够明显地观察到,如今的 C 语言已“今非昔比”,它跟我们在大学课堂上一板一眼学习的 C89 标准早已有了很大区别。C99、C11,乃至 C17 标准中加入的新特性,保留了 C 语言原本“贴近底层硬件”的性质,不会对机器代码做过多抽象,同时进一步提升了开发者使用 C 语言的生产效率。

当前的 C 语言仍处在不断进化的过程中。ISO 标准委员会并不希望为 C 语言增加过多新特性,变动的重点在于保证 C 语言基本特征(易用、高性能、贴近硬件)的同时,进一步修复语言中的遗留问题,让它用起来更方便。

C17 标准之后的下一代 C 语言标准是 C2x 标准,它预计会在 2023 年发布。目前已经有很多修改草案被纳入到该版本中,这里我列出了其中一些比较重要的改动:

从这些改动中,你可以对 C 语言的未来发展方向有一个基本感知。可以看到,大多数 C2x 中的新提案都是为了增强 C 这门语言的易用性,而并不会对语言本身做过多封装。这使得 C 语言变得更加易用,同时 ABI 也保持着稳定,可以说是兼顾了灵活性、高效性和兼容性。

随着 C 标准的发展,C 语言也被更多地应用在生产项目中。比如,就在不久之前,Linux 之父 Linus Torvalds 宣布,他希望尽快将 Linux 内核使用的 C 语言标准从 C89 升级至 C11。你可以点击这个链接来了解更多信息。

图片

C 语言仍在不断进化,并且,伴随着新生事物的出现,它的应用领域也正变得越来越广。随着“第四次工业革命”的快速展开,这一点将越发凸显。接下来我们就来看看,C 语言在工业 4.0 时代的应用场景。

C 语言与第四次工业革命

第四次工业革命也被称为工业 4.0,或 4IR。这个概念最早起源于 2011 年德国政府的一个高科技战略项目。随后,世界经济论坛创始人兼执行主席 Klaus Schwab 于 2015 年对其进行了推广,并强调了 4IR 对整个产业的影响。

4IR 在前三次工业革命(蒸汽时代、电气时代、数字时代)的基础上,进一步强调了“工业智能”的重要性。它的具体表现是:利用智能化技术,大幅降低人在整个工业生产链中的参与程度,以尽可能做到智能的自动化生产。这一过程涉及到的技术领域主要包括人工智能、大数据、(工业)物联网、虚拟现实、云计算、机器人,等等。而这些不同技术之间的无缝协作,便成为了这场革命决胜的关键。

现在,让我们从宏观走向微观,仔细看看上面所说的具体技术,你会发现其中的每一项都少不了 C 语言的“参与”。

我们都知道,用于支持计算机正常运行的底层系统软件大多基于 C 语言构建,这里就不再赘述。而除此之外,我们首先得承认的是,C 语言仍然是物联网、机器人这两个应用领域内的首选编程语言。

物联网与机器人编程需要软件能够直接与相关硬件通信,而 C 语言的低抽象层次正使得开发者可以灵活控制代码编译产物,做到对硬件的精准控制。同时,C 语言还有较高的运行时性能,这意味着对于同样的任务,开发者可以选用功耗相对更低的芯片。无论是从节能环保还是降本增效的角度来看,这都可以说是双赢。

在工业 4.0 时代,基于“统一计算设备架构(Compute Unified Device Architecture,CUDA)”编程模型等技术进行的高性能 GPU 计算,成为了推动虚拟现实、自动驾驶汽车,甚至是区块链等领域发展的关键技术点。而这类技术在设计时,也都默认提供了基于 C 语言的编程接口。可以看到,C 语言在需要与硬件直接打交道的场景中,仍发挥着重要作用。

不仅如此,为了进一步提升算法执行效率,C 语言在人工智能领域也有着重要应用,比如 TensorFlow 等框架就为 C 程序提供了相应的专用接口。而在大数据和云计算领域,Oracle、PostgreSQL、Apache、Nginx 等高性能数据库和服务器软件也均由 C 语言编写。基于 C 语言开发的各类框架为高性能的数据处理和计算提供了保障。

总之,在工业 4.0 时代,无论你是否直接使用 C 语言编码,都会在无形当中直接或间接地与 C 语言打交道。

写在最后

在这门课的最后,我想说的是:希望这一趟“不一样的 C 语言之旅”能让你有所收获。同时,结课并不意味着学习之旅的终结,而应该是你继续探索的新起点。

还记得我在春节策划一里提到的“飞轮学习法”吗?这里,再回想一遍其中的两个学习基本原则吧:第一,由点成线再成网地构建自己的知识体系;第二,不断地重复获取和咀嚼知识,让学习的飞轮转起来。

希望这门课可以帮助你把一些之前就了解过的“单点知识”联系起来,基本建立起一个关于 C 语言的知识网络。那么,接下来你要做的就是继续深入了解相关知识,并进行大量实践。这样,就能在已构建的“面”的基础上加深“点”,让知识网中的各个点互通有无。

正如《现代操作系统》一书中所说,“在计算机的历史中,每个新物种,无论是硬件还是软件,似乎都要经过它们前辈的发展阶段”。互联网技术的变化日新月异,似乎每一个新技术的出现,都在重复那些老技术之前已经走过的路。但也正是那些经历了时间的考验,仍稳定不变的技术理论体系,在支撑着这个世界的快速变化和发展。因此,如果你能通过 C 语言,从基础层面了解程序是如何工作的,并深入理解计算机系统的底层运作机制,那么就能更好地拥抱这个不断变化的世界,更快地理解并掌握新技术。

最后的最后,我还给你准备了一个调查问卷。题目不多,大概两分钟就可以填完,主要是想听一下你对这门课的看法和建议。期待你的反馈!