为什么好多公司的开发语言从C#变成了JAVA?

来源:互联网 发布:整理收集文档软件 编辑:程序博客网 时间:2024/04/29 13:46

从我之前的一些博客文章看,大家也能知道之前是一个微软技术栈的程序员,也就是主要C#,.net MVC的东东,后来换了工作,算是国内的一二线的一些互联网公司,所以在技术方向和储备上都有一些调整,开发语言也慢慢跳出微软技术栈,工作中使用了其他的开源开发语言,新项目基本是开源语言,框架也使用了不少,所以就.net 和 类java一样的开源语言框架都有一定的了解,今天有时间就谈谈为什么好多公司的开发语言慢慢从C#变成了JAVA了。

其实也是希望大家能够讨论一下,如果是讨论的话我们就会建立一个基本的讨论标准,所以这篇我主要讨论的标准有两个:

  • 公司定义:我们定义的是互联网公司,TO-C的那种,不是to-B的,也不是软件公司,因为软件公司这种并发和QPS一个请求走9次IO也是正常的,尽管我们不应该这么做,但是还是有人这么做,因为他们主要关注点是能完成一些复杂业务;

  • 项目定义:有的同学说微软,百度,腾讯也在用C#啊,这个就没有讨论的意义,隔壁广场舞大妈也可以去google做保洁,但是做产品和研发肯定不行,所以这个项目的定义还是建立在一套核心系统之上,这套核心系统的主要任务是为公司创造收入,而不是起职能作用,只有面对互联网的产品才有可能去解决ddos攻击,要做反扒系统,要做反垃圾系统,要做用户增长系统,要做分布式事务控制,要做a/b test系统,要做大数据日志收集系统,要做支付系统,项目多了,服务器多了我们才要建立自动发布/运维系统。

所以希望园子里面的同学能基于上面两点进行讨论,光是语言之争我也没有必要写这篇文章了,如有光就语言本身进行无意义的争论,这篇文章就没有价值,我会删掉的。

基于上面两点可以让大家真正认识到不同语言在不同领域的作用,也希望挖掘出国内用.net比较好的团队在用.net做什么东西,如果有好的经验的话可以在这里分享,让更多的人和团队可以将.net放在一些核心和商业系统之上,促进.net在国内偏技术而不是业务领域的发展。

好的程序员不会简单的把自己仍在简单的语言之争的,因为好的程序员应该知道君子性非异也,善假于物也,我们系统中也会用多种语言,java主要做api和支付,两方面原因,java有成熟的开发框架包括日志,大数据,全文检索,成熟的mq堆栈等等,这样我们有更多的时间去做核心功能,而不是花大量时间做基础集成和搭建。我们会用node做长连接,还有h5的后端api分发,也有团队用go做底层通信的封装,我还是习惯用C#写一些批处理的控制台命令,python写一些map/reduce的东西,主要是因为可以网上找到最好的例子,如果纯用一张语言干这些事情,肯定相当头疼,效率不会太高。

架构师 and CTO

这个因素其实会占很大的比重,小的公司初始的技术框架选择都是由架构师确定的,后来就很少改变了,公司大了之后,引入CTO,CTO肯定不会就具体的框架和模块发号施令,更多的是在一个全局的角度去看公司现有的一些核心系统,比如商城系统的订单及数据中心的日志数据系统这些宏达的模块。

在公司架构来看,每一个项目都是部门级别的,最后不太可能每个公司每个部门有不同的开发语言,自设鸿沟,核心系统之间语言和通信肯定是相同相似的。

当然我们的职能部门,如OA系统,运营系统,更多的是给公司内部人员或者职能人员使用,可以使用另一种语言,因为这两套系统基本在核心系统之外,不太需要和其他系统联系起来,最简单的我们想不到公司数据平台接入OA系统有什么战略意义。

于是问题来了为什么架构师和CTO会选JAVA作为第一语言呢?

  • 其实选择.net的语言的架构师和CTO也不少。

  • 混到架构师和CTO的基本都是工作多年,而混到多年的基本大浪淘沙就剩大部分JAVA少部分C#(历史原因)。

  • 由于这部分架构师和CTO过去的经历是使用JAVA开发语言所以熟悉,这个就用了。

  • 比较有影响力公司的CTO或者架构师参加一些QCon大会,为了有面子,基本倾向于公司使用JAVA等架构,这也是我们很少能见到国内一些技术大会有人分享.net架构的,除了stackoverflow。

总结而来就是 CTO架构师过去的技术经验基本决定了公司技术的选型,在架构师CTO这个圈子,大家都在用JAVA顺势而为。

框架及生态

首先一个发展的比较好的公司或者成长经历了扩张的公司,都会衍生出好几个核心系统,而不是简单的一套三层架构搞定的。

多个系统在之后会经历SOA等服务化的分割,然后需要通信,需要事务管理,需要日志监控,需要异步处理,然后在网上一搜,发现基本每个方向的优秀解决方案都是有java的影子,或多或少会影响我们的选型,单就RPC框架来说开源生态就有好几种,并且背后的推手都是雅虎,google,facebook这样的一等一的互联网公司,但是.net背后基本也就是互联网能力不够的微软和算不上2线的stackoverflow了吧。

生态大家也都知道就是mysql+linux+tomcat 对抗 sqlserver+windows+iis,微软收费大家知道,跨平台这件事java完胜,最后发现搭建一套虚拟机集群linux是多么的顺手,一套win的虚拟机集群即伤财又伤神。

总结:框架开源语言丰富,并且好多框架背后都有facebook,google这样的巨头做推手,.net的后盾就少很多。linux在虚拟化这件事基本完胜win,高昂的授权费如果有上千台服务器的话,这将是一大比费用。

技术的激进性

就是说不同圈子社区对于新技术的敏感性,由于开源社区受众众多,一个新概念的出现,开源社区就会如雨后春笋般出现文章及概念或者框架DEMO了,微软社区除了官方的推进,其余都属于打酱油,而且微软主要精力基本在他的AZure上了。

以炒了一年多的微服务,两年多的大数据为例,我们已经将大数据用在了生产环境中,docker也在测试中,这些激进的想法和实践在.net方向上肯定很难这么快推进吧。

微服务有spring boot等概念,先不说效果怎么样,起码社区在推进,但是基本没有听过微软针对于微服务有什么新框架出来。

总结来说,不黑不吹,过去两年公司和项目的需要,自己学习了java web,spring这一套,研究了hadoop,hive的大数据框架,正在学docker,正式环境尝试前后端分离快速开发h5界面,这些尝试在之前的经历中都是没有的,可能是随着工作经验增长,能力有所提高就比较自信敢在生产环境尝试,之前也是受限于.net的系统本身业务方向原因,更多的经历耗费在了业务上,而不是处理技术问题吧。

相信微软在解决跨平台这件事,社区积累出现优秀框架,整个微软技术将会更加优秀。

有同学批评我对于.net的观察还停留在5年前,确实最近两年很少写.net了,但是这个5年确实也不影响,node出来也就5年吧,objectC也是最近5年比较火,包括hadoop,docker最近两年才火起来的,我也用react,angular这些前端框架,我会追新技术的,新事物的诞生是为了解决老事物的问题而来,而且我们用的架构在市面上应该是最通用的,其实架构这件事5年真不算老,记得之前看<<打造facebook>>这本书,提到了facebook工程部门2010年做的工具和框架,就有a/btest框架,增长框架,结果我们去年才做,也就是说比facebook延迟了5年,只能说他们太优秀了。知道自己的不足,才能快速前行。

像54楼,笋干说的一样,我们是为了找到问题,然后解决问题,好多人习惯性的上来就吵,这个肯定不是一个适合进步的思维,程序员也不会被一种语言吊死,勇于去尝试不同,勇于接收挑战,特别是工作多年之后会发现同样工作年限的人能力差距是很大的,经常听到走出舒适区,却鲜有人做到,可以先从思维开始,看看有有什么不同,踏实是说出自己的观点,共同讨论共同进步,还是基于两个前提:

  • 互联网公司:因为他们会面对更多的问题,更大的并发量,每次修改都是在奔跑的火车上换轮子,每一次异常,每一次停顿都会损失大量的金钱的;

  • 核心商业系统:因为这样的系统是直接在公司产生价值的系统,这样的系统要像宝宝一样呵护,肯定是由公司最优秀的人和团队,以及最好的架构资金支持的;

大家开心,不要互相攻击。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 换证体检过不了怎么办 唐山驾驶本到期换本怎么办 北京居住证变更地址了怎么办 眼睛弱视驾驶证换证不了怎么办? 驾照的分扣完了怎么办 驾照被扣了3分怎么办 交警扣了行驶证怎么办 报考驾照时手机号录错怎么办 摩托车被交警队拖走怎么办 汽车牌照被偷了怎么办 代理品牌个体工商营业证怎么办 2地交社保怎么办退休 驾驶证脱审3月怎么办 a1一次性扣12分怎么办 驾照在外地掉了怎么办 在外市考的驾照怎么办 驾照过期3个月怎么办 驾照过期6个月怎么办 b本扣分了6分怎么办 b2驾照提前换证有扣分怎么办 酒驾驾驶证被扣怎么办 驾驶证被扣了分怎么办 c1驾照扣了12分怎么办 结婚证丢了怎么办离婚手续 结婚证不见了怎么办离婚手续 科目一身份丢了怎么办 考驾照身份证过期了怎么办 酒驾发交通事故致人死亡怎么办 车保险快到期了怎么办 车保险贴掉了怎么办 小车撞凹进去了怎么办 被代位追偿了怎么办 车被别人抵押了怎么办 朋友没驾照借车怎么办 车子被朋友撞了怎么办 电车被交警扣了怎么办 e照扣了12分怎么办 驾驶证被扣33分怎么办 a2驾驶员扣33分怎么办 驾驶证被扣48分怎么办 驾照扣了33分怎么办