# 如何在 GitHub 上获得数百 stars

2017-07-20 GeekPlux

> 本文首发于「掘金专栏」，地址：https://juejin.im/post/59701b61518825412f27a0b1。 本文写在 markvis 发布后的一周，总结了在推广个人项目方面的一些经验。阅读时长 10 分钟。原文地址：https://geekplux.com/2017/07/20/how-to-get-hundreds-stars-on-github

每个程序员都幻想过自己的代码运行在千家万户的电脑上，但如何让你的项目获得更多的关注却少有人去思考。我们把注意力放在对代码的钻研、对技术的提升，却少有人关注如何吸引别人参与你的项目。一个人的力量总是有限的，尤其是在开源社区，越多的人参与就意味着你的项目有越多的可能性。

我的业余小项目 markvis(https://markvis.js.org) 发布一天之后，在 GitHub 收获了 200 stars，爬上了 Trending 榜前十，现在一周过去已经近 1000 stars。虽然这不算什么大的成就，但让我不得不重新思考推广的意义。

## 对推广的偏见

一般人对推广都有或多或少的偏见，从我的个人经验来说大概来自两个方面：

一是受「酒香不怕巷子深」的影响，总认为只要是金子就会发光的。其实不然，道理很简单，你觉得你代码水平不错，但跟你同水平的程序员肯定不止你一个，如何让别人更加青睐于你，你需要的是曝光率，你需要把你自己的真实水平展现出来，你需要告诉别人你的实力，而不是等别人去挖掘。这个社会竞争太激烈了，尤其是在我们可爱的程序员界。

二是总把推广和低级的营销混为一谈，甚至把推广当成一个贬义词。我之前对推广的偏见主要来自于此，我总觉得推广和那些无脑发小广告的没什么两样。然而，真正的推广应该是在散播价值，让别人知道这个东西的存在，给别人提供了解的渠道。当然这得站在你项目是有价值的基础上，而不是空中楼阁就到处招摇撞骗。

## 如何推广

一个吸引眼球的开源项目，我认为需要具备以下几个要素：

- 一个还不错的 Logo 或优雅的主页
- 简短有力的 slogan
- 能在线试用
- 完善的文档

前两点一般都会被人忽略，但其实非常重要。第一点很好理解，毕竟是看脸的时代。第二点，为什么很多企业花很大代价去设计朗朗上口的标语？因为希望在最短的时间内给别人留下最深的印象。第三点正所谓百闻不如一见，向别人传递自己的想法总是困难的，不如让他们自己使用一下，用过才能理解你到底做了什么伟大的事情。如果你的项目没办法在线试用，最好有一个 gif 或短视频来演示一遍。如果说前三点是包装，那最后一点则是必须做到的重中之重，接下来我们重点说一说。

README 毋庸置疑是你项目最重要的页面，如何让别人迅速了解你的项目，你需要用最简短的话说清楚三件事：

- 你的项目是什么
- 为什么要创造它
- 如何使用它

尤其是为什么，一定要说清楚。它解决了什么问题，使用它的必要性是什么，它做出了什么贡献等等。

我们可以从使用者的角度去想问题：每当我们考虑是否要用这个库的时候，都是先去看他的 README，了解清楚它到底做了什么，以及它的优势。接着再看看它有没有测试，issues 多不多，解决 issues 和代码更新的频率是多少，大概有多少人使用等等。这就引出了另一些决定你项目成败的小细节。

- 良好的代码风格
- 必要的注释
- 测试
- 开源协议是否规范

这些事情说大不大，说小也不小。我在发布 markvis 之前把这些都检查了几遍。在 README 里可以用 coverall 的 badge 来展示测试覆盖率，用 fossa 来检测你的协议是否规范。

## 项目打造

不是任何项目经过推广都能成功，推广的重要性可能只要 10%，剩下的 90% 都取决于项目本身。一个有价值的项目我认为要满足下面几个要求：

- 解决了一部分需求
- 项目完成度高
- 长期维护

首先你要有明确的目的，你要解决的是一个什么问题。这个问题通常不是空想出来的，而是有真正需要的，大多数情况来自于我们自己的需求。我在做 markvis 之前，已经在思考如何让写作时的可视化更简单。正好当时读了一篇论文《Vega-Lite: A Grammar of Interactive Graphics》，我发现只要用简单的 JSON 就可以生成一个交互丰富的图表，这给我做 markvis 提供了极大的灵感。尽管接下来在项目开发的时候遇到一些空难不得不暂时放弃用 vega-lite 的方案，但阅读相关论文让我有了做 markvis 的底气。

其次你需要完成你的项目。开坑不填坑是我们技术人的常态，往往是脑子一热开始写一个项目，写了不到一半遇到点困难或中间停顿了几天，就放弃了。开发 markvis 的时候我也是这样，看 commits 记录就知道我其实不到一年前就开始开发了，但是强大的拖延症生生的把我拖到现在。没有完成，功能残缺，bug 一堆，谁还敢用。

开源项目最难的是维护。知名项目 issues 多的处理不过来，不知名项目完全无人问津。最痛苦的是那种用的人不多，还又没人参与的项目，这就完全靠自己了。你要面对的可能是无理的需求或质疑，但收到感谢信的时候还是非常开心的。

## 如何发布

万事俱备只欠东风，发布也是关键。我们没必要开个发布会，但至少要抱着搞个大新闻的心态。一般情况下，如果你不想让人提前知道你在做的东西，你最好不要在完成之前 push 到 GitHub 上，你可以悄悄的在本地紧锣密鼓的开发。直到完成的那一天，你需要准备下面两样东西：

- 发布（帖子）的标题
- 发布（帖子）的内容

我们不要做标题党，但是也要在帖子标题上稍微下点功夫，最好能说清楚你要干嘛还又能让别人有点击的欲望。帖子的内容很重要，可以把你 README 上的话再精简一点，口语化一点。然后开始有策略的向各大网站发帖：

- Hacker News
- reddit/r/javascript
- ProductHunt
- V2EX

当时我对 markvis 没抱太大期望，也没有考虑国外的作息时间，一大早起来就只在前两个网站上提交了自己的帖子。Hacker News 的流量太大，帖子直接秒沉了，reddit 上迟迟不见反馈。当时可能美国的程序员兄弟刚下班，都去浪了，所以一直没啥动静，star 好像只有十几个。虽然我有点失望，但是没有放弃，因为周围的小伙伴说我做的东西还不错。于是我在午饭之前又去 ProductHunt 上厚颜无耻地提交了自己的项目。没想到当天就上榜了。于是 star 数开始不停的长，第二天上了 GitHub Trending 之后就涨得更快了，完全超出了预期。

除了上面的这些网站，如果你英语不错的话，可以直接向 DailyJS 提交自己的文章，也可以让 JavaScript Weekly 推荐，总之渠道多多，就看你的项目如何了。下面是我发布一周后的主页 Google Analytics，可以看出上周一共有 4.5k 的人来访，周四即我发布的第二天是人来的最多的一天，而且程序员果然都喜欢凌晨学习，哈哈。

## 写在最后

有一些事我们不去做是因为我们对它有偏见，比如推广。有一些事我们做不好是因为我们没有认真思考该怎么做，比如推广。禁锢我们的不是技术手段，而是思维。这是我这次发布 markvis 得到的一些人生经验，共勉。欢迎新朋友来和我交流，我的博客是 http://geekplux.com ，会一点前端，懂一点数据可视化。

感谢阅读，如果觉得有启发，请通过我的 Donate 页面，赞助本文。

本作品采用知识共享 署名-非商业性使用-禁止演绎 4.0 国际 许可协议进行许可。

Category: Thought Promotion
Tags: #Promotion#推广#Skill#Markvis#Visualization#Markdown#可视化#Tool#工具#GitHub
上一篇

Markvis - 在 markdown 中生成可视化图表

下一篇

netjsongraph.js – Google Summer of Code (GSoC) 2017 summary

Please leave comments (点击写下你的评论)