我一个普通程序员,光靠GitHub打赏就年入70万,
一个国外程序员名叫 Caleb Porzio在网上公开了自己用GitHub打赏年入70万的消息和具体做法。
Caleb Porzio 发推庆祝自己靠 GitHub 打赏(GitHub Sponsors)赚到了 10 万美元。
GitHub Sponsors是 GitHub 2019 年 5 月份推出的一个功能,允许开发者通过自己的项目获取报酬。
2018 年是Caleb Porzio做全职开发的最后一年,当时我的年收入大概是 9 万美元。
2019 年 1 月 11 日,我离开原来的公司开始「休假」,想要换种心情,做自己想做的一切。「休假」期间,受到这篇文章启发《Phoenix LiveView: Interactive, Real-Time Apps. No Need to Write JavaScript》(https://dockyard.com/blog/2018/12/12/phoenix-liveview-interactive-real-time-apps-no-need-to-write-javascript),发现自己也可以做出类似的成果
于是,他「决定开发一个类似 Laravel 的东西。我感觉这可能是个重大改变。」
现在看来,这确实改变了他的生活。然后,创建了一个非常流行的 JS 框架,叫做 AlpineJS,目前也是由我在管理和维护,做开源软件不能完全养活自己,所以他也接过一些小型的代码指导方面的需求,让 2019 全年的收入维持在一个稳定的状态。这张图是 2019 年通过自由职业方式获得的收入:
刚开始的这个收入,显然比作者上班时候是收入减少了 7 万美元,一路走来,有很多好心人联系作者,询问他们是否能够提供项目上的帮助。比如这种:
很长一段时间他没有更新 Patreon(一个众筹创作网站),那里会有一些人每个月给该网站五美元。如此也很好,但并不能环节作者的经济问题。
然后,2019 年 12 月 12 日,把项目直接托管在 GitHub 上即可。成为了 GitHub Sponsors 的一员。下面是作者的第一位打赏用户,
这么作者说:在开源社区里做开源软件,赚的钱比以往任何时候都多。有 535 位开发者每个月都打赏 14 美元。
赚到第一桶金,通过GitHub打赏赚钱的三个阶段:
阶段1:热心人士
最初,所有收入完全是来自那些友善热心肠的人们。和使用的总人数比,还是很少几个人打赏。
阶段2:打赏软件
有一个很酷的主意,想要一个小小的laravel套餐,然后,他和他的兄弟 Daniel 录制了一期《No Plans To Merge》,然后发明了一个叫「打赏软件」的变现模式。
1、创建一个很棒的软件;
2、使其仅对打赏者开放,直到你积累了一定数量的打赏者;
3、然后将项目开源给全世界。
这是一种双赢。效果很好,几天之内收入就增加了 1.1 万美元。
另外一位朋友 Nuno Maduro 最近在他的 Pest 项目中复制了这一方法,同样取得了成功:
这种方法很棒,但是需要不断地提供新的想法,
阶段3:教学视频
大部分打赏金都是这个阶段来的,秘诀答案是:录制教学视频。构建有用的软件是一回事,但教别人怎么用完全是另一回事。尽力创建高质量的文档,但总有人需要更加高级的内容。为了满足这些需求,录了一系列教学视频。在这之后的三个月里,他的总收入从 4 万美元涨到了 10 万美元以上。
作者说:I released a free set of screencasts on the basics of using Livewire:并在文档的适当位置嵌入了这些视频的链接,以帮助大家找到它们
几个星期之后,又为 GitHub 打赏者专门建立了一个「私有」的视频小组:利用 GitHub 认证构建了一个 Laravel app 来调用 GitHub API,以验证用户是否为打赏者,看免费视频的人自然会遇到这些「私有」视频,如果他们喜欢前面那些免费的内容,他们就会打赏来获取后面的视频,具体做法是:每次有新特性出现,都会放出一批新视频。此外,还会给每位打赏者提供访问每节课源代码的入口。
现在有了连续的收入,可以用空出来的时间继续开发这个软件,同时放出新的视频。
作者赚钱第一桶金的心得分享:
1、做一个好的东西,
工作的人们只为高质量的软件打赏埋单,
2.构建观众
找到用户是赚钱的关键,粉丝和邮件订阅者都是潜在的挖掘对象
You can build the greatest tool on the internet, but it means nothing if no one’s paying attention to you. Building an audience is ESSENTIAL for any of this to work. Twitter followers and email subscribers are your most valuable asset. Again, no shortcuts here. Just hard work, and providing value to people publicly and consistently for a long time.
3、设置一个有效的打赏金额
金额太少,就难以形成维持生活的正向循环,The biggest mistake people make with GitHub sponsors is offering too small of a first tier.
4、给打赏等级取一个好名字
设置一个科学合理的赞助级别名称,举个例子,对于一个高级打赏等级来说,它的标签应该是「The Agency(代理)」或其他能够暗示一个公司高级应用的荣耀标签,而不是「Platinum(白金)」这种模糊的说法。
这样一来,人们看到这个标签首先想到的会是:「我的用途等级在什么层次」,而不是:「我每个月要花多少钱」。
5.谈钱不伤感情,
不要害怕谈论你的赞助以及你赚了多少钱,要为别人赚到钱感到激动和鼓舞,这才是是一个健康的心态现象。合理合法的赚钱也可以激励自己,直接告诉别人你完全依赖这笔钱生活也没什么不礼貌的,而且这笔钱帮你打造出了人们每天都在用且从中受益的软件。
6,不要因为赚了很多钱而感到内疚。
收入和劳动创作所带给别人的价值成正比,这没什么问题。
参考来源:https://calebporzio.com/i-just-hit-dollar-100000yr-on-github-sponsors-heres-how-i-did-it
相关文章:

我一个普通程序员,光靠GitHub打赏就年入70万,
一个国外程序员名叫 Caleb Porzio在网上公开了自己用GitHub打赏年入70万的消息和具体做法。 Caleb Porzio 发推庆祝自己靠 GitHub 打赏(GitHub Sponsors)赚到了 10 万美元。 GitHub Sponsors是 GitHub 2019 年 5 月份推出的一个功能,允许开发…...
剖析Spring MVC如何将请求映射到Controller
Spring MVC是一种基于Java的Web框架,可以帮助开发者快速地构建Web应用程序。在Spring MVC中,请求将会被映射到对应的Controller中进行处理。本文将会介绍Spring MVC如何将请求映射到Controller的过程。 DispatcherServlet DispatcherServlet是Spring M…...
设计模式之美-工厂模式
分类:简单工厂模式(静态工厂模式),工厂方法模式,抽象工厂模式。 这种设计模式也是 Java 开发中最常见的一种模式,它的主要意图是定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类&a…...

A Star算法最通俗易懂的一个版本
01-概述虽然掌握了 A* 算法的人认为它容易,但是对于初学者来说, A* 算法还是很复杂的。02-搜索区域(The Search Area)我们假设某人要从 A 点移动到 B 点,但是这两点之间被一堵墙隔开。如图 1 ,绿色是 A ,红色是 B &…...

JavaWeb--ListenerAjaxaxiosjson
Listener&Ajax&axios1 Listener1.1 概述1.2 分类1.3 代码演示2 Ajax2.1 概述2.1.1 作用2.1.2 同步和异步2.2 快速入门2.2.1 服务端实现2.2.2 客户端实现2.2.3 测试2.3 案例2.3.1 分析2.3.2 后端实现2.3.3 前端实现2.4 测试3 axios3.1 基本使用3.2 快速入门3.2.1 后端实…...

NoneBot2,基于Python的聊天机器人
NoneBot2,基于Python的聊天机器人第一步,配置python第二步,配置[go-cqhttp](https://github.com/Mrs4s/go-cqhttp)第三步,配置[NoneBot](https://61d3d9dbcadf413fd3238e89--nonebot2.netlify.app/)NoneBot2 是一个现代、跨平台、…...

java反射机制及其详解
反射反射机制反射调用优化有时候我们做项目的时候不免需要用到大量配置文件,就拿框架举例,通过这些外部文件配置,在不修改的源码的情况下,来控制文件,就要用到我们的反射来解决 假设有一个Cat对象 public class Cat …...

Leetcode—环形链表
前言:给定一个链表,判断是否为循环链表并找环形链表的入口点 首先我们需要知道什么是双向循环链表,具体如下图所示。 对于链表,我们如何去判断链表是循环链表呢?又寻找入环点呢?我们可以利用快慢指针的方法…...

蓝牙耳机哪个戴的最舒服?久戴不累的蓝牙耳机推荐
在喧嚣的时代中,快节奏和疲惫充斥着我们的生活,于是耳机成为了人们必不可少的东西,无论是闲暇时亦或是正处在工作时,都会将它戴上,出门在外戴耳机变成了常态,所以小编就整理了一期久戴不累的蓝牙耳机。 No…...
25k的Java开发常问的AQS问题有哪些?
前言:面试高频的AQS问题大多。本文将以实战面试角度出发,将面试官喜欢问的一些问题罗列出来。 文章目录 AQSAQS定义底层实现独占锁举例底层实现独占锁超时获取锁共享锁举例共享锁实现原理作者辟谣AQS AQS定义 AQS的全称是AbstractQueuedSynchronizer,也就是抽象队列同步器…...

Grafana 监控面板绘制流程
本篇作者:IoTDB 社区 -- 张洪胤本文以 IoTDB V1.0.1 版本为例本文档介绍了 Apache IoTDB 监控指标通过 Prometheus 的方式进行采集,并且使用 Grafana 的方式进行可视化。1监控指标的 Prometheus 格式说明对于 Metric Name 为 name, Tags 为 K1V1, ..., K…...
一句话设计模式5:责任链模式
责任链模式:步步为营。 文章目录 责任链模式:步步为营。前言一、责任链模式的作用二、如何实现责任链1 既然是责任链,那么就需要一个链路的承载体 ChainBody2 责任链中每一步都是一个抽象类,因为承载体仅仅是构造链路顺序,里面不放置任何具体业务逻辑:步骤抽象类3 具体步骤执行…...

保姆级使用PyTorch训练与评估自己的EVA网络教程
文章目录前言0. 环境搭建&快速开始1. 数据集制作1.1 标签文件制作1.2 数据集划分1.3 数据集信息文件制作2. 修改参数文件3. 训练4. 评估5. 其他教程前言 项目地址:https://github.com/Fafa-DL/Awesome-Backbones 操作教程:https://www.bilibili.co…...

Java--JMH--性能测试--测试软件运行效率/时间--StopWatch
写在前面: 很多时候想要测试代码运行时间,或者比较2个运行的效率。 最简单的方法就是Sytem.currentTimeMillis记录2开始和结束时间来算 但是Java 代码越执行越快,放在后面的方法会有优势,这个原因受留个眼,以后研究。大概有受类加…...

JavaScript Array(数组)对象
数组对象的作用是:使用单独的变量名来存储一系列的值。参数参数 size 是期望的数组元素个数。返回的数组,length 字段将被设为 size 的值。参数 element ...; elementn 是参数列表。当使用这些参数来调用构造函数 Array() 时,新创建的数组的元…...
干货 | 电容在电路35个基本常识
第1个电压源正负端接了一个电容,与电路并联,用于整流电路时,具有很好的滤波作用,当电压交变时,由于电容的充电作用,两端的电压不能突变,就保证了电压的平稳。当用于电池电源时,具有交…...

日读300篇文献的技巧
感觉自己看文章很慢,有时候也抓不住重点。 如果是英文文献的话,可能还要有点难度,毕竟英语渣渣还是需要有中文-》英文的转换过程。 最近在搞毕业论文的时候,发现了一个非常好玩的东西,大大提升了我看文章搞科研&#x…...

C++核心编程
一、内存分区模型概述:C程序在执行时,将内存划分为4个区域程序运行前:代码区:存放函数体的二进制代码,由操作系统管理①共享。共享的目的是对于频繁被执行的程序,在内存中只需有一份代码即可②只读。使其只…...

SpringMVC程序开发
目录 SpringMVC 1、MVC定义 2、MVC和SpringMVC之间的关系 学SpringMVC 1、Spring MVC的创建和连接 浏览器获取前端接口和后端程序连接功能实现 2、获取参数 2.1、传递单个参数/多个参数 2.2、传递对象 2.3、传递表单参数 2.4、后端参数重命名 2.5、RequestBody接收J…...
多版本并发控制MVCC
什么是MVCC? MVCC是一种并发控制方法,一般在数据库管理系统中,实现数据库的并发访问。 可以使用乐观锁和悲观锁来实现。 MVCC的作用? 可以在不加锁的情况下解决读写问题,同时还可以解决脏读,幻读&#…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...