开源 – “这是最好的时代,这是最坏的时代”

今天一早,我给一位远在西安还从未谋面的程序员小邓发出了一份很不错的 offer。一周前,他观看腾讯开发者大会的直播视频,听了我的演讲之后,加了我的微信,并主动告诉我,很想加入涛思数据。虽然他毕业的学校还有工作的经历,不是那么靓丽,但我一下看到了他简历里列的 GitHub 地址以及参与的开源项目,因此马上进 GitHub 浏览他的程序,发现程序挺漂亮,结构、层次都很清晰,代码可读性很强,更让我惊讶的是,用英文写的文档以及注释完全不输给我这个在美国留学工作 10 多年的海归。我立即让另外一个同事也去看一下他的代码,得出的结论是,这人很优秀,即使远程工作,也值得马上录用。因此我们马上视频交流,很快,我就定下了录用的决定。

如果没有 GitHub ,没法翻看他写的上万行代码以及文档,没法查看修改记录,我绝不会考虑录用一个连面都没有见过的小伙子,而且招聘时,还是会更倾向于我中国科大的师弟师妹,或有过其他名校就读和大厂工作经历的人。开源,改变了我的面试流程,改变了涛思数据,也改变了一个程序员的人生轨迹。

现在的软件系统往往很大,以大家熟悉的Linux内核为例,源代码行数已经超过 2500 万行,文件超过 6 万个,参与的开发者超过 2 万人。就连涛思数据开源的 TDengine , 一个看似简单的物联网大数据处理平台软件,C/C++ 代码已经超过30万行,Python测试代码都已超过 15 万行,而且还会成倍增长。开发一款软件,更多的是团队协同,而不是单兵作战。单个程序员的贡献如何体现?如何让外界的人知道并评估?对于闭源软件来说,这个价值判断问题无从下手。但开源不同,因为程序员写的任何一行代码,注释,做的任何修改都会被记录下来,而且任何人都可以看到。能力的高低,贡献的大小随时可查。

TDengine 时序数据库 - 开源 – “这是最好的时代,这是最坏的时代” 18
TDengine 在 GitHub 上的页面

开源给程序员提供了一个展现自己个人能力的绝好机会,特别是对于大厂、大系统的开发者。这个展现,能让大家更加客观地评价一个程序员的价值。长期以来,大家更容易相信在大厂工作过的,虽然他有可能从没贡献过核心代码,从没解决过重大技术问题,只是一个滥竽充数之辈;大家更倾向于相信名校毕业的,即使他早已停止学习,只是曾经高考分数不错;大家更容易相信 35 岁以下的人,不相信大龄程序员依然有很强的战斗力。开源的代码,能让大家抛弃对教育、年龄、性别、经验、肤色、地域、文化的偏见,看到一个程序员背后真正的价值,便于组建团队,便于协同作战。

开源让程序员的代码成为了作品,与画家的画、音乐家的曲子一样,可以被全球程序员欣赏、使用,并传承。对于闭源的软件而言,这是不可能的,大家看到的只是 UI 或 API ,无法让人看到程序本身,更无从欣赏。你在微软为 Windows 操作系统开发的核心模块,无论设计得多么优雅,你在腾讯为微信后台设计的消息处理模块,无论高并发能力有多么强悍,都无法让人欣赏、惊叹。但开源之后,一切都变了。只要你的代码足够好,解决了重大问题,那一定会成为传世之作。即使有瑕疵,后来者也可以在你的基础上修改,但你的名字永远会镌刻在代码上,而不会被历史冲刷掉。

有了作品这个感觉之后,程序员会天然的对自己的代码产生一种自豪感,会对代码的质量产生极致的追求,因为他不想自己的代码被人唾弃,而是被欣赏。在 2019 年 7 月决定将 TDengine 开源之前,涛思数据团队花了好几个月的时间整理代码,编写文档,目的就是不想让它过于难看,被人诟病。不开源的话,我们根本没有这个动力去做,因为用户是看不见的。在 2019 年底启动 TDengine 2.0 的开发,更是如此,就是想让 TDengine 的设计与代码更加优雅,结构更加清晰,让其他程序员看的时候,能享受到一种快乐和美感。3 个月前,我花了几天时间动手为 TDengine 写了一个小模块 tref.c,就想完美地解决在多线程情况下,资源的生命周期管理问题,而且就希望这个 500 来行的小程序能被全球的程序员学习、使用和改进,不再为多线程问题所烦。如果不是因为开源,没有会成为作品的感觉,我大半就是仅仅解决一个具体问题而已。

TDengine 时序数据库 - 开源 – “这是最好的时代,这是最坏的时代” 19
GitHub 上 tref.c 的一段源代码

对于初入茅庐的程序员而言,参与开源项目,更是一种学习的机会。不仅可以观摩、学习绝顶高手的代码,更可以参与其中,贡献一段代码。自己写的代码有问题,一定会被测试出来、被人指出毛病,甚至直接被人修改或抛弃。与大侠直接过招,相比闭门造车,相比自己摸索,成长的速度要快 N 倍。而且参与的方式有很多种,除直接贡献产品代码外,还可以贡献测试例、测试代码,贡献文档,贡献使用案例等。就象TDengine,测试代码的行数将会远超过产品本身的代码行数,而且对技术的要求一点都不亚于产品本身。我的第一行程序是 1984 年写下的,当时正读高中一年级,只能看到谭浩强编写的《BASIC 语言程序》这本书,书里尽是一些简单得不能再简单的程序。如果当时就能像现在这样访问无数优秀的开源代码,对于一个如饥似渴的学生而言,那无疑找到了世界上最好的课本和老师。

对于 90 后 00 后程序员而言,开源,让他们赶上了程序员前所未有的黄金时代。对于我这个 52 岁的大龄程序员而言,仍然是赶上了黄金时代,因为可以依靠自己的实力证明,编程没有年龄的限制,而且仍大有用武之地。真心的希望,三十年之后,还有人在看在用我写的代码,而且我自己还能给 TDengine 贡献代码,那才是我最大的幸福。

TDengine 时序数据库 - 开源 – “这是最好的时代,这是最坏的时代” 20
这台 Mac 为 TDengine 贡献了 4 万多行代码

“这是最好的时代”,开源,让程序员的价值能更客观地展现,让程序员有了属于自己的作品,让程序员去追求极致,有动力去打磨作品,让其成为传世之作。对于真正的程序员而言,毫无疑问,这是最好的时代。

“这是最坏的时代”,开源,让滥竽充数的程序员无所遁形,能传承下去的一定是精美的作品,不再会有劣币驱逐良币之说。对于靠拍、靠混,依赖炫酷的 PPT 和报告升迁的程序员而言,毋庸置疑,这是最坏的时代。

无论年龄,无论学历,无论是在 BAT 还是在 startup 工作,  只要你热爱编程,就一定要参与到开源的浪潮中。无论你是全职加入涛思数据这样的开源软件公司,还是作为社区贡献者参与一个开源项目,只要持续努力,你一定会给世界留下一个印迹,给人类留下一幅作品。

陶建辉

2020 年 12 月 27 日于北京望京