最近发现,阅读程序的源代码能够加深对程序的理解。俗话说:“熟读唐诗三百首,不会作诗也会吟。” 计算机代码本质上也是一门语言,而一款程序的源码就如同一本精心排版的书籍,我们能从阅读源码中收获颇多,在今后的代码写作中便可以模仿借鉴,也会渐渐体会到作者的一些用意。
以我们常用的一款软件为例。
Genesis 软件包
对于开源代码而言,我们能够从 GitHub 这个平台上下载到其源代码。
Genesis github 网址。
语言的构成
我们可以从其主页中了解到,整个 Genesis 程序是由多种语言组合而成的。比如,最主要的 C++ 被用于面向对象的编程;TeX 用于撰写说明文档;MATLAB 可进行数据的后处理;CMake 主要用来对接操作系统以实现统一配置;C 语言能够完成更为底层的高性能计算;Shell 语言主要与操作系统的指令相对应;Python 则可调用一些 Python 包。
从这种语言构成情况可以看出,一个软件并非仅仅依靠一种单纯的语言,而是充分利用多种语言各自的优缺点,进而形成一个和谐的整体。
我们可以反向揣摩作者的思路和用意,从而能对不同种类语言的特征有更好的理解。
源码的文件架构
可以看到源码的文件夹系统:
.github 这部分是软件的版本控制 benchmark 这部分是软件代码验证模块。 example 一些实际的案例 include C++的头文件,主要定义数据和函数。 manual 用户手册 对软件进行介绍 src C++源码 xgenesis maltab后处理
通过文件夹的配置,我们能够了解一个完整且规范的程序需要具备哪些部分。我们可以模仿与之对应的文件及代码规范,进而提升代码的可读性。对于一些不太理解的文件,我们可以通过询问 AI 来弄明白,这就相当于在语言学习中查字典的做法。
程序的说明文档
我们查看 manual 文件夹,可以看到 Gensis 的手册是用 Markdown(.md)和 Latex(.tex)格式编写的。
Latex 相当于微软 word 的功能,不过相对于 word 来说,效率更高。记得曾经填写过一个 word 格式的表格文件,不知什么原因,调整了一个单元格内的格式之后,整个 word 表格的格式就全变了,好不容易填写的表格就得全部重新排版。在那一刻,真的有想把电脑撕掉的心,心里把表格的制作者骂了一万遍,这是什么破玩意。使用 word 写毕业论文排版的时候或多或少都有这样的感受。相对于 word,Latex 则彻底解决了这个问题,将格式排版和内容创作分割开来,每一种格式都有固定的语法代码,任何格式的变化都有迹可循。
相对于 Latex,markdown 格式则轻量许多,对应的排版格式比较少,没有 Latex 丰富,不过相对于纯文本又有一定的格式,适合书写博客,而非正式的书籍。
在此基础上,作者还写了一个网站形式的说明书,更加便于阅读。
网站形式说明书
源码的角度
当然,从程序的源码中,我们能学到更多,每个人看到源码后的收获可能都不一样。
俗话说,学习一门新的语言,就像打开一个新世界的大门,从自由电子激光模拟软件的源码去看自由电子激光物理,和从自由电子激光的理论书籍去看是完全不同的感觉。