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. mutex和CRITICAL_SECTION,互斥和临界区

    本文不没有任何知识可讲,只是帖上自己测试的结果. 想看底层原理的可以直接关闭. 不过对于急着要选方案的人,倒提供一些帮助. 先说一些无关紧要的废话: ========================= ...

  2. [目标检测]PVAnet原理

    创新点:基于Faster-RCNN使用更高效的基础网络 1.1 创新点 PVAnet是RCNN系列目标方向,基于Faster-RCNN进行改进,Faster-RCNN基础网络可以使用ZF.VGG.Re ...

  3. Android SQLite 简易指北

    Android SQLite SQLite一款开源的, 轻量级的数据库. 以文本文件的形式存储数据. SQLite支持所有标准的关系型数据库特性. SQLite运行时占用内存非常少(约250 KByt ...

  4. 简单sql注入学习

    sql注入是什么? 所谓SQL注入,就是通过把SQL命令插入到Web表单提 交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQ ...

  5. SpringMVC的@RequestParam的解释

    自SpringMVC4.2之后,RequestParam内部有4个参数: 1.String name 2.String value 3.boolean required 4.String defaul ...

  6. 使用build_opener 自定义 opener

    使用build_opener 自定义 opener,这种方法的好处是可以方便的拓展功能. import urllib.request import http.cookiejar def makeMyO ...

  7. python自学1——代码优化1

    优化了上次的代码,请求方式可接收get和post两种,代码中对两种方式做了判断. 测试结果中提取了测试用例的名称.请求返回的状态.请求的时间. #coding:utf-8 import xlrd im ...

  8. Spring配置文件的xsd知识点

    今天在Spring配置文件中配置如下事务属性时,提示<tx is not bound(不受约束的),估计是配置文件的xsd没配置好. <!-- 2.配置事务属性 --> <tx ...

  9. 数据结构之合并链表STL

    #include <iostream> #include <list> using namespace std; int main() { int n, m; while (c ...

  10. JavaScript学习日志(一):变量,作用域和内存问题

    一,变量分为两种类型:基本类型值和引用类型值,基本类型包括:Undefined, String, Boolean, Null, Number,我们无法给基本类型值添加属性: 二,复制变量值的时候,如果 ...