Kotlin最近火了, 在Google IO大会 Kotlin宣布Kotlin将会成为Android官方开发语言之后, Kotlin这样一个JVM上的新*(其实从诞生到现在已经有5年历史的)语言. 终于出现在程序员的视野里, 成为一门成熟的热门的语言.

对于大多数C#程序员来讲, 比如像我这样一个多年在.Net平台从事开发工作的程序员来说, 大多数时候往往都是对Java社区和JVM平台上的各种语言包括JAVA本身的发展抱着一种隔岸观火的态度. 我们目睹了早已被我们用烂的Java lamda特性终于在15年千呼万唤始出来. 旁观了Scala的社区的各种爆炸的冲击与最后归于小众. 耳闻了Oracle与Google在Java上的各种大小官司.

虽然追溯源泉 J#和Java本是同一套标准的不一样的实现, 但最终C#和Java这两大基于虚拟机指令集的语言, 发展成了编程语言上的两大阵营. Java的JVM阵营虽然是第一大, 但C#为代表的.Net阵营却还是站在众多语言中占据着一席之地.而且这两大阵营的人很少相互窜门(换技术栈). 原因各种各样, 对于.Net程序员来说, 他们很少换到Java的原因基本上可以归纳为:

1.两个平台都为Server Side 语言, 定位重叠.会一门就够. 有功夫学习一门Java(虽然很容易上手)还不如学一套Client语言(Js)更为互补.

2.C#程序员主力搞windows开发, 基本没有跨平台需求. 而C#开发windows应用上手容易又是一家人的产品,自然得心运手.

3.C#的语言是有微软一家说了算,商业化的开发,在语言特性上总是会觉得比Java更好用更Fancy一些.所以迁移到Java总觉得不舒服.

4.虽然Java社区很活跃,但是好的社区产品基本都有.Net移植版, 没有硬性需求非要迁移到Java

5.产品一旦开发,从C#换到Java基本上得照抄一遍,相当于推到重做,没有渐进式迁移的说法.所以一上了船就不好下.

说了这么多理由,对于一个C#开发人员来说,第三个理由应该是最接地气的为什么不学习Java的原因了--编程语言就是我手中的利剑, 用得顺手用的习惯了自然用不惯其他语言,何况还有这种优越感.

作为一个开发人员, 开发语言+IDE就是他的武器, 社区生态和类库就是他的剑谱刀法. 用顺手的剑耍最熟练的武功. 名剑配剑谱, 名刀配刀法.这是最正常不过的事情了.

然而Kotlin的出现,让我看到了这样一个打破界限的机会

要说起Kotlin的出身,那真可是出身名门,开发C#的,都会知道Reshaper. 开发Java的,也没有不知道InteliJ的. 而这两个IDE, 都是出自Jetbrains这家公司. 2012年 Jetbrains不在满足于只生产IDE, 瞧瞧的开始制作起自己的语言来. 5年时间过去Kotlin已经到了1.1

那么这门语言到底有什么特点呢?他解决了同平台Java的哪些痛点呢?

  • 对Null Reference Exception说不
  • 对泛型的类型消除说不
  • 函数一等公民, 高阶函数
  • 不再强制异常检查
  • 原生就有属性 Getter Setter

熟悉C#的程序员都会发现, 这里很多的思想居然就是C#和Java的不同. 也就是C#程序员在迁移到Java时的痛点( C#严格意义上称不上Null Safe 语言, C#8的Staic Null Checking 才称得上是Null Safe. Null Safe在这里不做解释).

而没有这些痛点以后, 学习Kotlin变得更平滑更愿意接受了. 而事实上的是, 以前总感觉C#语言特性发展总比Java快的这种感觉, 在学习了Kotlin之后发现Kotlin确实比C# Fancy太多.

那么,打破了刀剑的界限, 使用和C#一样顺手的Kotlin, 获得了熟悉Java阵营的各种生态的机会. 拓展自己的开发平台, 不小心还掌握了一门Mobile开发语言.这种好事, 好学的你为什么不去尝试一下呢?

介绍就到这里, 传送门就到这里. 进去了怕是只要半天的时间, 从此就打开一扇通往新世界的大门.

在这里也给自己努把力,希望自己能继续的更新这个专题, 通过学习Kotlin并和C#做些对比,使得同行们能够更容易的了解这门新的语言.

Kotlin Koans 教程:http://kotlinlang.org/docs/tutorials/koans.html

Kotlin 门户:http://kotlinlang.org/

作为一个C#程序员, 你应该上手Kotlin的更多相关文章

  1. Coding girl一个老程序员谈到的一个女程序员的故事

    因为有人说我给一个女程序员的建议不靠谱,我不服,因为我的工作经历中的一些女程序员都很不错,比那些男程序员都强,所以,我在新浪微博和twitter上征集女程序员的故事和想法,这两天来,我收到了好几封邮件 ...

  2. 文章推荐一个Java程序员跟大家谈谈从业心得

    一个Java程序员跟大家谈谈从业心得 2017-10-21 java那些事 java那些事 java那些事 微信号 csh624366188 功能介绍 分享java开发中常用的技术,分享软件开发中各种 ...

  3. 一个老程序员PHP程序员说的话(用来提醒自己)

    我,一个老程序员,也是一个学生,把玩过甚多语言,大多不精.我既非名牌学校,也不是高学历,仅代表一部分比较蛋疼的人.接触PHP也是很早了,从04年的OFSTAR开始的,到现在六年了,期间也接触过不少的语 ...

  4. 一个.net程序员的安卓之旅-Eclipse设置代码智能提示功能

    一个.net程序员的安卓之旅-代码智能提示功能 过完年回来就决心开始学安卓开发,就网上买了个内存条加在笔记本上(因为笔记本原来2G内存太卡了,装了vs2010.SQL Server 2008.orac ...

  5. 一个.net程序员教你使用less

    我是一个.net 程序员,虽然说一直做后台,但是web 前端也会去学,虽然说技术只是层窗户纸,但是像我这种多动症患者,不捅破我心难受啊! 好!废话不多提,下面直接正题,至于less 是什么这里不多讲因 ...

  6. 一个.Net程序员:既然选择了编程,只管风雨兼程(转)

    一个.Net程序员:既然选择了编程,只管风雨兼程 一次会议记录是不会有人感兴趣的,做标题党也是不道德的.所以,走了个折衷的路线,标题不叫会议记录, 内容不纯总结,技术加吐槽,经验加总结. 对于一个程序 ...

  7. 做为一个Java程序员,你需要哪些傍身的技能?

    最近总有些断断续续的思考,想想从我入行以来,我到底学会了什么,做成过什么,以后要做什么,如何提升自己······· 工作3年了,常听人说3年,5年,10年是程序员的坎,每过一个都会有新的想法,新的改变 ...

  8. MySQL内存表(MEMORY)说明 | 一个PHP程序员的备忘录

    MySQL内存表(MEMORY)说明 | 一个PHP程序员的备忘录 MySQL内存表(MEMORY)说明

  9. 0~5年一个Java程序员的晋升之路

    在程序界流行着一种默认的说法叫“黄金5年”,也就是一个程序员从入职的时候算起,前五年的选择直接影响着整个职业生涯中的职业发展方向和薪资走向,如何走好这5年,彻底从一个刚入行的菜鸟蜕变成可以以不变应万变 ...

随机推荐

  1. 【Ubuntu 16】深入Ubuntu文件系统

    Ubuntu文件系统的设计目的就是把文件有序地组织在一起,提供一个从逻辑上组织文件的文件系统.除了文件的组织外,文件安全也是文件系统的设计要点,所以文件的访问权限是文件系统不可缺少的组成部分 Ubun ...

  2. TP-Link路由器的设置

    TP-Link路由器的设置.. 路由器中TP-Link是公认比较好用的品牌. 将TP-Link路由器的Lan与电脑连接.拔掉Wan口上的线. 注:tplink的路由器默认IP基本都是192.168.1 ...

  3. Andrew Ng机器学习课程笔记--week7(SVM)

    本周主要学习SVM 一. 内容概要 Large Margin Classification Optimization Objective(优化Objective(损失函数)) Large Margin ...

  4. 第二篇--Jmeter测试Java请求

    前提:需要准备eclipse作为开发工具,安装jdk,准备完毕,接下来开工喽! 1.新建Java工程BMIrisJNIJarTest,新建lib目录,将Jmeter安装目录下lib/ext包下的Apa ...

  5. 在Ubuntu16.04上部署LXC容器管理系统的相关步骤

    打算安装一个LXC linux容器管理的软件来分配使用资源并配置不同的编程环境,这样就方便大家的使用,步骤如下(宿主机的环境都搭建好了,对应显卡的驱动等): 参考网站: 简单入门和相关指令总结:htt ...

  6. 前端开发【第一篇:HTML】

    HTML初识 1.什么是HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都 ...

  7. 关于vue的一些总结

    最近学习了一段时间的vue js   除了路由没用过之外  基本上其他的都用过了 对于vue的一些用法  在此做一个总结.  开始使用vue之前 需要导入vuejs这个文件到项目中 <scrip ...

  8. matlab-常用函数(2)

    isempty(A) 功能解释 isempty()用来判断 一个矩阵是否为空矩阵,其用法相当于C语言中的"a==NULL". 当参数为空矩阵时,该函数返回逻辑值"1&qu ...

  9. HTML添加样式三种办法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 自制IPsec_vpn综合实验

    实验需求 R1.R2间tunnel建立私网: Vpn网关间配置ipsec实现数据加密: 使用tunnel模式下的ESP包头封装: 使用3des加密算法,md5摘要算法: 设置NAT旁路绕行流量: 利用 ...