我 2010 年开始在 Github 上开源自己的代码。在 push 代码之前我根本没想过为什么。只是因为我当时学了 git,而且我又觉得 Github 很方便,可以用来备份自己的代码。
而后我就参加工作了,在工作之余我还会写一些感兴趣的代码分享到 Github,没事也经常在上面瞎逛,找一些自己感兴趣的代码来学习。我自己写的博客后来现在都托管在 Github 上了。
没想到这么多年下来,在 Github 上玩开源已经成为自己的一种习惯、爱好和生活方式。近一年工作轻松些了,有更多时间投入在这上面 (忽略最近两个月的大量提交数据,因为有个自动脚本在同步笔记等等 )
最近越发觉得,和这个世界交互、分享越多,就会有更多的可能性。这里分享一下开源的收获和感受。这里仅从开发者角度考虑这个问题,因为公司是否考虑是另外一个更复杂的事。
分享是为了自我提高。
我建议任何在学编程的人参与到开源活动中来。现在的软件开发已经过了刀耕火种、徒手编码的年代,软件开发需要复用大量已有的库和工具,大型软件开发是一种社会化的、集体性的智慧活动。在 Github 上分享代码,给其他开源项目做贡献,是最好的一种方式来练习这种编程能力、协作能力和复用已有代码的能力。在 Github 上混久了,就形成一种自然而然地做贡献的习惯,在这里我们不只是使用者,也可以是创作者。
在这个过程中我自己学到了很多,为开源做贡献属于Working in Public,也是Learn in Public。强烈推荐这篇 Learn in Public 的文章,这是一个改变了我的观念。Working in Public 的好处在于我们做的贡献可以算作能力的证明,参考刘未鹏十年前的怎样花两年时间去面试一个人 – 刘未鹏 | Mind Hacks。这些年我换工作就碰到过认可我的代码,面试就是聊聊的公司。
绝大多数代码不值钱。写代码的时候内心戏不要太多,自己几斤几两也要有个数。纯代码不值钱,业务才能赚钱,所以代码得运行起来。如果分享出来的代码对别人有用,就能产生价值,产生价值就附带可以赚钱。
举个例子,我在自己看书《Enssential of Programming Language》的时候,一边学习一边把课后习题用代码实现了,chenyukang/eopl: my solutions to EOPL3 。
这个代码如果一直留在我硬盘的某个角落,估计就是分文不值。我总不能把它当作传家宝留给我的后代。但是开源之后居然每年都会收到一些邮件咨询这方面的问题。因为这本书是国外一些大学的教材,他们学编程语言相关的课程就需要做这些编程题,还有一些课后项目。
所以,有的同学就付费让我咨询。对于我来说,我当然愿意,一个小时能赚 2000 左右这不比上班划算么。嗯,大学能出国的人有的还挺有钱。
当自己的成果帮助了其他人时,也能收获一些满足:
另外一个例子,我分享了自己在学习数据结构和算法时实现的一个生成迷宫程序,然后还写了一些 A* 算法相关的文章。后来上海大学有个教授看到我的文章,问我能不能帮他们看个程序,他们需要在 1w 多个节点里面计算 k-th shortest 路径。我花了一些业余时间帮他们把核心算法用 C 实现了,他们后来把文章发表了出来,还把我的名字署上了。Identification of hepatocellular carcinoma related genes with k-th shortest paths in a protein–protein interaction.NETwork - Molecular BIOSystems (RSC Publishing)。我可从来没想过自己会发表一篇分子生物类的文章。
这就是分享的奇妙之处,你不知道自己的分享什么时候就帮助了别人,创造了价值。
这些如今牛逼的开源项目都是从最开始一个小的分享举动开始的,Linus 在分享自己的小 Kernel 时估计并未曾想过整个操作系统行业被自己改变了,尤大在分享自己的前端成功时也未料到过 Vue 发展成这样。
最后,很推荐这两期播客 : 和Vue.js的创造者尤雨溪聊开源软件 - 牛油果烤面包。另外可以听听这期跟 Anthony Fu 聊聊全职开源和他的故事,有些开发者已经实现了全职做开源这种工作形态。
而且现在国内开始出现了一波用开源软件赚钱的公司,比如 Pingcap,TDengnine 等。这是个很好的趋势,让我们这些本身喜欢写代码的除了 996 有了更多选择。