Kotlin vs Flutter,我到底应该怎么选?

11,353

本文同步发表于我的微信公众号,在微信搜索“郭霖”即可关注,每个工作日都有文章更新。

在移动应用开发方面,Kotlin 和 Flutter 是目前比较火热的两门技术。其中,Kotlin 是由 Jetbrains 研发,后被 Google 大力扶持,Flutter 则是由 Google 自己独立研发的。从目前 Google 官方的态度来看,这两门技术都被无限看好,Google 也是在它们身上投入了大量的资源。但也正是由于 Google 的这种态度,导致很多开发者变得迷茫了:我到底是应该学习 Kotlin 还是 Flutter 呢?

关于这个问题,我也是被问了无数次,但每次回答都只能简单回复几句,无法全面概括,可能也做不到直至要害。因此一直以来,我都准备专门写一篇文章来详细对比 Kotlin 和 Flutter,帮助大家答疑解惑。

巧合的是,前段时间浏览网页,无意看到了一篇英文文章专门对这个问题进行了深度分析,我阅读完之后深感自己写不出比这更好更全面的文章了,因此决定直接将这篇文章翻译并分享出来,相信一定会对大家有所帮助。

本篇文章的英文原文地址是:
goobar.io/2019/06/13/…

我到底应该选 Kotlin 还是学 Flutter 呢?

这个问题要视情况而定。

不过在展开讨论具体的情况之前,我们更应该先来审视一下,这是否是一个恰当的问题。因为,拿 Kotlin 和 Flutter 来进行比较,在一定程度上就好像是在拿苹果和橘子来进行比较。

从概念上讲,Kotlin 是一门编程语言,而 Flutter 是一个跨平台的 UI 工具集。

不过,由于这两门技术之间的差异太过巨大,导致这个问题本身其实就是一个庞大的问题,因此要想很好地回答这个问题,我们必须得要先去了解一些其他相关的问题。

为什么你想要学习 Kotlin 或 Flutter?

首先,你要问自己的第一个问题就是:“我为什么要学习 Kotlin 或 Flutter?学会之后可以用来做什么?” 这个问题又可以展开为以下 3 点:

  • 你想要学习移动开发吗?
  • 你想要得到一份移动开发者的工作吗?
  • 你想要以个人开发者或小型团队来开发一款自己的移动产品吗?

你想要学习移动开发吗?

如果你的首要目标是对移动开发有所涉猎,并且能够构建出一个小型的业余项目,那么选择 Kotlin 还是 Flutter 其实是没有什么太大区别的。

然而,需要谨记的是,当你在 Flutter 和 Kotlin 之间做选择的时候,其实你也是在选择:

  • Flutter/Dart
  • iOS/Swift/Objective-C
  • Android/Kotlin/Java

Flutter 是一个完整的应用开发工具集,其中包括了使用 Dart 来作为编程语言,以及一系列的 UI 组件,还有一些独有的编程模式、最佳实践技巧、调试方法、工作流程等。

要想将 Flutter 和其他的平台工具集进行对比,你还需要对它们所处的生态有比较完整的了解才行。

Kotlin 和 Flutter 哪个更容易获得一份工作?

如果你的首要目标是得到一份移动开发者的工作,那么比较好的一种选择方式就是看哪种技能的需求量更高一些。

在 LinkedIn 上搜索与 Kotlin 和 Flutter 相关的工作岗位,得到的结果如下(数据限定在美国区域,时间截止到 2019 年 6 月):

  • Flutter:315 份结果
  • Kotlin: 3342 份结果

Flutter 毕竟还是一门比较新的技术,并且它对于一位移动开发者而言,学习成本是比较巨大的。相比之下,Kotlin 对于 Android 开发者而言则非常容易上手。可能也是因为这些原因,Flutter 的工作岗位相对少了许多。

而工作岗位数量上的差别,可能同时意味着这两件事情:

  1. 在你所在的地区,想要找一份 Flutter 相关的工作会相对比较困难。
  2. 如果你对 Flutter 已经有了足够多的了解,将更容易在一些对 Flutter 需求量比较高的地区获得一份工作。

这看上去有一些自相矛盾,并且这个方案的可实施性还要视你目前的生活状况、找工作的紧急程度等条件因素而定。

而从另一方面来看,现在仍然有大量的需求招聘 Android 原生开发者,并且 Kotlin 对于更多人来说也是更加简单易学的。当然,大量的工作岗位意味着将会有更多的选择机会,同时也意味着会有更多的竞争者。

Kotlin 和 Flutter 哪个更适合个人或小型团队来开发产品?

如果你是想要使用 Kotlin 或 Flutter 来开发一款自己的应用程序,并投入商业运作,那么刚才所讨论的那些你可以全部忘记,我们来重新思考一张更加完整的版图。

如果你正在开发一款移动产品,那么你非常有可能希望它能够同时运行在 iOS 和 Android 这两大平台上。

使用 Flutter 你可以轻松做到这一点,而使用 Kotlin 则非常困难。

如果你想使用 Kotlin 来进行跨平台开发,可以构建一个 Kotlin 多平台项目,也可以分别单独开发一套 iOS 和 Android 的项目工程,但是不管使用哪种方式,你都必须同时对 iOS 和 Android 的原生开发有足够多的了解才行。

所以,如果你的目标非常明确,就是要以低成本的方式开发一款跨平台应用程序,那么 Flutter 无疑是更加合适的选择。我们稍后会针对这一点进行更加详细的讨论。

关于这个问题,也可以更加详细地将它展开成以下 5 点:

  • 你想要开发一款出色的 Android 应用吗?
  • 你想要开发一款出色的 iOS 应用吗?
  • 你想要开发一款可以同时运行在 iOS 和 Android 平台上的应用吗?
  • 你希望你的应用程序不仅仅运行在移动平台吗?
  • 你需要自己来编写后台服务器程序吗?

你想要开发一款出色的 Android 应用吗?

如果你的目标是开发一款出色的 Android 应用,并且使用 Android 平台提供给我们的各种最新特性,那么请选择原生 Android 开发。

当然,这并不意味着你就必须要使用 Android+Kotlin 的组合模式,Android+Java 的组合在未来很长一段时间内仍然是可以完美工作的。不过,我坚信学习 Kotlin 能够让你更加享受代码的开发过程。

你想要开发一款出色的 iOS 应用吗?

类似地,如果你的目标是开发一款出色的 iOS 应用,并且使用平台提供的各种最新特性,那么我的建议是使用 Swift 语言来进行原生 iOS 开发。

你想要开发一款可以同时运行在 iOS 和 Android 平台上的应用吗?

如果你想要开发的是一款能够同时运行在移动双平台的应用程序,这个问题就变得有趣了,因为在 Kotlin 和 Flutter 的选择上面你将会有 3 种选项:

  1. Android 和 iOS 应用都使用原生的开发方式。
  2. 开发两个原生应用程序,但使用 Kotlin 多平台项目来共享代码。
  3. 开发一个 Flutter 应用。

同时使用原生开发的方式要求你或你的团队在双平台之间各自实现,且没有任何代码共享。如果你是位个人开发者,这可能会是最为低效的一种选项,除非你对 iOS 和 Android 的原生开发都非常精通。但同时这也会是最为安全的一种选项,因为原生开发是最成熟的一种开发方式,不管苹果还是 Google,未来都不可能放弃对原生开发的支持,并且你还能尽快使用到各种平台的最新特性。

而如果你想开发两个原生的应用程序,但是要尽可能多地共享两个平台之间的代码,那么可以考虑构建一个 Kotlin 多平台项目。不过这对于缺少经验的开发者而言应该不是最佳的选项,因为 Kotlin 多平台功能还很新,能够使用的工具和第三方库也非常少。

而开发一个 Flutter 应用应该是让你的应用程序能够同时运行到 iOS 和 Android 平台上最快速的方式了,尤其当你是一位个人开发者,使用 Flutter 将可以节省大量的开发时间。另外,由于你并不需要接触多少系统底层的 API,也不用在乎不同平台之间的视觉体验和用户体验差异,因此可以省去很多编写平台专属优化代码的时间。

你希望你的应用程序不仅仅运行在移动平台吗?

Flutter 团队并没有仅仅只是把功能限定在了移动平台上,而是将它进一步延伸到了网页平台,当然这个功能目前还在开发当中。Flutter 给我们提供的便利性就是可以使用同一份代码来让应用程序运行到不同的平台上面,而且随着 Flutter 支持的平台越多,使用 Flutter 的性价比就会越高。

当然你也可以考虑使用 Kotlin 多平台项目来支持网页平台的开发,但是始终要记得,Kotlin 多平台项目的核心思路是共享代码,因此你还是要为每个平台去编写原生的代码,比如开发 UI 界面,以及对共享代码进行调用等。注意,随着你要支持的平台越多,这种方案的成本也会越大。

你需要自己来编写后台服务器程序吗?

另外可能还有一种比较少见的场景,你需要自己来编写后台服务器程序吗?一般的公司都会有专门的服务器人员来开发后台服务器程序,而如果你需要自己来编写服务器程序的话,Kotlin 是值得进行研究的,因为借助 Ktor 框架可以轻松实现服务器端程序的编写,而掌握 Kotlin 语言则是使用 Ktor 框架的前提条件。

关于到底是选择 Kotlin 还是 Flutter,我们还需要将一个重要的因素考虑在内,就是你当前的开发经验以及技术能力在什么层次。这里讨论以下两种可能:

  • 你已经是一名 Android 开发者了?
  • 你已经是一名 iOS 开发者了?

你已经是一名 Android 开发者了?

如果你已经非常熟悉 Android 原生开发了,学习 Kotlin 将会比学习 Flutter 快上许多倍。Kotlin 会在你当前已掌握的知识基础上迭代累加,并且能让你的 Android 程序开发变得更有效率。

另外,学习 Kotlin 还可以让你拥有开发后台服务器程序的能力,只需要借助 Ktor 框架就能快速地开发出一个简单的后台服务器程序,从而让你的工作流程变得更加简单。

而学习 Flutter 则需要你去掌握一门新的语言(Dart),并且还要去了解一个全新的开发生态,这将需要花费比学习 Kotlin 多上许多倍的时间。

如果你并不是想要享受 Flutter 跨平台特性所带来的便利性,仅仅使用 Flutter 来开发 Android 平台专属的应用程序是一件没有意义的事情。

你已经是一名 iOS 开发者了?

而如果你是一名 iOS 开发者,现在想要了解应该学习 Flutter 还是 Kotlin,情况就有点不同了。

如果你希望继续使用原生的方式来开发 iOS 程序,不管 Kotlin 还是 Flutter 其实都起不到什么太大的作用。不过 Kotlin 至少可以给你提供一种编写后台服务器程序的能力。

而如果你想要开发跨平台的应用程序,那么就需要在 Kotlin 多平台项目和 Flutter 之间做选择了。

正如前面所讨论的,Flutter 是将一套独立的开发流程应用到了两个移动平台上面,而 Kotlin 多平台项目则需要你对 Kotlin 和每个平台的原生开发都有一定的了解才行。

所以在这种情况下,不论如何你都必须学习一门新语言(Dart 或 Kotlin),以及一套新的开发框架(Flutter 或 Android)。

你考虑过选择 Kotlin 或 Flutter 的风险吗?

每当你准备学习一项新技术时,都会伴随着一定的风险。在 Kotlin 和 Flutter 的选择上面,有一些风险是值得考虑的。

Kotlin 已经是一门相当稳定的技术,并且支持 Android 平台开发已经有超过两年的时间了。它可以和现有的 Android 工程代码完全兼容,是一种风险非常低的方案,基本不会影响到你当前项目的稳定性。

相比较而言,Flutter 则是一门风险相对较高的技术,因为它已经完全脱离了应用程序的原生开发方式。目前使用 Flutter 技术的成功项目案例比较少,对这项技术非常熟悉的开发者也比较少,这在招聘方面会造成一定的难度,可能需要现有的团队都去学习这门新技术才行。

此外,Google 曾经有过在不进行任何通知的情况下就将一个项目停掉的历史,所以有些人或许会担心 Google 未来是否会有可能放弃对 FLutter 或 Kotlin 的支持。

事实上,不管是 Flutter 还是 Kotlin,目前都已经具备一定的规模,Google 在短期内是不太可能放弃这两项技术的,因此不管你的选择是什么,都不必在这一点上担心。

所以,你会学习 Kotlin 还是 Flutter 呢?

看到这里,或许本篇文章在 Kotlin 和 Flutter 的选择上面已经给你带来了一些灵感,但它最终是没有标准答案的。所以如果你想要让我给出一个结论的话,我的回答仍然还是:这要视情况而定。

具体的情况最后再来简单概括一下吧:

如果你想要快速找到一份移动开发者的工作,建议学习 Kotlin 来进行原生的 Android 开发(或 Swift 来进行 iOS 开发)。

如果你想要快速构建自己的跨平台应用,建议尝试 Flutter。

如果你们的团队想要构建跨平台应用,可以考虑使用 Flutter,原生开发,以及 Kotlin 多平台项目。这三种选项其实都是可行的,具体的选择要取决于你们团队的规模、结构、以及项目本身。

如果你或你们团队想要将一些重要的功能逻辑在多个平台上面重用的话,建议了解一下 Kotlin 多平台项目。

关注我的技术公众号“郭霖”,每天都有优质技术文章推送。