每一位程序员都应该学习的优秀代码

开发 前端
有时,开发人员编写的代码对硬件的利用能达到让人惊叹的地步,并给整个世界留下深刻的印象。

当我闲暇时,我会浏览 Github 的代码库。使用新的计算机软件、工具或实用程序时,我也喜欢琢磨下它的运行机制。通常情况,我会研究它的代码库,以了解其内部模块和外部依赖是如何有机结合来完成工作。

[[382376]]

几年前,我查看 Python 语言代码时,突然发现了一些 C 语言编写的源文件,并检查了 GNU C 编译器集合的实现。我发现这个先进的 C 语言编译器就是用 C 语言编写的。学习事物的内部结构并深入了解,可以颠覆我们的认知并学到丰富的知识。过去的开发人员通过自己的辛勤工作,为现代开发人员创造了一个太平的世界。作为现代开发人员,我们应该感谢他们的出色工作。

当我浏览 Github 代码库时,我注意到各地的开发人员完成了以下的杰作。

阿波罗 11 号导航计算机(AGC)

阿波罗 11 号使人类第一次成功地登上了月球。只有 4KB 物理内存的阿波罗导航计算机(AGC)完成了对航天器的控制。AGC 的软件以 AGC 汇编语言编写,并存储在称为磁心线储存器(ropememory)的特殊只读存储器中。之前有人将源代码的扫描副本上传到了 Internet。然后,这几个模块被转换为文本文件,并上传到了 Github 代码库。

AGC 登月模块中的代码片段,作者截图

阿波罗(Apollo)工程团队付出了巨大的努力,编写大量的汇编代码来取得如此惊人的成就。在 1960 年代,编程可比现在困难多了。因为在那时,编程语言多为低级语言,需要直接操作硬件。所以,程序员必须编写精心优化的代码来提高硬件使用效率。

雷神之锤 III 竞技场

雷声之锤 III——竞技场是由 id Software 开发的第一人称射击游戏。它开发于上世纪 90 年代,当时由于 id Tech3 等游戏引擎的技术的出现,3D 游戏行业开始兴起。不像现在,那时候硬件资源非常有限。因此,游戏开发人员必须编写精心优化的代码以实现图形元素的渲染。许多游戏编程都需要实现矢量归一化,这提出了对平方根倒数运算的需求。如前所述,开发人员必须为这些与图形计算相关的工作选择最有效的算法。因此,雷声之锤 III——竞技场开发团队使用一种非常聪明的方法进行平方根倒数运算,比如下面这样使用位级计算。

雷神之锤 III 竞技场中的平方根倒数快速算法,作者截图

这段代码的优化水平以及在 90 年代就能开发出如此出色的计算机游戏这一事实,真的很让人惊讶。如今,游戏开发通常不需要处理这一级别的计算,因为物理函数已经由游戏引擎实现。

GNU 编译器代码集

C 语言是高级编程语言的鼻祖,因为它既非常靠近硬件又能提供良好的可读性。作为 C 语言的编译器,GNU 是自引导的。换句话说,它是应用编译器引导概念的 C 语言程序。Github 上的 GNU 编译器代码库中的这个文件是我见过的最长的 C 语言源文件(可能有比这更长的 C 语言源文件,但是我没见过)。

GNU C 编译器中的解析器的源文件有 2 万多行代码,作者截图

Chromium

流行的 Web 浏览器(例如 Google Chrome,Microsoft Edge 和 Opera)很多是基于 Chromium 开源项目,该项目有两个主要依赖:1)Blink 渲染引擎。它是 WebCore 库的一个分支,该库由 Webkit 团队基于 KHTML/KJS 进行开发;2)v8 JavaScript 引擎。该引擎由 Chromium 团队开发。毫无疑问,Chromium 代码库非常大,并且依赖很多第三方模块,例如 gRPC 和 Skia。但是,Chromium 团队以一种非常优雅的结构来组织所有组件。他们非常明智地将用户界面和内部函数分开,以提高整个工程的可维护性。

划分良好的 ChromiumUI 组件抽象层的目录结构,作者截图

此外,此代码库还包含 Chromium Android 和 iOS 手机端程序的源代码。大规模的跨平台应用程序目录结构的划分可能会有些复杂。但是,Chromium 对 Linux,Windows 和 Mac 不同平台代码目录结构的划分做的非常棒。

Gitk

如今,基本上每一个软件开发团队都会使用 Git 来进行代码历史和版本的管理。Git 最初由 Linux 内核的创始人 LinusTorvalds 开发。确实,Gitk 的源文件的 Git 代码中一个神奇的模块。Gitk 是一个 GUI 应用程序,可以让我们以可视化方式浏览历史提交记录。我们可以使用以下的 CLI 命令来比较两次提交之间的差异。

  1. $ git diff <commithash> <commithash> 

但是,借助 Gitk 的可视化展示方式,我们可以更快速地明白不同提交之间的差异。Gitk 的整个源代码只有一个文件。它是使用 Tk UI 工具包(Tcl 的扩展程序)以 Tcl 脚本语言编写的。它仅仅通过一个源文件就实现了整个 GUI 应用程序,还选择了一种动态编程语言来大大加快 GUI 应用程序的开发速度。

Gitk 由约 1 万 2 千行代码的单个源文件来实现,作者截图

 

责任编辑:赵宁宁 来源: 前端之巅
相关推荐

2019-11-13 17:36:32

工程师人生第一份工作算法

2015-07-02 11:20:17

程序员代码

2018-03-07 12:57:53

2012-02-28 10:52:13

2015-04-16 10:26:51

程序员 Python Ruby

2011-07-25 10:09:57

Python

2024-04-10 12:36:41

硬件代码

2014-12-26 10:19:14

程序员

2016-06-03 15:18:45

程序员

2021-08-19 15:14:29

程序员电子表格Airtable

2014-08-04 10:43:47

程序员

2011-06-16 08:58:57

软考程序员

2017-09-07 15:12:42

程序员

2014-07-16 09:34:44

2020-12-07 14:58:50

程序员开源开发者

2017-04-07 10:40:48

程序员学习命令行

2013-03-20 17:58:41

虚拟内存程序员

2021-10-20 06:05:01

编程语言开发

2022-09-11 15:20:05

程序员命令开发

2021-10-18 10:21:28

程序员技能优化
点赞
收藏

51CTO技术栈公众号