没关系,我会永远给.net加油的
最近园子里很热闹,本来不打算说什么。但是看着很多似是而非的观点横飞,还有很多不明真相的群之被误导,实在是忍无可忍。
世界上没有完美的语言,.net浑身有一堆毛病,但是一个程序员应该懂得扬长避短。
我们探讨一个语言的缺点,不是要因此去枪毙他。一个语言能发展到成熟并为世人使用,一定有他存在的位置和意义。否则Lisp这种东西应该很早就灭亡了吧?用铅笔刀去灭哈迪斯?用倚天剑去砍柴?
本文主要和诺贝尔的文章进行探讨,希望不要让将错误的观点误导初级程序员。
我对诺贝尔文章中提出的.net的缺点总结如下:
-
安装.net4.0后还要装3.5甚至1.0/1.1,貌似不是向下兼容。结果一个OS上有多个.net版本并存
-
传统网络编程.net没优势,不过诺贝尔不确认,因为不搞很久了
-
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没优势,不过诺贝尔不确认,因为不搞很久了
用铅笔刀去灭哈迪斯?用倚天剑去砍柴?
从诺贝尔的文章中看不出他说的传统网络编程是那个级别的传统。如果是说直接控制Stock,TCP/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部署环境
出处:http://www.cnblogs.com/Chinese-xu/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
如有问题,可以通过 Chinese_Xu@126.com 联系我,非常感谢。