CatCoding

最好的学习是输出

2021-09-07

之前我设想如果有了足够多时间,会做这些事:到处逛逛,锻炼英文写作,​投入到开源社区中。最近一年有了一些空余时间来做这些。我通常是十点到公司,下午五点半左右到六点之间离开公司。晚上陪小孩,洗漱哄睡完毕之后大概是九点钟。所以每天早上、晚上,加上周末,我都有一段时间可以用来自己安排。

​这半年时间我参与了好几个开源项目,基本是顺着自己感兴趣的领域来的:

  1. 3 月左右,微软有个 FHL(Fix/Hack/Learning) 活动,基本有两周左右时间可以做自己感兴趣的项目,或者是学习点什么技术。那段时间我在琢磨怎么下好五子棋,因为和老婆经常比赛赌输赢。所以我写了个程序来下五子棋 gomoku,顺便学了一些技术相关的,比如 Rust,WebAssembly,Azure function,monte carlo,minimax 算法等。可能是我很久没从头到尾写个项目的原因,这个项目写得很来劲,顺便掉入 WebAssembly 的坑里。

  2. 接触到了 WebAssembly 发现有些意思,所以看了很多相关的内容。然后我参与到了 wamser.io。这是一个 Rust 写的 WebAssembly Runtime,还包括各种语言的 SDK 之类的。我开始从一些简单的 PR 到一些 Bug 修复。通过这些投入我大概也熟悉了这个项目的代码。这个项目 Star 数目虽然有 1W+,但是其实日常维护者已经只有两位了,其背后是一个公司在支撑。这公司之前是在 YC 孵化的,但是据我观察是没找到合适的商业化途径。当年 Docker 是找不到合适的盈利方式,所以最终选择开源。不过短短几年,现在这些技术型创业公司,基本都是默认开始干开源的,比如那些开源数据库之类的项目。

  3. WasmEdge 做了一些和 Dapr 的集成 Demo,花了大概两周的业余时间来学习 Dapr 和 WasmEdge 相关的技术,最终完成项目 dapr-wasm。这也是我第一次尝试收费帮人做开源,虽然不多但是也算是个不错的开头。既能赚钱又能学点新东西,何乐不为。

  4. 玩了一段时间 K8S 和 Linkerd 之后,我对容器相关技术又有一些兴趣。仍然记得 2014 年刚接触到 Docker 时的震撼,所以我想看看容器到底是怎么做的。后来找到了 Rust 实现的 Container Runtime youki。这个项目主要是一群日本年轻人在开发,项目发起人还是 96 年的。真是后生可畏!我陆陆续续大概提交了十来个 PR,主要是改进一些测试脚本、参考 runc 来实现一些功能,通过容器的基准测试等。在 discord 偶尔和项目发起者聊聊天,交流一些中日的 IT 相关感受也挺有意思。贡献了几个 PR 之后,他邀请我成为项目的 maintainer。我觉得这是一个很好的锻炼、提高自己的机会,所以就欣然接受了。其实容器底层都是一些什么权限管理,namespace,cgroup,file system 等基于操作系统的抽象层做了隔离,跑起来就是进程而已。在开发容器的过程中,有时候会把自己的 Host OS 搞跪,所以最好是在 wsl 或者 VM 里面开发。

  5. 最近在使用 Rust 过程中,发现 lint 会重复报告某些提示。经过搜索发现已经有人提出了同样的问题。我曾经好几次尝试过看看 Rust 的源码,但一直没沉下心有所得。这个 Bug 看起来并不难排查,也许是一个很好的契机。我花了大概几个小时时间从理解 lint 相关的逻辑,到复现这个 Bug,找到代码里的问题,然后做出一个初步修复。这个过程中,感觉比较困难的是编译一次 Rust 代码库大概需要半个小时,跑测试则需要更久。另外通过 gdb 虽然可以调试代码,但是还是有某些限制。提交了 PR 之后才只是开始,后来又经过了一周多时间和子模块维护者讨论更细节的问题,来回 20 多 comments 才最终完成了修复

从 2011 年开始使用 Github,这些年一直在 Github 上做一些自己的开源小项目。只有最近大半年才比较多地参与到一些大的开源项目。这个过程收获很多。

最好的学习方式是贡献和输出。不管是在公司、或者是在开源社区做出贡献才是技术的价值。看书、看资料能学会一些,但是只有实践才能提高自己的能力。比如我学 Rust,肯定不花时间去看 Rust quiz 之类的东西,因为日常开发中常用到的语言特性并不是那些细节。很多领域更重要或者更有价值的是领域知识,编程语言在使用过程中不懂再去看就行了。

有了足够的业余时间,以及纯粹的爱好,才静下心来持续投入到免费的开源中。996 肯定是不行的。做开源很多人都是在“用爱发电”。很多开发者大多是有一份本职工作,做开源也算是眼望星空吧。但是确实因为热爱,所以代码质量反而比公司代码高。工作中看多了十多年的历史代码,看点优秀的开源代码有洗眼效果。

Github 现在开始在某些国家支持 Sponsor 项目,可是中国不在试用范围内。我认为这是一个很好的趋势,做开源的程序员如果创造出来价值,应该得到一些资金上的支持。这使得有些程序员可以为了自己的项目,依赖这些资金全职投入到开发中,比如 Bevy 的作者,来不及等到筹集 7000 美金一个月的筹款就辞职投入了。

在投入到开源的过程中,除了自己能力的提升,也可以获得精神上的满足感。即使修复是一个小问题,其他人也会因为自己的投入而受益。而因为开源以及其带来的共同协作模式,程序员的学习、生产资料都极大丰富。这真是个好时代。

公号同步更新,欢迎关注👻