写点什么

Kotlin 生态调查结果出炉:超过 6 成的开发者用过 Kotlin 了

  • 2018-07-24
  • 本文字数:2953 字

    阅读完需:约 10 分钟

Kotlin 从 2011 年低调问世,在短短几年间,如冲天火箭般流行起来。一年前,谷歌宣布将 Kotlin 指定为 Android 官方编程语言;来自 Stack Overflow 的一项问卷调查显示,超过 10 万名受调者表示 Kotlin 是他们的第二大编程语言。英国软件公司 Pusher 对此感到非常好奇,究竟 Kotlin 有什么特别的地方,让开发者如此着迷。于是,Pusher 公司发起了一项针对 Kotlin 生态系统的问卷调查,从 2018 年 1 月份至 3 月份,为期三个月,受调者达到 2744 名。以下是这份问卷调查的结果及其简要分析。

01. 年轻的技术从业者更喜欢 Kotlin

超过 70% 的受调者为企业雇员,企业家和承包商占了 11% 左右。他们大部分都在科技行业工作,金融行业、教育领域和数字机构的比例则远远落后。保险行业和政府在采用 Kotlin 方面最为保守。

企业员工(72.4%),自由职业者(11.18%),学生(15.51%),其他(1.07%)。其中77.2% 属于科技行业

超过一半的受调者开发经验不足5 年。他们似乎比参与Stack Overflow 问卷调查的开发者拥有更少的经验。不过,“开发者流行度每5 年会翻一番”的如意算盘仍然会奏效。

在企业中使用Kotlin 的人数差异化严重。其中有三分之一的人表示,他们所在的公司有2 到5 个人在使用Kotlin,而这个数字恰好是一个Android 团队的平均人员配置。

0 人(20.6%),1 人(21.1%),2-5 人(32.1%),5-10 人(13.1%),10-50 人(9.4%),50 人以上(3.7%)

02. Kotlin 正在走向成功

在 2015 年之前,Kotlin 以每年翻一番的速度增长。2015 年早些时候,来自 Square 的 Jake Wharton 发表了一篇文档,详细说明了他们为什么要采用 Kotlin。他们的团队以开源流行的 Android 开发库而闻名。调查结果显示,那一年有很多人跟风,开始发表有关 Kotlin 的演讲和博客。

2017 年 5 月之后,Kotlin 的采用开始爆发。谷歌宣布将 Kotlin 作为 Android 的官方开发语言,大量 Android 开发者开始使用 Kotlin。谷歌的这一举措无疑极大加快了 Kotlin 在未来几年的采用速度。( https://youtu.be/Y2VF8tmLFHw

学生和年轻开发者非常相信谷歌的实力。刚开始,使用 Kotlin 的大多是有经验的专业开发者,但在谷歌做出宣布之后,更多的年轻开发者参与进来,特别是学生。

Kotlin 吸引了来自各种背景的开发者。尽管 Java 仍然占主导地位,不过受调者当中使用其他编程语言的也很多,不过也有少部分人将 Kotlin 作为他们的第一开发语言。

03. JetBrains 的努力如愿以偿

超过 60% 的工作者在他们工作的项目中使用 Kotlin。相反,只有三分之一的学生在他们的工作和个人项目中使用 Kotlin。还有将近一半的人表示会在未来使用 Kotlin。

官方网站是目前最受欢迎的Kotlin 学习去处。不过,学生更喜欢YouTube 喝Udemy 的在线教程,以及各种技术大会和演示。这些网站似乎会在接下来的几年提供视频流和实时代码服务,就像Twitch 那样。

有很大一部分开发者在他们的工作项目和个人项目中使用Kotlin。不过,在个人项目中显然会用得更多,因为个人项目规模更小,更容易进行转换,也更方便进行实验。

Android 是 Kotlin 的主要使用平台。大量的专业开发者和学生使用 Kotlin 开发 Android,而在后端,使用 Kotlin 的非常有经验的开发者。

04. 萝卜青菜各有所爱

每个受够了 Java NullPointerException 的人都喜欢 Kotlin 的 Null 安全特性。其中有 4% 的人选择了“一等函数”。

扩展函数被大量使用。77% 的受调者表示,扩展函数提高了代码的可读性,特别是在进行函数式编程或在创建 DSL 时。越是有经验的开发者,越是喜欢用扩展函数。以下是扩展函数的常见使用场景:

  • “我使用扩展函数……让算法从头到尾看起来很容易理解。”

  • “只是为了检查 null(因为我们有一个 Java app)”。

  • “主要是为了让代码更干净。我会尽可能控制它的作用域,除非它是一个非常通用的扩展函数”。

  • “几乎用它做所有的事情。我经常使用内部扩展函数,以避免全局命名冲突”。

  • “最主要将它用作 DSL 构建器的 lambda 参数”。

除了扩展 Java 类,人们也常常将 Java 代码迁移到 Kotlin。超过 87% 的受调者已经完成了迁移。他们有的使用了迁移向导,有的直接手动修改代码。超过 10% 的人使用向导将整个项目迁移到 Kotlin,其中有 22% 是学生或者经验不足一年的新手。

超过四分之一的受调者迁移到 Kotlin 后又回到了 Java。有技术方面的原因,也有组织方面的原因。其中使用了反射或代码生成的工具是被提及最多的因素。

  • “Kotlin 的枚举不能包含常量。在自定义注解时(比如 @IntDef),为了保持接口的整洁,需要将值保存在枚举中”。

  • “我们正在使用 Realm,但它不能与数据类一起使用”。

  • “我们的 Java 代码中使用了 Retrolambda,因为类型缺失,很难转到 Kotlin”。

  • “另一个团队不喜欢 Kotlin,我们也预料不到会这样。”

  • “这不是我们决定的,我们是按照公司的规则来的”。

Kotlin 跨平台正在开始展现,但速度较慢。只有差不多四分之一的受调者表示,他们曾经用过跨平台支持,而且大部分使用了 Koltin/Native,然后是 KotlinJS。

假以时日,采用这些特性的人会增加。那个时候,Kotlin 才真正有可能成为“编写一次,到处运行”的编程语言。

协程(coroutine)是 Kotlin 官方提供的异步编程模式,但因为是实验性的,所以很少被用到。只有三分之一不到的受调者使用了协程,而这些人都拥有超过 5 年的开发经验。他们似乎已经在其他语言中使用过协程,所以在 Kotlin 中使用协程不会刚到别扭。

  • “因为它是实验性质的,所以我先不用它。”

  • “我们基本上将它作为 fintech 的解决方案,app 的核心逻辑使用协程编写。”

  • “我用了 Arrow 这个库,它使用协程实现 for 循环。”

  • “目前正在使用协程替换 CompletableFuture。协程主要用在高并行计算中的任务管理。”

JetBrains 和 Android Studio 几乎统领了 Kotlin 生态圈的开发构建工具。从图上可以看出,它们都位于 Gradle(Android 项目的默认构建工具)的左边,而独立编译器 KotlinC 的使用比例较低。

与协程类似,DSL 也没有被广泛使用,因为它属于高级特性。大概有40% 的受调者使用了DSL,除此之外,有四分之一的人自己开发DSL。当被问及他们都开发了哪些类型的DSL 时,一般的受调者表示,他们开发的DSL 都是与特定领域相关的,比如金融、大数据等。其他DSL 还包括用于Android 和配置工具的DSL。

学生们喜欢玩文字游戏。越是有经验的开发者,对此越是不关注。

2019 年的 Kotlin 将会怎样发展?

Kotlin 的快速增长让人兴奋不已,但它是否真的像看起来的那么有前途?

因为有 JetBrains 和谷歌作为后盾,以及在开发者社区中广泛流行,我们可以确信,Kotlin 会一路走好。但关键的问题是:它是否能够突破 Android,进入到其他的领域?

JetBrains 在极力推动它的多平台梦,但在未来几个月或者几年内是否能够看到令人欣喜的增长?Kotlin 会成为 Web、iOS 或者后端开发者的新标准吗?

不管怎样,即使它需要几年时间才能跨出 Android 的藩篱,我们仍然会看到新的开发者加入到 Kotlin 的行列。他们的工具箱里将会多出一门万能的跨平台编程语言,这门语言涵盖了面向对象编程、函数式编程、脚本编程、声明式编程。这意味着 Kotlin 将会在编程语言领域产生重要影响,成为编程语言的标杆。

有一件事情是可以肯定的:Kotlin 生态圈的发展让人拭目以待。

查看英文原文: https://pusher.com/state-of-kotlin

感谢覃云对本文的审校。

2018-07-24 14:503106
用户头像

发布了 731 篇内容, 共 446.6 次阅读, 收获喜欢 2001 次。

关注

评论

发布
暂无评论
发现更多内容

编译器优化那些事儿(6):别名分析概述

openEuler

开源 编译器 openEuler 毕昇 JDK

面试突击87:说一下 Spring 事务传播机制?

王磊

Java 面试

大模型的禾下乘凉梦,百度自己来做试验田

脑极体

Python语法之类和对象(1)

芯动大师

Python 9月月更 类与对象

开源实习 | 毕昇JDK发布国密算法实习任务

openEuler

开源 openEuler 毕昇 JDK

【Python实践】使用Python实时语音控制电脑全局音量

迷彩

人工智能 语音识别 9月月更 控制电脑 语音控制

这个C4D短片有点辣!热情起舞小金链尽显墨西哥黑帮气质

Renderbus瑞云渲染农场

影视制作 Renderbus瑞云渲染 3D电影制作

rust语言写的贪吃蛇游戏

福大大架构师每日一题

rust 贪吃蛇 福大大

千峰课程网安笔记(1)

吉师职业混子

9月月更

跟着卷卷龙一起学Camera--内存池浅析04

卷卷龙

ISP 9月月更

车企如何完善车载小程序生态安全

Geek_99967b

小程序

设计消息队列存储消息数据的 MySQL 表格

张立奎

openEuler 资源利用率提升之道 04:CPU 抢占和 SMT 隔离控制

openEuler

开源 openEuler

破解windows系统密码

吉师职业混子

9月月更

Embedded SIG | 树莓派的UEFI支持和网络启动

openEuler

开源 树莓派 操作系统 openEuler

如何在笔记本上安装openEuler 22.03 LTS

openEuler

开源 操作系统 openEuler

我也不想学之PHP系列(2)

吉师职业混子

9月月更

前端工程师在面试时经常被问的闭包到底是什么?我用打包礼物的例子让你秒懂

wljslmz

JavaScript 闭包 9月月更

第一模块作业

lsf1227

「架构实战营」

Python之类和对象(2)

芯动大师

属性 9月月更 子类的定义

StratoVirt 中的 PCI 设备热插拔实现

openEuler

开源 操作系统 虚拟机 openEuler

揭开HPC应用的神秘面纱

openEuler

开源 openEuler

别让你的 SaaS 产品由赋能变为“负能”

产品海豚湾

产品设计 产品运营 SaaS平台 B端产品 9月月更

【docker】软链接迁移docker存储目录

非晓为骁

Docker 存储 迁移

【编程实践】利用 Python 调用图灵机器人 API 实现实时语音聊天及自动回复

迷彩

Python 实时语音 实时聊天 9月月更

2022-09-27:给定一个棵树, 树上每个节点都有自己的值,记录在数组nums里, 比如nums[4] = 10,表示4号点的值是10, 给定树上的每一条边,记录在二维数组edges里, 比如ed

福大大架构师每日一题

算法 rust 福大大

Python语法之模块和包(1)

芯动大师

9月月更 Python语法 模块的创建

开源之夏 | 【结项报告】毕昇Fortran编译器内联动态库函数str_copy

openEuler

开源 操作系统 openEuler 毕昇 JDK

研发效能之技术治理&技术治理架构师

laofo

DevOps cicd 研发效能 持续交付 工程效率

企业服务中出场率最高的活动目录AD到底是什么?本文带您好好了解一下!

wljslmz

AD 9月月更 活动目录

【云原生 | 从零开始学Kubernetes】十一、k8s污点、容忍度和pod状态

泡泡

Docker 云计算 云原生 k8s 9月月更

Kotlin生态调查结果出炉:超过6成的开发者用过Kotlin了_Android/iOS_Pusher_InfoQ精选文章