说来惭愧,身为一名程序员,从业五年多,竟然最近一年才开始在开源世界为他人的项目贡献代码。 最近我在阅读一个写得很棒的开源小代码库的时候发现他有一个typo错误 (这个错误竟然已经存在了9年了都没有被发现😂,而且是一旦运行到这里就会引发Exception的), 于是动手给他改正,并提了一个 PR 给维护者(虽然不是原作者),一天后就得到回复并最终被merge了。我很开心, 至此我第二次成为他人项目的contributor,虽然只是一个小小的typo fix,但其实要读懂一个 高级的代码并理解他的思想并不容易,特别是当你读一个比自己水平高很多的人写的代码的时候。

顺便提一下我第一次成为他人项目contributor是为其贡献一个小小的feature, see PR

这两次经历其实是一脉相承的,起因是我想要寻找一个能在C++项目中使用的动态表达式解析器。 第一次我找到了一个相关的小项目并简单阅读了一下代码发现它并不能完全满足我的需求, 但看起来要满足我的一个需求其实改动并不复杂,于是我动手改了一下并提PR建议给维护者, 经过简单讨论以后这个PR竟然被接受了。那时我也很开心。

之后我又考虑其他方案,但最终我觉得有时间还是应该去了解一下那个成熟的嵌入式脚本语言Lua。 于是今年初我开始学习Lua(前年买的书终于开始读了……买书如山倒,看书如抽丝啊), 和世界上大多数知名的成熟的通用的项目一样, 他们为了通用性,并不会为某一种简单的具体的小应用场景贡献特别简单易用的API,顶多给出一个Example 让你看看学学怎么用。因此有些项目应用起来还有点小门槛呢! Lua也是这样,虽然它很简单,上手很容易,但是就是写起来稍微有点麻烦,于是我就想,学都学了, 就顺便写一个小小的Wrapper库让它用起来更简单方便吧。 于是不久我就写好了,正好也借此机会加深了对Lua的理解,也加强了熟练程度。

作为一名程序员,我信奉一句话:

想要成为一名优秀的程序员,你要多代码,想要成为一名卓越的程序员,你要多代码, 特别是要多读卓越的代码。

于是我又在Github上搜索类似的项目,然后就看到了这个几乎是十年前的项目,它是我目前搜到的同类中最好的。 它提供了一些令我感觉Amazing的功能,然后我就开始了阅读这个项目代码的坎坷旅途,区区两千余行代码, 竟然让我看了好几天😂,它击中了好多我的知识盲点,我是一边恶补知识盲点一边读这个代码的! 然后有一刻我发现有一个地方看着很奇怪,在深入看了这个点的上下文代码和相关功能的实现后, 我最终确认这是一个 copy then paste then forget to modify 的 typo, 于是便有了本文开头所说的事。

成为Contributor,虽然这是不值一文的小事,但却是我的一个小小的里程碑, 仿佛一个人的出生一样的小小的里程碑。我想它是代表我不是只能写自己的代码, 而是可以加入开源大世界的小小里程碑吧,故此留念。

写出卓越的代码,贡献给开源世界,得到全世界程序员的使用和认可,从而帮助程序员们, 甚至不仅仅是程序员而是世上所有人们,帮助他们构建更美好的世界,是多少程序员们的终身追求啊!

作为程序员,我们应该信奉另一句话:

Build the World!