本篇文章的英文原文地址是:
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 的工作岗位相对少了许多。
而工作岗位数量上的差别,可能同时意味着这两件事情:
在你所在的地区,想要找一份 Flutter 相关的工作会相对比较困难。
如果你对 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 种选项:
Android 和 iOS 应用都使用原生的开发方式。
开发两个原生应用程序,但使用 Kotlin 多平台项目来共享代码。
开发一个 Flutter 应用。
同时使用原生开发的方式要求你或你的团队在双平台之间各自实现,且没有任何代码共享。如果你是位个人开发者,这可能会是最为低效的一种选项,除非你对 iOS 和 Android 的原生开发都非常精通。但同时这也会是最为安全的一种选项,因为原生开发是最成熟的一种开发方式,不管苹果还是 Google,未来都不可能放弃对原生开发的支持,并且你还能尽快使用到各种平台的最新特性。
而如果你想开发两个原生的应用程序,但是要尽可能多地共享两个平台之间的代码,那么可以考虑构建一个 Kotlin 多平台项目。不过这对于缺少经验的开发者而言应该不是最佳的选项,因为 Kotlin 多平台功能还很新,能够使用的工具和第三方库也非常少。
而开发一个 Flutter 应用应该是让你的应用程序能够同时运行到 iOS 和 Android 平台上最快速的方式了,尤其当你是一位个人开发者,使用 Flutter 将可以节省大量的开发时间。另外,由于你并不需要接触多少系统底层的 API,也不用在乎不同平台之间的视觉体验和用户体验差异,因此可以省去很多编写平台专属优化代码的时间。
你希望你的应用程序不仅仅运行在移动平台吗?
Flutter 团队并没有仅仅只是把功能限定在了移动平台上,而是将它进一步延伸到了网页平台,当然这个功能目前还在开发当中。Flutter 给我们提供的便利性就是可以使用同一份代码来让应用程序运行到不同的平台上面,而且随着 Flutter 支持的平台越多,使用 Flutter 的性价比就会越高。
当然你也可以考虑使用 Kotlin 多平台项目来支持网页平台的开发,但是始终要记得,Kotlin 多平台项目的核心思路是共享代码,因此你还是要为每个平台去编写原生的代码,比如开发 UI 界面,以及对共享代码进行调用等。注意,随着你要支持的平台越多,这种方案的成本也会越大。
你需要自己来编写后台服务器程序吗?
评论里面有些同学有疑问关于如何学习material design控件,我的建议是去GitHub搜,有很多同行给的例子,这些栗子足够入门。
有朋友说要是动真格的话,需要NDK以及JVM等的知识,首现**NDK并不是神秘的东西,**你跟着官方的步骤走一遍就知道什么回事了,无非就是一些代码格式以及原生/JAVA内存交互,进阶一点的有原生/JAVA线程交互,线程交互确实有点蛋疼,但平常避免用就好了,再说对于初学者来说关心NDK干嘛,据鄙人以前的经历,只在音视频通信和一个嵌入式信号处理(离线)的两个项目中用过,嵌入式信号处理是JAVA->NDK->.SO->MATLAB这样调用的我原来MATLAB的代码,其他的大多就用在游戏上了吧,一般的互联网公司会有人给你公司的SO包的。
至于JVM,该掌握的那部分,相信我,你会掌握的,不该你掌握的,有那些专门研究JVM的人来做,不如省省心有空看看计算机系统,编译原理。
一句话,平常多写多练,这是最基本的程序员的素质,尽量挤时间,读理论基础书籍,JVM不是未来30年唯一的虚拟机,JAVA也不一定再风靡未来30年工业界,其他的系统和语言也会雨后春笋冒出来,但你理论扎实会让你很快理解学会一个语言或者框架,你平常写的多会让你很快熟练的将新学的东西应用到实际中。
初学者,一句话,多练。
CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》