Free Hit Counters
http://www.dellasdeals.com

没关系,我会永远给.net加油的

 

最近园子里很热闹,本来不打算说什么。但是看着很多似是而非的观点横飞,还有很多不明真相的群之被误导,实在是忍无可忍。

世界上没有完美的语言,.net浑身有一堆毛病,但是一个程序员应该懂得扬长避短。

我们探讨一个语言的缺点,不是要因此去枪毙他。一个语言能发展到成熟并为世人使用,一定有他存在的位置和意义。否则Lisp这种东西应该很早就灭亡了吧?用铅笔刀去灭哈迪斯?用倚天剑去砍柴?

本文主要和诺贝尔的文章进行探讨,希望不要让将错误的观点误导初级程序员。

对不起,我也是来给.Net泼冷水的(山寨版)

 

我对诺贝尔文章中提出的.net的缺点总结如下:

  1. 安装.net4.0后还要装3.5甚至1.0/1.1,貌似不是向下兼容。结果一个OS上有多个.net版本并存
  2. 传统网络编程.net没优势,不过诺贝尔不确认,因为不搞很久了
  3. Java社区有很多框架,架构,几乎是入门必修,而.net社区则只有.net自身框架

 

逐条注释给不明真相的群众参考

1、 安装.net4.0后还要装3.5甚至1.0/1.1,一个OS上有多个.net版本并存

注意!这个是.net比java好的一个极大的优势

 

Java的jdk或者jre现在有多大?和jre1.1比大了多少?如果Java能够千秋万载的话,20年后jre会有多大?

Java的部署机制是一次完全部署,当然,我不很清楚是否能把jre分成更小的模块进行部署。就我认识的几个Java“玩家”的抱怨中,他们是很羡慕.net框架的安装方式的。

当你获得了一个基于jdk1.3开发的jar包,你必须在OS中安装1.3兼容的jre,否则很可能只能自己亲自到“彻底开源”的java代码中一行一行以硬编码方式去修改源码。

因为,java根本不是向下兼容的,而是jre兼容。

高版本中的一些方法,在低版本中是没有的,低版本中的方法会在高版本中被移除。

除了在一台服务器上安装多个版本的jre环境,否则上述困境无解

 

再结合java里面那么多的开源框架,而每个框架都可能是基于不同的jre。也就是说,有时候仅仅为了部署一个应用,就要同时多个jre。

 

并且,jre的安装我不知道如何进一步分拆。也就是说,可能我主要基于jre1.7跑应用

但是可能我用的spring版本仅支持1.5,因此我要另外装个1.5来跑spring。

此时,1.7和1.5的jre都是完全安装版吧?如果有java高人知道如何仅部分安装jre,请告知我。

 

 

反观.net呢?答案自在人心。

.net framework是一个增长框架,一个进化框架。即使在一个OS上从1.1到4.0都装上,也就是仅仅安装了.net 一遍,其中没有多少是重复的安装。

如果你的应用只要用到全部2.0以及部分3.5的功能,那么完全可以裁减一个更小的环境,连GAC都可以进一步简化掉一点不用的部分。

 

所以,增长式的部署是微软.net 框架比Java更好的一个特征。

Java现有的历史应用程序,例如Spring、Hibernet等,一旦没有开发团队进行版本更新,则未来一定会出现一个为java应用部署多个jre版本的囧状。当然,java社区不会让这种情况出现的。

 

 

2、 传统网络编程.net没优势,不过诺贝尔不确认,因为不搞很久了

用铅笔刀去灭哈迪斯?用倚天剑去砍柴?

 

从诺贝尔的文章中看不出他说的传统网络编程是那个级别的传统。如果是说直接控制StockTCP/IP的话,那么写一个用于承受大流量、大并发压力的服务端,用.net类库来搞的确不合适。不过,难道用Java就有优势了?比汇编还牛?

 

我们可以努力压榨C#.net的性能,不过不能奢望他能做所有的事,还要能干得世界第一。

 

 

3、 Java社区有很多框架,架构,几乎是入门必修,而.net社区则只有.net自身框架

诺贝尔阐述这个观点的文字里面,出现了“java就是给代码民工设计的”这个话

 

我来解释一下我对这个话的理解:

Java难学,难入门。这个多数人都认同。

原因在于,java世界里面有太多的框架。一个初级程序员如果不会用这些框架,找饭碗都难,看看招聘广告就了解了。

所以,我们可以看到大量这样的Java程序员:

满嘴跑框架,能熟练应用主流框架完成任务。除此以外?没了

 

他们真的理解这些框架的好处吗?能灵活运用这些框架吗?多数是不会的。

只会按照固定的方式配置服务器和框架

然后按照固定的方式在项目中使用框架

 

看看工地上的民工吧:

那些造金茂大厦的,造鸟巢的民工

他们会告诉你造房子时候很多专业术语

他们能熟练得按照总设计师和监工的要求完成施工任务

他们只会按固定的方式去使用各种施工设备和施工步骤

 

他们能理解设计师的设计思想吗?能知道各种施工步骤的深入含义吗?

能合理创造新的设计图纸、施工方法、施工设备吗?

 

所以,这种Java程序员和民工有多大区别呢?

 

由于要成为一个合格的Java“民工”必须会使用所谓的框架,因此Java社区那里就从入门开始搞这个。其中多数人永远沦为“民工”,而少数人从这个起点开始,逐渐深入了解,学习,最终成为新一代的设计师。

 

.net社区,要成为一个合格的.net“民工”必须要了解.net框架,因此,很正常的这里不会着急学习那么多企业级框架。多数.net“民工”同样永远是民工,同样有少数人会逐渐成长为新一代的设计师。

同时,微软自身的框架也已经足够不小的范围内使用了。

甚至,很多超大型的项目是绝不会轻易使用框架的。比如:用Hibernet去搞淘宝全站?

 

因此。两个社区的表面区别并不代表本质的不同。如果要谈论企业级框架,.net里面也是层出不穷的,只是,大家的层次不同,讨论的也就不同了。

 

不多说了

最后的总结也是我的一个比较激进的观点,不希望大家来评论

 

Java的未来就是成为C++。

不是说他有那么牛,而是,从一个主流语言退缩成固守固定市场的一种语言。

因为java能做的,没有什么是.net不能做的,或者未来不能做的

 

历史上,没有C以前,很多语言都是百家争鸣的

有了C后,也不是全都死掉,大家都会找到一个合适的角落里颐养天年

 

没有C++以前,对象语言也是很多的,后来就同样沉寂了。

 

由于C++的学习曲线可怕,给微软一个机会,VB横空出世,成功在中小规模软件快速开发领域把C++挤走,成为主流语言

 

Java的爆发,在与网络时代的跨平台需求,大IT商的策略,用一个本质上至今没有解决的彻底跨平台口号,征服和忽悠了全世界。

 

Java和.net的未来胜负,不取决于现在有多少主流应用是用谁跑的。而是有多少新应用是用谁做的。。

 

有家世界级银行部分的后台程序至今仍然是用Cobol写的。现在诸多的Java企业级应用会在未来提供市场很多Java程序员岗位。但是就Java的一些缺点来看,他在不向下兼容性上还会进一步加剧。

 

这是一个双王者的时代,两个主流开发语言并存的时代。10多年前是没有的,希望10多年后也早日结束

考虑到IT领域和全世界对微软的偏见,一个刚刚从2002年正式起步,起步时已经落后对手至少2年推广时间的语言,他目前所获得的成就至少不能用失败两字来总结。

而身为拥有Sun这种技术大牛公司、IBM这种神一样的企业、全世界最广泛的狂热开源社区的智力支持、宗教一般自由精神的标榜仿佛拥有道德至高点般的地位。Java如今的成就也似乎不能用彻底成功来形容。

 

弯道超车依然进行时……

 

身为C#er,.NETer,我们不用担心性能和部署的问题,

而是要努力学会如何将现有.net框架发挥到极致,用自身优点去PK人家的缺点,同时懂得如何去弥补缺点。

 

身为.net的拥护者,我们要做的不是去着急抢什么大单子。

很多政府项目的行为往往不光从技术有利性上去考虑。

而是努力普及.net的知识,努力让中小企业能早日在信息化中受益。

让中小业主能实实在在得体会到信息化的收益。

从源头开始控制IT部署环境

posted @ 2010-06-28 13:11  徐少侠  阅读(4817)  评论(50编辑  收藏  举报
作者:徐少侠 出处:http://www.cnblogs.com/Chinese-xu/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过 Chinese_Xu@126.com 联系我,非常感谢。