作者:Autumn Skerritt. 编译:cointime.com QDD
想以视频形式观看吗?可点击下面:
简介
我在GitHub上有约10000个星标。我整理了一个清单,列出了如何让开源项目受欢迎的一些实用建议。
其中一个我创建的项目只有67行代码,存在了3天就获得了1700个星标。
对于注意力,我们人类是非常可预测的。我将在文中展示有数据支持的可实施见解,这些可以帮助读者创建受欢迎的软件。
为什么要费心?受欢迎的项目=更多的贡献者=更好的项目
在GitHub上获得更多的星标有什么意义呢?其实没有任何意义。曝光是不能用来变现的,如果GitHub消失了,这些星星也会随之消失。
开源项目的问题在于网络效应,越多的人发现你的项目,并且使用它、为它做出贡献,它就会越好。
项目越好越受欢迎,这是一个自我实现的循环。
https://github.com/bee-san/Polymath/blob/main/media/populaross/loop4.svg?ref=skerritt.blog
随着这种循环的持续,它变得越来越难维持,相关内容在另一篇博客文章有所涉及。但首先,让我们谈谈我们从哪里开始。
要开始这个循环,我们需要受欢迎。
要让贡献者参与你的项目,它必须足够受欢迎,以至于人们会看到它并乐意做出贡献。
创建一个受欢迎的开源项目不仅是一个愿望,而是势在必行的。
如果一个项目有贡献者,但欢迎度不高,那么它很可能是由公司为内部使用而开发的并进行了开源。
否则,只有受欢迎的开源项目才有贡献者。
完善的README
README.md是首先吸引人们注意的,确保要能立刻吸引他们的注意。
仅基于工具的品质而不是工具的介绍来获取关注不是一件易事。
对于前端应用程序,你应该更关注前端设计而非README。这是为CLI应用程序而设的。
一个良好设计的README要简要回答以下问题:
- 这是做什么的?
- 它解决我的问题吗?
- 它是否比竞争对手(如果存在的话)更高效地解决我的问题?
- 如何安装它?
- 哪些基本命令是我需要了解的?
- 我可以从哪获得更多帮助?
以下展示了README如何回答这些问题。
我们将逐一介绍这些内容。
创建一个概述个人项目的标题
人们首先注意到的是你的README,而人们在README上首先看到的会是标题,因此要把它拟好。
标题是以下内容的组合:
- 标志
- 口号(简短描述)
- 徽章
- 快速安装
- 快速链接(非必需)
借助Canva.com创造简洁美观的标志
标志是用户看到的第一要素,并且是用于社交媒体分享的图像。当我首次创建一个项目时,我会使用Canva中的一些东西。
Canva允许你免费从模板快速创建一个标志。
请进入Canva并搜索“标志”。
然后只需选择你搜索到的众多标志之一,如果需要还可以进行编辑。
通常,我会结合以下两个要素选择标志:
- 酷炫因素
- 口号
我应该一看到这个标志就觉得:“哇,真酷。“
这是一个gif!很酷吧?我在Canva上用了45秒制作了它,其中大约30秒用于搜索。
其次是口号。人们看到的第一要素是标志,其中包含了名称和口号,由此他们立即就会了解该项目的内容。
对于我的一些较大的项目,我会雇用一个设计师,特别是Varg。设计师很棒,特别是那些能够很好理解需求的人。这有助于创建一个构思良好的标志。
简而言之:不要花太长时间选标志。如果你没有雇用设计师,也许只需要在Canva上玩大约5分钟。
用一句话简单描述你的项目口号
考虑你的项目设计时,想想人们能以什么方式找到它。人们发现你的项目有两种主要方式:
- 有人推荐。
- 它被发布在Twitter / HackerNews / LinkedIn / 其他社交媒体或新闻聚合网站上。
当有人推荐某个东西时,是因为那个东西解决了他们的问题。这意味着他们已经有了关于这个项目如何解决他们的问题、以及项目内容的想法。
当发布时,Twitter会为它创建一个社交卡,这张卡片包含标题、描述和图片。
分享你的项目的两个主要方式都已经包含了描述,这意味着两件事:
1. 我们不需要在README中再花时间描述我们的项目。
2. GitHub的描述将被用在多处,并且会是人们看到的第一要素。
在README中,一两句话就足以解释我们的项目。
这就是为什么我在README中包含了“快速安装”的原因。看到你的项目的用户已经有了了解它的想法。既然如此,就为他们提供一个快速安装的方式,并让其自己尝试。
“言简意赅,内容才是实质。”——Linus Torvalds
好的描述很难写,它需要:
- 描述项目
- 具有吸引力
- 说明用户需要它的原因
- 显示它比其他产品更好的原因
- 足够简单,让对该领域略知一二的人也能理解 这是文案撰写,学习文案撰写对于我们非常重要,因为文案撰写是以一种说服某人做某事的方式撰写。
关于这个,我最喜欢的资源是Brain Dean的文案撰写指南。
全球最快的建筑网站框架
这个说明很好地解释了这个项目,即:
- 简洁明了
- 通过“全球最快”回答了“为什么你比其他项目更好?”这个问题。
- 解释了“建筑网站框架”的功能。
- 易于为非专家人士理解“建造网站”。
- 使用吸引眼球的词汇,例如“全球最大”,简洁明了地暗示着“我们可以读懂这个,处理它只需花费我们一秒钟的时间。”
你应该花几个星期来反复试验说明。
列出并不断改进许多不同的描述,约20个。当你躺在床上时,想象一下“如果我以前从没看到过这个项目,那看到什么才会促使我使用它?”
描述是整个项目设计中最难但也最重要的部分,建议投入时间和精力学一学文案撰写。有时候即使你认为它已经完美了,其实还是可以改善的。
也可以询问你的用户对它的看法。不断更新改进,直到不能再改进为止。
标识
标识是总结项目的链接或图片。
他们指引了在哪里可以找到文档,以及当前的分支是否稳定,代码有多干净。
这个项目有多活跃?有多少下载量?许可证是什么?有聊天室吗?通常,标识只是你可以包含在项目内的个性贴纸。我喜欢看到它们,但有些人可能不喜欢。你可以在shields.io上找到标识的列表。
快速安装指南
用户通过社交卡或被朋友告知了解该应用程序的功能。
有时,他们想要尽可能快地安装它以进行尝试。
快速安装指南允许用户立即安装软件。
https://pypi.org/project/ciphey?ref=skerritt.blog
https://pypi.org/project/ciphey?ref=skerritt.blog
如果用户已经知道该项目并想使用它,他们不需要在README上搜寻安装信息。
上面的样式很简洁,包含了管理器的名称、操作系统的标志和一个简短的复制/粘贴的安装过程。
快速链接
不是所有README都需要。
在一个整洁的地方链接所有用户需要的资源,让用户能够快速了解任何他们想了解的内容。
顺序很重要,由于用户从左往右阅读(假设是英文README),越远的项目越不可能被注意到。你想让他们首先看到你的Twitter吗?那么请将其放在第一个项目上。
虽然这是一个由分隔符分隔的平面列表,但从用户的角度来看,它是一个有序的列表,用户只会读到某个位置。
我将我的快速链接放在页面的顶部,标志上面。
用户已经对项目有了大致的了解。他们可能只想从README中获得以下三个方面:
1. 文档
2. 支持(Discord链接)
3. 安装指南 将它们放在顶部,以减少了查找的障碍。
展示项目的示例图片
开头也是展示项目如何工作的好地方。你可以使用gif(稍后会更深入地讨论)或图片。
https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life?ref=skerritt.blog
https://github.com/bee-san/Polymath/blob/main/media/populaross/depixi.png?ref=skerritt.blog
具体情况取决于每个项目,但如果在页眉添加图像一定是有用的。
以下是一些设计页眉的灵感,让我们一起看看。
https://github.com/Ciphey/Ciphey?ref=skerritt.blog
https://github.com/rustscan/rustscan?ref=skerritt.blog
https://github.com/gohugo/hugo?ref=skerritt.blog
https://github.com/alacritty/alacritty?ref=skerritt.blog
https://github.com/starship/starship?ref=skerritt.blog
这是什么?简洁描述你的项目
这节要讲解产品的特点。
简单说就是需要一个演示项目的gif,其中包括你认为其他人想要了解的必要功能。
看看Starship的示例。
https://github.com/starship/starship?ref=skerritt.blog
它有一个两列但没有边框的表格,其中左栏是必要功能的列表,每个功能都是加粗的并带有简短的说明。
- 加粗功能,我正在解释这个功能
右栏是演示程序如何工作的gif,最好详细介绍所提到的功能。
要创建CLI应用程序的gif,请使用Terminalizer。在录制之前清理你的终端,因为它可能看起来很凌乱。
你也可以使用Asciienma:
1. 安装asciinema和svg-term-cli。 2. 使用asciinema进行记录:
这将记录会话并生成asciicast v2纯文本文件格式。
3.使用svg-term-cli将.cast文件转换为.svg:
你可能想要尝试不同的宽度和高度,–window在终端会话周围添加一个虚假的操作系统窗口。我发现no-optimize可以修复我在macOS上的一些奇怪的字体渲染问题。
这是我使用的方法,你可以看到我在这个repo中使用它,这是我写的一些文档。
在考虑展示哪些功能无需展示全部,只展示用户想看到的功能,并用用户可以理解的语言说明。
X vs Y,与竞争对手的较量
如果你的项目与许多其他项目竞争,则需要向用户明确展示为什么他们应该使用你的项目而不是竞争对手。
说服某人抛弃他们目前的工具来使用你的工具不是一件易事,所以尽可能让他们看到相比他们目前的工具,你的工具有什么优势。
在《精益创业》一书中,作者谈到了在创业初期,为什么我们应该关注早期用户而非后来的大众用户。
“重点不是找到大众用户,而是找到早期用户,他们是最需要该产品的人。这些客户更能包容错误错误,并特别渴望提供反馈。”
早期用户是那些不介意以不够成熟、不太主流的新选择替代当前工具的人,如果这意味着它具有更好的功能。
吸引其他大众用户使用你的产品,唯一的方法是:
- 不存在竞争对手
- 他们当前解决问题的方式与你的方式相比极为复杂。
否则,你最好的选择是吸引早期采用者,并随着你的项目变得更加主流而逐渐吸引平均客户。
比较你的项目与其他项目最简单的方法是包含一个受欢迎功能的表格。在这里使用统计数据。即使文字和数字同样真实,人们更难相信文字比数字。
对于Ciphey,我们将我们的程序与我们最大可能的竞争对手CyberChef的Magic功能进行了比较。
https://github.com/ciphey/ciphey?ref=skerritt.blog#-ciphey-vs-cyberchef
你可以看到我们使用gif来演示这一点,我们解释了每个功能所需的时间和两者的设置,这些都可以在gif中看到。
我们还在某些事物上留下了注释,例如gif的加载时间不同,函数(当时)无法解码等。
稍后,我们再次使用一个受欢迎功能的表格进行比较。
创建优质的文档
不要将所有文档都放在README中,因为:
1. 不方便更新
2. 用户不好找到所需内容
3. 会使README变的冗长和不美观
我们不把所有代码都写在一个文件中,为什么要把所有文档都放在README中呢?
不要让文档部分变得过长,既然我们已经解释了如何快速安装,我们应该展示:
- 如何运行程序
- 如何查找文档
- 如何寻求支持
这里包含了一个gif,展示了运行Ciphey的所有不同方式。gifs很奇妙美观,制作起来也很不难。
贡献、感谢并欢迎贡献者
最后一部分是关于贡献的内容。
1. 如何贡献
2. 感谢过去的贡献者
我们需要贡献者来完成我们的项目。
因此,我们的README需要显示如何做出贡献。
一个简短的段落来介绍如何进行贡献,如果遇到困难应该去哪里寻求帮助,以及contributing.md文件和可能出现的贡献奖励(包括将姓名添加到README中以及参与一个不断发展的项目的机会)。
要感谢你的贡献者,我们可以使用便捷的all-contributors,这里能显示用户的个人资料图片、链接到他们的网站以及描绘他们制作了什么的emoji。
设计README的结论
设计是主观的,你可能喜欢某些东西,也可能不喜欢。你需要决定什么看起来好。
我希望我分享的设计原则以及包含在这里的README将激发你创建美丽的东西。
我这里没有讨论的一件事是创建文档。作为一个程序员,你的工作是创建文档。如果没有文档,你的项目就不算完整。你可以使用GitHub Wiki和DocStrings自动生成一些文档(你仍然需要编写安装、使用等方面的文档)。
记住,README是开源项目中最重要的部分之一(连同文档)。
创建人们想要的东西
一个优质的README会引起人们的兴趣,而一个解决了他们问题的工作项目则会引起人们的讨论。
本章基于Peter Thiel的《从零到一》,也涉及来自别处的启发。
“在商业中,每个时刻只会发生一次。比如下一个Bill Gates不会创建操作系统,下一个 Larry Page或Sergey Brin不会创造搜索引擎,而下一个Mark Zuckerberg也不会创建社交网络。如果你在模仿这些家伙,就无法从他们身上学到真东西。”
先有问题,后有产品
为了让项目成长,必须让它解决一个问题。与其为了项目而创建一个项目,不如找到解决人们存在的问题的解决方案。
让我们比较两个想法:
1. 一个食谱应用
2. 一个数字平台,供艺术家分享他们的作品,获得反馈并开始向画廊老板销售。
第一个想法没有解决任何问题,世界上有数百万个食谱应用程序,除非有什么真正独特的,否则它不会飞黄腾达。
而第二个想法是一个独特而新颖的想法,旨在解决以下问题:
“我是一个想以个人作品获得报酬并提高水平的艺术家。”
有一个问题就是艺术家没有得到报酬,现在我们来解决这个问题。
有些人首先想出项目,但这样做意味着:
- 我们并没有从一开始就解决一个特定的问题。
- 我们没有一个明确定义的目标市场。
- 很可能已经被人做过了。 正如Walter Isaacson在《创新者》中所说的:
“但是,从计算机的诞生中可以得到的主要教训是,创新通常是一个群体的共同努力,需要有远见的人和工程师合作,创造力则来自于借助不同的资源。只有在故事书中,发明才会像雷击一样乍现,又或是一个人在地下室、阁楼或车库里灵光一现,像灯泡一样照亮了他的头顶。”
如果没有先解决一个小问题,那项目就不太可能具有创新性。在同一本书中,Isaacson说:
“进步不仅来自于巨大的飞跃,也来自于数百个小步骤的叠加。” 解决问题将使我们更接近一个独特且新颖的项目。
与问题共存
你不能解决你没有的问题。在《精益创业》中,Eric Ries说:
“在我对丰田采访中,当我询问丰田方式与其他管理方法有何不同时,最常见的答案是需要现场实地工作——无论是在制造、产品开发、销售、分销还是公共事务领域。除非亲眼去看看,否则你无法确定自己真正理解了业务问题的任何部分,把任何东西视为理所当然或依赖他人的报告是不可靠的。”
除非你自己拥有该问题,否则你无法有效地解决该问题。
它也有助于创意的生成。关注自己生活中的小问题,以及身边人的生活中的小问题,构思解决这些问题的产品。
观察自己生活中的问题要比随机产生可能可行的想法容易得多。
如果你有一个问题,你就知道两件事:
1. 这个问题存在。
2. 其他人也有这个问题。
第一点很重要,许多人会为不存在的问题思考解决方案。
该产品基本上是将土豆注入油和其他食物。但这个问题不存在,而且没有人有过这个问题。如果你观看视频,你会看到“土豆医生”切开土豆,可是它有什么意义?完全没有。
第二点不太明显,但是是一个很好的指标。人类并不是独一无二的,我们大多数人都面临相同的问题。如果问题直接影响我的生活,那么我知道它一定也会影响其他人。
在社区中发现问题
你不必是发现问题的人,其他人也可以。如果我们关注一个社区,其中的人将暴露他们面临的问题。
倾听社区的想法会指数增长你的想法速率,而不是拘泥于关注个人问题。
更多的人有助于得到更多的信息,随着时间的推移,你可以生成比独自思考更多的想法。
建立一个最小化的可行产品,解决社区面临的问题。
最小可行产品或MVP是一个产品,具有足够的功能吸引早期采用者客户,并在产品开发周期早期验证产品理念。
与社区分享,衡量其有效性,学习如何做得更好并重新构建它(或添加更多内容)以进行改进。
随着时间的推移,它最终将泄漏至其他类似的社区。
你需要大约两周时间才能失去对某事的动力,创建社区可以使用的最小化可行产品。他们的感谢将给你继续工作的动力。
解决问题的好办法
以下两条是关键所在:
- 你有一个可以解决的问题。
- 你有一个将帮助你解决此问题并提供反馈的社区。
但这并不意味着你的问题就一定解决得好,看看Juicero,它解决了许多人都有的问题。
我们想创造自己的果汁饮料,但为此我们必须:
- 购买水果和蔬菜
- 清洗
- 把它们剁碎
- 榨汁
- 清洁
Juicero的解决方案是(忽略硬件):
- 将小包插入Juicero以获取果汁
这是的确是一个好主意,但执行性很差。
有很多关于Juicero失败的言论,但超出了本文的讨论范围。
重点是,你可能有一个很好的想法,但如果执行得很差,它会暴露太多缺点,因此不能用作解决方案。
解决这个问题的方法是通过最小可行产品循环。我们不能花费三年时间创建项目,而是要尽快发布,收集反馈,改进并循环这个过程。
我们不断朝着人们想要的方向前进,每次更新换代都会比上一个更高效地解决问题。如果不行,我们需要以不同的角度研究下一个改进方向,从而解决问题,以此类推。
宣传项目
如果从不展示项目,怎么可能期望有人看到它呢?仅仅创建项目并不够,必须对其进行大力宣传。
好消息是,如果你一直关注Creating Something People Want,我们已经在那展示了相关项目,我们所处的社区知道且使用它。
这对我们非常有帮助。从10个GitHub星到100个很容易,但从0到1很难。
一旦我们开始得到了一些星星,才有可能获得更多的星星。星星会生成星星⭐。
与社区分享
如果我们一直遵循构建、衡量、学习循环并定期发布最小化的可行产品,那么我们已经在社区中展示了项目。
到发布时间时,确保你的社区知道这是首次正式的发布,这样的话他们更有可能与朋友分享。
接下来你可以去新闻聚合网站发布信息,这些聚合网站是汇集新闻的地方。应该发布到:
- 你选择的子版块
- 黑客新闻
- Lobste.rs
千万不要读评论,有些恶评极其有害,而且即使优质产品摆在这些人面前,他们也看不到。
Awesome列表
Awesome列表是某个主题的精彩事物列表,如下列表:
- Rust
- Python
- Hacking
- Web .......
找到适用于你的列表并提交拉取请求,在最坏的情况下,可能不被接受。
GitHub趋势
如果一切顺利,你应该会在某个时候登上GitHub趋势榜,这将提供巨量流量。
一旦进入热门趋势,要留心社交媒体并感谢任何分享过项目的人,如果他们关注你,他们可能会在未来再次推文你的项目。
这就是雪球效应,你需要大约50个星才能进入你所用语言的趋势页面,大约100个星才能进入整体趋势。一旦做到了这一点,趋势会给你更多的星并不断地滚动。
利用现有的关注度或过去的流行度
获取星星的最简单方法是利用你现有的关注度,在社交媒体、其他GitHub存储库等上发布。
结论——不要被规则限制
像所有的事情类似,这不是一门精确的科学,而更像是一门艺术。你不能通过遵循其他人的指导来成为艺术家,而是必须凸显自己独特的风格。
蒙娜丽莎只被画了一次,但在那以后成千上万的人画的蒙娜丽莎从未被再度认可。
我建议你抛却一些规则,自己进行实验;敢于创造新规则,并理解什么适合自己。
适合我未必适合你。所以,请大胆施展,不要拘泥于规则。
让我们总结一些我们学到的东西:
- 精心设计README至关重要。
- 创建人们想要的东西。
- 学会宣传项目。
- 发掘个人独特的风格,以及适合自己的东西。
所有评论