Java和.Net的区别、选择

  • 解惑:学习Microsoft.NET还是学习JAVA?
    因为Microsoft.NET和JAVA是国内市场占有率最高的两门技术,对于准备学习编程语言的初学习者来说,Microsoft.NET和JAVA是初学习者首先考虑的两门技术,因此很多人一遍遍的问“学习Microsoft.NET还是学习JAVA”,社区中也每天都有“Microsoft.NET控”在唱衰JAVA,也有“JAVA控”在唱衰Microsoft.NET,一时间硝烟四起,让初学习者更加迷惑。

    做为一个Microsoft.NET、JAVA、Delphi、Python、PHP等语言都进行过有一定复杂度的项目开发的人来说,我对任何一门语言都没有宗教式狂热崇拜,因此我也相对理性的对整个问题进行分析。

    从无锡、江苏、苏州等地区2010年的就业统计数据(由于没有找到更权威的数据,这些数据是我对主流招聘网站和技术网站的相关数据进行的并不是太严谨的分析)来看,Microsoft.NET和JAVA的职位数量比例为2:3,从就业网站和主要技术社区数据来看,2010年Microsoft.NET和JAVA的学习人员数量比例为1:3。从数据上看,Microsoft.NET的职位绝对数量比JAVA低一些,不过JAVA学习人员数量比Microsoft.NET学习人员高出3倍,因此Microsoft.NET职位的竞争激烈程度低于JAVA。

    由于Microsoft.NET秉承了微软技术的入门简单的特点,经过短时间的学习就可以掌握拖拉控件的快速开发方式,很多人被Microsoft.NET的快速开发方式所满足,认为自己“学习成了”,不再深入研究,因此人才市场上充斥着很多只会拖控件、而不懂Microsoft.NET更深入一步技术的Microsoft.NET开发人员,比如很多ASPMicrosoft.NET的书上都是讲ASPMicrosoft.NET服务端控件,很多所谓“精通ASPMicrosoft.NET”的人连什么是Http、HTML、JAVAScript、Dom等基本概念都稀里糊涂,实际公司项目中很多功能点的实现不是简单的拖一个ASPMicrosoft.NET服务端控件就能搞定的,因此看似学习Microsoft.NET的人非常多,但是真正满足企业要求的人则比较少;而JAVA则入门门槛比较高,如果想要配置一个Hello World级别的学习环境就会涉及到很多技术,开发环境也要学习者自行配置,对于初学习者来说可能花费一周时间都无法配置一个最简单的环境出来,JAVA的开发环境也不像Microsoft.NET开发环境那么可用性强,JAVA和Microsoft.NET的区别就像Windows和Linux的区别,正因为JAVA学习门槛非常高,很多学习者被淘汰了下来,这样能够撑过一个个难关学习下来的开发人员都是水平比较高的人员。因此Microsoft.NET初级开发人员的工资平均是比JAVA初级开发人员的工资平均略低的。但是由于Microsoft.NET中高级人才非常缺乏,因此掌握Microsoft.NET深入技术的开发人员在企业内部是非常吃香的,招聘人员经常发出这样的感叹“招合适的JAVA工程师能招来一堆,招合适的Microsoft.NET工程师一个月都招不来几个”。

    Microsoft.NET入门快,在Microsoft.NET中微软为开发人员提供了一套最佳的技术架构搭配、集成的开发环境,用微软的技术架构开发出的系统就可以保证最好的效果,而不用像JAVA开发人员那样去学习很多开源框架再去学习搭建技术架构、开发环境,因此Microsoft.NET学习周期比JAVA短,有了语言基础后再进行集训式的就业班学习,那么Microsoft.NET学习者学习3个月可以进入就业,JAVA学习者需要5个月可以进入就业。

    微软的本地化推广工作做得非常好,因此学习Microsoft.NET有大量的中文资料可以参考,因此除非研究很高深的领域,否则中文资料基本能满足开发者的需求;而JAVA由于走的是高端路线,因此除了初学习者资料外,大部分JAVA资料都是英文的,学习JAVA需要参考很多英文资料。因此如果英文非常好的学习员学习JAVA就会很轻松,而英文不是很好的学习员学习Microsoft.NET会更好。

    综上,JAVA入门门槛比较高,需要有足够的毅力和百折不挠的精神,只要你能坚持下来你就可以将很多人在入门门槛上就将很多竞争者甩在身后。Microsoft.NET入门门槛比较低,装上VisualStudio就可以马上进行开发,不需要进行太多的配置、不需要学习太多基础知识,这样可以很轻松的掌握入门Microsoft.NET学习,是有很成就感的事情,能让你有兴趣进一步学习,但是你不能止步于此,因此你会发现身边也有无数的人也是“轻松入门”,你就需要继续深入学习,深入学习同样需要毅力和探索的精神,你要在这个阶段上把绝大部分竞争者甩在身后,小吹一把:我教的有个学习生面试回来说“在咱班里比我感觉我掌握的不是太好,但是和一起参加面试的北大某鸟的学习生比我简直就是高手”,呵呵。在我讲“Microsoft.NET入门简单”的时候,有学习生问“Microsoft.NET把问题都简化了岂不是Microsoft.NET程序员都不值钱了?”,我的回答是“微软简化的是重复性的东西和低级的东西,这样我们就能从这些低级的工作中脱身出来研究更深入的东西,因此Microsoft.NET把问题简化了只是使得那些只沉迷于简单的东西的人不值钱了,会使得研究深入的人更值钱”,这就是“Microsoft.NET入门容易,深入同样难”这句话的意思。有人会问“哪些知识属于深入的知识呢?”,比如你不仅要会用ADO.NET,还要研究ADO.NET架构中的设计模式,再比如你不仅要会拖拉ASP.NET控件,更要明白ASP.NET控件内部发生了什么。这里允许我做一个广告,如果你想从学习一开始就尽快脱离控件型开发人员的行列,你可以跟着视频教程《传智播客Microsoft.NET视频教程》学习,然后每天登陆博客园等高端Microsoft.NET社区,你会发现你进步是非常快的。

    可能因为我最近都是在讲Microsoft.NET的课程,对Microsoft.NET的描述中有或多或少的偏向,但是抛去个人因素考虑,我没有暗示JAVA好还是Microsoft.NET好,请根据自己的情况进行选择。而且Microsoft.NET和JAVA并不像360和QQ那样必须二者选其一,并不像很多初学习者认为的那样“学习一门语言就靠这门语言吃一辈子”,工作中很可能这个项目用JAVA,那个项目用Microsoft.NET,因此你可以喜欢某个语言,但是不要抱着一门语言不放,更不用担心“Sun被Oracle收购了,JAVA是不是完了?”、“我学习Microsoft.NET,如果微软没落了我是不是就失业了”之类的问题,不同语言只是不同的工具,换了一个新的工具可以很快的熟悉新的工具,大部分内容都是相通的,比如JAVA中的web开发很熟悉了,转而用ASPMicrosoft.NET也会发现大部分东西都是和JAVAWeb一样的,很快就能上手ASPMicrosoft.NET,难道你现在用的是诺基亚手机,你会害怕诺基亚倒台你就不会用手机了吗?“JAVA完了、微软死了”这类问题不是开发人员去关心的事情,而是华尔街那些金融大鳄去考虑的问题,咱们只管用技术去赚钱养家就是了。

    就服务端市场来讲,Java目前在技术先进性上有绝对优势。应用系统需要各个层面的框架(framework),Java都有大量已完成或正在进行的开源项目帮助开发人员更好地完成自己的任务。诸如struts/JSF类的框架,.net没有对应物,而且Java在扬弃的同时保持着相对的稳定。
       .net开发效率差不多是Java的三倍(经验数据),致命的诱惑。在Java放弃的客户端程序上,.net是老大,但在服务端,.net还是个小弟弟,有待成长。微软最初想要构建一个新的技术来回应J2EE,但发现一己之力还办不到。于是匆匆祭出com/com+,被绝大多数程序员评为“丑陋繁杂,迟早会被替换掉”。什么时候替换呢?这一替换对应用的影响有多大呢?微软的新操作系统对.net又会有多大影响?拭目以待。
       绕来绕去的意思是,我不觉得两个平台有截然的高下之分。在这个互动的世界上,不想被淘汰的竞争者始终保持警惕,努力学习对手的优点。Java的努力之一就是提供更易用的工具帮助开发人员快速轻松地开发Web应用程序。而.net的当务之急是改进架构,完善框架。
       还是那句话:没有最好的技术,只有对于具体项目来说最适用的技术。