【QCon】精华内容上线92%,全面覆盖“人工智能+”的典型案例!>>> 了解详情
写点什么

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:502975
用户头像

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

关注

评论

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

与第三方系统打通的N种进阶方式

棒锤🐮

架构

【涂鸦物联网足迹】涂鸦云平台接口列表—万能红外遥控器

IoT云工坊

人工智能 云计算 物联网 API 红外遥控器

薇娅和李佳琦带货百亿奇迹背后是这些技术团队的努力

阿里云视频云

堪称完美!11月华为官方首发Spring响应式微服务,Spring+SpringBoot+SpringCloud三管齐下

Java架构追梦

Java 架构 微服务 springboot SpringCloud

当代程序员必备技能(算法)之:递归详解

Java架构师迁哥

我终于拥有自己的独立博客了。

彭宏豪95

GitHub 写作 博客 IT

奈学教育荣获“中关村高新技术企业”认证

古月木易

教育 IT

【活动回顾】Flutter实时音视频应用场景实践

ZEGO即构

flutter RTC

Linux一切皆文件,如果你没做到这一步,那这就是句话而已

小Q

Java Linux 学习 架构 面试

深入解析 Flink 的算子链机制

Apache Flink

flink 流计算

当Nginx遇上Tomcat集群,又是一场负载均衡的爱恨情仇

小Q

nginx tomcat 学习 架构 面试

践行新基建,共建城市智能体,为数字经济发展提供新动能

CECBC

云计算 大数据

apipost如何设置断言

测试人生路

接口测试

双十一背后的技术

anyRTC开发者

大数据 AI 音视频 WebRTC RTC

详解快速开发平台与工作流通用组件的设计规范

Marilyn

敏捷开发 企业应用

重拳出击!平台经济反垄断,互联网巨头市值蒸发千亿

CECBC

小额贷款 反垄断

第八周作业

Geek_4c1353

极客大学架构师训练营

腾讯云直播全解析,双11怎么买才不亏?

腾讯云音视频

腾讯云 阿里云 云直播 直播 视频

年末十家手机银行数字化升级大盘点:谁家开发更全面?谁家建设更到位?

CECBC

疫情 银行 手机银行

11.11 程序员的 1111 种死法

京东科技开发者

程序员 程序人生

阿里P8整理出SQL笔记:收获不止SOL优化抓住SQL的本质

Java~~~

MySQL 阿里 sql查询 SQL优化 SQL光标

实时音视频面视必备:快速掌握11个视频技术相关的基础概念

JackJiang

音视频 即时通讯 视频

科技助力餐饮,普渡送餐机器人在餐博会上被众人围观!

DT极客

堪称完美!11月华为首发Spring响应式微服务,三管齐下

小Q

Java spring 学习 架构 面试

CloudQuery v1.2.1 版本发布

BinTools图尔兹

数据库 开发者 运维 工具 开发工具

对比一下,你的简历是不是也写成了这样,能拿高薪才怪了

小Q

Java 学习 架构 面试 简历

《我想进大厂》之Java基础夺命连环16问

艾小仙

Java 面试 编程语言

第七周作业

Geek_4c1353

极客大学架构师训练营

快速了解阿里微服务热门开源分布式事务框架——Seata

比伯

Java 架构 微服务 seata

从应用开发角度认识K8S

LorraineLiu

容器 云原生 k8s入门

奈学教育荣获“中关村高新技术企业”认证

奈学教育

奈学教育

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