Java 24岁!Google加持的Kotlin真能取代它?
作者 | 屠敏
出品 | CSDN(ID:CSDNnews)
1995 年 5 月 23 日,Sun 公司在 Sun world 会议上正式宣布了 Java 的到来,从此一代编程语言界的翘楚就此诞生。而在不断地迭代与适配中,今时今日,Java 以需要满足各个层面开发者的需求与横扫各大编程语言榜单的成绩给了 24 岁的自己一张值得骄傲且满意的答卷。不过与此同时,我们也发现正值本命年之际的 Java,在未来的一段时间内,或将迎来一次大考。
虽然在过去的一些年中,常青藤 Java 一直在被如 C++、C#、Erlang、Python 等其他编程语言挑战,但最终结果均不一而终。不过,近两年间,一门新崛起的多用途编程语言——Kotlin,在硅谷科技巨头之一的 Google 扶持下,开始逐渐蚕食 Java 的应用市场。目前来看,Kotlin 对 Java 虽构不成致命的威胁,但是当未来 Google 的 Kotlin-first 政策完全落实之后,再加上 Oracle 对 Java 放任的态度,一切将变得难以轻易下定论。
而除却以上外界因素,就 Kotlin 本身而言,其是否有抗衡 Java 的潜力?接下来,我们将从近日 Kotlin 的开发商 JetBrains 最新发布的一份《Kotlin Census 2018》的报告中寻找到答案。
注:该报告基于全球 4300 名开发者(不局限于 Kotlin 用户)。
适用于多平台应用的 Kotlin 编程语言
何为 Kotlin?
Kotlin 是一门静态编程语言,可用于开发几乎所有类型的应用程序,包括服务器端、桌面、移动甚至嵌入式。由 JetBrains 设计和开发,一直以来,Kotlin 获得了科技巨头和开发商们的大力支持。
2016 年 Kotlin 1.0 发布;
2017 年,Google 在 I/O 大会上宣布 Kotlin 成为 Android 开发的官方语言;
2018年,Kotlin 拥有 150 万+ 用户,并在 GitHub 上拥有超过 96,000 个存储库;
2019 年,Google 于 I/O 大会上再次宣布 Google 当前采取的下一个重大步骤是 Kotlin-first,Android 开发将越来越多地以 Kotlin 为主。
那么当前大环境下,有多少开发者在使用 Kotlin?Kotlin 的真实应用现状又如何?接下来,我们与大家详细分享。
Kotlin 的商用还处于起始阶段
根据调查显示,有超过一半的受访者表示,他们在生产代码中使用了 Kotlin 语言,而这一使用数据相较于去年,也有所增长。当下如 Gradle、Pinterest、Atlassian、Pivotal 以及更多公司和项目在开发中使用了 Kotlin 语言。
不过,有 13 % 的开发者称,虽当前正在使用 Kotlin,但尚未发布项目。
2018 vs 2017 Kotlin 应用现状
而基于以上数据,我们也不禁好奇,相较于 Java,Kotlin 还存在哪些挑战?又是什么阻碍了开发者上手 Kotlin?
对此,JetBrains 列出了几个主要观点:
开发者对 Kotlin 技术知识的缺乏;
市场对于该语言的采用率低;
开发者并不想学习新的语言;
Kotlin 并没有价值;
生态系统薄弱;
......
据以下的数据统计结果,我们发现,阻碍开发者学习 Kotlin 最大的因素源于不少人认为自己缺乏 Kotlin 相关的技术知识,且这一数据占比高达 55%。其次,有 18% 的受访者表示 Kotlin 语言的采用率低。
在此,针对在上手过程中缺乏专业技术知识的开发者,JetBrains 也分享了一份资源汇总,希望对大家有所帮助:
Kotlin 官网:https://kotlinlang.org/docs/reference/
Coursera 上的 Kotlin for Java Developers 视频课程 :https://www.coursera.org/learn/kotlin-for-java-developers
Atomic Kotlin 的书和相关的学习资源:https://www.atomickotlin.com/atomickotlin/
Kotlin Playground 可以探索 Kotlin:https://play.kotlinlang.org/
JetBrains 的 Kotlin Edu,免费工具,用于学习,教授和练习编程:https://www.jetbrains.com/education/
另外,从 Kotlin 的使用来看,距离 Kotlin 1.0 版本至今已有 3 年的发展历程,但事实上,让 Kotlin 大火起来还是源于 Google 对其的支持。因此对于 Kotlin 使用的年限,根据报告显示,大多数的开发者还处于 1-2 年之间,这也属于意料之中。
不过在未来,越来越多的开发者会拥有更加丰富的 Kotlin 开发经验。且如果他们使用 Kotlin 超过一年,看起来他们通常会坚持下去。
Kotlin 支持的平台有哪些?
Kotlin 最重要的目标之一是在多平台上共享代码,当前主要有四种支持环境可以帮助开发者简化编码过程,并为跨平台开发提供更多机会。Kotlin 主要支持 JVM、JavaScript、Android 和 Native。这使得该语言可开发所有类型的应用程序并在流行的操作系统(如 iOS,macOS,Windows 和 Linux)上运行它们的绝佳代码。
Kotlin 最常被用于哪些平台中?
Kotlin 最受欢迎的用途是在 JVM 中,占比高达 67%,而在 Android 环境中,Kotlin 以 57% 的使用率排在第二位。
哪种 JDK 版本,开发者最常用?
在这一问题中,一直以来,Java 的长期支持版本都极具优势。这不在此次调查中,有 84% 的 Kotlin 用户选择了 JDK 8。而第二个最受欢迎的版本是JDK 11,占 27%;与此同时,JDK 9 和 10 使用率均为 8%。
是否使用 Java 模块?
在对以 Kotlin 开发者为主的调查中,我们发现有 70% 的开发者表示不会使用 Java 模块,仅有 18% 的受访者称在日常的开发中会用到 Java 模块。
常用的 Android 版本?
在以下的调查结果中,有 82% 的开发者表示使用的是 Android 8.0 Oreo 版本;其次有 78% 的受访者表示最常用 Android 7.0 版本,而对于最新的 Android 9.0,其使用率与 Android 6.0 相同,均为 75%。
从中我们也可以看出一个问题,即当前大环境下,Android 的碎片化依旧很严重。
在哪里运行从 Kotlin 编译的 JavaScript 代码?
有 88% 的开发者表示基于浏览器的方式。
常用的开发平台/操作系统?
相比 2017 年有 48% 的开发者基于 Android 平台来使用 Kotlin 语言,2018 年,66% 的受访者表示最常用 Android 平台。其次,Linux 为第二选择。
整体而言,越来越多的开发者在基于 Kotlin 进行跨平台开发。
基于 Kotlin 开发的 App 类型有哪些?
据报告显示,25% 的用户正在使用 Kotlin 开发 2 种类型的 App。
15% 开发了 3 种类型的 App,但大多数开发者仍然只在一种类型的 App 中使用 Kotlin。
Kotlin 开发了哪些类型的应用程序?
在移动互联网时代,无论是 Java 还是 Kotlin,大多数会被用于移动应用开发。在本次调查中,有 58% 的受访者表示,他们正在使用 Kotlin 开发移动应用,48% 的开发者称用其开发 Web 后端。此外,Kotlin 还被用于库和框架、桌面、工具、Web 前端、游戏开发、数据分析、IoT、机器学习以及嵌入式等场景中。
Kotlin 的跨平台实践
在 Kotlin 1.2 版本中,首次引入了多平台项目特性,可通过多平台项目支持 JVM 和 JavaScript 平台的代码共享,随后在 Kotlin 1.3 版本中,JetBrains 的开发团队对其进行了大幅改进。彼时它包含了一组特定的库,可帮助开发者编写多平台代码。
作为 Kotlin 开发者,你是否在 Kotlin 中使用多平台项目(MPP)功能?
对于这一新功能,有 89% 的受访者表示并未用过,仅有 11% 的开发者称使用过。
主要会针对哪个平台使用 MPP 功能?
基于以上使用了 MPP 功能的开发者,大多数会应用于 JVM 平台,其次分别是 Android、JavaScript 和 iOS。
MPP 用户所开发的 App 类型
整体而言,依旧是移动领域使用 MPP 最为广泛。其次为 Web 后端,占比 56%。
在跨平台开发过程中,主要共享哪部分的代码?
“Write once,run anywhere”应该是每位开发者在开发过程中最为期待的一件事。根据调查报告显示,Kotlin 开发者在跨平台开发过程中最常共享的代码为算法和数据架构部分,而这一部分相对而言,也比较复杂。
随后 JetBrains 也对尚未使用 MPP 功能的开发者进行了深入的调查,其中,有 41% 的受访者希望可以实现算法和数据结构的代码共享,32% 的人表示希望数据格式能实现共享。
Kotlin 工具的选型
均出自 JetBrains 之手的 Kotlin 语言和 IntelliJ IDEA,这两者的匹配应用应该不足为奇。
而 Android Studio 又是 Google 基于 IntelliJ IDEA 平台而开发的 Android 开发工具,其为移动开发提供了出色的用户体验。
根据调查显示,有 44% 的受访者称正在使用 Android Studio,其次,有 37% 的开发者使用 IntelliJ IDEA Ultimate 版本。
使用哪种 IDE 进行 Kotlin 开发?
对于 Kotlin 开发者,基于不同的环境开发,所使用的 IDE 均有所不同。就 JVM 平台而言,开发者最喜欢使用 IntelliJ IDEA Ultimate 版本;
在 Android 平台下,则有 76% 的受访者使用 Android Studio。除此之外,在 JS 和 Native 下,开发者最常用的 IDE 均为 IntelliJ IDEA Ultimate。
最常用的构建工具
无论是哪个平台或环境,对于开发者而言,其最常用的工具均为 Gradle,整体占比高达 86%。
库和框架
最常用的 Kotlin 库和框架有哪些?
根据调查发现,自 2017 年以来, Kotlin 库的使用率几乎翻了一番,而且最常用的库也继续受欢迎。其中,开发者最常使用的 Kotlin 库或者框架为 kotlinx.coroutines。其次,令人诧异的是,有 26% 的开发者没有使用过任何的 Kotlin 库和框架。
Kotlin 的生态发展
在此次的调查中,Java 仍是最受欢迎的编程语言,占比高达 42%,不过相比去年,这一数据有所下降。而其中,Kotlin 的发展与其相反,当前有 39% 的受访者称 Kotlin 为其主要的编程语言。
在本次受访者中,有 86% 的用户为程序员以及软件工程师。
而其公司的规模主要为 51-500 人的区间。
简而言之,当前的 Kotlin 正被各种规模的企业以及组织使用。
Kotlin 的前景
最后,对于 Kotlin 的发展前景,根据调查显示,Kotlin 在处理数据方面似乎更有前途。有 64% 的开发者表示,正在使用 Kotlin 来进行机器学习、数据分析、BI 等场景中。
更多报告内容,可参考:https://www.jetbrains.com/research/kotlin-census-2018/
(*本文为 AI科技大本营转载文章,转载请联系原作者)
◆
CTA核心技术及应用峰会
◆
5月25-27日,由中国IT社区CSDN与数字经济人才发展中心联合主办的第一届CTA核心技术及应用峰会将在杭州国际博览中心隆重召开,峰会将围绕人工智能领域,邀请技术领航者,与开发者共同探讨机器学习和知识图谱的前沿研究及应用。议程设置请请识别海报二维码查看。
目前CTA峰会倒计时1天!还没有拿到入场券的小伙伴可以识别海报二维码或者点击阅读原文,即刻抢购。你也添加小助手微信15101014297,备注“CTA”,了解票务以及会务详情。
推荐阅读
危机加剧:ARM釜底抽“芯”,华为腹背受敌
面对996,程序员如何利用“碎片时间”涨薪?
权威解读 GitHub、Apache 疑云:主流开源软件究竟是否会被闭源?
Kaggle季军新手笔记:利用fast.ai对油棕人工林图像进行快速分类(附Python代码)
程序员连拿3份Offer,每份高达45K?他说做对了这些!
ARM到底是一家什么样的公司?
为什么你写了一万小时的代码,却没能成为架构师?| 程序员有话说
别怀疑,孩子在家里也能学编程!
百花村区块链山的选民们, 超有趣!
点击阅读原文,了解「CTA核心技术及应用峰会」
相关文章:

三,ES6中需要注意的特性(重要)
-----书接上文,前文中我们总结了关于JS的组成部分以及如何快速开展学习JS,相信已经有很多朋友掌握到这些方法。接下来就从更深的ECMAScript开始说起。 1.什么是ES6? ECMAScript(European Computer Manufacturers Association) 6: 是JavaScript语言的下一…

【SVN】在阿里云上创建svn服务器
1、创建用户及相关设置 阿里云搭建ubuntu18.04工作台,默认只有root超级用户。为了安全起见,我们使用普通用户来创建svn: useradd hello // 创建用户hello mkdir -p /home/hello // 在hello用户的根目录 cd /home/hello chown hello . // 设…

【转】on delete cascade
关系表的级联更新: on update cascade on delete cascade 是级联删除的意思 意思是 当你更新或删除主键表时,那么外键表也会跟随一起更新或删除 CREATE TABLE Countries(CountryId INT PRIMARY KEY) INSERT INTO Countries (CountryId) VALUES (1) INSER…

倒计时1天!CTA核心技术及应用峰会报名通道即将关闭(附参会攻略)
全球智能化趋势当前,人工智能技术正蓬勃发展。为了直击开发者在机器学习与人工智能技术研究与落地过程中的痛点与瓶颈,深入解析机器学习和知识图谱技术在行业中的实践和落地。2019 年 5 月 26 - 27 日,由中国 IT 社区 CSDN 与数字经济人才发展…

【Qt】在QtCreator中使用Ctrl+Shift+f快捷键打开高级查找窗口失效的解决方法
1、问题描述 Win10操作系统环境下,在QtCreator中使用Ctrl+Shift+f快捷键打开高级查找窗口失效。 2、原因分析 Ctrl+Shift+f快捷键在各种输入法中,常用来做中文简体和繁体输入的切换。QtCreator中该快捷键失效的的原因,多半是因为和输入法的快捷键冲突。可以在输入法的快捷…

Python修行之字符串(一):连接、切割、大小写、排版
字符串:1.是由一个个字符组成有序的序列,是字符的集合2.字符串是不可变对象3.使用单引号、双引号、三引号引住的字符序列4.python3中、字符串就是unicode类型、在2中分两种一种unicode一种非unicode字符串元素访问--下标:1.字符串支持使用索引访问2.有序的字符集合&…

UI自动化测试随笔
昨天给开发的同事讲我们正在做的自动化测试,同事问了句:为什么API的测试不需要写代码了,而UI的测试还需要写那么多代码呢? 能不写代码么? 目前我们的自动化测试的现状: 目前主要覆盖两个部分:A…

【跃迁之路】【554天】程序员高效学习方法论探索系列(实验阶段311-2018.08.13)...
(跃迁之路)专栏 【跃迁之路】奖励金计划正式开始 从2018.7.1起,【跃迁之路】奖励金计划正式起航,从今以后,, 每月1日,我会将自己个人上月收入的1%计入【跃迁之路】奖励金池,积累到足够金额后,将…

TensorFlow 2.0来了,为什么他却说“深度学习框架之争,现在谈结果为时尚早”?...
记者 | 琥珀出品 | AI科技大本营(ID:rgznai100)半个多世纪前,浙江大学老校长竺可桢曾有两个非常经典的教育问题:“诸位在校,有两个问题应该自己问问,第一,到浙大来做什么?第二&#…

【FFmpeg】ffmpeg工具源码分析(一):main函数
ffmpeg工具经常用来转换、生成媒体文件,下面是它的源码分析(一):main函数 ffmpeg版本:4.2.1 int main(int argc, char **argv) {int i, ret;BenchmarkTimeStamps ti; # 用于基准测试init_dynload(); # 初始化动态库加载路径,只在win3

Android之传感器(一)
传感器的种类:1. 动作传感器加速度传感器、重力传感器和陀螺仪(判断手机姿态)等2. 位置传感器方向传感器和磁力传感器3. 环境传感器温度传感器 、压力传感器和亮度传感器 使用传感器的方法:1. 获取SensorManager对象SensorManage…

【Qt】Qt单例模式三种实现
1、饿汉式 在头文件中:将构造函数私有化,并创建静态函数instance来获取实例 class A : public QObject {Q_OBJECT public:static A* instance(QObject *parent = nullptr);private:explicit A(QObject *parent = nullptr); }

程序员敲代码时,戴着耳机究竟在听什么?
今天,某妹子突然凑到我的耳边轻声说:“我们公司的程序员,清一色的戴着耳机,你说他们是不是故意不想听我们提的需求?”我很方,因为我也喜欢戴耳机。(思考ing)思考了一秒钟后ÿ…

关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题
关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题,解决方法如下:在数据库连接字串中,增加一个参数:Metadata Poolingfalse如“Data Source(DESCRIPTION(ADDRESS_LIST(ADDRESS(PROTOCOLTCP)(HOST1.1.6.200…

配置导出MOSS2010列表数据到Excel并根据列表记录自动刷新数据
第一章 简介 场景描述 根据最近客户的需求,他们需要自动维护MOSS2010列表数据导出到Excel的数据实时同步,就是列表添加记录后,导出的Excel列表自动同步数据过来。 第二章 配置方法 1. 打开MOSS2010站点http://moss:8001的要导出的列表 2. 点【…

一个让Python代码运行更快的最佳方式!
作者 | Serdar Yegulalp译者 | 姜松浩,责编 | 屠敏转载自 CSDN(ID:CSDNnews)Python因其强大、灵活且易于使用等特性,而赢得了声誉。这些优点使其在各种各样的应用程序、工作流程和领域中得到了广泛应用。但是就语言的设…

《Python基础教程第二版》第五章-条件、循环和其他语句(一)
print和import print打印多个表达式,用逗号,隔开 print abc:, 42, nonono #输出在每个参数之间添加空格 print在结尾处加上逗号,,接下来的语句会与前一条语句打印在同一行 print hello, print word! #hello word! import从模块中导入函数 import module from module…

【Qt】QStackedWidget:将多个窗口控件放入堆中,每次只显示一个窗口控件
1、简介 QStackedWidget可以容纳多个窗口控件,每次只显示其中一个。例如:登录页面、各种功能页面等不同时显示的窗口,可以放入QStackedWidget中。 2、demo // 创建三个页面 QWidget *firstPageWidget = new QWidget; QWidget *secondPageWidget = new QWidget; QWidget *…

Android模仿iPhone View旋转刷新数据动画详解
因为小马很喜欢在不同的页面之间跳转时加点好玩的动画,今天无意间看到一个动画效果感觉不错,几种效果图如下,既然好玩就写在博客中,直接说就是:该效果类似于iPhone中View的切换动画效果,今天就只介绍上面展…

【SQL】sql语句LEFT JOIN(拼接表)详解
1、语法 SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_nametable2.column_name;2、说明 按照一定规则,将表table1和表table12拼接起来。下面以学生管理系统为例,学生管理系统数据库各表如下 课程表: 学生表 成绩…

找啊找啊找木偶,图灵奖得主G. Hinton第一篇论文曝光!
作者 | Geoffrey Hinton 译者 | 李倩编辑 | 一一出品 | AI科技大本营(ID:rgznai100)摘要针对在具有重叠结构的透明矩形中寻找木偶这一问题,Hinton大神想到使用松弛算法,通过从冲突局部解释网络中提取全局最佳图形的方式找木偶。介…

终于,「最近邻搜索」有通用方法了
作者:Kevin Hartnett 编译:Bing 如果你打算开一家咖啡馆,你一定想知道:“附近最近的一家咖啡馆在哪?”了解这些信息有助于应对商业竞争。 这种现象是计算机科学中广泛研究的问题,称为“最近邻搜索”。它的问…

tar自动打包指定文件夹中的文件到指定目录
这是我离开上一家公司,到XX人寿保险公司的第一个工作内容,很简单,可以减少每天重复的工作量。写一个脚本,将指定文件夹下的所有文件打包成以日期命名的格式并存放到其父目录中,自动检测该压缩包,保留时间为…

【SQL】sql语句GROUP BY
1、语法 SELECT column_name, aggregate_function(column_name) FROM table_name GROUP BY column_name;2、说明 先对数据集分组,再根据规则批量处理每组数据。 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将…

色情低俗、暴力恐怖内容...如何用AI“一网打尽”?
作者 | Rachel、Just出品 | AI科技大本营(ID:rgznai100)移动互联网时代催生了大量的多媒体数据,每天在社交平台、长短视频、直播平台、新闻资讯等内容平台产生了数以亿计的图片和视频,这些数据的内容审核面临严峻的挑战。人工审核…

想要学好Go语言的必须知道的一个小技巧
2019独角兽企业重金招聘Python工程师标准>>> 由于我转Go语言比较早,很多认识我的,转Go或学习Go的同学遇到问题,经常会过来问我,然后,我发现。 除了学习Go语言可以看那些资料,这个问题以外&#…

【CSS3教程】CSS3基础常用技巧实例集合
为什么80%的码农都做不了架构师?>>> CSS3常用技巧 CSS3下条纹&方格斜纹背景的实现 一、效果抢先:CSS3下的条纹背景demo 这些美丽的纹饰全部都是由CSS实现的,没有一点点的图片。 二、原理简述 主要是应用了两个CSS3的属性&…

【FFmpeg】ffmpeg工具源码分析(二):转码核心函数 transcode
1、转码流程 1)转码前初始化:打开输入输出文件,初始化编码器、解码器、过滤器,创建多线程,设置串口终端等; 2)while循环处理每一包数据,核心函数 transcode_step(稍后分析); 3)转码结束前收尾工作:关闭多线程,刷新编解码缓冲区,恢复串口终端设置,向输出文件写…

在CentOS7上部署Apache Mesos
概述 Apache Mesos是一款基于多资源(内存、磁盘、CPU、端口等)调度的开源集群管理套件,能使容错和分布式系统更加容易。 工作原理 Apache Mesos采用了Master/Slave结构来简化设计,将Master做得尽可能轻量级,仅保存了各…

CTA核心技术及应用峰会开幕!(附第二日参会攻略)
全球智能化趋势当前,人工智能技术正蓬勃发展。为了直击开发者在机器学习与人工智能技术研究与落地过程中的痛点与瓶颈,深入解析机器学习和知识图谱技术在行业中的实践和落地。2019 年 5 月 26 - 27 日,由中国 IT 社区 CSDN 与数字经济人才发展…