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

海天小阁

一个生于70年代的IT人,高不成低不就,与君共勉

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  65 随笔 :: 0 文章 :: 793 评论 :: 18 引用
 

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

世界上没有完美的语言,.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 on 2010-06-28 13:11 徐少侠 阅读(4141) 评论(50) 编辑 收藏

评论

#1楼 2010-06-28 13:20 五星      
第一个问题你好象理解错了. 人家的意思是 .net 1.1的程序在.net 4.0上跑不起来。即使装了.net 4.0,也还要装一个 1.1版。比JAVA好不了多少
 回复 引用 查看   

#2楼[楼主] 2010-06-28 13:24 徐少侠      
引用五星:第一个问题你好象理解错了. 人家的意思是 .net 1.1的程序在.net 4.0上跑不起来。即使装了.net 4.0,也还要装一个 1.1版。比JAVA好不了多少

因为.net4.0不是一个完整的.net框架
请仔细看我的全文
 回复 引用 查看   

写的不错 阵营感有点强

博客园现在和WOW里面大吵联盟和部落谁比较正义一样。

研究历史的人都会把两边的丑事挖出来,功过分明的列出来,正义不正义是不言自明的。

但对于联盟的圣光狂热 部落一定要有自己的立场才是,鲜血和荣耀啊。靠几个搞历史的是别不过圣光的大腿的



 回复 引用 查看   

#4楼[楼主] 2010-06-28 13:25 徐少侠      
Java里面,即使完全安装了jdk1.7。
我可以立刻给你个jar包,基于1.5的,你能不装1.5jre,不修改源代码重新编译就跑起来,我给你RMB1000。
 回复 引用 查看   

#5楼[楼主] 2010-06-28 13:27 徐少侠      
。net里面没有重复安装运行时的说法
而java一定有
 回复 引用 查看   

#6楼 2010-06-28 13:32 xiaotie      
@韦恩卑鄙 v-zhewg @waynebaby

部落是后妈养的,还是圣光NB些。
 回复 引用 查看   

#7楼 2010-06-28 13:32 五星      
@徐少侠
引用徐少侠:
引用五星:第一个问题你好象理解错了. 人家的意思是 .net 1.1的程序在.net 4.0上跑不起来。即使装了.net 4.0,也还要装一个 1.1版。比JAVA好不了多少

因为.net4.0不是一个完整的.net框架
请仔细看我的全文

.net4.0当然是一个完整的框架。只是和 1.1不太兼容
 回复 引用 查看   

#8楼[楼主] 2010-06-28 13:33 徐少侠      
@韦恩卑鄙 v-zhewg @waynebaby
是呀,搞得是有点PK的味道。
我觉得Java那边名气方面占便宜,而微软这里实质上的强大还没有到名至实归的地步。
毕竟顶着个垄断的帽子,好像干什么都是错的。呵呵
 回复 引用 查看   

#9楼 2010-06-28 13:35 阿不      
引用五星:
@徐少侠
引用徐少侠:
引用五星:第一个问题你好象理解错了. 人家的意思是 .net 1.1的程序在.net 4.0上跑不起来。即使装了.net 4.0,也还要装一个 1.1版。比JAVA好不了多少

因为.net4.0不是一个完整的.net框架
请仔细看我的全文

.net4.0当然是一个完整的框架。只是和 1.1不太兼容


只装.NET4.0,是无法跑.NET2.0的程序的
 回复 引用 查看   

引用五星:
@徐少侠
引用徐少侠:
引用五星:第一个问题你好象理解错了. 人家的意思是 .net 1.1的程序在.net 4.0上跑不起来。即使装了.net 4.0,也还要装一个 1.1版。比JAVA好不了多少

因为.net4.0不是一个完整的.net框架
请仔细看我的全文

.net4.0当然是一个完整的框架。只是和 1.1不太兼容

这个要赞同

所说的不完整框架应该仅仅是3.x吧。
 回复 引用 查看   

#11楼 2010-06-28 13:45 顾磊(kyo-yo)      
很有道理...
我觉得.NET已经做的很好了...
世界上没有什么十全十美的...
在合适的领域用合适的东西..
 回复 引用 查看   

#12楼 2010-06-28 13:50 施杨      
感觉这样相互揭短实在没什么意思,很多短处也是个别现象.

我倒是觉得,.net在web方面超大型应用不多,问题主要是出在server os上.而不是语言和平台上.个人感觉php很火靠的是linux+mysql+memcached的解决方案.有些大型系统往往考虑海量数据的延展性和并发能力.

至于jre的版本问题,我没感觉那么严重.起码我之前做得web系统整合了10个左右的java框架,部署的时候也只用了一个jre1.6.当然开发过程中确实暴露了一些版本的不兼容,不过切换版本一般就能解决.主要还是在人,不在这些工具.

如果非要用一些老的模块,这些模块里的一些方法被新的jre抛弃了,那也没办法.jre之所以大,就是因为他要向之前版本兼容,尽量不去删除过时的东西,只是建议你不要使用而已.这也就是为什么给java加一个特性这么麻烦的原因,就是考虑向前兼容.由于加入新特性,造成新问题的案例有很多.况且jre的版本也可以靠分布式或者模块化解决.解决方案不只有一台机子装多个jre.

至于java的未来,就要看IBM,Oracle,Google,Apache...了,不是程序员操心的事.
 回复 引用 查看   

#13楼 2010-06-28 13:53 Clingingboy      
写的不错,时间会见证一切
 回复 引用 查看   

#14楼 2010-06-28 13:55 轩辕法王      
+1,好文要顶
 回复 引用 查看   

#15楼 2010-06-28 14:21 Muse      
引用徐少侠:
引用五星:第一个问题你好象理解错了. 人家的意思是 .net 1.1的程序在.net 4.0上跑不起来。即使装了.net 4.0,也还要装一个 1.1版。比JAVA好不了多少

因为.net4.0不是一个完整的.net框架
请仔细看我的全文

.NET 1.0、1.1、2.0、4.0都是完整的,只有3.x是在2.0的基础上扩充的。
不过,如果装了4.0,3.5的程序通过配置是可以运行的,证据就是SQL Server 2008 R2要求3.5 SP1,但在仅安装.NET 4.0的机器上是可以运行的。
 回复 引用 查看   

#16楼 2010-06-28 14:49 doms lab      
第一个问题的确有点问题吧?我机器上安装的是 jre 1.6(即所谓的 java6),能好好地跑 java 1.4, java 1.5 的程序啊,有什么问题呢?
 回复 引用 查看   

#17楼 2010-06-28 14:58 轩辕法王      
引用doms lab:第一个问题的确有点问题吧?我机器上安装的是 jre 1.6(即所谓的 java6),能好好地跑 java 1.4, java 1.5 的程序啊,有什么问题呢?

hello world哪里都能运行
 回复 引用 查看   

#18楼 2010-06-28 15:10 找不到      
语言跟圣光 荣耀 啥关系???
 回复 引用 查看   

#19楼 2010-06-28 15:13 蓝色海洋      
引用轩辕法王:
引用doms lab:第一个问题的确有点问题吧?我机器上安装的是 jre 1.6(即所谓的 java6),能好好地跑 java 1.4, java 1.5 的程序啊,有什么问题呢?

hello world哪里都能运行

说得好!
“轩辕法王”这四个字在手机上也能跑!呵呵!
 回复 引用 查看   

#20楼 2010-06-28 15:25 Steven Chen      
引用五星:第一个问题你好象理解错了. 人家的意思是 .net 1.1的程序在.net 4.0上跑不起来。即使装了.net 4.0,也还要装一个 1.1版。比JAVA好不了多少


-----真的么?你确定,你真的在只安装了.net4.0上的机器上跑.net1.1的程序,但是没有跑起来?

我没有跑过,因为我没有.net1.1了,但是我有.net2.0的程序,跑起来没问题哦
 回复 引用 查看   

#21楼 2010-06-28 15:25 Steven Chen      
我看上面这群人都在理论,就没有一个人尝试一下在.net4.0下跑net2.0写的程序看看。
 回复 引用 查看   

#22楼 2010-06-28 15:32 kiler      
甚至,很多超大型的项目是绝不会轻易使用框架的。比如:用Hibernate去搞淘宝全站?

谁说淘宝不用框架,最多也就是查询商品不用就可以了嘛。
你看看人家的招聘http://qa.taobao.com/?page_id=110
spring Hibernate都用着呢,大型项目自己造轮子成本很高的,一旦造轮子的人离职了,项目就完蛋了,反倒是使用业界流行的框架更为保险。

支持.Net不代表一定要去刻意的掩盖.Net的缺点,.Net的缺点需要正视而不是逃避。
 回复 引用 查看   

#23楼 2010-06-28 15:36 蓝色海洋      
中国有句成语叫“坐井观天”。如果把这个用在“老赵们”的身上,我觉得是极不恰当的,因为他们还不至于这么的狭隘;但要是说他们是“画地为牢”,那就比较合适了...

我很是奇怪,为什么不能听听不同的意见?我们谁也不能保证自己的观点就是至高无上的真理。如果说话前总是考虑是否会误导别人,那人还怎么说话?就是同自己的孩子讲话,你就不怕误导吗?
 回复 引用 查看   

#24楼 2010-06-28 15:42 未完待絮      
存在即合理~
 回复 引用 查看   

#25楼 2010-06-28 16:07 Hanf      
争的实在没有意思,就像楼上说的一样,存在即合理。做好自己的.net就行了,性能好不好也不是争论几下就能解决的事情。要是看不顺.net,就去搞c++,java,php... 实在不行,自己开发一种牛B的语言。
呵呵。2个多星期 没上来了,一上来就看到N多关于性能什么什么的争论博文,实在是看的不舒服.每种语言有自己的优缺点,自己可以去了解不同语言的优缺点,但是拿出来抨击某个语言就没意思了
 回复 引用 查看   

#26楼 2010-06-28 17:08 Rioyang      
思想都是一样的,悟透彻了,我想一个做.NET和JAVA双修的人照样很轻松
 回复 引用 查看   

#27楼 2010-06-28 17:43 str.chan      
.... 为毛大家争的很爽的样子? 说的难听点就是一些人骨子里对事对人必定要有个尊卑优劣等级划分的劣根性使然,总想标榜自己选择的才是熊掌,而你选择的就是咸鱼。。。 存在就是道理,有毛的争头么
 回复 引用 查看   

#28楼 2010-06-28 18:49 CleverKing      
语言不是最重要的,money才是最重要的,谁能让我赚到money,我就用谁,这才是正理。
 回复 引用 查看   

#29楼 2010-06-28 19:09 chenkai      
最近这样文章很多.
我觉得这样争来争去 有意义吗?
还是重复一个古老都令人有点"作呕"的话题. ....... 还是新瓶装旧酒....
 回复 引用 查看   

#30楼 2010-06-28 19:48 eEhdsa      
@阿不
为什么我的机器只装4.0可以跑2.0的程序......
 回复 引用 查看   

#31楼 2010-06-28 20:41 assiwe      
编程语言的主流是java和C。C#连C++一半的市场占有率都不到,和python一个水平。别说王者,连宰相的级别都不到。

java6的安装包66MB,只有.net3.5(或者按某些偏执狂的说法,2.0+sp1)的1/3.至于兼容性,大部分低版本Java都能用高版本jre跑,估计反而是.net更差。

Java难学……能说出这话智商得低于60。

 回复 引用 查看   

#32楼 2010-06-28 21:24 Alex He      
不错
 回复 引用 查看   

#33楼 2010-06-28 21:24 宇宙达达      
注意 是NET 4 不是 Net 4.0 不要 自作聪明的加上 .0
 回复 引用 查看   

#34楼 2010-06-28 21:37 生鱼片      
很多其实真的是见识少,才说这个不能用在大项目,那个不能用在什么,今天还见到了电信用Silverlight来做的他们整个虚拟化的管理平台。
 回复 引用 查看   

#35楼 2010-06-28 23:49 JavaCS      
@徐少侠
Java 到目前还没有正式发布 1.7 ,当然不能是完整版了。

你安装一个 JDK 6 Update 20 试试,绝对能运行以前任何的 Java 程序,包括老的 MS java 的程序。

Java 是兼容性做得最好的系统的。当然这也导致安装包越来越大了。
 回复 引用 查看   

#36楼 2010-06-29 07:21 Simcoder      
JAVA部署 相对于我们 容易 但是我听过一些其他 因为他们不够专业 普遍反映 很难
 回复 引用 查看   

#37楼[楼主] 2010-06-29 08:06 徐少侠      
引用JavaCS:
@徐少侠
Java 到目前还没有正式发布 1.7 ,当然不能是完整版了。

你安装一个 JDK 6 Update 20 试试,绝对能运行以前任何的 Java 程序,包括老的 MS java 的程序。

Java 是兼容性做得最好的系统的。当然这也导致安装包越来越大了。

呵呵
仔细看看java的API
有关键字的变化
有方法名的变化

如果在旧程序中用了这些东西,你还能跑?
当然,我没装过
我的上述论断都是0.5-1年前测试过的
今天我再去搞搞
 回复 引用 查看   

#38楼[楼主] 2010-06-29 08:16 徐少侠      
引用assiwe:
编程语言的主流是java和C。C#连C++一半的市场占有率都不到,和python一个水平。别说王者,连宰相的级别都不到。

java6的安装包66MB,只有.net3.5(或者按某些偏执狂的说法,2.0+sp1)的1/3.至于兼容性,大部分低版本Java都能用高版本jre跑,估计反而是.net更差。

Java难学……能说出这话智商得低于60。



市场占有率只代表过去
C的长期使用,导致了他的占有率依然高
但是未来是有现在的新系统使用率决定的

java6的包的确很小,不过.net framework是把很多东西都放进去了
比如3.5里面就有linq,4.0里面有EF
因此,要比较的话,请把hibernet放进去,把mvc放进去,把很多开源项目都放进去,然后再和.net framework来比较

java难学,这是很多java初学者的定义
难道兄台觉得你们java那里很多初学者的智商都没有60?
我从来不低估我的后辈们的智商

.net 这里,大概30分钟可以搞一个ASP.net 的基于数据库访问的页面出来
从无到有安装环境,到运行程序。当然,他只学会机械的步骤,绝不是理论

java那里弄一个最不上眼的,不直接在html里面写代码的jsp的类似东西要多久呢?
从一个从来没接触过的人开始教会他能独立重复操作一遍?

其实java世界里不是没好东西,而是太贵了
世界上最好的IDE不一定是VS
我见过Java的一套天价收费的开发环境
用起来不必Visual studio复杂,并且也能拖放
可视化设计
呵呵
就是要钱,因此社区里玩不起





 回复 引用 查看   

#39楼 2010-06-29 09:01 阿不      
引用eEhdsa:
@阿不
为什么我的机器只装4.0可以跑2.0的程序......

你检查一下你的系统中有没有已经预装好2.0的框架?我们是在WindowsXP中,装4.0,无法运行2.0的程序,还需要再安装2.0。
 回复 引用 查看   

#40楼 2010-06-29 10:02 鞠强      
2.0在4.0上面跑,两种办法:
1、recompile source code
2、add SupportRunTime in app.config
 回复 引用 查看   

#41楼 2010-06-29 12:04 loveu0508      
现在银行的大部分后台还是从cobol吗??
 回复 引用 查看   

#42楼[楼主] 2010-06-29 13:00 徐少侠      
引用loveu0508:现在银行的大部分后台还是从cobol吗??

有的是,不是大部分
 回复 引用 查看   

#43楼 2010-06-29 17:24 vieri122      
楼主的第一点 点评的很垃圾。
你搞清楚状况在来点评吧。
 回复 引用 查看   

#44楼 2010-06-29 20:11 Alex He      
加油
 回复 引用 查看   

#45楼 2010-06-30 10:31 烈火★寒冰      
先学精一门,其他日后再说
 回复 引用 查看   

#46楼 2010-06-30 16:54 Muse      
引用宇宙达达:注意 是NET 4 不是 Net 4.0 不要 自作聪明的加上 .0

挑刺呀?
那么请问:有"NET 4"这个东西?

1.以前都是1.0、1.1、2.0、3.0、3.5,到4了,习惯的叫4.0本来无可厚非,何况它本来就是4.0。
2.如果要准确的说,应该是“.NET Framework 4”,你连".Net"都能写成"NET",难道这个"."是可以省略的吗?
 回复 引用 查看   

#47楼 2010-07-09 16:06 微软的小鱼      
我爱.NET 楼主的文章一个字 彩!!!
 回复 引用 查看   

#48楼 2010-10-20 09:31 watson      
不错
 回复 引用 查看   

#49楼 2011-01-14 17:23 时间跟我跑      
搞编程的还不是打工,有必要叫来叫去的吗
 回复 引用 查看   

#50楼 2011-03-09 09:17 好坏      
拜读您的大作来啦
 回复 引用 查看