皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

【开源访谈】“技术小黑屋”段建华:Kotlin 是 Android 开发者近在眼前的一种小确幸

有数据预测,到 2018 年底,在 Android 开发领域,Kotlin 将超越 Java,成为开发 Android 应用的第一语言。的确,我们看到,自去年 5 月份在谷歌 I/O 大会上 Kotlin 被宣布成为 Android 领域官方支持的开发语言以来,Kotlin 的使用量完全呈爆炸式增长。

Kotlin 的快速增长是由于它的现代性。Kotlin 是一门更现代化的语言,更容易理解,更容易编写,抽象性也比 Java 高,而且它在设计之初就考虑到了移动设备。

这门年轻的 JVM 语言究竟有着怎样的魔力使得它“俘虏”了广大开发者的心?为此,在 12 月 23 日开源中国源创会年终盛典上,我们采访了早期便在公司内部使用 Kotlin 进行 Android 开发的资深工程师段建华,相信不少 Android 开发者都访问过他的个人技术博客 —— “技术小黑屋”,作为一名资深的 Android 研发工程师,他和我们分享了使用 Kotlin 的心得和经验、学习 Kotlin 的方法以及对 Kotlin 未来发展的看法。

【本期嘉宾】

段建华,Flipboard 中国 Android 研发工程师,多年从事 Android 研发工作,网络 ID 为技术小黑屋,喜欢分享技术,长期维护个人技术博客(droidyue.com),出产高质量的 Java 和 Android 技术文章。多次在 droidcon Beijing, GDG, CSDN, Stuq 等会议做 Android 和 Kotlin 相关的分享。

【开源访谈】“技术小黑屋”段建华:Kotlin 是 Android 开发者近在眼前的一种小确幸

【采访实录】

1. 先请老师简单的介绍一下您自己,以及您最近研究的技术。

大家好,我是段建华,网络 ID 为技术小黑屋,droidyue.com 的博客博主,也是一名任职于 Flipboard 中国的研发工程师,多次在 droidcon Beijing、GDG 等技术会议做过分享。

我目前研究的技术主要有 Kotlin、Android things 和近期接触的函数式编程等。

2. 您在 Flipboard 中国工作多久了,当前主要负责什么工作?

加入 Flipboard 中国接近两年,在这期间,作为团队的一员,我们顺利地实现了中国版本的落地,目前我所负责的不仅有 Flipboard 中国版本-红板报的工作,还包含了一些和三星合作的项目的工作。

3. 在你们团队内部推广使用 Kotlin 有遇到什么阻碍吗,是如何解决的?

我们的团队使用 Kotlin 可以说是很顺利,当然这一点也不同于国内的团队。

在 2017 年以前,中国区的代码和 Flipboard 美国是在同一个 repo 下共用的。而 Flipboard 美国那边的 Android 团队引入 Kotlin 最早可以追溯到 2015 年的时候,这是一个相当早期的时刻。那时的 Kotlin 并没有像现在这样完善和稳定,但是却没有阻挡它在 Android 项目的应用。这也是我最初接触到 Kotlin 的机缘。

中国团队应用 Kotlin 是在 2017 年伊始,当时才确定全面使用 Kotlin 作为开发语言,不过也并没有遇到什么所谓的阻碍,还算是比较顺利,但是对于国内的团队推广 Kotlin,也可能有很多问题。

在国内的团队推广 Kotlin,我觉得遇到的最大的问题之一就是需要有人来推动。

首先,这个人需要良好地掌握 Kotlin,而不是简单停留在会使用的层面。然后这个人还需要来说服团队的成员,尤其是技术领导。在说服过程中,需要回答来自大家的质疑和提问,甚至是挑战。

这个人还需要提供一系列的资料或分享,比如如何配置、sample code、troubleshooting 等等。有时候甚至要经常兼职做 mentor 指导工作,这也就意味着你手头上的其他工作需要被打断。

4. 当时已有的 JVM 语言也有很多选择,Kotlin 的什么特性吸引了您,或者说为什么您选择了 Kotlin?

当时确实有很多的 JVM 语言可以选择,对于 Android 开发也是,比如 Scala 也可以用于开发 Android 应用。但是我们并没有采用。

由于美国团队率先引入了 Kotlin,我们或多或少的了解了很多关于 Kotlin 的优秀特性,比如空指针安全、Collection 的 Streams API, Lambda 等等。当时我们就尝试如何在现有的项目中应用这些很 cool 的特性来提高开发效率。当然方案有两种,一种是使用 Kotlin,另一种是引入相应的 Java 的库。经过再三的对比和权衡,我们最终达成了共识,选择了比较激进的 Kotlin,毕竟那个时候 Kotlin 还没有被“钦定”为 Android 官方支持的开发语言。

概括而言,是 Kotlin 简洁、实用高效和低成本的切换和迁移使得我们选择了它。

5. 前阵子 Kotlin 发布的新版本已经开始支持跨平台开发了,您对此如何看待?

是的,Kotlin 目前支持了 JVM、Android、Web(翻译成 Javacscript)、WebAssembly、Native 等等。这不难让人认为只要学好 Kotlin,任何平台开发都不怕。

但是呢,依个人浅陋之见,目前适合应用 Kotlin 作为项目开发语言的还是那些 Java 项目,因为这是目前 Kotlin 的主要方向。就像创业公司给投资人讲故事一样,JetBrains 把支持全平台的故事讲给了更多的开发者听,借此获得更多的关注和持续曝光。

不过对于 Kotlin 的新版支持跨平台开发这件事,个人还是持肯定态度的。因为它的出现和流行,对(Java 和 Android)开发者是利好的,着实解决了很多 Java 和 Android 程序员的痛楚,相信并希望以 JetBrains 的基因和理念能够直接或者间接推动更多的开发语言更加快速的进步和发展,最终使更多的开发者从中受益。

6. 有谷歌和 JetBrains 背书的 Kotlin 看上去近期发展势头很好,您认为未来五年内 Kotlin 将如何演化?

我认为在未来,Kotlin 会做的有:

  • Kotlin 编译器的优化,Kotlin 在编译上还是有比较大的优化空间。
  • 现阶段 Kotlin 是 target 到 Java 6,导致了很多 Java 7 和以后的 API 无法被利用。以后可能会整体提升到更高版本的 JVM 上。
  • Kotlin 会在去 JVM 化方面迈出更大的一步,Kotlin 被直接编译成机器码会有很大的改善。

7. Android 开发者都应该学习并使用 Kotlin 吗,为什么?

是的,我不仅认为每个 Android 开发者都应使用 Kotlin,我觉得每个 Java 程序员都应该去尝试接触 Kotlin。

Kotlin 在语言层级提供了大量的非常方便的实现,比如空指针安全、扩展方法、Lambda 等等。Kotlin 是相对更为优化的语言,让我们可以不再忍受 Java 相对冗余啰嗦的语法。利用 Kotlin 中集合的 API 我们更加接近 Declarative  Programming(声明式编程)而不是 Imperative Programming(命令式编程),无形中使我们的代码更加具有描述性。

如此种种,Kotlin 是一门提高开发效率堪称利器的语言。对于 Android 开发者来说,这无疑是一种近在眼前的小确幸。

8. 那么,对于那些学习 Kotlin 的开发者,您推荐的第一步是什么?

我推荐的第一步就是先上岸,即先把 Kotlin 的代码写起来。俗话说,万事开头难,当学习者开始写 Kotlin 代码的时候,就会逐渐地被 Kotlin 的代码迷住,甚至会达到欲罢不能的情况。

相比第一步而言,我更想谈一谈所谓的第二步,当你开始写 Kotlin 代码,尝到了 Kotlin 带来的种种甜头,那么接下来该做什么呢,这就是所谓的第二步。

我推荐的第二步是去搞清楚 Kotlin 这些特性或者是语法糖的实现原理。程序员想要精进,探究原理,做到知其然知其所以然是一种很好的方法。明白了内部的原理实现,可以让我们更好的去运用特性,规避和排查问题。

9. 您是否愿意向我们介绍一下您自己、您的工作,或是其它一些我们没有提及的方面?

前面的问题中已经或多或少介绍到了我的工作,这里我来讲一讲我的博客和成长历程相关的一些故事。

大概在我刚毕业的时候,参加了几次新浪云的公开课,当时坐在台下的我就给自己定了一个时间,五年之内我也要成为舞台上的分享嘉宾。在这接下来的日子里,在工作中每每接触到新的技术或者是解决的问题,我都会记录下来,等到休息的时候,我就尝试去研究这些技术和问题的原理和内在,然后整理成博客,记录下来并分享给大家。于是博客的访问者越来越多,点赞也日益增多。在不到 3 年的时间内,我终于登上了 GDG(Google Developer Groups) 北京的分享讲台,在北航完成了我的首场线下分享。

在最近的三年里,我经常推荐认识的技术人尝试写博客来记录问题,并深耕原理。这里也不例外,我希望大家尝试去记录工作遇到的技术问题,以博客的形式去梳理,日积月累,完善自己的技术栈。

转自 https://www.oschina.net/question/2720166_2273049