我为什么要转到软件工程从C#转到java

http://wp.moerjia.com/
为什么好多公司的开发语言从C#变成了JAVA?
从我之前的一些博客文章看,大家也能知道之前是一个微软技术栈的程序员,也就是主要C#,.net MVC的东东,后来换了工作,算是国内的一二线的一些互联网公司,所以在技术方向和储备上都有一些调整,开发语言也慢慢跳出微软技术栈,工作中使用了其他的开源开发语言,新项目基本是开源语言,框架也使用了不少,所以就.net 和 类java一样的开源语言框架都有一定的了解,今天有时间就谈谈为什么好多公司的开发语言慢慢从C#变成了JAVA了。
其实也是希望大家能够讨论一下,如果是讨论的话我们就会建立一个基本的讨论标准,所以这篇我主要讨论的标准有两个:
所以希望园子里面的同学能基于上面两点进行讨论,光是语言之争我也没有必要写这篇文章了,如有光就语言本身进行无意义的争论,这篇文章就没有价值,我会删掉的。
基于上面两点可以让大家真正认识到不同语言在不同领域的作用,也希望挖掘出国内用.net比较好的团队在用.net做什么东西,如果有好的经验的话可以在这里分享,让更多的人和团队可以将.net放在一些核心和商业系统之上,促进.net在国内偏技术而不是业务领域的发展。
好的程序员不会简单的把自己仍在简单的语言之争的,因为好的程序员应该知道君子性非异也,善假于物也,我们系统中也会用多种语言,java主要做api和支付,两方面原因,java有成熟的开发框架包括日志,大数据,全文检索,成熟的mq堆栈等等,这样我们有更多的时间去做核心功能,而不是花大量时间做基础集成和搭建。我们会用node做长连接,还有h5的后端api分发,也有团队用go做底层通信的封装,我还是习惯用C#写一些批处理的控制台命令,python写一些map/reduce的东西,主要是因为可以网上找到最好的例子,如果纯用一张语言干这些事情,肯定相当头疼,效率不会太高。
架构师 and CTO
这个因素其实会占很大的比重,小的公司初始的技术框架选择都是由架构师确定的,后来就很少改变了,公司大了之后,引入CTO,CTO肯定不会就具体的框架和模块发号施令,更多的是在一个全局的角度去看公司现有的一些核心系统,比如商城系统的订单及数据中心的日志数据系统这些宏达的模块。
在公司架构来看,每一个项目都是部门级别的,最后不太可能每个公司每个部门有不同的开发语言,自设鸿沟,核心系统之间语言和通信肯定是相同相似的。
当然我们的职能部门,如OA系统,运营系统,更多的是给公司内部人员或者职能人员使用,可以使用另一种语言,因为这两套系统基本在核心系统之外,不太需要和其他系统联系起来,最简单的我们想不到公司数据平台接入OA系统有什么战略意义。
于是问题来了为什么架构师和CTO会选JAVA作为第一语言呢?
总结而来就是 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楼,笋干说的一样,我们是为了找到问题,然后解决问题,好多人习惯性的上来就吵,这个肯定不是一个适合进步的思维,程序员也不会被一种语言吊死,勇于去尝试不同,勇于接收挑战,特别是工作多年之后会发现同样工作年限的人能力差距是很大的,经常听到走出舒适区,却鲜有人做到,可以先从思维开始,看看有有什么不同,踏实是说出自己的观点,共同讨论共同进步,还是基于两个前提:
大家开心,不要互相攻击。
程序员不要去这样的公司
程序员选择公司的8个标准!
Android为什么选择Java作为开发语言之我见
xml字符串中的变成了&和&,这怎么办呢
我为什么从.NET转向Java
国内大型公司,京东,携程从c &.net转型java的原因有哪些?
没有更多推荐了,博客分类:
之前总觉得C#和Java可以交互应用,但是由于时间以及其他方面的原因,一直没有调研。今天抽空搜了一下,终于折腾出来了。
以下是我自己就C#和Java整合的一些提问和分析,如果有不对的地方,请路过的各位大虾给予指出。3Q!
问题来了:
1、C#和Java如何整合?
2、为什么C#(.Net)要和Java整合?
3、Java和C#整合时,Java主要扮演什么角色?C#扮演什么角色?
答案一一揭晓:
1、C#和Java整合大致有4条路可以走。
1.1 把Java包转换为DLL或者EXE后注册为com组件,之后调用;
1.2 使用web service;()
1.3 使用中间件;比如一个商业的中间件:http://j-integra.intrinsyc.com/;
1.4 使用 IKVM.NET,这是一个在.net 下实现的Java VM,所以在经过一个转换后,直接跑Java的东西;
(以上4点,是我在网上搜的)
我主要说第四点:使用IKVM.NET。
a:下载ikvm-0.40.0.1.zip;ikvmbin-0.40.0.1.zip;openjdk6-b12-stripped.zip;
解压ikvm-0.40.0.1.zip,并将%IKVM_HOME%\bin添加到path中。此处的%IKVM_HOME%是指解压后ikvm的主目录。
b:建立一个JavaProject,自定义包、类、需要透露给外界的方法,然后、将这个JavaProject打包成jar文件。(eclipse和myeclipse都自带的,或者你可以显摆一下,用黑框框敲几个代码整)。
c:狸猫换太子:jar&&dll
打开黑框框(即:win+r,cmd,进入到%IKVM_HOME%\bin的目录下),
执行:ikvmc -out:dllFileNameOrPath.dll javaFileNameOrPath.jar
此时,就会在%IKVM_HOME%\bin目录下或者指定的Path下,会出现一个dllFileNameOrPath.dll文件,置于你的.Net项目中,添加引用,与此同时,请将
%IKVM_HOME%\bin\IKVM.OpenJDK.Core.dll
  %IKVM_HOME%\bin\IKVM.Runtime.dll
  %IKVM_HOME%\bin\IKVM.Runtime.JNI.dll
添加到你的.Net项目中,切记!
其中,using 后面跟java类的包名。
2、C#和Java整合,不,应该是.Net和Java整合。为啥要整合?
在业间,有人士称,.Net开发除服务层以外的,开发速度快,效率高。而Java做后台服务,安全性、可扩展性高。所以才有牛人将两者整合。目前.Net和Java整合技术的应用,算是一个新旗帜,但目前已经被应用于实际开发了。
3、正如2所说,.Net和Java整合,Java主要承担DAL,也就是和DB进行主要的交互,以及其他通信。而.Net主要承担BLL。
以上是小弟的分析,如果说的不对,请各位路过大神指正!
javaAndNet
浏览: 55447 次
来自: 合肥
一般对报文的逻辑处理应该都是在后台吧。。。
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'既然在语言层面上 Java 要落后于 C#,那为何国内 Java 架构到处都..._百度知道
既然在语言层面上 Java 要落后于 C#,那为何国内 Java 架构到处都...
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
来自电脑网络类芝麻团
采纳数:669
获赞数:1991
参与团队:
因为语言层面的差距从来都不是最重要的差距呀。简单点说,Java是最早实现跨平台的高级开发语言,C#虽然这两年开始在Xamarin上发力,但已经在市场占有率上大大落后Java了,难以追赶。同时,Java的分布式框架较多,且早已成型,这让企业在招聘和产品扩容方面都比较放心。还有最重要的一点,Java+Linux+MySql完全免费,但Windows Server+SqlServer却贵的不行,微软时不时抽查大企业盗版软件,企业管理者从成本考虑,一定偏向于Java系。
来自电脑网络类芝麻团
采纳数:8566
获赞数:12192
参与团队:
1,java是在C++上的蓝本上实现上,去除了C++的指针都内容,将很多的东西搬到了类库中,首次实现了虚拟机概念——因此跨平台特性十分强。而C#则借鉴了java的优点,也实现了虚拟机与类库。同样没了指针——官方虽然也说在C++基础之上,但借鉴不少java的东西。2,java实现了开源,有诸多开源项目可以使用,而C#近年来虽有不少优秀的开源项目,但相比java还是差的太多。3,在api方面,C#对windows有原生的支持,相对来说较为好一些。注释方面也强,同时在IDE的智能感知方面也较java强,也正是这种特点导致C#的元数据非常大,打包后文件过大,性能上也因为元数据大量存在而导致有所下降。同时对于编译器来说,java有林林总总的不同厂家编译器,而,.net却只是windows一家独大。所以从编角度上来看,.net更易于统一,而java则有更多的选择。4,在组件方面,目前来说.net稍优,它是基于COM+形成,三者之间是相互供鉴,目前来说.net还是稍占优劣。5,难度方面,.net主要是力求程序员的简单,类库较为完整,主要是程序员对.net类库的熟悉。而java类库并不十分完整,但是开源极多,构件极多,比如ejb,j2ee等等,主要集中在构件的学习与开源项目的寻找上。最主要的还是微软查盗版还是很严格的,C#只能在Windows下编程,Java可以在任意一个系统下编程(包括DOS、Android还有Linux)
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。vs2013选择了C#要改为java怎么设置_百度知道
vs2013选择了C#要改为java怎么设置
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
来自电脑网络类芝麻团
采纳数:234
获赞数:223
参与团队:
恢复默认设置,重启vs,就可以选了。
来自知道合伙人认证行家
电脑类行家
采纳数:85814
获赞数:70534
我最然懂的不多,但是我愿用全力来帮助大家。如果有不妥之处,还望大家海涵!
您好,在Java中使用函数,不声明[不可重写],就可以直接[重写]。在Java环境中,如果我们需要一个公有方法不能重写,需要声明这个函数为final(基本等价于C#的sealed修饰符,但sealed仅对类有效)。假设A类有公有函数:public void test(){}则B类无需任何修饰,复写一次该函数,重写就会被完成。public void test(){}如果我们不希望A类中函数test被重置,则需要特别修饰test函数,比如下例:public final void test(){}而在C#函数中,特性与Java正好相反,不声明函数[可以重写],意味着对应一定[无法重写]。在C#中,假设也有A类,想要完成如Java般操作,则必须先作如下设定:public virtual void test(){}而后需要重写的B类,再做如下修饰,才能完整重写过程(在C#里,假如我们需要一个公有方法可以重写,则必须声明为override。Java虽然有override的元数据注释,但可有可无……)。public override void test(){}而C#中不希望test被重置,则无需任何设定,直接如下即可:public void test(){}另外,virtual修饰符不能与static、abstract, private或者override修饰符同时使用(否则VS直接编译失败,根本无法走到运行)。
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。posts - 87,&
comments - 15,&
trackbacks - 0
C#(C-Sharp)是Microsoft的新编程语言,被誉为&C/C++家族中第一种面向组件的语言&。然而,不管它自己宣称的是什么,许多人认为C#更像是Java的一种克隆,或者是Microsoft用来替代Java的产品。事实是否是这样的呢?
阅读(...) 评论()}

我要回帖

更多关于 户口转到深圳 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信