在很多网站上,网友都会问一个相同的问题,到底是学Java还是.net,个有个的见解。
  自从.Net问世以来,程序员都很关心的一个问题是「该学Java或.NET」。我也在挣扎,该「该继续Java的研究,或者该开始准备培养.NET的知识」。
  最好是能两者兼顾,但是每个人的时间都很有限,想要兼顾两者,其实不太容易。投入在.NET的时间越多,所能花费在Java的时间自然就少了,反之亦然。在信息爆炸的时代,重要的不是信息的取得,而是信息的抉择。信息太多,时间太少,如果不能慎选适合的技术,只会平白浪费许多时间,斫丧自己的竞争力。
  一 开发效率方面:
  对我们来说选择开发工具的最需要衡量的就是这一因素:
  表现层开发:J2EE这方面非常欠缺,把这一任务丢给了应用服务器厂商和编程人员,不象.Net拥有很牛的.Net Studio,不过Jbuilder 6已经出来了,支持EJB2.0 也不算太落后,但一直没有解决方案的就是页面用户控件(当然Turbine的Action Event也算一种),缺乏可视化设计和Servlet应用程序框架生成。我期望的一种方式是具有象.Net Studio一样的可以所见即所得的编辑模板(Template),绑定用户按钮事件处理。目前可以通过javascript库,模板库及宏库略微缓解一下Servlet的开发。ASP .Net和Servlet都支持动态更新表现层。
  二 XML支持能力:
  .Net一直叫嚣的就是我集成了XML和Web Service,但JDK1.4也搞出了XML规范,这方面已经差不多了,不过.Net的易用性好得很,而且就此一家,程序员不必费心思选组件或产品。
  在采用XML和XSLT的开发模式中:微软的SQL Server 2000直接提供了HTTP Query到XML数据的功能,不过我用dbxml也能做得这一点嘛,还适用于大多数的主流RDBMS,更牛!这种开发模式应该是未来的方向。
  三 理解的两者本质
  Java是绑定于一种语言的跨系统的平台,是一个有多家供应商提供竞争性产品的规范。
  .net是绑定于一种系统的多语言平台,是一个规范性较弱的垄断性产品。
  一个是规范一个是产品,本来就不同。于是.net的发言人说,规范和产品没得比,要比就比具体产品。但,Java天生是规范,这不是Java的错,.net生来是迎战Java的,孤军奋战是他的命。
  随便问一个稍有头脑的Java程序员,Java最大的好处是什么,他会毫不犹豫地告诉你:“简洁”。Java为Internet而生,也为自己“简单易用并提高生产效率”的理念而活。
  Java讨人喜欢,因为他把家底亮出来,鼓励大家发挥聪明才智帮他进步。那么多开源项目,都在竞争中求发展,对Java的发展贡献巨大。 Java作为规范,吸收成果不计出身,善于否定自己、自我扬弃的优点有目共睹。EJB3.0就是一例,EJB是Java 2企业版(即J2EE)的杀手锏,在企业级应用中广受推崇,占据大型企业应用的高端市场。但EJB2.x也因其不易开发、部署受到批评。新近通过的EJB 3.0几乎是对EJB2.x的全盘否定,丢弃了重量级的EJB2.x,引入轻量级开源项目Hibernate的设计理念,公布不久就获得多方支持。为了理想,Java不惜付出代价,要不然哪有Highway帖子里.net设计师的评价:“Java发展到现在,还能相对那么紧凑精干,不容易!”
  .net不同,出生于老牌商人世家,什么理念啦,原则啦,对商人来说不重要。重要的是要保住市场,抢占市场。
  他的主人以操作系统雄霸桌面电脑,曾经对互联网不屑一顾。当终于发现自己犯了原则错误,不得不迎头赶上时,.net应运而生。.net世交多,要尽量保持亲戚关系,还要让亲戚的支持者原windows平台开发人员保住饭碗,象EJB3.0那种过河拆桥痛下杀手的事情还没干过。新功能要加,历史物件也要留。但他和自家亲戚关系紧密,外人从亲戚家拐个弯就到他家,自在,没有陌生感,也没有路费。人留住了,市场就留住了。至于跨平台,有违家族利益,不符合祖训,所以理论上的跨平台,他不打算认真对待。但中小企业应用的市场,他占住了。
  于是呢,Java阵营继续为理想而战,.net阵营继续为市场而战,各得所需,都忙得不亦乐乎。  
  四 站在用户的立场上
  虽然Java和.net奋斗的目标不同,但是都是B/S结构软件市场的生力军。
  Java对大中小型系统都适用,只要搭配不同的操作系统、应用服务器等等,大到银行综合信息系统、全国全省的统一应用系统,小到手机游戏,Java可以大小通吃,来者不拒。尤其是中国政府的重要系统,全没有.net的份,为啥?你不给我看家底,我怎么知道你有没有留了后门,改天偷偷溜进我家?
  .net照顾中小型应用毫无问题,而且开发速度快,作为用户,付了钱很快能看到回报,当然欢喜。大型应用么,.net是不是真的支撑不了,我不知道,但诸如windows不稳定不安全的评论由来已久,.net建构于这些亲戚的基础上,坏事就脱不了干系。
  系统交货早,功能实现,运行稳定,安全性不出纰漏,用户就满意。
  跨不跨操作系统,这个考量不重要,哪有没事整天换操作系统的用户?
  五 站在开发商的立场上
  Java还是.net?继续头疼。
  跨平台对开发商是一个巨大的诱惑。一次开发,多个平台使用,降低了迁移成本,有利。但Java的开发工具没有.net顺手,对编码人员的要求比.net要高。
  .net培训成本低,上手快。尤其如果开发人员以前都是做windows开发的话,转型成本低得让老板眉开眼笑。
  最重要的决定力量是市场。开发商所定位的市场用户的需求和开发上在技术上的历史积累,决定了开发商最终的策略。
  六 站在从业人员的立场上
  从业人员被市场所驱动,反过来也引导市场。
  Java起手的过程比较漫长。Java开发者要做很多DIY工作,才能写出第一个像样的程序。DIY多了,对于从业的基础素质,必有提高。
  .net入门快,windows最大的好处“可视化”在.net延续,集成环境好,单步调试强,这是Java团队中下至程序员上达项目经理历来羡慕的地方。做惯了windows和.net下的开发,难免觉得Java下的开发调试实在比较原始:代码大多要一行一行写,单步调试很多时候不可能。
  但Java人员的付出也有回报。我还记得当年Pascal编程课和Unix操作系统带给我的思维冲击,那门编程课应该更准确地说成“结构化编程 ――pascal”。Pascal强调的结构化编程带来了非结构化语言如Fortran之流无法比拟的美和乐趣,Unix崇尚的“小即是美”、“没有消息就是好消息”深入我心。在软件开发这一生产过程中,除了得到维持生计所需的报酬,同时能得到美的享受和满足的心情,实为天赐。Java从业者乐于谈论 Java的美,这一点上比.net有福。
  结束语
  就服务端市场来讲,Java目前在技术先进性上有绝对优势。应用系统需要各个层面的框架(framework),Java都有大量已完成或正在进行的开源项目帮助开发人员更好地完成自己的任务。诸如struts/JSF类的框架,.net没有对应物,而且Java在扬弃的同时保持着相对的稳定。
  .net开发效率差不多是Java的三倍(经验数据),致命的诱惑。在Java放弃的客户端程序上,.net是老大,但在服务端,.net还是个小弟弟,有待成长。微软最初想要构建一个新的技术来回应J2EE,但发现一己之力还办不到。于是匆匆祭出com/com+,被绝大多数程序员评为“丑陋繁杂,迟早会被替换掉”。什么时候替换呢?这一替换对应用的影响有多大呢?微软的新操作系统对.net又会有多大影响?拭目以待。
  绕来绕去的意思是,我不觉得两个平台有截然的高下之分。在这个互动的世界上,不想被淘汰的竞争者始终保持警惕,努力学习对手的优点。Java的努力之一就是提供更易用的工具帮助开发人员快速轻松地开发Web应用程序。而.net的当务之急是改进架构,完善框架。
  还是那句话:没有最好的技术,只有对于具体项目来说最适用的技术。

写给在Java和.net中徘徊的新手的更多相关文章

  1. 关于Java的jdbc中 DriverManager.registerDriver(driver); //注册驱动 有没有必要写的思考

    加载数据库驱动的时候,有如下部分代码: /1) 注册驱动程序 //给java.sql.Driver接口的引用赋值 com.mysql.jdbc.Driver 实现类对象// Driver driver ...

  2. Java演示设计模式中的写代码的代码

    下边代码内容是关于Java演示设计模式中的单件模式的代码,应该是对小伙伴们有所用处. public class SimpleSingleton { private static SimpleSingl ...

  3. Java和C#中的自定义元数据

    Java的annotation和C#的Attribute,可用来为语言增加语义,定义元数据. 转自:http://rednaxelafx.iteye.com/blog/464889 http://bl ...

  4. JAVA WEB项目中各种路径的获取

    JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在s ...

  5. 揭开Java IO流中的flush()的神秘面纱

    大家在使用Java IO流中OutputStream.PrintWriter --时,会经常用到它的flush()方法. 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存. ...

  6. JAVA安装过程中出现的“javac不是内部或外部指令”的解决方法

    近来重新安装了JAVA,安装过程中出现问题,网上找到解决办法,汇总发布. 解决流程: 1.确定自己的环境变量设置没问题,没有出现遗漏 : . 等情况 (具体环境变量设置百度) 2.环境变量设置后 ,d ...

  7. 分享:写了一个 java 调用 C语言 开发的动态库的范例

    分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h   代码#pragma once#ifdef __cplusplusextern "C" {#e ...

  8. [转]java去除List中重复的元素

    java去除List中重复的元素 如果用Set ,倘若list里边的元素不是基本数据类型而是对象, 那么请覆写Object的boolean   equals(Object   obj)   和int  ...

  9. java.io包中的字节流—— FilterInputStream和FilterOutputStream

    接着上篇文章,本篇继续说java.io包中的字节流.按照前篇文章所说,java.io包中的字节流中的类关系有用到GoF<设计模式>中的装饰者模式,而这正体现在FilterInputStre ...

随机推荐

  1. Ubuntu 16.04 使用docker资料汇总与应用docker安装caffe并使用Classifier(ros kinetic+usb_cam+caffe)

    Docker是开源的应用容器引擎.若想简单了解一下,可以参考百度百科词条Docker.好像只支持64位系统. Docker官网:https://www.docker.com/ Docker - 从入门 ...

  2. SQLServer 查看备份进度

    SELECT   DB_NAME(er.[database_id]) [DatabaseName],  er.[command] AS [CommandType],  er.[percent_comp ...

  3. R语言学习笔记:使用reshape2包实现整合与重构

    R语言中提供了许多用来整合和重塑数据的强大方法. 整合 aggregate 重塑 reshape 在整合数据时,往往将多组观测值替换为根据这些观测计算的描述统计量. 在重塑数据时,则会通过修改数据的结 ...

  4. 能ping但是无法上网

    管理员权限,执行以下这个命令就好了. netsh winsock reset 配置问题,重置windows socket.

  5. 20165203 2017-2018-2 《Java程序设计》课程总结

    20165203 2017-2018-2 <Java程序设计>课程总结 一.每周作业及实验报告链接汇总 我期望的师生关系(预备作业一):浅谈一下对师生关系的看法和对自己未来学习和生活的期望 ...

  6. C语言-删除注释

    C语言中的注释,不嵌套,一律使用/*   */的形式.不过双引号中的/*  */则不能算是注释. 以下是正确的代码 /* * ===================================== ...

  7. 在MVC中如何使用vs2013编译调试razor cshtml

    打开mvc项目的csproj文件: <MvcBuildViews>false</MvcBuildViews> 改为 <MvcBuildViews>true</ ...

  8. android拾遗——Android 动画学习笔记

    3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中又引入了一个新的动画系统:property animation,这三 ...

  9. 自定义Adapter为什么会重复多轮调用getView?——原来是ListView.onMeasure在作祟

    相信很多人在使用自定义Adapter的时候都遇到这样的问题: 假设Adapter数据源中只有30个Item,理论上每显示一个新的Item的时候就会调用一次getView,均显示一次的话是要调用getV ...

  10. 2588: Count on a tree

    敢问和zwt的树有何区别..改了读入直接交..四百个人A,三百多个PE..于是果断贡献几发PE.. http://ideone.com/9XCg3D