专栏首页IT大咖说经过重重筛选,我们为什么要选择kotlin ?

经过重重筛选,我们为什么要选择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),作者:郭达峰

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java异常总结和Spring事务处理异常机制浅析

    Thorwable类所有异常和错误的超类,有两个子类Error和Exception,分别表示错误和异常。其中异常类Exception又分为运行时异常(Runti...

    IT大咖说
  • Spring Boot 静态资源处理

    以前做过web开发的同学应该知道,我们以前创建的web工程下面会有一个webapp的目录,我们只要把静态资源放在该目录下就可以直接访问。

    IT大咖说
  • Elastic探秘:技术海洋里遗落的珍珠

    内容来源:2018 年 06 月 30 日,Elastic工程师与布道师曾勇在“Elastic Meetup 南京交流会”进行的《Elastic探秘之遗落的珍珠...

    IT大咖说
  • 为什么c语言是最好的入门语言?

    image.png 现在java大行其道,特别是中国互联网的快速发展,app以及服务端的开发现在流行的程度大大的盖过了传统的c语言和c++,从各个公司的招人简章...

    程序员互动联盟
  • 哪种编程语言又快又省电?有人对比了27种语言

    当能耗也成为了一个重要指标,我们要怎么选择编程语言?2017 年,由 6 名葡萄牙研究者组成的团队决定对这一问题进行调查并发表了一篇名为《Energy Effi...

    CDA数据分析师
  • c语言基础学习01_c语言概述

    ============================================================================= 每一...

    黑泽君
  • 谷歌翻译VIP版本?MIT科学家开发机器翻译新算法,专为破译消失的古语言

    语言是文化的有机组成部分,也是文化的载体,世界文明的多样性在很大程度上表现为世界语言的多样性。而在 21 世纪的今天,语言学家们显然已经不满足于传统的、对已知语...

    大数据文摘
  • 为何C语言如此强大?到底可以做什么?

    C语言几乎是所有语言的实现基础,所以不存在做不了的事情,只是相对来说谁做更合适,编写游戏和软件都不是问题。

    猫咪爱分享
  • 如何掌握所有的程序语言

    对的,我这里要讲的不是如何掌握一种程序语言,而是所有的…… 很多编程初学者至今还在给我写信请教,问我该学习什么程序语言,怎么学习。由于我知道如何掌握“所有”...

    顶级程序员
  • 你真的需要了解多种编程语言吗?

      英文原文:Do You Need To Know More Than One Language  我在谋杀自己的职业生涯。没错,很多人都这样说我。   我的...

    春哥大魔王

扫码关注云+社区

领取腾讯云代金券