写给在Java和.net中徘徊的新手

在很多网站上,网友都会问一个相同的问题,到底是学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的当务之急是改进架构,完善框架。

  还是那句话:没有最好的技术,只有对于具体项目来说最适用的技术。

 

转载于:https://www.cnblogs.com/Jackey_Chen/archive/2009/07/19/1526750.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring BeanFactory概述

BeanFactory是Spring提供的两种容器类型之一,它是基础的IoC容器,并提供完整的IoC服务支持。如果没有指定,默认采用延迟初始化策略。只有当客户端对象需要访问容器中的某个受管对象的时候,才对该受管对象进行初始化以及依赖注入操作…

c语言数据结构将链串里所有值为x的字符删除_redis数据结构与对象到底长什么样?...

写在前面前方高能!前方高能!前方高能!文章较长,可能需要花费您两个小时的时间,请做好心理准备,但是一旦你准备看下去,我相信您一定会有收获,不枉此行,let’s go!!!一、简…

java中判断字段真实长度(中文2个字符,英文1个字符)的方法

public class Char_cn { public static void main(String[] args) { // TODO Auto-generated method stub String haha "我叫兜兜abcd"; int true_num String_length(haha); System.out.println("true" true_num); int false_num haha.length();…

多种电脑不识别移动硬盘的解决方法,电脑识别不了移动硬盘

一、不识别移动硬盘的问题 1、更换usb接口:有些usb接口是不能同时使用的(启用前置,后置的接口就有1--2个被屏蔽的),甚至是没有连接线。并检查USB接线是否正确。 2、将移动硬盘的2个usb接口都接上,因2.5寸40…

Java程序利用POJ读写Excel的.xls或.xlsx文件所需的3个jar包

Java程序利用POJ读写Excel文件时,不能只用poi的jar包,因为它还依赖于xmlbeans的jar包,xmlbeans又以来与common-collections的jar包,因此,正常使用POI,其实需要3个jar包。 当然可以通过配置Maven解决jar包之…

mysql主从技术_MySQL主从架构的实现

目录一主一从1.1 环境准备:1.2 准备步骤:1.3 实现步骤:1.3.1 配置master主服务器1.3.2 创建复制帐号1.3.3 查看主服务器状态1.3.4 配置slave从服务器1.3.5 启动从服务器复制线程1.3.6 查看从服务器状态1.3.7 测试1.4 扩展——实现一主多从1.4.1 需求分析…

Netbeans8下 Weblogic EJB案例

1:接口 Remote public interface XgmZzsNssb {} 2:实现 Stateless(mappedName"XgmZzsNssbImpl") Remote(XgmZzsNssb.class) public class XgmZzsNssbImpl implements XgmZzsNssb{} 3:客户端调用 public static void main(String[] …

Java编程中值得注意的对象引用现象

Java中的类根据赋值对象与被赋值对象是否共享对象的实际数据内存空间,分为值型类和引用型类。 Java中将一个对象赋值给另一个对象时,如果这个对象是值对象(所谓的值对象就是由值型类生成的对象),则这两个对象的实际数据…

提高ASP.net性能的十种方法

一、返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求。每次往返降低了你的应用程序的每秒能够响应请求的次数。通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,…

java mysql failover_mysqlfailover测试

mysqlfailover是mysql官方用python语言写的一款工具,包含在mysql utilities工具集中。主要作用是保障mysql高可用。他会定时检测节点状态,当master节点不可用时,会自动转移到从节点上,同时剩余的从节点都会指向转以后的节点。如何…

RGB/YUV/YCbCr--关于显示,颜色你需要了解的一些事

工作中常听说RGB/YUV/YCbCr 这样一些名词,概念上似乎很混淆?这里是一个简介,部分内容来自wiki,理解不对的地方欢迎指正。 A:首先两个基本概念: Color model和Color Space. 1. Color Model: 为了表达人眼观察…

C# winfrom listView

转自http://hi.baidu.com/gaoisbest/item/84034943d4d94195823ae12b 1.如何为listview手动添加第一列和第二列数据 for (int i 0; i < 10; i) { ListViewItem Item new ListViewItem(); Item.Text dt.Rows[i][1].ToString();//读取数据库中字段 Item.Tag dt.…

淘宝评价网----类反淘宝联盟上线

反淘宝联盟&#xff0c;淘宝该反吗&#xff1f; 淘宝该反对吗&#xff1f; 其实淘宝已经做的很好了 我们反对的只是商家的不诚信的行为&#xff0c;但是在淘宝上我们又得不到对商家的全面的全面了解&#xff0c;所以我们反了&#xff1b;反&#xff0c;只是途径&#xff0c;不是…

Python从键盘输入多行文本数据的方法

Python中的Input()函数在输入时&#xff0c;遇到回车符&#xff0c;那么一次输入就结束了。这不能满足输入多行文本并且行数也不确定的情形&#xff0c;当然输入空行也是允许的。 方法1&#xff1a;直接利用input()函数逐行读取数据&#xff0c;直到EOF。利用异常处理机制实现…

[教程指导]索尼官方4.0.3系统一键root方法! [复制链接]

[教程指导]索尼官方4.0.3系统一键root方法&#xff01; [复制链接] 青青子衿198976青青子衿198976注册时间2011-9-26最后登录2012-9-15在线时间730 小时阅读权限150积分3996帖子1173精华32UID13306151版主 在线时间730 小时经验1629 分贡献2693 点极币10442 极币最后登录2012-9…

creator图片循环显示_CocosCreator背景图循环播放

以前在玩小游戏的时候发现有的小游戏背景图一直再动&#xff0c;视觉效果挺好&#xff0c;给人一种炫炫的感觉&#xff0c;让我这写后台的码农很是羡慕和膜拜。没想到天意弄人&#xff0c;我也开始写游戏前端了刚接触CocosCreator,好多东西都不懂&#xff0c;整个懵逼状态&…

完全卸载oracle11g步骤

1、 开始&#xff0d;&#xff1e;设置&#xff0d;&#xff1e;控制面板&#xff0d;&#xff1e;管理工具&#xff0d;&#xff1e;服务 停止所有Oracle服务。2、 开始&#xff0d;&#xff1e;程序&#xff0d;&#xff1e;Oracle - OraHome81&#xff0d;&#xff1e;Oracl…

PyCharm安装开发游戏的Pygame

方式一&#xff1a;利用PyCharm导入Pygame包 通常情况下&#xff0c;Pygame可以通过Pycharm的单击菜单File-->Settings...&#xff0c;弹出Settings窗口&#xff0c;在左侧栏中选择Project ***&#xff08;此处***是你的当前项目名&#xff09;-->Project Interpreter&a…

Jsp-Servlet 概要总结[转]

Servlet三个要素: 1.必须继承自HttpServlet 2.必须实现doGet()或者doPost() 3.必须在web.xml中配置Servlet <servlet> <servlet-name> </servlet-name> <servlet-class> </servlet-class> </servlet><servlet-mapping> <servlet-…

php函数学习二

rename():修改文件的名字 addcslashes(&#xff09;&#xff1a;过滤用户提交的敏感字符&#xff0c;一般通过转义提高安全性 dechex():把十进制数据转化为十六进制数据 Abs: 取得绝对值。 Acos: 取得反余弦值。 ada_afetch: 取得资料库的传回列。 ada_autocommit: 开关自动更…