历来就听说有编程语言“鄙视链”的说法,而如今月经贴上的那些事儿,还真让我给遇到了。

以下内容来自知乎,纯属扯淡,易引发口水战,看完勿人身攻击。

目的给盲目的公司决策者、开发人员科普下,有个客观清醒的认识。顺带给妄自菲薄的开发人员鼓励。

问题:

国内技术转型Java的大公司,京东、点评,携程也在慢慢转型java,数据库由sql server在转型MySQL,原因有哪些呢?

我想到的原因有以下几点:
1. 开源语言,免费,相关产品不用花钱,微软的产品一年会花费多少?
2. 开源插件会很多,可替代性强

3. 移动端火,安卓占据很大一部分

下面是我的回答:

作者:Dylan
链接:https://www.zhihu.com/question/28512241/answer/100592827
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

每家公司都有背后的原因吧。就算是内部的人,可能三言两语也说不清楚。
有些公司决策可能是理性的,有些公司决策可能就是不怎么懂技术的在拍脑袋

两者都有太多的优点和缺点。冒着被喷的风险,简单的说下吧:
C# .NET的优点
1.从使用者角度来看,语言层面C#是领先Java的。C#最初设计可能借鉴了Java,可谓“青出于蓝而胜于蓝”吧。这点,C#很多的语法糖就可以说明。至于平台层面,CLR是否一定优于JVM,这个没有透彻研究,不敢轻易下结论。
2.微软拥有号称世界上最强大的IDE工具VS,编写C#非常愉快。
3.微软作为一家商用公司,一贯是比较体贴开发者。制定好各种标准和实现,版本兼容性那些也做的很好。加上2中提到的IDE强大。易用性是更加好的(至少对于初学者是这样)。同时,微软的很多技术让编程的门槛更低(例如早几年搞的拖控件,绑数据...堪称是“傻瓜式”的)。在一些小公司,或者一些要求不高的项目,这种开发技术可能比较有优势。
4.跨平台游戏引擎支持。跨平台APP开发的支持。
夸了那么多,优点就不往下展开,泼下冷水:
1.由于早年不开源,且捆绑windows紧密,所以跨平台特性被人诟病。虽然Mono崛起,并且开源了,但是很难改掉人们对微软“封闭、臃肿、不安全”的印象了。很多人对Mono也是半信半疑。
世上很多事情就是这样的,也算是一种恶性循环吧
2.开源生态确实不如Java,虽然是在努力追赶,但是很多方面还有很大差距。成熟方案和选择性相对少。很多框架和组件,是先在Java平台上出现,后来移植到.NET,更新维护都成问题。很多优秀的中间件、平台,在开发API的时候,都是优先支持Java、python这些,后支持C#(好在大部分的都还支持C#,要不然真的只能靠微软官方去造了)
3.招聘难度大。受国内这种不良风气和环境影响,高端的.NET开发确实特别的少
4.从身边的例子和一些招聘信息来看,相同工作年限、级别的.net程序员的薪资水平应该是略低于Java的(具体的也要看公司和行业,而且人的技术水平、背景、综合能力那些不同,很难横向比较)。这点对一般的开发人员热情来讲是比较有打击性的。当然,高端的技术人员不管是哪个方向和领域,薪资都不会低的
5.由于目前很多企业和个人对Mono和Linux .NET还是半信半疑甚至毫不知情,所以还是会捆绑在windows上。这就造成了授权费用的风险。还有就是windows自动化运维的缺点了。
(为了避免口水战,特别说明:上面说到的几点,有些是客观存在的事实,有些确实是国内的不良风气、误解等造成的恶性循环)

再说说Java的优势:
1.问世早,跨平台,很早就占领了市场,名声已经在那里
2.开源生态好,技术方案的可选性多。良性循环
3.成功的案例多。从企业级系统,到大规模互联网系统,再到现在一直占主流。最后扯到最近几年火热的android、hadoop...可以看出java的地位了
4.由于1,2,3的优点。所以Java高端技术人员相对也会多一些
泼下冷水:
1.语言层面不如后来的C#,很多应用场合下也不如新型的go或者scala之类的
2.易用性不如C#.NET。平台入门的门槛高一些
(见过一些开发人员,配置个环境变量就摸索了半天。有些被微软惯坏了的.NET开发人员,再去开发java,框架整合和一大堆的配置文件就可能弄个半死)
3.IDE不如VS好用(也和个人习惯有关,各有千秋吧)
Eclipse的最大优势在于灵活、可扩展、占用资源少
而myeclipse貌似很少有人在用了
IDEA还不错,不过感觉离微软的VS还是有差距
4.java的母公司sun被Oracle收购后,总让人感觉不太踏实
5.别总抱怨说微软的某些体系和标准臃肿,反人类。其实JavaEE体系里也有很多不成功的设计标准(EJB JPA JSF那些使用并不广泛),

只不过后来都被轻量级的开源框架取代了

说了那么多,大概都明白要迁移的理由了。理性的理由大概如下:
1.对Mono和.NET跨平台不太了解,捆绑在windows上面了。因此又担心IDE和服务器费用问题,又担心windows的安全性、自动化运维不方便。而Java跨平台特性早就为人所知。
2.看到.NET开源生态不是很好,Java成功的案例多,开源的方案选择性更多
3.Java的高端技术大牛好像要容易找一点,至少国内是这样的(很多大厂用Java,企业会认为Java大牛多)
4.暂时也找不出其他理由了

至于那些拍脑袋想的理由,可谓五花八门:
1.决策者对微软的技术有成见或者误解。或者技术管理者本身具有Java开发背景(这种通常是领导想着急的搞出点业绩来)

2.公司高层变动,与其说“战略调整”,不如叫政治斗争(例如:新官上任三把火,新来的技术高管想给团队换血)
3.听别人说.NET不行,不安全,性能低等等(这种人通常都是没有深入了解过.NET的)
4.早期没有重视到技术和架构的重要性,没有重视人的重要性,而往往把责任推给.NET或者.NET开发人员。
听别人说Java好,所以就换Java吧(这种通常是病急乱投医)
5.听说“京东、大众点评、携程”那些大公司都迁移了,我们也迁吧。(毫无主见类型)

大公司c#&.net转型java的原因有哪些?的更多相关文章

  1. 大公司喜欢问的Java集合类面试题

    Collection Collection是基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素而另一 ...

  2. [转载] JAVA面试题和项目面试核心要点精华总结(想进大公司必看)

    JAVA面试题和项目面试核心要点精华总结(想进大公司必看) JAVA面试题和项目面试核心要点精华总结(想进大公司必看)

  3. Java面试题 BAT 大公司面试题整理总结!

    本文只列出了问题,答案还是需要需要自己的总结,很多时候自己总结出来的语言在面试时比硬背的效果好很多. 这些题目是网友去百度.小米.乐视.美团.58.猎豹.360.新浪.搜狐等一线互联网公司面试被问到的 ...

  4. 各大公司java后端开发面试题

    各大公司Java后端开发面试题总结 ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量.采用空间换时间,它用于线程间的数据隔离 ...

  5. JAVA集合类(大公司面试喜欢问的)

     分类: 核心JAVA(11)  版权声明:本文为博主原创文章,未经博主允许不得转载. 看了一些所谓大公司的Java面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少 ...

  6. 大公司最喜欢问的Java集合类面试题

    看了一些所谓大公司的JAVA面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少,抽空也学习学习吧. java.util包中包含了一系列重要的集合类,而对于集合类,主要 ...

  7. 大公司面试经典数据结构与算法题C#/Java解答

    几个大公司(IBM.MicroSoft and so on)面试经典数据结构与算法题C#解答 1.链表反转 我想到了两种比较简单的方法 第一种是需要开一个新的链表,将原链表的元素从后到前的插入到新链表 ...

  8. 转:大神提出来的java服务器方面面试问题(当作自己的学习目标平时得多注意)

    因为一些个人原因,陆陆续续参加了一些校招补招.社招的笔试和面试(BAT),也包括一些国外公司(Spotify, Google, Ericsson),最后有幸被网易收入麾下,拿到了S.下面罗列一些我复习 ...

  9. 大公司的PHP面试题

    1. 禁用COOKIE 后 SEESION 还能用吗? 2. 抓取远程图片到本地,你会用什么函数? 4. 你觉得在pV10W的时候, 同等配置下,LUNIX 比WIN快多少? 5. 简述pOST 和G ...

随机推荐

  1. How.To.Process.Image.Infomation.Of.Rotate.And.Flip.From.Server

    需求说明 客户端接收到服务器传送过来的图像数据,客户端通过对图像进行旋转和反转操作. 然后把这个旋转和反转的数据上传到服务器. 客户端在接收图像的时候, 也会下载以前的旋转和反转参数, 然后客户端根据 ...

  2. JQuery图片切换动画效果

    由于博主我懒,所以页面画的比较粗糙,但是没关系,因为我主要讲的是如何实现图片动画切换. 思路:想必大家都逛过淘宝或者其他的一些网站,一般都会有图片动画切换的效果,那是怎样实现的呢?博主我呢,技术不是很 ...

  3. String Aop 动态代理例子

    动态代理原理:spring AOP采用动态代理来实现 (1)定义一个接口Boy package aop001; public interface Boy { public void beat(Stri ...

  4. ios crash的原因与抓取crash日志的方法

    首先我们经常会闪退的异常有哪些呢?crash的产生来源于两种问题:违反iOS策略被干掉,以及自身的代码bug. 1.IOS策略 1.1 低内存闪退 前面提到大多数crash日志都包含着执行线程的栈调用 ...

  5. JavaScript必须了解的知识点总结。

    整理的知识点不全面但是很实用. 主要分三块: (1)JS代码预解析原理(包括三个段落): (2)函数相关(包括 函数传参,带参数函数的调用方式,闭包): (3)面向对象(包括 对象创建.原型链,数据类 ...

  6. mysql数据库备份

    前一段时间因为误操作删除了一张表的几条数据,弄得很尴尬,正好这周有空就折腾了下数据备份的知识,现把mysql的数据备份相关实践和心得总结如下: 一.使用mysqldump命令备份数据库: 备份整个数据 ...

  7. SVN代码冲突解决方案小集合

    对于刚接触svn的人来说,svn冲突后,不能提交是件让人很郁闷的事情.最让人郁闷的事,是代码间的覆盖.你把我代码盖了,我会很火大的.谁把谁的盖了都不爽. 为什么会出现代码冲突问题呢,因为不同的人,同时 ...

  8. Python标准模块--functools

    1 模块简介 functools,用于高阶函数:指那些作用于函数或者返回其它函数的函数,通常只要是可以被当做函数调用的对象就是这个模块的目标. 在Python 2.7 中具备如下方法, cmp_to_ ...

  9. Visual Studio中没有为此解决方案配置选中要生成的项目

    问题: Visual Studio点击"生成解决方案"时,出现"没有为此解决方案配置选中要生成的项目". 解决方法: 菜单->生成->配置管理器-& ...

  10. No row with the given identifier exists:

    最近在弄一个后台项目,有用到hibernate操作数据库.写hql语句表一对一关联查询的时候报这个错误.受到了csdn上一篇博客的启发,解决了我的问题.他的博客地址:http://blog.csdn. ...