本文经授权转自公众号(ID:news)
作者 | 段建华
出品 | (ID:news)
写在前面
【 编者按】近些年来,编程语言流行度的变化其实不大,在 TIOBE 编程语言排行榜上,Java、C、C++ 固若金山,也就只有 Python 会攻城略地成为第四。在这 TOP3 之中,Java 以其非常优秀的普适性,可以用于前后端开发,再加上非常成熟的 JVM 虚拟机以及整个 Java 生态,让 Java 这个老大哥常年雄踞 TOP1,在 的 Java 相关的文章之中,常有用户留言调侃“Java:你们随便争,反正我 Java 是第一”也可窥见一二。
而从两年前 Google 正式宣布 Kotlin 成为 Android 官方支持的语言开始,对于“Kotlin 即将取代 Java”的讨论便甚嚣尘上从未停歇。彼时,Kotlin 这个诞生于 2011 年的小伙子让已经使用了 Java 多年的 Android 开发者们有了点不可言说的滋味。同时,在过去的数年之间,伴随着 Oracle 与 Google 纷争不止,业界“Oracle 要玩死 Java”之声亦是不绝于耳。
Java 8 更新,Oracle 将“删除”按钮设置成了高亮
2017 年,面对着 Kotlin 这个 Android 开发新贵,Realm 直接给出了一个预测,就是“到 2018 年底,在 Android 开发领域,Kotlin 将超越 Java,成为开发 Android 应用的第一语言”。
如今,时间上虽然稍晚了几个月,但这份预测却成为了现实。
那么,当今天 Google I/O 大会上,Kotlin 取代 Java 成为 Android App 开发的首选语言之时,对于我们移动开发者而言,究竟意味着什么?同时,当 Flutter 带着一统 App、Web、桌面及嵌入式开发之势而来之时,移动开发者该怎么办?对此, 特别邀请在国内 Android 圈子中较早研究 Kotlin 的段建华(@技术小黑屋)来解答目前开发者们最为关心的问题:
为什么 Google 会越过 Java 让 Kotlin First?
采用 Kotlin 与 Oracle 版权有关系么?
其实可能没有关系。
这场起自 2010 年的诉讼案,几经反转,曾一度惊动美国最高法院,从最初的专利和版权侵权到最后聚焦在 Google 是否合理使用了 Java 的 API。但是 Oracle 自始至终都不是在控告 Google 允许开发者使用 Java 来开发应用程序。
而真正让 Kotlin 被 Google 采用的原因其实是 Kotlin 自身的优点,譬如安全、简洁、实用,以及与 Java 可交互良好等特点。除此之外,Kotlin 在相对很早的时候就在国外的知名公司用来开发 Android App,有着不错的氛围和环境,这也为其裂变发展贡献了不小的功劳。
Kotlin First 对于 Android 开发者究竟意味着什么?
首先对于 Google 来说,应该意味着更进一步地放弃 Java。这会导致更多的 Android 库出现对应的 Kotlin 实现,甚至可能是只有 Kotlin 版本,Android Studio IDE 也会出现更多的倾向于 Kotlin 的特性和支持等。结果可能会是 App 开发者进一步向 Kotlin 靠拢,而 Java 则相应地被进一步孤立。
其次,对于 Android 开发者来说,当本届 I/O 大会 Google 宣布 Kotlin 作为 Android 首选开发语言那一刻,再次证明我们使用 Kotlin 是正确的。内心都是无比 Exciting,充盈着一种满满的被认可感,而这势必会让更多的 Android 开发者投向 Kotlin 的怀抱。
同时,至关重要的是体现在业务上,对于管理者来说,会有更大的信心和更强的动力去推动团队完成从 Java 到 Kotlin 的转变。
事实上,当前在 Android 研发的招聘中,大部分招聘 JD 都会包含希望求职者具备 Kotlin 编码能力的描述,而面试者的简历也会提到自己学习或者项目应用 Kotlin 等内容。
并且,目前笔者从各种渠道了解到,大部分的公司都已经使用 Kotlin 作为首选开发语言,而且积极效果反馈明显。
看完移动端,我们再看服务端,不同于 Java 在后端的良好表现。尽管就 Kotlin 来说,除了前文所述的优点之外,协程是一大吸引,但 Kotlin 在中后台开发人员中的流行度可能并不会像在 Android 上这么顺利,究其原因,主要还是:
缺乏官方权威或大公司背书来提振威望;
相关的框架需要进一步丰富;
编者注:对于这一点,在 《2018 - 2019 中国开发者调查报告》中,拥有十几年移动开发经验的轻芒联合创始人范怀宇对此表示:Java 的 Web 框架经过千锤百炼已经可以支撑足够大的并发,JVM 经过长年优化性能表现也非常出众,而 Java 的各类库、统一的编程模型、丰富的人才储备,可以满足各种场景的诉求。
相应的中文社区和氛围需要增强。
但无论如何,Kotlin 的确称得上是 Java 程序员近在咫尺的小确幸,你需要做的就是抓住它,不要错过。
Google 同推 Flutter 和 Kotlin,那么移动开发者该如何做选择?
我们再来看 Google 在移动端另一重推的框架,Flutter 自问世伊始便被寄予厚望,从开始的支持 Android 和 iOS 开发到现在的全平台(Mobile、Desktop、Web、Embedded),几近于真正地实现了数年来程序员梦寐以求的“Write once, run anywhere”的愿景。
因此相对而言,Flutter 显得更加有诱惑力,因为它是一个跨平台开发的解决方案,我想这也是大多数人给出的答案。
但是也有很多原因会导致你无法选用 Flutter,如下不完全列举:
Flutter 需要使用 Dart 语言,没有第二语言。Dart 令人诟病的方面也不少;
对现有技术投入较多导致沉默成本过大,甚至是难以负担;
保守主义,避免过早地对某项技术投入资源;
领域限制,Flutter 无法满足要求。
Kotlin 的被钦定可以解读为 Android 开始逐渐放弃 Java 语言这个开发依赖,而 Flutter 的推出可以被理解成 Google 开始放弃 Android,迎接新操作系统 Google Fuchsia 的准备。
出于综合考虑且必须二选一的情况下,建议你选择 Flutter,但是如果你有兴趣见识一种比 Java 更安全,更简洁,更实用,更优雅的语言的话,我也推荐你学一学 Kotlin。
Flutter 很有前途,但 Kotlin 也会让你欲罢不能,这确实是一件麻烦事。
基于同时,对于我们所有技术人来说,一个非常头疼且不由得恐慌的问题,那便是如何应对日新月异的技术?
这可能是越来越多的以工程为主的开发者面临的问题,因为今天有 Kotlin 和 Flutter,明天或许就会冒出来 Gotlin、Hlutter 等新的技术。
日新月异层出不穷,不断追求学习并不现实,反而有可能把自己搞的很累,甚至是产生负面效果。新技术固然可以学习,但是作为技术人,获得完善的素养显得更加意义深远。
笔者认为一个技术人员想要具备完善的素养,需要朝着这些方向努力:
夯实基础;
学好英语;
提升学习能力;
坚持总结归纳问题的习惯;
增强分析问题,解决问题的能力。
一个技术人员能够走多远,靠的不是会某种技术,而是完善以上高质量的素养。
作者简介:
段建华,技术小黑屋(https://droidyue.com)博主, 寺库奢侈品资深 Android 工程师,前 Flipboard 工程师。自 2016 年开始接触 Kotlin,参与多个项目并实施引入 Kotlin 作为开发语言,撰写了多篇关于 Kotlin 的深度文章。
本文经授权转自公众号(ID:news)
关于极光
极光(纳斯达克股票代码:JG)成立于2011年,是中国领先的移动大数据服务平台。极光专注于为移动应用开发者提供稳定高效的消息推送、即时通讯、统计分析、社会化组件和短信等开发者服务。截止到2018年12月,极光已经为36.9万移动开发者和107.6万款移动应用提供服务,其开发工具包(SDK)安装量累计近198亿,月度独立活跃设备近10.4亿部。基于海量数据和洞察积累,极光已将业务拓展至大数据服务领域,包括精准营销(极光效果通)、金融风控、市场洞察以及商业地理服务(极光iZone)。极光将继续借助人工智能与机器学习为移动大数据赋能,致力于为社会和各行各业提高运营效率,优化决策制定。