个人认为Java生态过于松散是Oracle缺乏战略掌控的错。
Java生态中大量的开源框架无序竞争,让开发人员无所是从,经常为了寻找一个技术解决方案不得不在一大堆类似的框架中比选;Oracle并没有主导生态中强势的技术,而是听之仍之,自生自灭——一门语言被生态所累是可悲的!
Java语言自身的面条式风格越来越严重,匪夷所思的各种代码范式让程序员疲于记忆大量的跟具体框架相关的书写规则例如:Object.GetValue().ConfigThis().ConfigThat().ConfigOther() ...这样的拉面语法被各种框架过度使用——一门语言被第三方框架绑架也是可悲的!(类似的其他语言的例子诸如Angular.js对于Javascript)
Java的开发环境并没有做到极致,主要依赖Eclipse作为IDE,开发效率受到开发环境的制约太严重,例如Eclipse就有Maven,Gradle,Ant等编译环境的配置管理,导致不同的开源工程使用不同的配置体系,每个程序员需要花大量的时间来了解这些配置的差异和修改方法,今天要学点Maven的XML配置,明天又要搞定Gradle的Groove语法……——一门语言被开发环境绑架更是可悲的。
Java程序员最佳去处——转型为C#程序员,原因如下:
Java和C#语法非常类似,转到C#非常顺当;例如:包引用改import 为using ,类继承改extends 为“:”,多写一点代码就搞定了,大部分知识都可以共享,而且未来需要的时候要返回java也是容易的;C#有Linq——一种Java没有的语法特性,这是C#官方定义的一种极为便捷的非传统语法特性,它主导了对集合的全面操作,把程序开发中最乏味的部分解决了。虽然Linq也会导致类似Java那种面条式语句,但是这是一套放之四海而皆准的面条,在所有程序中都可以用。例如:Collection.ToEnumerable().OfType<ObjectA>().Select(i=> i.a=conditionA).ToList(),这些方法来自官方框架,在所有程序中都是通用的,长一点问题不大,反而作为一种固定的通用范式。Java有一点理想主义的倾向,导致有时候语法就是一种形式上的桎梏;而C#则要实用主义许多,Linq就是这种突破的表现,为了开发习惯上的实用,不一定要延续一致性的语法原则。除此之外的例子还有扩展方法(向现有类型追加任何方法)等等。使用C#则可以利用所有.net的生态,而且.net生态几乎由微软主导,尤其在微软收购了Github之后,在开源界C#的生态也将受到微软的管理(有时候选择太多不是好事)。
C#拥有目前世界上最好的代码开发环境Visual Studio。VS的各方面功能都是极佳的,对于程序员开发调试都是一大福音,用了VS你会恨死Eclipse。
随着.net core的流行,C#同样具备了跨平台的能力,而且微软还在积极开发.net native编译器,今后用C#开发本地代码程序或许会非常便捷。
总结一下,C#既没有被语法、也没有被第三方框架或者开发环境所绑架,解决方案出来的时候你非常清晰你的路径,而不会被犹豫的选择、晦涩的语法和经常崩溃而且还找不到统一支持的开发环境所困扰。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有