前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >经过重重筛选,我们为什么要选择kotlin ?

经过重重筛选,我们为什么要选择kotlin ?

作者头像
IT大咖说
发布2018-10-23 11:19:12
1.1K0
发布2018-10-23 11:19:12
举报
文章被收录于专栏:IT大咖说IT大咖说

内容来源:2017 年 11 月 19 日,上线了联合创始人郭达峰在“2017 谷歌开发者节北京站”上进行的《Kotlin as Your Next Language》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。

阅读字数:1700 | 4分钟阅读

摘要

本次将和大家分享我们公司对目前多门主流语言进行分析,从编程风格、社区生态圈、工具链、类型检查几个维度深入分析和探讨,最终确定纳入 Kotlin 作为公司新的一门服务端语言技术栈。本次分享将会带领大家纵览主流语言的几个特性和风格,相信对于编程语言有兴趣但还在徘徊犹豫的开发者会有一些启发。

获取嘉宾演讲视频及PPT,扫一扫下方二维码即可。

语言选择

2017年由于公司的快速发展,使得我们的技术储备无法跟上业务的要求,因此不得不考虑人员招聘的问题。并为了更迅速的招揽到合适的人才,进行了各种技术栈的调研。

目前我们前端采用的是JavaScript& TypeScript,后端80%使用Ruby以及少量的Node.js,运维方面则是Golang。

其中后端是招聘方面的主要瓶颈,而恰巧当时我们后端正在做微服务化,于是就想着在后端新增一个技术栈,以方便招聘。

而为了找出合适的语言,我们参考了IEEE 和 StackOverflow关于2017年的流行语言排行榜,将其中的各种语言划分成不同维度进行分析。

需要注意的是下面对这些语言的分析,30%是客观的事实,70%则是出于我们自身对这些技术的看法,其观点是基于Web应用层面以及个人对编程风格的喜好。

Microsoftor Non-Microsoft

是不是所属微软意味着是否要用到.net体系,使用.net体系就必须要用到windows服务器,每年要交给微软一笔费用。虽然目前.net也可以跑在Linux上了,但是绝大多数还是会在windows服务器上运行,对于我们这样的创业公司是不会轻易使用.net体系的。

在上面所提到的两个榜单中,只有C# 和 TypeScript 是属于微软的。不同于C#,由于TypeScript 是会编译到JavaScript 的,并不依赖微软的环境,所以TypeScript 我们还是会考虑。

StaticTyping or Dynamic Typing

第二个维度是静态类型和动态类型。我们首先看下这两类语言各自有哪些优势。

静态类型语言在IDE上会有很好的支持,比如自动补全;性能上也更优秀,编译器能在底层做一些优化;对新手也比较友好,例如不用去猜测函数或方法的参数类型;并且还能通过分析工具在编译时就解决一些问题。

而动态语言编写的效率比较快,更加简易,没有编译的过程,能更快的迭代。

综合来看对于大型项目静态语言会更加合适。

以上是进行分类后的情况,有意思的是Typescript 和Elixir被独立开来了,其实这是因为它们都归属于Opt-in Typing。

这一类型具有动态和静态语言各自的优点,开发者可以根据实际情况决定何时添加类型限制。

虽然有这种优势,但是在实际的程序开发中需要用到众多的第三方库,而有些第三方库是没有Opt-in Typing的一些特性的,由此造成了割裂。微软在这方面算是处理的比较好的了,它花费了大量的人力财力去和第三方库的开发者合作,为这些库添加它们原本缺失的typescript特性。

TypeInference

我们都知道静态语言编写起来是比较麻烦的,典型的就是变量的类型需要提前声明。但如果深入了解的话,就会发现有些静态语言的某个特性能够很好的解决这类问题,这就是Type Inference — 类型推导。

我们先来看一个例子,上图分别是java 和 Kotlin的代码,可以看到其中java的变量需要提前声明String 类型,而Kotlin却省去了这个过程,它通过 s 的值就能在判断S 是什么类型。

有类型推导的语言分为两种,一种是Global,另一种是Local。Global的语言有Rust、OCaml、Haskell,而Local的语言有Scala、Typescript、Golang、Kotlin。

ProgrammingParadigm

目前的编程风格主要有三种,一种是Imperative,典型的代表是C语言,是直接告诉程序如何运行。还有一种Object OrientedProgramming(OOP)也就是大多数人比较熟悉的面向对象,它是基于对现实事物的抽象,Java就是面向对象类型的语言。

另外一种是Functional Programming(FP)函数式编程,它和Imperative 的不同点在于,更注重程序间的逻辑关系。这类语言一般都会有first class和高阶函数,这类语言有Lisp、Haskell等。

上图是对所选语言做的一个分析,图中的语言越靠近某个方向就代表这方面的特性越强,需要注意的是某方面的特性更强并不代表没有其他的两个特性。一般来说越偏向于Object-orientend(OOP)或者Imperative,就代表相对更容易学习,这是因为这两种模式更类似于人类的正常思维,而Functional(FP)则更像是数学家的思考方式。

不过从我们自身出发的话,还是需要具备一些FP特性的语言,也就是下图中右半部分。

Ecosystem

基于我们最初的考虑,Ecosystem(生态圈)可以说是非常重要的。其中有各方面的考虑,比如开发人员的数量,工具链是否易用丰富、IDE支持如何、第三方库是否足够等等。

现阶段比较大的生态圈有JavaScript、JVM、GO。规模最大的当然就是JVM了。

总结

通过上面这一层层的分析,我们最后选择了Kotlin。首先它并非是微软系的语言,并且还是静态语言,能够进行类型推导,有着OOP的特性的同时兼顾Functional(FP),依托的是目前来说最大的JVM生态圈。

当然这只是现阶段的考虑,相信随着时间的发展还会有更好的选择。

今天的分享就到这里,谢谢大家!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT大咖说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档