GITHUB OCTOVERSE 是由世界上最大的代码托管平台 GITHUB 发起的开源趋势调查,旨在探索开源的新趋势,以及对于开发者和软件公司的影响。通过分析 GITHUB OCTOVERSE 2022 的调查报告,我们能够发掘出开源圈的一些趋势。另外,本篇文章不仅会为大家详细解读 GITHUB OCTOVERSE 2022 调查报告的结果,同时也会包含笔者对于报告结果的一些理解。
调查地址:https://octoverse.github.com/

截止到 2022 年,已经有 9400 万开发者在使用 GitHub 了,同时也有 90% 以上的公司在使用 GitHub。从这两个数字我们可以看出,GitHub 这个世界上最大的代码托管平台已经被开发者和软件公司们广泛的使用了。
当然,更重要的是,在 2022 年开发者们共计提交了 4.13 亿次开源贡献,这意味着开源生态成长至今,已经非常有规模了。
而在今年的报告中,有三个非常值得关注的趋势:
1、“Infrastructure as code” 成为一种大趋势。
开发者在 2022 年大量使用 Hashicorp Configuration Language (HCL)、Shell 和 Go 语言,同时,HCL 也成为了 GitHub 上增长最快的语言。这表明基础架构即代码 (IaC) 的实践越来越多地被 GitHub 上的项目(包括开源项目)采用。
HCL & Terraform 入门可以参考这个教程:https://developer.hashicorp.com/terraform/cdktf/concepts/hcl-interoperability
2、大型软件科技公司正在构建大型开源社区。
2022 年 GitHub 上很多大型开源项目得到了商业支持,而这些投资也反哺了开源生态,让更多人为开源做出贡献。据统计,超过 30% 的财富 100 强公司现在拥 有开源战略办公室,而这个数字还会不断增加。
3、刚参与开源社区的贡献者们更青睐有商业支持的项目。
据统计,在首次提交开源代码的贡献者中,50% 是给有商业支持的开源项目提交代码。当然,这 50% 的贡献者大部分都是独立贡献者(IC),不是这些项目所属组织的开发人员。这说明了有商业支持的开源项目所带来的极高的品牌认知度,同时它还反映出了公司对开源的投资最终的确会反哺于项目本身。从 Flutter 到 Next.JS, 从 React 到 VS Code,公司主导的开源项目已经成为 GitHub 上开发者生态系统不可或缺的一部分。

在 2022 年,GitHub 上的开发者同比增长 27%,有 2050 万新开发者加入。而 GitHub 上的总贡献数,已经达到了 35 亿。这些都说明了开源生态正在蓬勃发展,吸引越来越多的开发者加入其中。
说到 AI 辅助编写代码,那就不得不提到今年大火的 GitHub Copilot。通过对使用 GitHub Copilot 的开发者进行调查,我们发现使用 AI 代码辅助工具的开发者能更快地完成任务,开发体验也更好,代码编写效率更是有将近 1 倍的提升。

在使用 GitHub 的开发者当中,开发者人数排名前三的国家是美国、中国、印度,而这三个国家也确实是当今世界上软件行业发展最迅猛的三个国家。所以我们不难看出,软件行业的发展和开源是有着紧密的联系的。
PS:2022 年调查因为地图的原因不能放,所以这里放一个 2021 年的。

而对于 2022 年新增的开发者,我们可以看到印度增长非常迅猛,中国、巴西次之。如果按照这个增长幅度持续下去,预计到 2025 年印度将与美国 GitHub 的开发者人数持平。

在 2022 年,开发人员使用近 500 种编程语言在 GitHub 上构建软件。

JavaScript 仍然是第一,是开源社区中最常用的语言。
由于 IaC 的突飞猛进,HCL 等语言增长速度最快。
Python 的增长率最高,达到了 22.5%。
PHP 在 2022 年的使用量有一定幅度的降低。

看一下近几年开源社区编程语言的使用情况变化图,我们可以发现:

而如果我们来看增长率的话,也能发现不少有趣的事情:

可以看到,贡献者数量最大的项目几乎都是有商业支持的项目,其中包括 microsoft/vscode、 flutter/flutter 和 vercel/next.js。而且更有趣的是,他们都和大前端领域息息相关。
还有一个例外,开源家庭自动化项目 home-assistant/core,在过去一年中取得了显著的增长。

而分析在 2022 年增长速度最快的开源项目,我们也能找到一些共同点:
在 2022 年,大部分 GitHub 上的大型开源项目都是由公司或某个组织来领导或维护的。

而这些公司主导的开源项目集中在代码编辑器、框架和编程语言领域,它们在 GitHub 上吸引了非常多的贡献者。从 microsoft/vscode 到 tensorflow/tensorflow,这些项目大部分都上过 Octoverse 报告中的榜单。它们的成功说明了有商业支持的开源项目能够在更广泛的开源生态中产生巨大的影响。

值得注意的是,大多数来自组织外部的开发者的贡献都是提 comment、提 issue、review PR。换句话说,组织内部的开发人员仍然以比外部贡献者高得多的速度为他们公司的项目贡献代码。这意味着——
当公司让开发人员作为社区的一部分做出贡献而不是仅仅在开源许可下发布代码时,公司就会拥有最活跃的开源社区。
开源的下一步是什么?没有人能给出确切的答案。软件技术发展至今,在商业、政府、社会发展等方面都至关重要——而开源往往处于软件技术的前沿。
举个例子,在 COVID-19 大流行的早期,就有开源组织在于 WHO 合作,规范其内部的软件开发流程,并创建了联合国中第一个开源项目办公室,用于支持全球 WHO 的工作人员使用、生产并发布开源工具,以应对 COVID-19 的挑战。
有人说开源在社会领域的最大优势之一是它可以减少重复工作,这对于减少内耗、提高效率来说至关重要。
也有人说开源还可以将全球社区聚集在一起,促进并产生更包容,更多样化的技术。
还有人说开源让那些可靠且优秀的技术解决方案在全球范围内更容易获得,有助于促进世界的公平。
……
我相信每一位参与开源的开发者都对开源的未来有着自己的理解,不过总之,还是感谢所有在今年为开源生态做出贡献的人!
假设我有一个在Ruby中看起来像这样的哈希:{:ie0=>"Hi",:ex0=>"Hey",:eg0=>"Howdy",:ie1=>"Hello",:ex1=>"Greetings",:eg1=>"Goodday"}有什么好的方法可以将它变成如下内容:{"0"=>{"ie"=>"Hi","ex"=>"Hey","eg"=>"Howdy"},"1"=>{"ie"=>"Hello","ex"=>"Greetings","eg"=>"Goodday"}} 最佳答案 您要求一个好的方法来做到这一点,所以答案是:一种您或同事可以在六个月后理解
在Ruby(或Rails)中,我们可以做到new_params=params.merge({:order=>'asc'})现在new_params是一个带有添加键:order的散列。但是是否有一行可以返回带有已删除key的散列?线路new_params=params.delete(:order)不会工作,因为delete方法返回值,仅此而已。我们必须分3步完成吗?tmp_params=paramstmp_params.delete(:order)returntmp_params有没有更好的方法?因为我想做一个new_params=(params[:order].blank?||para
3月26日,映宇宙(HK:03700,即“映客”)发布截至2022年12月31日的2022年度业绩财务报告。财报显示,映宇宙2022年的总营收为63.19亿元,较2021年同期的91.76亿元下降31.1%。2022年,映宇宙的经营亏损为4698.7万元,2021年同期则为净利润4.57亿元;期内亏损(净亏损)为1.68亿元,2021年同期的净利润为4.33亿元;非国际财务报告准则经调整净利润为3.88亿元,2021年同期为4.82亿元,同比下降19.6%。 映宇宙在财报中表示,收入减少主要是由于行业竞争加剧,该集团对旗下产品采取更为谨慎的运营策略以应对市场变化。不过,映宇宙的毛利率则有所提升
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭6年前。Improvethisquestion是否有任何用Ruby或Python编写的生产就绪的开源Twitter克隆?我对功能丰富的实现更感兴趣,而不仅仅是简单的Twitter消息(例如:API、FBconnect、通知等)谢谢!
运行:require'date'y=Date.newputs"defaultyearis#{y.year}"输出:defaultyearis-4712Date对象的年份默认为-4712是否有任何特殊原因?我认为也许有技术(或传统)原因。我用谷歌搜索并在Ruby文档(2.2.3)中查找了它,但我找不到关于为什么的答案。 最佳答案 公元前4713年1月1日是Julianday的开始,来自维基:TheJulianDayNumber(JDN)istheintegerassignedtoawholesolardayintheJulianday
文章目录写在前面1、下载与安装(windows)1.1、idea中配置gradle2、基础知识(Gradle6.9为例)2.1、Gradle脚本语法2.1.1、dependsOn2.1.2、创建动态任务2.1.3、增加任务行为2.1.4、参数2.1.5、Ant任务2.1.6、方法2.1.7、默认任务2.1.6、依赖任务的不同输出3、java项目中使用3.1、在已有项目中构建gradle3.2、在新建项目时构建gradle(idea)3.3、gradle项目目录结构3.4、build.gradle3.4.1、plugins3.4.2、repositories3.4.3、dependencies3
如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1. 创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1. 创建SpringBoot项目 打开IDEA,选择NewProject创建项目。 填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。 选择springboot版本以及需要的包,此处只选择了springweb。 此处需特别注意,若你使用的是jdk1
Iparking停车收费管理系统-可商用介绍Iparking是一款基于springBoot的停车收费管理系统,支持封闭车场和路边车场,支持微信支付宝多种支付渠道,支持多种硬件,涵盖了停车场管理系统的所有基础功能。技术栈Springboot,MybatisPlus,Beetl,Mysql,Redis,RabbitMQ,UniApp功能云端功能序号模块功能描述1系统管理菜单管理配置系统菜单2系统管理组织管理管理组织机构3系统管理角色管理配置系统角色,包含数据权限和功能权限配置4系统管理用户管理管理后台用户5系统管理租户管理多租户管理6系统管理公众号配置租户公众号配置7系统管理操作日志审计日志8系统
我发现当我新建一个有七个对象的哈希比六个长度的哈希要慢得多。我知道散列的长度会影响性能。但我不知道为什么七是一个特殊的。这里是基准代码(Ruby2.2.3):require'benchmark/ips'Benchmark.ipsdo|x|x.report(5){{a:0,b:1,c:2,d:3,e:4}}x.report(6){{a:0,b:1,c:2,d:3,e:4,f:5}}x.report(7){{a:0,b:1,c:2,d:3,e:4,f:5,g:6}}x.report(8){{a:0,b:1,c:2,d:3,e:4,f:5,g:6,h:7}}x.report(9){{a:0,
我有兴趣了解使用nosql将如何影响rails应用程序的架构/设计/代码。有人知道使用nosql持久性的开源rails应用程序的一个好例子吗?谢谢 最佳答案 看看这些项目:卡桑德拉用法atDigg。卡桑德拉用法atTwitter。Friendly用法atFetLife(nsfw)。最后,MyNoSQL是一个提供nosql相关信息的好网站。 关于ruby-on-rails-有没有很好的引用(开源)RailsNoSQL应用程序?,我们在StackOverflow上找到一个类似的问题: