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

内容来源: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生态圈。

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

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

原文发布于微信公众号 - IT大咖说(itdakashuo)

原文发表时间:2018-10-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏奇点大数据

如何零基础入门Python编程?

Python目前已经成为最受欢迎的编程语言之一,吸引了一大批粉丝,但是很多人在要跨入的时候犹豫了,原因竟然是觉得零基础学习Python太难了,真的是这样吗?零基...

1924
来自专栏python+iOS学习交流

python入门 2018最新最全学习资料免费获取啦

是否非常想学好 Python,一方面被琐事纠缠,一直没能动手,另一方面,担心学习成本太高,心里默默敲着退堂鼓?

1272
来自专栏CDA数据分析师

如何系统地自学 Python?

是否非常想学好 Python,一方面被琐事纠缠,一直没能动手,另一方面,担心学习成本太高,心里默默敲着退堂鼓? 幸运的是,Python 是一门初学者友好的编程语...

2607
来自专栏牛客网

知识总结:安卓工程师养成计划计算机基础细分方向知识算法

楼主Android菜鸡一枚,今年校招侥幸拿到了还不错的offer。因为校招实在过于侥幸,面试上很少遇到复杂的问题,这里就不写面经了,初略谈一谈校招的一些准备吧。...

3456
来自专栏即时通讯技术

微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅

本文由微信开发团队工程是由“oneliang”原创发表于WeMobileDev公众号,内容稍有改动。

2160
来自专栏PPV课数据科学社区

【学习】笨办法学R编程(一)

在倚天屠龙记中,有一人唤作火工头陀。此人练功不靠心法,只靠模仿他人招式,由外而内,自成一家。练习编程也有如此的法门,不看文字描述,只观察和模仿别人...

3355
来自专栏老九学堂

【秘籍】程序员高薪面试技巧

面试就像高考,分数优异,不一定能进入好大学,面试亦是如此,能力强不一定能进入到自己心仪的公司,因为这个不仅和技术有关,还和自己的综合素质与临场发挥有关。今天老九...

3544
来自专栏数据结构与算法

BZOJ1222: [HNOI2001]产品加工(诡异背包dp)

Description 某加工厂有A、B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成。由于受到机器性能和产品特性的限制,不同的机器加...

3348
来自专栏华章科技

PYPL 指数榜:Python 超越 Java 并逐渐拉开差距

此外,JavaScript 和 PHP 在季军位置的争夺上也十分激烈。二者在上半年的指数得分上十分接近,不过本月由于 PHP 出现了 1.5 个百分点的下降,地...

972
来自专栏程序人生

代码重构之道

如果我纯粹为今天工作,明天我将完全无法工作。 -- 某子 程序员要面向未来编程。代码重构永远是程序员们无法回避的话题,当你的软件在编写的那一刻起,重构就不可避免...

3824

扫码关注云+社区

领取腾讯云代金券