我一个普通程序员,光靠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的作用? 可以在不加锁的情况下解决读写问题,同时还可以解决脏读,幻读&#…...

JavaScript Date(日期)对象
日期对象用于处理日期和时间。在线实例返回当日的日期和时间如何使用 Date() 方法获得当日的日期。getFullYear()使用 getFullYear() 获取年份。getTime()getTime() 返回从 1970 年 1 月 1 日至今的毫秒数。setFullYear()如何使用 setFullYear() 设置具体的日期。toUTCString()…...

【Python】AES加解密代码,文章还有加密串等你来解密,等你来挑战
🍦🍦写这篇AES文章也是有件趣事,有位小伙伴发了段密文,看看谁解密速度快,学过Python的小伙伴一下子就解开来了,内容也挺有趣的。 🍟🍟原来加解密也可以这么有趣,虽然看起…...

代码随想录【Day34】| 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
1005. K 次取反后最大化的数组和 题目链接 题目描述: 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。&…...

Java性能调优杀手锏JMH
JMH简介 JMH(Java Microbenchmark Harness)由 OpenJDK/Oracle 里面那群开发了 Java编译器的大牛们所开发,是一个功能强大、灵活的工具,它可以用于检测和评估Java应用程序的性能,主要目的是测量Java应用程序的性能,尤其是在多线程…...

实现excle表上传生成echarts图
代码如下html <!--这是一个网上关于读取Excel最经典的代码--> <!DOCTYPE html> <html><head><meta charset"utf-8"><title>ECharts</title><!-- 引入 echarts.js --><!-- <script src"newjs/js/incubato…...

python代码如何打包
网上的文章对小白都不太友好呀,讲得都比较高大上,本文章就用最简单的方式来教会大家如何打包。既然各位已经学习到了python打包了, 深适度应该跟我查不多。 注意事项: 1. 这个插件只能打包 mac 、win系统运行的文件,也…...

MyBatis学习笔记(十二) —— MyBatis的逆向工程
12、MyBatis的逆向工程 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: Java实体类Mappe…...

4.Elasticsearch深入了解
4.Elasticsearch深入了解[toc]1.Elasticsearch架构原理Elasticsearch的节点类型在Elasticsearch主要分成两类节点,一类是Master,一类是DataNode。Master节点在Elasticsearch启动时,会选举出来一个Master节点。当某个节点启动后,然…...

【HashSet】| 深度剥析Java SE 源码合集Ⅲ
目录一. 🦁 HashSet介绍1.1 特点1.2 底层实现二. 🦁 结构以及对应方法分析2.1 结构组成2.1.1 源码实现2.1.2 成员变量及构造方法2.2 常用的方法2.2.1 添加add(E e)方法2.2.2 删除remove(Object o)方法三. 最后想说一. 🦁 HashSet介绍 1.1 特…...

你了解线程的状态转换吗
本文概述: 讲述线程的六种状态. 你可能已经了解了六种状态, 但是你知道 sleep 被唤醒之后, wait ()被 notify 之后进入了什么状态吗? 本文只是开胃小菜, 你看看下一篇文章对你有没有帮助. 一共有六种状态: New 新建状态Runnable 运行状态Blocked 阻塞状态Waiting 等待状态Tim…...