如何在 GitHub 上获得数百 stars
本文首发于「掘金专栏 (opens in a new tab)」,地址:https://juejin.im/post/59701b61518825412f27a0b1 (opens in a new tab)。 本文写在 markvis (opens in a new tab) 发布后的一周,总结了在推广个人项目方面的一些经验。阅读时长 10 分钟。原文地址:https://geekplux.com/2017/07/20/how-to-get-hundreds-stars-on-github (opens in a new tab)
每个程序员都幻想过自己的代码运行在千家万户的电脑上,但如何让你的项目获得更多的关注却少有人去思考。我们把注意力放在对代码的钻研、对技术的提升,却少有人关注如何吸引别人参与你的项目。一个人的力量总是有限的,尤其是在开源社区,越多的人参与就意味着你的项目有越多的可能性。
我的业余小项目 markvis (opens in a new tab)(https://markvis.js.org (opens in a new tab)) 发布一天之后,在 GitHub 收获了 200 stars,爬上了 Trending 榜前十,现在一周过去已经近 1000 stars。虽然这不算什么大的成就,但让我不得不重新思考推广的意义。
对推广的偏见
一般人对推广都有或多或少的偏见,从我的个人经验来说大概来自两个方面:
一是受「酒香不怕巷子深」的影响,总认为只要是金子就会发光的。其实不然,道理很简单,你觉得你代码水平不错,但跟你同水平的程序员肯定不止你一个,如何让别人更加青睐于你,你需要的是曝光率,你需要把你自己的真实水平展现出来,你需要告诉别人你的实力,而不是等别人去挖掘。这个社会竞争太激烈了,尤其是在我们可爱的程序员界。
二是总把推广和低级的营销混为一谈,甚至把推广当成一个贬义词。我之前对推广的偏见主要来自于此,我总觉得推广和那些无脑发小广告的没什么两样。然而,真正的推广应该是在散播价值,让别人知道这个东西的存在,给别人提供了解的渠道。当然这得站在你项目是有价值的基础上,而不是空中楼阁就到处招摇撞骗。
如何推广
一个吸引眼球的开源项目,我认为需要具备以下几个要素:
- 一个还不错的 Logo 或优雅的主页
- 简短有力的 slogan
- 能在线试用
- 完善的文档
前两点一般都会被人忽略,但其实非常重要。第一点很好理解,毕竟是看脸的时代。第二点,为什么很多企业花很大代价去设计朗朗上口的标语?因为希望在最短的时间内给别人留下最深的印象。第三点正所谓百闻不如一见,向别人传递自己的想法总是困难的,不如让他们自己使用一下,用过才能理解你到底做了什么伟大的事情。如果你的项目没办法在线试用,最好有一个 gif 或短视频来演示一遍。如果说前三点是包装,那最后一点则是必须做到的重中之重,接下来我们重点说一说。
README 毋庸置疑是你项目最重要的页面,如何让别人迅速了解你的项目,你需要用最简短的话说清楚三件事:
- 你的项目是什么
- 为什么要创造它
- 如何使用它
尤其是为什么,一定要说清楚。它解决了什么问题,使用它的必要性是什么,它做出了什么贡献等等。
我们可以从使用者的角度去想问题:每当我们考虑是否要用这个库的时候,都是先去看他的 README,了解清楚它到底做了什么,以及它的优势。接着再看看它有没有测试,issues 多不多,解决 issues 和代码更新的频率是多少,大概有多少人使用等等。这就引出了另一些决定你项目成败的小细节。
- 良好的代码风格
- 必要的注释
- 测试
- 开源协议是否规范
这些事情说大不大,说小也不小。我在发布 markvis (opens in a new tab) 之前把这些都检查了几遍。在 README 里可以用 coverall (opens in a new tab) 的 badge 来展示测试覆盖率,用 fossa (opens in a new tab) 来检测你的协议是否规范。
项目打造
不是任何项目经过推广都能成功,推广的重要性可能只要 10%,剩下的 90% 都取决于项目本身。一个有价值的项目我认为要满足下面几个要求:
- 解决了一部分需求
- 项目完成度高
- 长期维护
首先你要有明确的目的,你要解决的是一个什么问题。这个问题通常不是空想出来的,而是有真正需要的,大多数情况来自于我们自己的需求。我在做 markvis 之前,已经在思考如何让写作时的可视化更简单。正好当时读了一篇论文《Vega-Lite: A Grammar of Interactive Graphics》 (opens in a new tab),我发现只要用简单的 JSON 就可以生成一个交互丰富的图表,这给我做 markvis 提供了极大的灵感。尽管接下来在项目开发的时候遇到一些空难不得不暂时放弃用 vega-lite 的方案,但阅读相关论文让我有了做 markvis 的底气。
其次你需要完成你的项目。开坑不填坑是我们技术人的常态,往往是脑子一热开始写一个项目,写了不到一半遇到点困难或中间停顿了几天,就放弃了。开发 markvis 的时候我也是这样,看 commits 记录就知道我其实不到一年前就开始开发了,但是强大的拖延症生生的把我拖到现在。没有完成,功能残缺,bug 一堆,谁还敢用。
开源项目最难的是维护。知名项目 issues 多的处理不过来,不知名项目完全无人问津。最痛苦的是那种用的人不多,还又没人参与的项目,这就完全靠自己了。你要面对的可能是无理的需求或质疑,但收到感谢信的时候还是非常开心的。
如何发布
万事俱备只欠东风,发布也是关键。我们没必要开个发布会,但至少要抱着搞个大新闻的心态。一般情况下,如果你不想让人提前知道你在做的东西,你最好不要在完成之前 push 到 GitHub 上,你可以悄悄的在本地紧锣密鼓的开发。直到完成的那一天,你需要准备下面两样东西:
- 发布(帖子)的标题
- 发布(帖子)的内容
我们不要做标题党,但是也要在帖子标题上稍微下点功夫,最好能说清楚你要干嘛还又能让别人有点击的欲望。帖子的内容很重要,可以把你 README 上的话再精简一点,口语化一点。然后开始有策略的向各大网站发帖:
- Hacker News
- reddit/r/javascript
- ProductHunt
- V2EX
当时我对 markvis (opens in a new tab) 没抱太大期望,也没有考虑国外的作息时间,一大早起来就只在前两个网站上提交了自己的帖子。Hacker News 的流量太大,帖子直接秒沉了,reddit 上迟迟不见反馈。当时可能美国的程序员兄弟刚下班,都去浪了,所以一直没啥动静,star 好像只有十几个。虽然我有点失望,但是没有放弃,因为周围的小伙伴说我做的东西还不错。于是我在午饭之前又去 ProductHunt 上厚颜无耻地提交了自己的项目。没想到当天就上榜了。于是 star 数开始不停的长,第二天上了 GitHub Trending 之后就涨得更快了,完全超出了预期。
除了上面的这些网站,如果你英语不错的话,可以直接向 DailyJS 提交自己的文章,也可以让 JavaScript Weekly 推荐,总之渠道多多,就看你的项目如何了。下面是我发布一周后的主页 Google Analytics,可以看出上周一共有 4.5k 的人来访,周四即我发布的第二天是人来的最多的一天,而且程序员果然都喜欢凌晨学习,哈哈。
写在最后
有一些事我们不去做是因为我们对它有偏见,比如推广。有一些事我们做不好是因为我们没有认真思考该怎么做,比如推广。禁锢我们的不是技术手段,而是思维。这是我这次发布 markvis (opens in a new tab) 得到的一些人生经验,共勉。欢迎新朋友来和我交流,我的博客是 http://geekplux.com (opens in a new tab) ,会一点前端,懂一点数据可视化。