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. 进入子shell的各种情况分析

    子shell的概念贯穿整个shell,写shell脚本时更是不可不知.所谓子shell,即从当前shell环境新开一个shell环境,这个新开的shell环境就称为子shell(subshell),而 ...

  2. Python3使用Print输出带颜色字体

    Phton3使用print输出带颜色的彩色字体 实现过程:       终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关.       转义序列是以ESC开头,即用\03 ...

  3. web前端笔记整理一---HTML

    一 HTML标签1 页面及标记 1 HTML 文件结构 拓展名 .html或者.htm <!DOCTYPE html>// 声明 <html> html 主体 <head ...

  4. Andrew Ng机器学习课程笔记--week10(优化梯度下降)

    本周主要介绍了梯度下降算法运用到大数据时的优化方法. 一.内容概要 Gradient Descent with Large Datasets Stochastic Gradient Descent M ...

  5. 利用CoreAnimation实现一个时间的进度条

    (个人原创,转载请注明出处 http://www.cnblogs.com/pretty-guy/p/7460334.html) 在iOS中实现进度条通常都是通过不停的设置progress来完成的,这样 ...

  6. Struts2流程分析与工具配置

    1. 运行流程 请求 -- StrutsPrepareAndExecuteFilter 核心控制器 -– Interceptors 拦截器(实现代码功能 ) -– Action 的execuute - ...

  7. 【详细资料】ICN6202:MIPI DSI转LVDS芯片简介

    ICN6202功能MIPI DSI转LVDS,分辨率1920*1200,封装QFN40

  8. 递归的二叉查找树Java实现

    package practice; public class TestMain { public static void main(String[] args) { int[] ao = {50,18 ...

  9. [js高手之路]深入浅出webpack教程系列7-( babel-loader,css-loader,style-loader)的用法

    什么是loader呢,官方解释为文件的预处理器,通俗点说webpack在处理静态资源的时候,需要加载各种loader,比如,html文件,要用html-loader, css文件要用css-loade ...

  10. Intellij Idea 13 快捷键(与Eclipse比对)以及基本的设置

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt404 刚到新公司,用的台式机配置不给力,Eclipse很不给力,几个项目一起 ...