源码面前了无秘密吗?
有人说,源码面前了无秘密,这句话只说对了一部分。就像一部伟大的文学作品放在你面前,即使里面的每个字你都可以看懂,但是你不一定就能够察觉出其中的奥妙之处。这通常要求你是一位优秀的读者或者是优秀的作家。作为程序员,是否能够察觉源码中蕴含的秘密,取决于我们编程的能力、对项目背景的了解、是否遇到过其中的一些问题等等。
我们程序员一般同时是读者也是作家,比文学作家幸运的是,我们发明了一台时光机:git 。不仅可以在 github 上面看到很多源码,有了 git , 我们还可以看到代码是怎么一步步演化的。这意味着我们可以比较每一次的改动。
比较编程学
有一门专业叫“比较政治学”,我喜欢的作家刘瑜写过:
比较的视野,能帮助我们发掘许多重要的、有趣的问题。即便不是讨论政治议题,在我们日常生活中的许多思考,也往往需要通过“比较”这种意识来发现问题、打开思路。因为“比较”产生冲击,而冲击带来思考。
我在想是否可以有一门课叫“比较编程学”:利用优秀的开源项目的 git commit 记录来学习编程。这有什么好处呢?
- 有很多项目经过这么多年的发展,即使其代码开源出来,面对这么庞大的工程文件,通常我们也无从入手。我们需要一个麻雀虽小五脏俱全的项目,而通常一个项目发布的初始版本就符合这个特征,非常适合我们学习。
- 每一次 commit 的代码一般不会太多。即使很多也是属于某一个功能的,不至于让人摸不着头脑。所以可以通过阅读一次次的 commit 来一点点地熟悉项目。
- 有一些 commit 还有对应的 issue 和 pull request ,这给一些看不懂的 commit 提供了上下文信息。
- 有很多反复修改的 pull request ,这可以让我们看到优秀的程序员是怎么做 code review 的。