Teaser Image

mindwind

十日画一水,五日画一石




程序员的业余项目,我们也叫它 side project。 前几天,100offer 发起了一场活动叫 [<寻找实干和坚持的技术力量>](http://i.100offer.com/),他们是这么说的:

世界在被代码改变着,而我们在创造着代码。
仅仅是因为好玩,他开发了一款操作系统,连想都没想过,这会让自己有一天成为开源世界的领袖级人物。
只是想创造一个很酷的东西,所以他动手,坚持,因而有了让这个世界上的每一个人都可以免费地获取人类所有知识的百科全书。
成功者和其他人最大的区别就是,他们真正动手去做了,并且做了下去。

近些年来确实有不少 side project 不仅成功转正,而且闪耀世界的例子,比如 Gmail、Instagram、Slack 等。 甚至连 Facebook 早年也仅仅是一个学生的 side project。 确实这些闪耀的例子激励着我们去尝试着各种各样的 side project,但真正能做到像上述例子中那样光彩夺目,只怕这概率也和买彩票中头彩差不多了。 那么我们坚持做 side project 的意义在哪里呢?

自从我走上职业程序员的道路后,我就一直开始在做 side project。 这些业余项目,有些是把工作中真实项目碰到的问题的解决方案加以抽象、提炼做成通用的工具,以便用在将来的项目中。 这样的事情做的多了,慢慢就积累了一个自己专属的工具箱,好多程序员想必都有自己的工具箱,里面有些自己专属的工具。 时间的推移伴随能力和视野的成长,会发现当年做的一些小工具原来有更好的开源解决方案,哦自己又不小心干了重新发明轮子的事情。

那像我早年干的那些重新发明轮子的事情是不好的么?我认为不是。 著名程序员 Nicholas C. Zakas 提到的几个最重要的职业建议,有下面两条 (来自 《七个对我最好的职业建议》 阮一峰翻译):

不要别人点什么,就做什么。
自己找到道路。

我认为做 side project 对此有非常大的帮助。 一个 side project 就是个产品,你不再仅仅去实现需求,因为没人告诉你需求,除了你自己。 你在主导一个产品,找到它的发展方向,做出决定,然后再去实现它。 而找到道路做出决定,再去执行实现,前者比后者要困难的多。

扯远了,回到我们文章开头提到那场活动,我正巧看见了这个活动,而我正好也有一个 side project。 这个项目开始于五年前,一开始托管在 Google Code,后来 Google 在中国没了,GitHub 兴起就转移到上面了。 这是一个名叫 Craft 系列的项目,为什么叫 Craft 呢?

关于 Craft 的起源是来自我还在读书时玩了 10 年的两款游戏 StarCraft(星际争霸) 和 WarCraft(魔兽争霸)。 工作后我成为了一名职业程序员,花越来越多的时间在编程上而非游戏。 我深深的怀念过去玩星际与魔兽的日子,所以使用了 Craft 来命名这个项目以纪念过去的日子。 更重要的是,我希望这个项目能继承来自这两款游戏的精髓——追求完美,精益求精。 更多关于这个项目的内容,可以参见 Craft 官网 以及托管的 GitHub 地址

关于 Craft 这个业余项目,在 GitHub 还留下了几万行代码。 我记得这五年来针对它做过 7 次比较大的重构,从工具箱里扔掉的代码比留下的多的多。 每一次重构,都是对以前自己的否定,每一次否定都是一次成长。 程序员们早点开始自己的业余项目吧。


后记: Craft 也参加了 100offer 的活动,目前正在投票阶段,如有缘看到这篇文章请帮忙投个票。 投票地址点这里,截止日期 2015-09-27。


下面是我的微信公众号 [瞬息之间],除了写技术的文章、还有产品的、行业和人生的思考,希望能和更多走在这条路上同行者交流,有兴趣可关注一下,谢谢。