详细说说为啥我不喜欢Java“语言”{讨论}{技术}{Java}

270 views
Skip to first unread message

Jeffrey Zhao

unread,
Apr 18, 2009, 4:55:46 PM4/18/09
to pon...@googlegroups.com
写了一篇容易引起吵架的文章,不过还是希望也能和TL的弟兄们一起讨论一下这个问题,喜欢Java的兄弟们多多包涵。(代码上有点小,您可以查看原文)
 
事理越辩越明,那么就来详细说说为啥老赵不喜欢Java*语言*
 
 

  最近老赵对Java语言唱衰似乎凶狠了一点,让有些朋友不是很爽,认为我不负责任凭个人感觉乱说话,影响不好。这讨论事情事小,否认我做事方式就不好了。因此老赵这里也继续整理一下我对Java语言的观点,这样大家不必四处查看老赵的说辞,再者也可以控制一下讨论事情的方式,以免大家舞蹈半天尘土飞扬最后停下一看——得,双方在自说自话,这怎能辩明事理,您说呢?

  在这里,老赵借用一下郑晖同学(再此强烈推荐一下他的《冒号课堂》系列,如此好文不该受到如此冷落)在《高阶函数、委托与匿名方法》中留下的评论,这可能也是目前为止最具体最集中的质疑了。老赵很喜欢,因为可以一条一条的应对,思路清晰。

质疑:Java固步自封?Java语言从1.0到即将的7.0,每次都有新的语法特征加入。C#作为后辈,起点高,对函数式、动态类型等的支持是Java所没有的,但不代表Java今后就不支持。

回应:首先,“Java语言从1.0到7.0,每次都有新语法加入”,就能代表它“不固步自封”了吗?固步自封,是说它改进不大,不顺应“历史潮流”。C#的很多特性Java没有,但不代表Java今后不支持——是啊,的确“能力”是肯定有的,但是有能力而不去做,难道这不是“固步自封”的最好证明?Java 7已经再一次把业界早已强烈要求的闭包特性排除在门外了,只是增加了一些例如“[]式下标”或“使用->而不是get/set访问属性”这样的简单语法糖,看看每次C#改进的力度,具有可比性吗?

质疑:此外,Java的小兄弟Groovy也是动态语言,与Java很容易集成。其他的如JRuby、Jython与Java的集成也不难。

回应:JVM上实现的Groovy、Ruby、Python语言实现,不是我想讨论的内容。我说的是Java语言,由语言的规约来确定。我说Java生产力低下,其实只是说Java这门语言在设计上特性缺失过于严重,而不评论所谓JVM的能力。而JVM上可以实现Groovy等高生产力语言,更是证明了JVM的能力是足够的,而Java有那么好的平台基础,却不愿意发展,这也是我说的“固步自封”的原因之一。

质疑:要知道,Java有更多的历史包袱,动辄在语法上作大改动,会牵连到大批用户。这是成熟和流行的代价。

回应:老赵想说的是,“改进语言”并不代表如Rails 2之于Rails 1.2,Python 3之于Python 2.5那样的“破坏性”改变。改进语言只要保持向前兼容,还会有什么问题吗?难道C#1.0到3.0的过程中破坏了以前的程序吗?很明显,C# 1.0中的所有语法到3.0还可以用,而.NET Fx 1.0编写出的应用程序在3.5上也基本能用。这不就是很好的证明吗?这样的升级无论是语言(包括语法和IL/Binary Code级别的指令)、框架/类库、亦或是平台都不会造成问题,为什么在Java上面就成为无法升级的理由了呢?Java为.NET证明了统一托管平台的成功,由此诞生了.NET,而.NET为Java证明了那么多有生产力的高级语法,社区也吵吵嚷嚷多年——Java又在做什么呢?

质疑:想想c++吧,十年还没有出一个新标准呢。另外,微软一直不肯提供C#在Windows平台之外的支持,算不算固步自封呢?

回应:最后说C++,十年还没有出一个新标准——我不知道,我不关心别人为什么做的不好,我不关心别人的缺点为什么就能成为我不向前看的理由。我不提C++的另一个原因,是因为我对它的了解程度还不够,说了怕别人笑话。还有说微软一直不让C#在Windows以外平台上支持,这是固步自封吗?这是微软的一贯策略而已,当然这个策略我也不会认为是好事,但是谁能告诉我为什么这就叫“固步自封”?难道没有看到mono已经越来越引人注目了吗?微软在这方面的确“封闭”,但可没有“固步自封”。

质疑:Java开发效率虽然比Ruby、Python低,但有丰富的类库、框架和开发工具,更何况Java语言更加严谨,程序员的风格较为一致,减少了许多可能的犯错机会。综合起来,其效率真的会比C#低吗?

回应:某个语言“功能强大”,便说它“混乱”,自己“能力不足”便说是“严谨”。说实话,我认为这是一个很可笑的理由——不过也不是第一次见到这样的说法。从Ruby流行开始就有这种说法了,每次我都看得无可奈何,一笑了之。记得之前哪位朋友在园子里说过类似的话:“人们都希望事物发展,但是一旦事物发展让自己感到难以控制,就会引起恐慌,并对其打压”。虽然当时是在说C#语法的升级,但是现在也恰好可以用在C#与Java方面。至于框架的强大——我知道这一点肯定会被拿出来提,因此每次说Java“坏话”时总归会强调一下Java这一优势,只可惜似乎又被忽略了。那么我再强调一次,我谈论的是Java语法的生产力,不是Java平台的生产力——平台上框架的强大,难道语言上就可以不进行改进了吗?难道进行了语言能力上的强化,用它编写的框架就会变少了吗?平台能力就减弱了吗?当一个事物要用其优势来为自己的劣势做掩饰的时候……老赵就不多说了。

质疑:“难以辩驳的事实”是从什么数据得来的?太夸张了吧?即使用C和C++,只要对语言足够的熟悉,也不致于寸步难行。若果真Java如此难用,Java早就被淘汰了,不劳你唱衰了。

回应:我错了,我举不出“数据”,但是以前的文章都已经给过“示例”,个中比较可以由大家自行体会。至于“寸步难行”……的确也是我夸张了,我错了,以后不随意用修辞手法了。至于Java是否难用,是否早该被淘汰,我想说的是,您又犯了“极端化”的逻辑滑坡错误了。Java的确难用,但是我并没有说他难用到以至于无法推广,无法使用的地步。Java也不是没有过“优雅”的时期,只是到现在来说已经太不够看了,而且还是那四个字“固步自封”。我也从来没说Java平台应该被淘汰了,老赵还眼馋它们上面那么多项目呢,而且平台的能力并不是一个“语法”一个因素就能“拖垮”的。那么多年下来,大家早有依赖性了,肯定会继续用Java。不过我想说,如果回到十几年前Java刚出现那会儿,出现一种各方面都和Java一样,唯一的区别便是拥有C#语法的语言,Java能否活到现在还是个问题。

质疑:“你可以说ruby某个功能1行就能做,而C#要5行,那么我可以补充一个类库,完成1 行的功能。而Java就做不到”为什么Java就做不到呢?能说个理由吗?“这也是为什么现在不少编程语言的书,都喜欢和Java做对比,因为Java的生产力的确是‘难以提高’”——这个说法十分站不住脚。什么语言都与Java比,那是因为Java是当今最流行的语言。等C#在流行度超过了Java,人们自然会找C#比。

回应:不知道郑同学说这句话的时候有没有看过我那篇文章中给出的链接——没看过也不要紧,现在我再整理一下。那篇文章是《从CSDN的趣味题学C# 3.0》,因为有朋友认为Python做字符串小游戏很顺手,于是老赵也就顺便使用C#实现了一下,体现以下C# 3.0的强大特性。这个字符串游戏挺有意思的,不如郑同学用Java也来玩一下?C# 3.0已经不同以往,引入了Lambda表达式、扩展方法、LINQ语法之后在很多方便已经不熟于Ruby、Python等语言,用来玩玩这种小游戏也丝毫不落下风。而且您还别认为这只是一个“玩具”,就在老赵《高阶函数、委托与匿名方法》这篇文章里就用Java来设法“模拟”了一把C#里轻易实现的功能,不知道郑同学对此如何感想——求求您不要告诉我这个例子实际生产中没有用,因为这并不是我乱想出来的,在函数式编程语言,或者Parallel Fx中早就大量运用了。我懒得“列举”出来了,原谅我吧。

  至于“作对比”是因为“流行”还是“能力”原因,似乎有点微妙,在这里不多作讨论了。现在呢老赵想多谈谈为什么说“生产力的确是难以提高”——老赵忽然又想到当时初学Ruby时看的《Everyday Scripting with Ruby》一书中对Ruby的功能大家赞赏,尤其是它的正则表达式配合灵活强大的语法给我留下了无比深刻的印象。当时C#还处于2.0阶段,由于没有Lambda表达式和扩展方法的特性,C#在这方面远远落后于Ruby。不过不久之前刚好施杨同学刚好需要《实现一个项目需求》,要求把一个字符串中1存在的位置区间表现出来,例如“00101111110111101110 => 3, 5-10, 12-15, 17-19”,这时某位匿名大虾用Ruby给出了一段实现,很好很强大:

i=0;
"00101111110111101110"
    .scan(/0+|1+/)
    .map
    {|s|
        l=s.length;
        i+=l;
        s.to_i.zero? ? nil : (l>1 ? "#{i-l}-#{i-1}" : "#{i-l}")
    }.compact * ", "

  虽然在正则表达式的使用上略有缺陷,不过这段代码使用表达式配合map方法把Ruby的特点实实在在地表现了出来,很有典型意义。老赵一时兴起,也用C#实现了一把类似的:

String.Join(
    ", ",
    Regex.Matches("00101111110111101110", "1+")
        .Cast<Match>()
        .Select(m =>
            m.Length == 1 ?
                m.Index + 1 + "" :
                String.Format("{0} - {1}", m.Index + 1, m.Index + m.Length))
        .ToArray())

  嗯嗯,更好地利用了类库中正则表达式的功能,因此整体上更“函数式”一些,也更流畅了一些,不过基本思路是和之前的Ruby实现是一样的。不过好像……还是不够意思?没事,咱可以扩展嘛,简单扩展以后就可以变成这样了:

"00101111110111101110"
    .Scan("1+")
    .Select(
        m => m.Length == 1 ?
            m.Index + 1 + "" :
            String.Format("{0} - {1}", m.Index + 1, m.Index + m.Length))
    .Join(", ");

  简简单单扩展10行代码,这边的实现便可以更进一步,这便是语言的能力,C#能做到,Ruby能做到,而老赵的Java造诣只能得出“Java无法实现”的结论了,又不知哪位兄台可以试试看?由于语言能力的缺乏,“无法提高”也已经是“不争的事实”了,还需要更多证据吗?其实老赵最近也常思考一个问题,那就是“语言和框架/类库”之间的关系以及重要性。目前老赵的结论是:语言与框架/类库相辅相成,但总体来说“语言 > 框架/类库”,因为框架类库可以在现有语言能力的基础上进行补充,新开发也好,从其他平台进行移植也好,都很难说是“能力”问题。但是语言难以由框架来增强,框架最多只能为“特定场景”增强,无法弥补“语言”上的整体能力缺失。关于这个问题,也欢迎大家和老赵一起来讨论。

质疑:楼主喜欢C#是你的事情,犯不着一而再、再而三地贬低Java吧?没有人反驳你,是因为园子里大多以.net技术为主,对Java不一定熟悉,而你在这里似乎又是个权威。但那不代表你说的都是正确的。本来你关起门来自说自话,我也不会费神去反驳。但既然放在首页,总要经得起推敲吧?尤其你还是个在园子里有影响的人,说话更要严谨。楼主听惯了太多的恭维话,我的话想必有些刺耳。先别急着反驳我,心平气和地想一想。一个好的程序员,应该有一颗开放的心,任何语言、任何技术都可为我所用,不带偏见,不拘一格。

回应:这可真是“终极质疑”了,直接怀疑老赵的做事方式,我不爱听,必须好好解释一下。我贬低Java不是因为偏见,而是因为Java本身不争气;老赵也在很多公开场合(比如.NET技术大会或MSDN Web Cast的讲座时,还够正式吧)发表对微软的不满(比如Oxite这个绝佳的反面教材);此外,博客园给我带来那么多好处,老赵不也很有唱衰的欲望吗?——这是一贯做事方式而已,不搞“平衡”,一个东西某方面不好也不会非要帮它找理由来掩盖。当然我承认,里面可能会夹杂对C#的好感,但是至少我举出自认为非常恰当的实例来证明我的观点。老赵也知道弟兄们对我的厚爱,因此说话最多“偷懒”不会“随意”,说出来的话自认非常严谨,欢迎大家推敲,也欢迎郑同学在此继续推推敲敲——不过咱讨论问题不光要“讲道理”,还要“摆事实”不是吗?郑同学的质疑啥都好,条理清晰,就是缺少事实依据。对您这点要求不为过吧?这也不光是对您的要求,老赵现在这篇文章也够有诚意了是不?

  老赵其实也做过1年多2年不到的Java程序员,也一直在关注Java(语言和框架)的发展,做出现在这样的判断绝不是图一时之快,而是长久以来积压的不满情绪。老赵同意“一个好的程序员,应该有一颗开放的心,任何语言、任何技术都可为我所用,不带偏见,不拘一格”这样的说法,也是这样的做的。之前在QCon上还和一些朋友谈过我对混合编程的实践和热爱呢(我认为“混合编程”绝对是趋势),而作为一个山寨版的Web 2.0架构师,对于其他平台的各种技术必须得有足够多的了解啊。请大家相信老赵,老赵一直在关注其他各种语言/平台/框架(实际上我也一直在结合使用,上次北京俱乐部聚会中我也强调了这方面的重要性),绝对不是井底之蛙——就算还没有变成“王子”,不管怎么说也是个井外的蛙呢。

  可惜,对于Java……不用多说了罢。

 

  咳咳,好累,好累。大家也一起来讨论,也欢迎大家叫上Java的朋友一起来玩,转载到Java的阵地上也无不可。不过有些东西兄弟我说在前头,一些啥“语言不是关键,没有讨论必要”,“你个死胖子有什么资格评论这些个”或者“MVP鼓吹微软技术不可信”这类问题咱就先放放吧,大家在进行讨论的时候记得切中关键,并且看清老赵已经谈过的东西——咱也要遵循DRY原则嘛。

 
 

magicb...@gmail.com

unread,
Apr 18, 2009, 8:32:15 PM4/18/09
to TopLanguage
语言而已

On 4月19日, 上午4时55分, "Jeffrey Zhao" <je...@live.com> wrote:
> 写了一篇容易引起吵架的文章,不过还是希望也能和TL的弟兄们一起讨论一下这个问题,喜欢Java的兄弟们多多包涵。(代码上有点小,您可以查看原文)
>
> 事理越辩越明,那么就来详细说说为啥老赵不喜欢Java*语言*

> 原文链接:http://www.cnblogs.com/JeffreyZhao/archive/2009/04/19/why-i-do-not-li...
>
>   最近老赵对Java语言唱衰似乎凶狠了一点,让有些朋友不是很爽,认为我不负责任凭个人感觉乱说话,影响不好。这讨论事情事小,否认我做事方式就不好了。因此老赵这里也继续整理一下我对Java语言的观点,这样大家不必四处查看老赵的说辞,再者也可以控制一下讨论事情的方式,以免大家舞蹈半天尘土飞扬最后停下一看----得,双方在自说自话,这怎能辩明事理,您说呢?


>
>   在这里,老赵借用一下郑晖同学(再此强烈推荐一下他的《冒号课堂》系列,如此好文不该受到如此冷落)在《高阶函数、委托与匿名方法》中留下的评论,这可能也是目前为止最具体最集中的质疑了。老赵很喜欢,因为可以一条一条的应对,思路清晰。
>
> 质疑:Java固步自封?Java语言从1.0到即将的7.0,每次都有新的语法特征加入。C#作为后辈,起点高,对函数式、动态类型等的支持是Java所没有的,但不代表Java今后就不支持。
>

> 回应:首先,"Java语言从1.0到7.0,每次都有新语法加入",就能代表它"不固步自封"了吗?固步自封,是说它改进不大,不顺应"历史潮流"。C#的很多特性Java没有,但不代表Java今后不支持----是啊,的确"能力"是肯定有的,但是有能力而不去做,难道这不是"固步自封"的最好证明?Java 7已经再一次把业界早已强烈要求的闭包特性排除在门外了,只是增加了一些例如"[]式下标"或"使用->而不是get/set访问属性"这样的简单语法糖,看看每次C#改进的力度,具有可比性吗?


>
> 质疑:此外,Java的小兄弟Groovy也是动态语言,与Java很容易集成。其他的如JRuby、Jython与Java的集成也不难。
>
> 回应:JVM上实现的Groovy、Ruby、Python语言实现,不是我想讨论的内容。我说的是Java语言,由语言的规约来确定。我说Java生产力低下,其实只是说Java这门语言在设计上特性缺失过于严重,而不评论所谓JVM的能力。而JVM上可以实现Groovy等高生产力语言,更是证明了JVM的能力是足够的,而Java有那么好的平台基础,却不愿意发展,这也是我说的"固步自封"的原因之一。
>
> 质疑:要知道,Java有更多的历史包袱,动辄在语法上作大改动,会牵连到大批用户。这是成熟和流行的代价。
>

> 回应:老赵想说的是,"改进语言"并不代表如Rails 2之于Rails 1.2,Python 3之于Python 2.5那样的"破坏性"改变。改进语言只要保持向前兼容,还会有什么问题吗?难道C#1.0到3.0的过程中破坏了以前的程序吗?很明显,C# 1.0中的所有语法到3.0还可以用,而.NET Fx 1.0编写出的应用程序在3.5上也基本能用。这不就是很好的证明吗?这样的升级无论是语言(包括语法和IL/Binary Code级别的指令)、框架/类库、亦或是平台都不会造成问题,为什么在Java上面就成为无法升级的理由了呢?Java为.NET证明了统一托管平台的成功,由此诞生了.NET,而.NET为Java证明了那么多有生产力的高级语法,社区也吵吵嚷嚷多年----Java又在做什么呢?


>
> 质疑:想想c++吧,十年还没有出一个新标准呢。另外,微软一直不肯提供C#在Windows平台之外的支持,算不算固步自封呢?
>

> 回应:最后说C++,十年还没有出一个新标准----我不知道,我不关心别人为什么做的不好,我不关心别人的缺点为什么就能成为我不向前看的理由。我不提C++的另一个原因,是因为我对它的了解程度还不够,说了怕别人笑话。还有说微软一直不让C#在Windows以外平台上支持,这是固步自封吗?这是微软的一贯策略而已,当然这个策略我也不会认为是好事,但是谁能告诉我为什么这就叫"固步自封"?难道没有看到mono已经越来越引人注目了吗?微软在这方面的确"封闭",但可没有"固步自封"。


>
> 质疑:Java开发效率虽然比Ruby、Python低,但有丰富的类库、框架和开发工具,更何况Java语言更加严谨,程序员的风格较为一致,减少了许多可能的犯错机会。综合起来,其效率真的会比C#低吗?
>

> 回应:某个语言"功能强大",便说它"混乱",自己"能力不足"便说是"严谨"。说实话,我认为这是一个很可笑的理由----不过也不是第一次见到这样的说法。从Ruby流行开始就有这种说法了,每次我都看得无可奈何,一笑了之。记得之前哪位朋友在园子里说过类似的话:"人们都希望事物发展,但是一旦事物发展让自己感到难以控制,就会引起恐慌,并对其打压"。虽然当时是在说C#语法的升级,但是现在也恰好可以用在C#与Java方面。至于框架的强大----我知道这一点肯定会被拿出来提,因此每次说Java"坏话"时总归会强调一下Java这一优势,只可惜似乎又被忽略了。那么我再强调一次,我谈论的是Java语法的生产力,不是Java平台的生产力----平台上框架的强大,难道语言上就可以不进行改进了吗?难道进行了语言能力上的强化,用它编写的框架就会变少了吗?平台能力就减弱了吗?当一个事物要用其优势来为自己的劣势做掩饰的时候......老赵就不多说了。


>
> 质疑:"难以辩驳的事实"是从什么数据得来的?太夸张了吧?即使用C和C++,只要对语言足够的熟悉,也不致于寸步难行。若果真Java如此难用,Java早就被淘汰了,不劳你唱衰了。
>

> 回应:我错了,我举不出"数据",但是以前的文章都已经给过"示例",个中比较可以由大家自行体会。至于"寸步难行"......的确也是我夸张了,我错了,以后不随意用修辞手法了。至于Java是否难用,是否早该被淘汰,我想说的是,您又犯了"极端化"的逻辑滑坡错误了。Java的确难用,但是我并没有说他难用到以至于无法推广,无法使用的地步。Java也不是没有过"优雅"的时期,只是到现在来说已经太不够看了,而且还是那四个字"固步自封"。我也从来没说Java平台应该被淘汰了,老赵还眼馋它们上面那么多项目呢,而且平台的能力并不是一个"语法"一个因素就能"拖垮"的。那么多年下来,大家早有依赖性了,肯定会继续用Java。不过我想说,如果回到十几年前Java刚出现那会儿,出现一种各方面都和Java一样,唯一的区别便是拥有C#语法的语言,Java能否活到现在还是个问题。
>
> 质疑:"你可以说ruby某个功能1行就能做,而C#要5行,那么我可以补充一个类库,完成1 行的功能。而Java就做不到"为什么Java就做不到呢?能说个理由吗?"这也是为什么现在不少编程语言的书,都喜欢和Java做对比,因为Java的生产力的确是'难以提高'"----这个说法十分站不住脚。什么语言都与Java比,那是因为Java是当今最流行的语言。等C#在流行度超过了Java,人们自然会找C#比。
>
> 回应:不知道郑同学说这句话的时候有没有看过我那篇文章中给出的链接----没看过也不要紧,现在我再整理一下。那篇文章是《从CSDN的趣味题学C# 3.0》,因为有朋友认为Python做字符串小游戏很顺手,于是老赵也就顺便使用C#实现了一下,体现以下C# 3.0的强大特性。这个字符串游戏挺有意思的,不如郑同学用Java也来玩一下?C# 3.0已经不同以往,引入了Lambda表达式、扩展方法、LINQ语法之后在很多方便已经不熟于Ruby、Python等语言,用来玩玩这种小游戏也丝毫不落下风。而且您还别认为这只是一个"玩具",就在老赵《高阶函数、委托与匿名方法》这篇文章里就用Java来设法"模拟"了一把C#里轻易实现的功能,不知道郑同学对此如何感想----求求您不要告诉我这个例子实际生产中没有用,因为这并不是我乱想出来的,在函数式编程语言,或者Parallel Fx中早就大量运用了。我懒得"列举"出来了,原谅我吧。
>
>   至于"作对比"是因为"流行"还是"能力"原因,似乎有点微妙,在这里不多作讨论了。现在呢老赵想多谈谈为什么说"生产力的确是难以提高"----老赵忽然又想到当时初学Ruby时看的《Everyday Scripting with Ruby》一书中对Ruby的功能大家赞赏,尤其是它的正则表达式配合灵活强大的语法给我留下了无比深刻的印象。当时C#还处于2.0阶段,由于没有Lambda表达式和扩展方法的特性,C#在这方面远远落后于Ruby。不过不久之前刚好施杨同学刚好需要《实现一个项目需求》,要求把一个字符串中1存在的位置区间表现出来,例如"00101111110111101110 => 3, 5-10, 12-15, 17-19",这时某位匿名大虾用Ruby给出了一段实现,很好很强大:


>
> i=0;
> "00101111110111101110"
> .scan(/0+|1+/)
> .map
> {|s|
> l=s.length;
> i+=l;
> s.to_i.zero? ? nil : (l>1 ? "#{i-l}-#{i-1}" : "#{i-l}")
> }.compact * ", "
>   虽然在正则表达式的使用上略有缺陷,不过这段代码使用表达式配合map方法把Ruby的特点实实在在地表现了出来,很有典型意义。老赵一时兴起,也用C#实现了一把类似的:
>
> String.Join(
> ", ",
> Regex.Matches("00101111110111101110", "1+")
> .Cast<Match>()
> .Select(m =>
> m.Length == 1 ?
> m.Index + 1 + "" :
> String.Format("{0} - {1}", m.Index + 1, m.Index + m.Length))
> .ToArray())

>   嗯嗯,更好地利用了类库中正则表达式的功能,因此整体上更"函数式"一些,也更流畅了一些,不过基本思路是和之前的Ruby实现是一样的。不过好像......还是不够意思?没事,咱可以扩展嘛,简单扩展以后就可以变成这样了:


>
> "00101111110111101110"
> .Scan("1+")
> .Select(
> m => m.Length == 1 ?
> m.Index + 1 + "" :
> String.Format("{0} - {1}", m.Index + 1, m.Index + m.Length))
> .Join(", ");
>   简简单单扩展10行代码,这边的实现便可以更进一步,这便是语言的能力,C#能做到,Ruby能做到,而老赵的Java造诣只能得出"Java无法实现"的结论了,又不知哪位兄台可以试试看?由于语言能力的缺乏,"无法提高"也已经是"不争的事实"了,还需要更多证据吗?其实老赵最近也常思考一个问题,那就是"语言和框架/类库"之间的关系以及重要性。目前老赵的结论是:语言与框架/类库相辅相成,但总体来说"语言 > 框架/类库",因为框架类库可以在现有语言能力的基础上进行补充,新开发也好,从其他平台进行移植也好,都很难说是"能力"问题。但是语言难以由框架来增强,框架最多只能为"特定场景"增强,无法弥补"语言"上的整体能力缺失。关于这个问题,也欢迎大家和老赵一起来讨论。
>
> 质疑:楼主喜欢C#是你的事情,犯不着一而再、再而三地贬低Java吧?没有人反驳你,是因为园子里大多以.net技术为主,对Java不一定熟悉,而你在这里似乎又是个权威。但那不代表你说的都是正确的。本来你关起门来自说自话,我也不会费神去反驳。但既然放在首页,总要经得起推敲吧?尤其你还是个在园子里有影响的人,说话更要严谨。楼主听惯了太多的恭维话,我的话想必有些刺耳。先别急着反驳我,心平气和地想一想。一个好的程序员,应该有一颗开放的心,任何语言、任何技术都可为我所用,不带偏见,不拘一格。
>

> 回应:这可真是"终极质疑"了,直接怀疑老赵的做事方式,我不爱听,必须好好解释一下。我贬低Java不是因为偏见,而是因为Java本身不争气;老赵也在很多公开场合(比如.NET技术大会或MSDN Web Cast的讲座时,还够正式吧)发表对微软的不满(比如Oxite这个绝佳的反面教材);此外,博客园给我带来那么多好处,老赵不也很有唱衰的欲望吗?----这是一贯做事方式而已,不搞"平衡",一个东西某方面不好也不会非要帮它找理由来掩盖。当然我承认,里面可能会夹杂对C#的好感,但是至少我举出自认为非常恰当的实例来证明我的观点。老赵也知道弟兄们对我的厚爱,因此说话最多"偷懒"不会"随意",说出来的话自认非常严谨,欢迎大家推敲,也欢迎郑同学在此继续推推敲敲----不过咱讨论问题不光要"讲道理",还要"摆事实"不是吗?郑同学的质疑啥都好,条理清晰,就是缺少事实依据。对您这点要求不为过吧?这也不光是对您的要求,老赵现在这篇文章也够有诚意了是不?
>
>   老赵其实也做过1年多2年不到的Java程序员,也一直在关注Java(语言和框架)的发展,做出现在这样的判断绝不是图一时之快,而是长久以来积压的不满情绪。老赵同意"一个好的程序员,应该有一颗开放的心,任何语言、任何技术都可为我所用,不带偏见,不拘一格"这样的说法,也是这样的做的。之前在QCon上还和一些朋友谈过我对混合编程的实践和热爱呢(我认为"混合编程"绝对是趋势),而作为一个山寨版的Web 2.0架构师,对于其他平台的各种技术必须得有足够多的了解啊。请大家相信老赵,老赵一直在关注其他各种语言/平台/框架(实际上我也一直在结合使用,上次北京俱乐部聚会中我也强调了这方面的重要性),绝对不是井底之蛙----就算还没有变成"王子",不管怎么说也是个井外的蛙呢。
>
>   可惜,对于Java......不用多说了罢。
>
>   咳咳,好累,好累。大家也一起来讨论,也欢迎大家叫上Java的朋友一起来玩,转载到Java的阵地上也无不可。不过有些东西兄弟我说在前头,一些啥"语言不是关键,没有讨论必要","你个死胖子有什么资格评论这些个"或者"MVP鼓吹微软技术不可信"这类问题咱就先放放吧,大家在进行讨论的时候记得切中关键,并且看清老赵已经谈过的东西----咱也要遵循DRY原则嘛。

Shuo Chen

unread,
Apr 18, 2009, 9:31:58 PM4/18/09
to TopLanguage
好坑,我不跳。

On Apr 19, 4:55 am, "Jeffrey Zhao" <je...@live.com> wrote:
> 写了一篇容易引起吵架的文章,不过还是希望也能和TL的弟兄们一起讨论一下这个问题,喜欢Java的兄弟们多多包涵。(代码上有点小,您可以查看原文)
>
> 事理越辩越明,那么就来详细说说为啥老赵不喜欢Java*语言*

> 原文链接:http://www.cnblogs.com/JeffreyZhao/archive/2009/04/19/why-i-do-not-li...
>
>   最近老赵对Java语言唱衰似乎凶狠了一点,让有些朋友不是很爽,认为我不负责任凭个人感觉乱说话,影响不好。这讨论事情事小,否认我做事方式就不好了。因此老赵这里也继续整理一下我对Java语言的观点,这样大家不必四处查看老赵的说辞,再者也可以控制一下讨论事情的方式,以免大家舞蹈半天尘土飞扬最后停下一看----得,双方在自说自话,这怎能辩明事理,您说呢?


>
>   在这里,老赵借用一下郑晖同学(再此强烈推荐一下他的《冒号课堂》系列,如此好文不该受到如此冷落)在《高阶函数、委托与匿名方法》中留下的评论,这可能也是目前为止最具体最集中的质疑了。老赵很喜欢,因为可以一条一条的应对,思路清晰。
>
> 质疑:Java固步自封?Java语言从1.0到即将的7.0,每次都有新的语法特征加入。C#作为后辈,起点高,对函数式、动态类型等的支持是Java所没有的,但不代表Java今后就不支持。
>

> 回应:首先,"Java语言从1.0到7.0,每次都有新语法加入",就能代表它"不固步自封"了吗?固步自封,是说它改进不大,不顺应"历史潮流"。C#的很多特性Java没有,但不代表Java今后不支持----是啊,的确"能力"是肯定有的,但是有能力而不去做,难道这不是"固步自封"的最好证明?Java 7已经再一次把业界早已强烈要求的闭包特性排除在门外了,只是增加了一些例如"[]式下标"或"使用->而不是get/set访问属性"这样的简单语法糖,看看每次C#改进的力度,具有可比性吗?


>
> 质疑:此外,Java的小兄弟Groovy也是动态语言,与Java很容易集成。其他的如JRuby、Jython与Java的集成也不难。
>
> 回应:JVM上实现的Groovy、Ruby、Python语言实现,不是我想讨论的内容。我说的是Java语言,由语言的规约来确定。我说Java生产力低下,其实只是说Java这门语言在设计上特性缺失过于严重,而不评论所谓JVM的能力。而JVM上可以实现Groovy等高生产力语言,更是证明了JVM的能力是足够的,而Java有那么好的平台基础,却不愿意发展,这也是我说的"固步自封"的原因之一。
>
> 质疑:要知道,Java有更多的历史包袱,动辄在语法上作大改动,会牵连到大批用户。这是成熟和流行的代价。
>

> 回应:老赵想说的是,"改进语言"并不代表如Rails 2之于Rails 1.2,Python 3之于Python 2.5那样的"破坏性"改变。改进语言只要保持向前兼容,还会有什么问题吗?难道C#1.0到3.0的过程中破坏了以前的程序吗?很明显,C# 1.0中的所有语法到3.0还可以用,而.NET Fx 1.0编写出的应用程序在3.5上也基本能用。这不就是很好的证明吗?这样的升级无论是语言(包括语法和IL/Binary Code级别的指令)、框架/类库、亦或是平台都不会造成问题,为什么在Java上面就成为无法升级的理由了呢?Java为.NET证明了统一托管平台的成功,由此诞生了.NET,而.NET为Java证明了那么多有生产力的高级语法,社区也吵吵嚷嚷多年----Java又在做什么呢?


>
> 质疑:想想c++吧,十年还没有出一个新标准呢。另外,微软一直不肯提供C#在Windows平台之外的支持,算不算固步自封呢?
>

> 回应:最后说C++,十年还没有出一个新标准----我不知道,我不关心别人为什么做的不好,我不关心别人的缺点为什么就能成为我不向前看的理由。我不提C++的另一个原因,是因为我对它的了解程度还不够,说了怕别人笑话。还有说微软一直不让C#在Windows以外平台上支持,这是固步自封吗?这是微软的一贯策略而已,当然这个策略我也不会认为是好事,但是谁能告诉我为什么这就叫"固步自封"?难道没有看到mono已经越来越引人注目了吗?微软在这方面的确"封闭",但可没有"固步自封"。


>
> 质疑:Java开发效率虽然比Ruby、Python低,但有丰富的类库、框架和开发工具,更何况Java语言更加严谨,程序员的风格较为一致,减少了许多可能的犯错机会。综合起来,其效率真的会比C#低吗?
>

> 回应:某个语言"功能强大",便说它"混乱",自己"能力不足"便说是"严谨"。说实话,我认为这是一个很可笑的理由----不过也不是第一次见到这样的说法。从Ruby流行开始就有这种说法了,每次我都看得无可奈何,一笑了之。记得之前哪位朋友在园子里说过类似的话:"人们都希望事物发展,但是一旦事物发展让自己感到难以控制,就会引起恐慌,并对其打压"。虽然当时是在说C#语法的升级,但是现在也恰好可以用在C#与Java方面。至于框架的强大----我知道这一点肯定会被拿出来提,因此每次说Java"坏话"时总归会强调一下Java这一优势,只可惜似乎又被忽略了。那么我再强调一次,我谈论的是Java语法的生产力,不是Java平台的生产力----平台上框架的强大,难道语言上就可以不进行改进了吗?难道进行了语言能力上的强化,用它编写的框架就会变少了吗?平台能力就减弱了吗?当一个事物要用其优势来为自己的劣势做掩饰的时候......老赵就不多说了。
>

> 质疑:"难以辩驳的事实"是从什么数据得来的?太夸张了吧?即使用C和C++,只要对语言足够的熟悉,也不致于寸步难行。若果真Java如此难用,Java早就被淘汰了,不劳你唱衰了。
>

> 回应:我错了,我举不出"数据",但是以前的文章都已经给过"示例",个中比较可以由大家自行体会。至于"寸步难行"......的确也是我夸张了,我错了,以后不随意用修辞手法了。至于Java是否难用,是否早该被淘汰,我想说的是,您又犯了"极端化"的逻辑滑坡错误了。Java的确难用,但是我并没有说他难用到以至于无法推广,无法使用的地步。Java也不是没有过"优雅"的时期,只是到现在来说已经太不够看了,而且还是那四个字"固步自封"。我也从来没说Java平台应该被淘汰了,老赵还眼馋它们上面那么多项目呢,而且平台的能力并不是一个"语法"一个因素就能"拖垮"的。那么多年下来,大家早有依赖性了,肯定会继续用Java。不过我想说,如果回到十几年前Java刚出现那会儿,出现一种各方面都和Java一样,唯一的区别便是拥有C#语法的语言,Java能否活到现在还是个问题。
>
> 质疑:"你可以说ruby某个功能1行就能做,而C#要5行,那么我可以补充一个类库,完成1 行的功能。而Java就做不到"为什么Java就做不到呢?能说个理由吗?"这也是为什么现在不少编程语言的书,都喜欢和Java做对比,因为Java的生产力的确是'难以提高'"----这个说法十分站不住脚。什么语言都与Java比,那是因为Java是当今最流行的语言。等C#在流行度超过了Java,人们自然会找C#比。
>
> 回应:不知道郑同学说这句话的时候有没有看过我那篇文章中给出的链接----没看过也不要紧,现在我再整理一下。那篇文章是《从CSDN的趣味题学C# 3.0》,因为有朋友认为Python做字符串小游戏很顺手,于是老赵也就顺便使用C#实现了一下,体现以下C# 3.0的强大特性。这个字符串游戏挺有意思的,不如郑同学用Java也来玩一下?C# 3.0已经不同以往,引入了Lambda表达式、扩展方法、LINQ语法之后在很多方便已经不熟于Ruby、Python等语言,用来玩玩这种小游戏也丝毫不落下风。而且您还别认为这只是一个"玩具",就在老赵《高阶函数、委托与匿名方法》这篇文章里就用Java来设法"模拟"了一把C#里轻易实现的功能,不知道郑同学对此如何感想----求求您不要告诉我这个例子实际生产中没有用,因为这并不是我乱想出来的,在函数式编程语言,或者Parallel Fx中早就大量运用了。我懒得"列举"出来了,原谅我吧。
>
>   至于"作对比"是因为"流行"还是"能力"原因,似乎有点微妙,在这里不多作讨论了。现在呢老赵想多谈谈为什么说"生产力的确是难以提高"----老赵忽然又想到当时初学Ruby时看的《Everyday Scripting with Ruby》一书中对Ruby的功能大家赞赏,尤其是它的正则表达式配合灵活强大的语法给我留下了无比深刻的印象。当时C#还处于2.0阶段,由于没有Lambda表达式和扩展方法的特性,C#在这方面远远落后于Ruby。不过不久之前刚好施杨同学刚好需要《实现一个项目需求》,要求把一个字符串中1存在的位置区间表现出来,例如"00101111110111101110 => 3, 5-10, 12-15, 17-19",这时某位匿名大虾用Ruby给出了一段实现,很好很强大:


>
> i=0;
> "00101111110111101110"
> .scan(/0+|1+/)
> .map
> {|s|
> l=s.length;
> i+=l;
> s.to_i.zero? ? nil : (l>1 ? "#{i-l}-#{i-1}" : "#{i-l}")
> }.compact * ", "
>   虽然在正则表达式的使用上略有缺陷,不过这段代码使用表达式配合map方法把Ruby的特点实实在在地表现了出来,很有典型意义。老赵一时兴起,也用C#实现了一把类似的:
>
> String.Join(
> ", ",
> Regex.Matches("00101111110111101110", "1+")
> .Cast<Match>()
> .Select(m =>
> m.Length == 1 ?
> m.Index + 1 + "" :
> String.Format("{0} - {1}", m.Index + 1, m.Index + m.Length))
> .ToArray())

>   嗯嗯,更好地利用了类库中正则表达式的功能,因此整体上更"函数式"一些,也更流畅了一些,不过基本思路是和之前的Ruby实现是一样的。不过好像......还是不够意思?没事,咱可以扩展嘛,简单扩展以后就可以变成这样了:


>
> "00101111110111101110"
> .Scan("1+")
> .Select(
> m => m.Length == 1 ?
> m.Index + 1 + "" :
> String.Format("{0} - {1}", m.Index + 1, m.Index + m.Length))
> .Join(", ");
>   简简单单扩展10行代码,这边的实现便可以更进一步,这便是语言的能力,C#能做到,Ruby能做到,而老赵的Java造诣只能得出"Java无法实现"的结论了,又不知哪位兄台可以试试看?由于语言能力的缺乏,"无法提高"也已经是"不争的事实"了,还需要更多证据吗?其实老赵最近也常思考一个问题,那就是"语言和框架/类库"之间的关系以及重要性。目前老赵的结论是:语言与框架/类库相辅相成,但总体来说"语言 > 框架/类库",因为框架类库可以在现有语言能力的基础上进行补充,新开发也好,从其他平台进行移植也好,都很难说是"能力"问题。但是语言难以由框架来增强,框架最多只能为"特定场景"增强,无法弥补"语言"上的整体能力缺失。关于这个问题,也欢迎大家和老赵一起来讨论。
>
> 质疑:楼主喜欢C#是你的事情,犯不着一而再、再而三地贬低Java吧?没有人反驳你,是因为园子里大多以.net技术为主,对Java不一定熟悉,而你在这里似乎又是个权威。但那不代表你说的都是正确的。本来你关起门来自说自话,我也不会费神去反驳。但既然放在首页,总要经得起推敲吧?尤其你还是个在园子里有影响的人,说话更要严谨。楼主听惯了太多的恭维话,我的话想必有些刺耳。先别急着反驳我,心平气和地想一想。一个好的程序员,应该有一颗开放的心,任何语言、任何技术都可为我所用,不带偏见,不拘一格。
>

> 回应:这可真是"终极质疑"了,直接怀疑老赵的做事方式,我不爱听,必须好好解释一下。我贬低Java不是因为偏见,而是因为Java本身不争气;老赵也在很多公开场合(比如.NET技术大会或MSDN Web Cast的讲座时,还够正式吧)发表对微软的不满(比如Oxite这个绝佳的反面教材);此外,博客园给我带来那么多好处,老赵不也很有唱衰的欲望吗?----这是一贯做事方式而已,不搞"平衡",一个东西某方面不好也不会非要帮它找理由来掩盖。当然我承认,里面可能会夹杂对C#的好感,但是至少我举出自认为非常恰当的实例来证明我的观点。老赵也知道弟兄们对我的厚爱,因此说话最多"偷懒"不会"随意",说出来的话自认非常严谨,欢迎大家推敲,也欢迎郑同学在此继续推推敲敲----不过咱讨论问题不光要"讲道理",还要"摆事实"不是吗?郑同学的质疑啥都好,条理清晰,就是缺少事实依据。对您这点要求不为过吧?这也不光是对您的要求,老赵现在这篇文章也够有诚意了是不?
>
>   老赵其实也做过1年多2年不到的Java程序员,也一直在关注Java(语言和框架)的发展,做出现在这样的判断绝不是图一时之快,而是长久以来积压的不满情绪。老赵同意"一个好的程序员,应该有一颗开放的心,任何语言、任何技术都可为我所用,不带偏见,不拘一格"这样的说法,也是这样的做的。之前在QCon上还和一些朋友谈过我对混合编程的实践和热爱呢(我认为"混合编程"绝对是趋势),而作为一个山寨版的Web 2.0架构师,对于其他平台的各种技术必须得有足够多的了解啊。请大家相信老赵,老赵一直在关注其他各种语言/平台/框架(实际上我也一直在结合使用,上次北京俱乐部聚会中我也强调了这方面的重要性),绝对不是井底之蛙----就算还没有变成"王子",不管怎么说也是个井外的蛙呢。
>
>   可惜,对于Java......不用多说了罢。
>

>   咳咳,好累,好累。大家也一起来讨论,也欢迎大家叫上Java的朋友一起来玩,转载到Java的阵地上也无不可。不过有些东西兄弟我说在前头,一些啥"语言不是关键,没有讨论必要","你个死胖子有什么资格评论这些个"或者"MVP鼓吹微软技术不可信"这类问题咱就先放放吧,大家在进行讨论的时候记得切中关键,并且看清老赵已经谈过的东西----咱也要遵循DRY原则嘛。

Linker

unread,
Apr 19, 2009, 1:32:30 AM4/19/09
to pon...@googlegroups.com
java最大的优势不在技术上。这点楼主想不明白?纵观20年计算机发展史,可知,主宰技术世界的神是习惯。老狗学不会新把戏是所有人的缺点。技术进步从来都是以新人换旧人为代价的!

--
Sent from my mobile device

Regards,
Linker Lin
linker...@gmail.com

Jeffrey Zhao

unread,
Apr 19, 2009, 2:16:22 AM4/19/09
to pon...@googlegroups.com
这个我当然想的明白。

我想不明白的是,为什么因为有某方面的优势,就不思进取了,呵呵。

--------------------------------------------------
From: "Linker" <linker...@gmail.com>
Sent: Sunday, April 19, 2009 1:32 PM
To: <pon...@googlegroups.com>
Subject: [TL] Re: 详细说说为啥我不喜欢Java“语言”{讨论}{技术}{Java}

junyi sun

unread,
Apr 19, 2009, 3:05:24 AM4/19/09
to pon...@googlegroups.com
这些语法层面上的东西真的那么重要吗?

2009/4/19 Jeffrey Zhao <je...@live.com>

Jeffrey Zhao

unread,
Apr 19, 2009, 3:16:59 AM4/19/09
to pon...@googlegroups.com
这你要看和什么比了。
 
就好比是说,刀法的确要比刀重要,但是也不能说一把宝刀的价值是不大的。

wing

unread,
Apr 19, 2009, 3:57:42 AM4/19/09
to pon...@googlegroups.com
java在国内用的最多的地方,都是企业应用,那些应用不需要那么多花哨的语言功能,要求开发快、工程性好、又够健壮,综合这几个,目前还没有可以替代java的,用ruby去做综合业务系统?就算你觉得好,客户愿意接受,也需要很长的时间,和ibm、oracle这样大佬的产品支持,而c/c++对开发人员的要求、工程性、健壮性上都不如java(嗯,很好的程序员可以用c开发出极好的系统,但问题是,没办法找到或没有成本雇佣那么多合格的c程序员)
如果是互联网应用,除非支付相关的系统,会考虑使用java,可能用的更多的还是php,这时候语言的性能并重要,因为瓶颈不在这里,个人更喜欢python。。。
c#?不讨厌这门语言,选择合适的语言是架构师必须的工作,个人偏好最好不要带进来,但是我真不知道在哪里使用c#,企业应用?嗯,怎么把c#部署在unix上?除非你只给小企业做玩具,否则就别考虑dot
net,想都别想。
做客户端?嗯,挺不错的,WPF很诱人,但是你要装上200多m的包,比我装个ubuntu还要花上更多的时间,因此我们的客户端最终还是vc。
互联网上用c#?那么多的开源产品都是linux的,基于window自己搞一套,除非是确实没能力搞linux,否则吃饱了用window来折磨自己?
仅仅从语言层次的比较,没多大意义,你很容易给java加上一些功能,这不难,sun确实不是一家好公司,如果java在ibm手里,情况会不同,但是仅仅从语言层次比较,并没多大意义,如果这个角度,python、ruby都比c#强,但是从整个应用层面看,感觉C#更是黯淡,抛开偏好而言,我都很难找到地方使用它,当然这仅仅限于我的工作场景,很多地方还是可以用,不过至少说明C#绑定与ms的解决方案在很多地方是不适用的,这是致命伤。
从语言喜爱度来说,个人最喜欢的还是c和python,c++过于复杂,java过呆板,c#只不过是强化版的java,但是牺牲了跨平台为代价,做服务端不予考虑,客户端还不如直接动用vc,至少对于我工作过的几家公司,是绝对不会考虑C#做解决方案的,我想这个层面的比较才是最重要的,语言的功能本身还是第二位的。

--
wing
wing9...@gmail.com
Hope is a good thing, maybe the best of things.

Jeffrey Zhao

unread,
Apr 19, 2009, 4:24:14 AM4/19/09
to pon...@googlegroups.com
对于企业应用,我只想说,如果您还认为Windows是几年前的Windows,那就是您的损失,当然这个偏见不是您的错,歧视微软是一种流行么,我见过好多大牛都这样,呵呵。

对于互联网应用,现在的开源产品那么多都是通过标准进行通信,为.net写个binding就ok了,又有多困难,又损失了什么,难道同为Linux平台下的ruby/python使用这些产品就不是靠各自的binding吗?

还有我倒不觉得python/ruby比C#生产力强多少,如果您以为C#是强化版的Java,那么还是觉得您可以再去了解一下C# 3.0或者就看看我文章里给出的链接也好。咱也不是凭自己感觉乱说
话,是不?

--------------------------------------------------
From: "wing" <wing9...@gmail.com>
Sent: Sunday, April 19, 2009 3:57 PM


To: <pon...@googlegroups.com>
Subject: [TL] Re: 详细说说为啥我不喜欢Java“语言”{讨论}{技术}{Java}

> java在国内用的最多的地方,都是企业应用,那些应用不需要那么多花哨的语言功能,要求开发快、工程性好、又够健壮,综合这几个,目前还没有可以替代java的,用ruby去做综合业务系统?就算你觉得好,客户愿意接受,也需要很长的时间,和ibm、oracle这样大佬的产品支持,而c/c++对开发人员的要求、工程性、健壮性上都不如java(嗯,很好的程序员可以用c开发出极好的系统,但问题是,没办法找到或没有成本雇佣那么多合格的c程序员)

Linker

unread,
Apr 19, 2009, 8:02:15 AM4/19/09
to pon...@googlegroups.com
老赵,我的意思是你的观点基于泛泛而谈的各种技术特性,这些的好处是不能作为个人喜好的依据的。对于大部分人来说,永远对新东西有抵触,永远是抱残守缺敝帚自珍的。因为学习的动力永远不出于本能而出于偷懒的可能。也就是说很多人喜欢啥完全取决于他了解啥。技术细节对于喜好是没啥影响的。

On 4/19/09, Jeffrey Zhao <je...@live.com> wrote:
>

--

wanghx

unread,
Apr 19, 2009, 2:23:42 AM4/19/09
to pon...@googlegroups.com
看起来 Java 语言特别抗拒一些动态语言的特性。这要查一下 JSR 决策文档中的
理由是什么。我认为应该还算是个 community 决策过程,不像 C# 是 Microsoft
一手操办。
JSR 的决策层是否有一些特殊的考虑导致他们对动态语言特性的引入比较谨慎呢?
比如,性能上的考虑?

qiaojie

unread,
Apr 19, 2009, 2:43:30 AM4/19/09
to pon...@googlegroups.com
单就语言层面来比较的话,我也不喜欢java,几年前用java做过半年的项目,java的语言特性给了我非常糟糕的使用体验。C#总的来说就是很好很强大,不黄不暴力,其设计很好的秉承了实用主义原则。这可能是因为C#的设计师出身自工业界而不是学术界,所以更懂得如何满足程序员的需求,设计更符合人性化。很多地方的设计都给我一种恰到好处的感觉,比方说对模板的支持,即不像java那样虚有其名,也不像C++那样过分复杂。
不过C#3.0中引入的lambda表达式和LinQ可能走的有些太远了,一旦程序员开始迷恋语言特性本身,往往就会陷入一个误区当中,而忘记了语言的本来目的。
 
 


 
2009/4/19 Jeffrey Zhao <je...@live.com>

qiaojie

unread,
Apr 19, 2009, 4:39:56 AM4/19/09
to pon...@googlegroups.com
我不做web,但是据我说知web采用ASP.NET的也不在少数。企业应用的话,可能会面临许多老系统的集成问题,这些老的系统可能构建与linux/unix和java上,确实不适合迁移到.net 平台上,但是我看不出java相对于.net在“开发快、工程性好、又够健壮”上的优势。
谈谈我在.net应用上的一些情况吧,前些年做过一些网游服务器的项目,最初是用java构建的(基于已有的系统做二次的开发),使用体验非常糟糕。后来就全面转向.net平台,用下来效果还是非常理想的,在开发效率和稳定性上感觉都不错,其中用.net开发的棋牌游戏平台也卖了有十几家客户了,运营的情况都比较错。
目前在做的项目是关于舞台控制系统的,原来的系统比较复杂,有很多子系统,完全基于linux,采用了c/c++/tcltk等混合开发,做了也将近十年了,在健壮性和可维护性上问题多多,原来的开发人员也早已不在,无法再继续开发下去。所以,新一代系统全面转向了.net平台,主要是从降低开发周期和降低开发人员的门槛出发,目前在国内给我感觉小公司很难招到编程能力非常强的人,大部分程序员写不出合格的C/C++代码,而用脚本语言的话那更没有任何可读性和可维护性,要去维护别人写的脚本代码简直是噩梦。但是用C#的话经过一些简单的培训和学习还是基本可以满足要求的。
 


 
2009/4/19 wing <wing9...@gmail.com>

qiaojie

unread,
Apr 19, 2009, 4:50:31 AM4/19/09
to pon...@googlegroups.com
再补充一下,我现在的3D引擎也在逐步跟 .net融合,底层采用C++,上层逻辑用C#,中间层用C++/CLI粘合。


 
2009/4/19 qiaojie <qia...@gmail.com>

OwnWaterloo

unread,
Apr 19, 2009, 5:46:43 AM4/19/09
to TopLanguage
楼主想论证的观点是: java语言特性进化缓慢, 导致其生产力低下。
讨论语言特性就是讨论语言特性, 请不要扯到应用、 历史、 商业等方面上去好吗?
很多讨论最后不成样子, 就是因为大家太喜欢旁征博引。
如果楼上想讨论语言的综合比较, 不妨另外开贴?


On 4月19日, 下午3时57分, wing <wing922w...@gmail.com> wrote:
> java在国内用的最多的地方,都是企业应用,那些应用不需要那么多花哨的语言功能,要求开发快、工程性好、又够健壮,综合这几个,目前还没有可以替代java 的,用ruby去做综合业务系统?就算你觉得好,客户愿意接受,也需要很长的时间,和ibm、oracle这样大佬的产品支持,而c/c++对开发人员的要求、 工程性、健壮性上都不如java(嗯,很好的程序员可以用c开发出极好的系统,但问题是,没办法找到或没有成本雇佣那么多合格的c程序员)


> 如果是互联网应用,除非支付相关的系统,会考虑使用java,可能用的更多的还是php,这时候语言的性能并重要,因为瓶颈不在这里,个人更喜欢python。 。。
> c#?不讨厌这门语言,选择合适的语言是架构师必须的工作,个人偏好最好不要带进来,但是我真不知道在哪里使用c#,企业应用?嗯,怎么把c#部署在unix上 ?除非你只给小企业做玩具,否则就别考虑dot
> net,想都别想。
> 做客户端?嗯,挺不错的,WPF很诱人,但是你要装上200多m的包,比我装个ubuntu还要花上更多的时间,因此我们的客户端最终还是vc。
> 互联网上用c#?那么多的开源产品都是linux的,基于window自己搞一套,除非是确实没能力搞linux,否则吃饱了用window来折磨自己?

> 仅仅从语言层次的比较,没多大意义,你很容易给java加上一些功能,这不难,sun确实不是一家好公司,如果java在ibm手里,情况会不同,但是仅仅从语 言层次比较,并没多大意义,如果这个角度,python、ruby都比c#强,但是从整个应用层面看,感觉C#更是黯淡,抛开偏好而言,我都很难找到地方使用它 ,当然这仅仅限于我的工作场景,很多地方还是可以用,不过至少说明C#绑定与ms的解决方案在很多地方是不适用的,这是致命伤。
> 从语言喜爱度来说,个人最喜欢的还是c和python,c++过于复杂,java过呆板,c#只不过是强化版的java,但是牺牲了跨平台为代价,做服务端不予 考虑,客户端还不如直接动用vc,至少对于我工作过的几家公司,是绝对不会考虑C#做解决方案的,我想这个层面的比较才是最重要的,语言的功能本身还是第二位的 。
>
> --
> wing
> wing922w...@gmail.com

OwnWaterloo

unread,
Apr 19, 2009, 6:20:11 AM4/19/09
to TopLanguage
楼主忘了说一点, 有些刀法是需要特定的刀才能修炼的。

谁都说编程重要的是思想。 但不通过特定的语言, 思想从何而来?

语言---- 或者更狭隘的说,语言特性----是重要的。

1. 好的语言特性, 将程序员的思想直接映射到代码。

说不需要语言特性的人, 不妨考虑一下: 既然程序最终的结果是CPU执行的机器码, 为什么我们不直接编写机器码?
甚至连机器码, 也是含有特性的, 比如对操作的抽象。
我们不能直接说, "唉, 你, 将那个电平调到低"。

你工作在哪个抽象层次上, 就需要特定抽象和一定程度的语言特性。

2. 好的语言特性, 能锻炼程序员的思想。

要体会到某种思想, 如果使用的语言供的想抽象层次跨度太大, 是很难深入体会的。
比如, 用汇编语言, 最清晰的是一条指令接一条指令编写。
用汇编写一个子过程, 也还能够胜任。
再往上的抽象, 汇编就很难胜任了。

有用汇编实现OO的, 但极少。 而且根本不适合。

可以说, 如果只用汇编, 常人一辈子都无法领悟比子过程更高的抽象。


这也就是我上面说的, 有些刀法, 必须有相应的刀才能练习。

而java, 就是一门特性进化缓慢的语言。

举个例子:
java和.net都有gc, 可以管理内存资源。
但是, gc导致不确定时间析构, 对非内存资源的管理又出现了问题。

从C#发布起, 到C#引入using语句, 用了多长时间?
从java发布起,到现在(至今仍没有对应物) 又有多长时间?

using 重要吗? 没有他我们确实也能写代码, 但是繁琐。
我们希望把时间花在解决问题上, 而不是一次又一次的重复某些机械劳动上----那些事应该交给机器去做。
而using就是把重复劳动交给机器去自动、无错、 高效的完成, 从而提高程序员的生产力。

using难实现吗? 当然不。 我一开始还存有误会, 因为我看见的using都是这样:
using ( R r = new R() ) { }
以为对using中的对象, CLR会不将其放在堆上, 从而有确定时间析构。
后来看见这样的写法:
R r = new R();
using (r) {}
才知道事情肯定不是这个样子。 然后才发现using的实现是如此简单, CLR根本无须修改, 只该编译器就够了。

显然, using也不会造成任何兼容性问题。
那为什么java直到现在也不肯加入?


此处以using为例, 并不是说using就是很好的。 毕竟是嵌套了try finally 块, 是否会造成其他问题我不太清楚, 还得请教老赵
了 ^_^
除开using类似的var dynamic 等也是很容易做到的功能。
相对于C#、 java就是一门固步自封的语言, 不肯加入新特性来提高程序员的生产力。


On 4月19日, 下午3时16分, "Jeffrey Zhao" <je...@live.com> wrote:
> 这你要看和什么比了。
>
> 就好比是说,刀法的确要比刀重要,但是也不能说一把宝刀的价值是不大的。
>
> Jeffrey Zhao
> Blog:http://jeffreyzhao.cnblogs.com
> Twitter:http://twitter.com/jeffz_cn
>
> From: junyi sun
> Sent: Sunday, April 19, 2009 3:05 PM
> To: pon...@googlegroups.com
> Subject: [TL] Re: 详细说说为啥我不喜欢Java"语言"{讨论}{技术}{Java}
>
> 这些语法层面上的东西真的那么重要吗?
>
> 2009/4/19 Jeffrey Zhao <je...@live.com>
>
> 这个我当然想的明白。
>
> 我想不明白的是,为什么因为有某方面的优势,就不思进取了,呵呵。
>
> Jeffrey Zhao
> Blog:http://jeffreyzhao.cnblogs.com
> Twitter:http://twitter.com/jeffz_cn
>
> --------------------------------------------------

> From: "Linker" <linker.m....@gmail.com>

Eric.Wang

unread,
Apr 19, 2009, 6:49:34 AM4/19/09
to TopLanguage
我知道不少公司都在用C#做开发。有做web application的,也有做client app的。
我们公司选用的是C++和C#。linux server用C++做,配置页面用C#做。client则有C++的也有C#的。
用C#来做一些简单的UI程序还是很不错的(不管是APP还是WEB,C#的开发效率无与伦比)。
我有个同事,以前只会用C++,教了他两个星期C#之后,他就独立用C#做好了公司的web方式的系统配置工具。耗时不超过一个月,用到现在没问题(虽
然样子比较丑)。
要让一个人学会用Java做web application要多久?

On 4月19日, 下午3时57分, wing <wing922w...@gmail.com> wrote:

> wing922w...@gmail.com

Yifan

unread,
Apr 19, 2009, 8:11:25 AM4/19/09
to TopLanguage
微软这几年在服务器和数据库领域的进步不小,已经成了一个盈利能力非常不错的部门。
这种进取精神,比他的桌面系统部门要好。
当然对于我这种穷人,买了硬件,软件就直接自己lamp了,
我既不会买redhat,也不会买ms。

On 4月18日, 下午10时55分, "Jeffrey Zhao" <je...@live.com> wrote:
> 写了一篇容易引起吵架的文章,不过还是希望也能和TL的弟兄们一起讨论一下这个问题,喜欢Java的兄弟们多多包涵。(代码上有点小,您可以查看原文)
>
> 事理越辩越明,那么就来详细说说为啥老赵不喜欢Java*语言*

> 原文链接:http://www.cnblogs.com/JeffreyZhao/archive/2009/04/19/why-i-do-not-li...
>
>   最近老赵对Java语言唱衰似乎凶狠了一点,让有些朋友不是很爽,认为我不负责任凭个人感觉乱说话,影响不好。这讨论事情事小,否认我做事方式就不好了。因此老 赵这里也继续整理一下我对Java语言的观点,这样大家不必四处查看老赵的说辞,再者也可以控制一下讨论事情的方式,以免大家舞蹈半天尘土飞扬最后停下一看---- 得,双方在自说自话,这怎能辩明事理,您说呢?
>
>   在这里,老赵借用一下郑晖同学(再此强烈推荐一下他的《冒号课堂》系列,如此好文不该受到如此冷落)在《高阶函数、委托与匿名方法》中留下的评论,这可能也是目 前为止最具体最集中的质疑了。老赵很喜欢,因为可以一条一条的应对,思路清晰。
>
> 质疑:Java固步自封?Java语言从1.0到即将的7.0,每次都有新的语法特征加入。C#作为后辈,起点高,对函数式、动态类型等的支持是Java所没有 的,但不代表Java今后就不支持。
>
> 回应:首先,"Java语言从1.0到7.0,每次都有新语法加入",就能代表它"不固步自封"了吗?固步自封,是说它改进不大,不顺应"历史潮流"。C#的很 多特性Java没有,但不代表Java今后不支持----是啊,的确"能力"是肯定有的,但是有能力而不去做,难道这不是"固步自封"的最好证明?Java 7已经再一次把业界早已强烈要求的闭包特性排除在门外了,只是增加了一些例如"[]式下标"或"使用->而不是get/set访问属性"这样的简单语法糖,看看 每次C#改进的力度,具有可比性吗?


>
> 质疑:此外,Java的小兄弟Groovy也是动态语言,与Java很容易集成。其他的如JRuby、Jython与Java的集成也不难。
>

> 回应:JVM上实现的Groovy、Ruby、Python语言实现,不是我想讨论的内容。我说的是Java语言,由语言的规约来确定。我说Java生产力低下 ,其实只是说Java这门语言在设计上特性缺失过于严重,而不评论所谓JVM的能力。而JVM上可以实现Groovy等高生产力语言,更是证明了JVM的能力是 足够的,而Java有那么好的平台基础,却不愿意发展,这也是我说的"固步自封"的原因之一。


>
> 质疑:要知道,Java有更多的历史包袱,动辄在语法上作大改动,会牵连到大批用户。这是成熟和流行的代价。
>

> 回应:老赵想说的是,"改进语言"并不代表如Rails 2之于Rails 1.2,Python 3之于Python 2.5那样的"破坏性"改变。改进语言只要保持向前兼容,还会有什么问题吗?难道C#1.0到3.0的过程中破坏了以前的程序吗?很明显,C# 1.0中的所有语法到3.0还可以用,而.NET Fx 1.0编写出的应用程序在3.5上也基本能用。这不就是很好的证明吗?这样的升级无论是语言(包括语法和IL/Binary Code级别的指令)、框架/类库、亦或是平台都不会造成问题,为什么在Java上面就成为无法升级的理由了呢?Java为.NET证明了统一托管平台的成功, 由此诞生了.NET,而.NET为Java证明了那么多有生产力的高级语法,社区也吵吵嚷嚷多年----Java又在做什么呢?


>
> 质疑:想想c++吧,十年还没有出一个新标准呢。另外,微软一直不肯提供C#在Windows平台之外的支持,算不算固步自封呢?
>

> 回应:最后说C++,十年还没有出一个新标准----我不知道,我不关心别人为什么做的不好,我不关心别人的缺点为什么就能成为我不向前看的理由。我不提C++的另 一个原因,是因为我对它的了解程度还不够,说了怕别人笑话。还有说微软一直不让C#在Windows以外平台上支持,这是固步自封吗?这是微软的一贯策略而已, 当然这个策略我也不会认为是好事,但是谁能告诉我为什么这就叫"固步自封"?难道没有看到mono已经越来越引人注目了吗?微软在这方面的确"封闭",但可没有 "固步自封"。
>
> 质疑:Java开发效率虽然比Ruby、Python低,但有丰富的类库、框架和开发工具,更何况Java语言更加严谨,程序员的风格较为一致,减少了许多可能 的犯错机会。综合起来,其效率真的会比C#低吗?
>
> 回应:某个语言"功能强大",便说它"混乱",自己"能力不足"便说是"严谨"。说实话,我认为这是一个很可笑的理由----不过也不是第一次见到这样的说法。从R uby流行开始就有这种说法了,每次我都看得无可奈何,一笑了之。记得之前哪位朋友在园子里说过类似的话:"人们都希望事物发展,但是一旦事物发展让自己感到难 以控制,就会引起恐慌,并对其打压"。虽然当时是在说C#语法的升级,但是现在也恰好可以用在C#与Java方面。至于框架的强大----我知道这一点肯定会被拿出 来提,因此每次说Java"坏话"时总归会强调一下Java这一优势,只可惜似乎又被忽略了。那么我再强调一次,我谈论的是Java语法的生产力,不是Java 平台的生产力----平台上框架的强大,难道语言上就可以不进行改进了吗?难道进行了语言能力上的强化,用它编写的框架就会变少了吗?平台能力就减弱了吗?当一个事 物要用其优势来为自己的劣势做掩饰的时候......老赵就不多说了。
>
> 质疑:"难以辩驳的事实"是从什么数据得来的?太夸张了吧?即使用C和C++,只要对语言足够的熟悉,也不致于寸步难行。若果真Java如此难用,Java早就 被淘汰了,不劳你唱衰了。
>
> 回应:我错了,我举不出"数据",但是以前的文章都已经给过"示例",个中比较可以由大家自行体会。至于"寸步难行"......的确也是我夸张了,我错了,以后不随意 用修辞手法了。至于Java是否难用,是否早该被淘汰,我想说的是,您又犯了"极端化"的逻辑滑坡错误了。Java的确难用,但是我并没有说他难用到以至于无法 推广,无法使用的地步。Java也不是没有过"优雅"的时期,只是到现在来说已经太不够看了,而且还是那四个字"固步自封"。我也从来没说Java平台应该被淘 汰了,老赵还眼馋它们上面那么多项目呢,而且平台的能力并不是一个"语法"一个因素就能"拖垮"的。那么多年下来,大家早有依赖性了,肯定会继续用Java。不 过我想说,如果回到十几年前Java刚出现那会儿,出现一种各方面都和Java一样,唯一的区别便是拥有C#语法的语言,Java能否活到现在还是个问题。
>
> 质疑:"你可以说ruby某个功能1行就能做,而C#要5行,那么我可以补充一个类库,完成1 行的功能。而Java就做不到"为什么Java就做不到呢?能说个理由吗?"这也是为什么现在不少编程语言的书,都喜欢和Java做对比,因为Java的生产力 的确是'难以提高'"----这个说法十分站不住脚。什么语言都与Java比,那是因为Java是当今最流行的语言。等C#在流行度超过了Java,人们自然会找C #比。
>
> 回应:不知道郑同学说这句话的时候有没有看过我那篇文章中给出的链接----没看过也不要紧,现在我再整理一下。那篇文章是《从CSDN的趣味题学C# 3.0》,因为有朋友认为Python做字符串小游戏很顺手,于是老赵也就顺便使用C#实现了一下,体现以下C# 3.0的强大特性。这个字符串游戏挺有意思的,不如郑同学用Java也来玩一下?C# 3.0已经不同以往,引入了Lambda表达式、扩展方法、LINQ语法之后在很多方便已经不熟于Ruby、Python等语言,用来玩玩这种小游戏也丝毫不落 下风。而且您还别认为这只是一个"玩具",就在老赵《高阶函数、委托与匿名方法》这篇文章里就用Java来设法"模拟"了一把C#里轻易实现的功能,不知道郑同 学对此如何感想----求求您不要告诉我这个例子实际生产中没有用,因为这并不是我乱想出来的,在函数式编程语言,或者Parallel Fx中早就大量运用了。我懒得"列举"出来了,原谅我吧。
>
>   至于"作对比"是因为"流行"还是"能力"原因,似乎有点微妙,在这里不多作讨论了。现在呢老赵想多谈谈为什么说"生产力的确是难以提高"----老赵忽然又想到当 时初学Ruby时看的《Everyday Scripting with Ruby》一书中对Ruby的功能大家赞赏,尤其是它的正则表达式配合灵活强大的语法给我留下了无比深刻的印象。当时C#还处于2.0阶段,由于没有Lambd a表达式和扩展方法的特性,C#在这方面远远落后于Ruby。不过不久之前刚好施杨同学刚好需要《实现一个项目需求》,要求把一个字符串中1存在的位置区间表现 出来,例如"00101111110111101110 => 3, 5-10, 12-15, 17-19",这时某位匿名大虾用Ruby给出了一段实现,很好很强大:


>
> i=0;
> "00101111110111101110"
> .scan(/0+|1+/)
> .map
> {|s|
> l=s.length;
> i+=l;
> s.to_i.zero? ? nil : (l>1 ? "#{i-l}-#{i-1}" : "#{i-l}")
> }.compact * ", "

> ...
>
> 阅读更多 >>

居振梁

unread,
Apr 19, 2009, 8:18:49 AM4/19/09
to pon...@googlegroups.com
这个坑我不跳,但是我只说一些公道话:
其实,语言本身的实现和语言的应用场合是可以正交讨论的。很多时候也应该正交讨论。
可能大部分人都是从事业务方面的工作,所以谈到这些话题就习惯性的往那个方面看,脱离了那个环境,其实还有另外的一大片天空。

路人甲路过

2009/4/19 OwnWaterloo <ownwa...@gmail.com>

楼主想论证的观点是: java语言特性进化缓慢, 导致其生产力低下。
讨论语言特性就是讨论语言特性, 请不要扯到应用、 历史、 商业等方面上去好吗?
很多讨论最后不成样子, 就是因为大家太喜欢旁征博引。
如果楼上想讨论语言的综合比较, 不妨另外开贴?



--
自学走了不少弯路,更浪费了太多的时间,寻找良师益友。
追求黑客精神和清心寡欲的心态。
中文博客:http://wargrey.yo2.cn
英文博客:http://wargrey.blogspot.com
研究方向:基础[Unix/GNU Linux]、主观[人工智能]、客观[移动计算]、可选[虚拟化]
其他兴趣:数学、物理、心理学、武术、自然语言

wing

unread,
Apr 19, 2009, 9:16:28 AM4/19/09
to pon...@googlegroups.com
嗯,阁下意思是,不谈语言的应用环境,专门比C#和java的语言特性?这确实是java的弱点,该死的sun都快倒闭了,讨论这些有意义吗?
只需要把java没实现的都列出来就行了,如果可以满足C#ER的优越感,也算有意义了,不过我既不用C#,也不用java,就不参与这种剑气之争了。

"我们公司选用的是C++和C#。linux server用C++做,配置页面用C#做。client则有C++的也有C#的"

真有个性,为了搞几个配置页面,专门设台win server?

2009/4/19 OwnWaterloo <ownwa...@gmail.com>:

--
wing
wing9...@gmail.com

Linker

unread,
Apr 19, 2009, 10:27:04 AM4/19/09
to pon...@googlegroups.com
我也用c++/cli做过粘合层,非常爽的说。可惜只能用在windows平台。

On 4/19/09, qiaojie <qia...@gmail.com> wrote:
> 再补充一下,我现在的3D引擎也在逐步跟 .net融合,底层采用C++,上层逻辑用C#,中间层用C++/CLI粘合。
>
>
>
> 2009/4/19 qiaojie <qia...@gmail.com>
>

>> 我不做web,但是据我说知web采用ASP.NET <http://asp.net/>
>> 的也不在少数。企业应用的话,可能会面临许多老系统的集成问题,这些老的系统可能构建与linux/unix和java上,确实不适合迁移到.net<http://xn--ihqs4hpvb5zoyr1bf7b184d2oa.net/>平台上,但是我看不出java
>> 相对于.net <http://xn--6kqx04am6u.net/>在“开发快、工程性好、又够健壮”上的优势。
>> 谈谈我在.net <http://xn--3dst7w237aa.net/>
>> 应用上的一些情况吧,前些年做过一些网游服务器的项目,最初是用java构建的(基于已有的系统做二次的开发),使用体验非常糟糕。后来就全面转向.net<http://xn--15q67dka234fyroyu0duwl.net/>
>> 平台,用下来效果还是非常理想的,在开发效率和稳定性上感觉都不错,其中用.net <http://xn--fiqw3fk98b.net/>


>> 开发的棋牌游戏平台也卖了有十几家客户了,运营的情况都比较错。
>>
>> 目前在做的项目是关于舞台控制系统的,原来的系统比较复杂,有很多子系统,完全基于linux,采用了c/c++/tcltk等混合开发,做了也将近十年了,在健壮性和可维护性上问题多多,原来的开发人员也早已不在,无法再继续开发下去。所以,

>> 新一代系统全面转向了.net <http://xn--4gqqmij22gkvehr0bxe0bwfdt72cjwq.net/>


>> 平台,主要是从降低开发周期和降低开发人员的门槛出发,目前在国内给我感觉小公司很难招到编程能力非常强的人,大部分程序员写不出合格的C/C++代码,而用脚本语言的话那更没有任何可读性和可维护性,要去维护别人写的脚本代码简直是噩梦。但是用C#的话经过一些简单的培训和学习还是基本可以满足要求的。
>>
>>
>>
>>
>> 2009/4/19 wing <wing9...@gmail.com>
>>
>>
>>> java在国内用的最多的地方,都是企业应用,那些应用不需要那么多花哨的语言功能,要求开发快、工程性好、又够健壮,综合这几个,目前还没有可以替代java的,用ruby去做综合业务系统?就算你觉得好,客户愿意接受,也需要很长的时间,和ibm、oracle这样大佬的产品支持,而c/c++对开发人员的要求、工程性、健壮性上都不如java(嗯,很好的程序员可以用c开发出极好的系统,但问题是,没办法找到或没有成本雇佣那么多合格的c程序员)
>>>
>>> 如果是互联网应用,除非支付相关的系统,会考虑使用java,可能用的更多的还是php,这时候语言的性能并重要,因为瓶颈不在这里,个人更喜欢python。。。
>>>
>>>
>>> c#?不讨厌这门语言,选择合适的语言是架构师必须的工作,个人偏好最好不要带进来,但是我真不知道在哪里使用c#,企业应用?嗯,怎么把c#部署在unix上?除非你只给小企业做玩具,否则就别考虑dot
>>> net,想都别想。
>>> 做客户端?嗯,挺不错的,WPF很诱人,但是你要装上200多m的包,比我装个ubuntu还要花上更多的时间,因此我们的客户端最终还是vc。
>>>
>>> 互联网上用c#?那么多的开源产品都是linux的,基于window自己搞一套,除非是确实没能力搞linux,否则吃饱了用window来折磨自己?
>>>
>>>
>>> 仅仅从语言层次的比较,没多大意义,你很容易给java加上一些功能,这不难,sun确实不是一家好公司,如果java在ibm手里,情况会不同,但是仅仅从语言层次比较,并没多大意义,如果这个角度,python、ruby都比c#强,但是从整个应用层面看,感觉C#更是黯淡,抛开偏好而言,我都很难找到地方使用它,当然这仅仅限于我的工作场景,很多地方还是可以用,不过至少说明C#绑定与ms的解决方案在很多地方是不适用的,这是致命伤。
>>>
>>> 从语言喜爱度来说,个人最喜欢的还是c和python,c++过于复杂,java过呆板,c#只不过是强化版的java,但是牺牲了跨平台为代价,做服务端不予考虑,客户端还不如直接动用vc,至少对于我工作过的几家公司,是绝对不会考虑C#做解决方案的,我想这个层面的比较才是最重要的,语言的功能本身还是第二位的。
>>>
>>> --
>>> wing
>>> wing9...@gmail.com
>>> Hope is a good thing, maybe the best of things.
>>>
>>
>>
>

--

stefan

unread,
Apr 19, 2009, 10:47:20 AM4/19/09
to TopLanguage
好不好的还是有那么多项目在用,能做东西就好了,是吧

On 4月19日, 上午4时55分, "Jeffrey Zhao" <je...@live.com> wrote:

> 写了一篇容易引起吵架的文章,不过还是希望也能和TL的弟兄们一起讨论一下这个问题,喜欢Java的兄弟们多多包涵。(代码上有点小,您可以查看原文)
>
> 事理越辩越明,那么就来详细说说为啥老赵不喜欢Java*语言*

> 原文链接:http://www.cnblogs.com/JeffreyZhao/archive/2009/04/19/why-i-do-not-li...
>
>   最近老赵对Java语言唱衰似乎凶狠了一点,让有些朋友不是很爽,认为我不负责任凭个人感觉乱说话,影响不好。这讨论事情事小,否认我做事方式就不好了。因此老 赵这里也继续整理一下我对Java语言的观点,这样大家不必四处查看老赵的说辞,再者也可以控制一下讨论事情的方式,以免大家舞蹈半天尘土飞扬最后停下一看---- 得,双方在自说自话,这怎能辩明事理,您说呢?
>
>   在这里,老赵借用一下郑晖同学(再此强烈推荐一下他的《冒号课堂》系列,如此好文不该受到如此冷落)在《高阶函数、委托与匿名方法》中留下的评论,这可能也是目 前为止最具体最集中的质疑了。老赵很喜欢,因为可以一条一条的应对,思路清晰。
>
> 质疑:Java固步自封?Java语言从1.0到即将的7.0,每次都有新的语法特征加入。C#作为后辈,起点高,对函数式、动态类型等的支持是Java所没有 的,但不代表Java今后就不支持。
>
> 回应:首先,"Java语言从1.0到7.0,每次都有新语法加入",就能代表它"不固步自封"了吗?固步自封,是说它改进不大,不顺应"历史潮流"。C#的很 多特性Java没有,但不代表Java今后不支持----是啊,的确"能力"是肯定有的,但是有能力而不去做,难道这不是"固步自封"的最好证明?Java 7已经再一次把业界早已强烈要求的闭包特性排除在门外了,只是增加了一些例如"[]式下标"或"使用->而不是get/set访问属性"这样的简单语法糖,看看 每次C#改进的力度,具有可比性吗?


>
> 质疑:此外,Java的小兄弟Groovy也是动态语言,与Java很容易集成。其他的如JRuby、Jython与Java的集成也不难。
>

> 回应:JVM上实现的Groovy、Ruby、Python语言实现,不是我想讨论的内容。我说的是Java语言,由语言的规约来确定。我说Java生产力低下 ,其实只是说Java这门语言在设计上特性缺失过于严重,而不评论所谓JVM的能力。而JVM上可以实现Groovy等高生产力语言,更是证明了JVM的能力是 足够的,而Java有那么好的平台基础,却不愿意发展,这也是我说的"固步自封"的原因之一。


>
> 质疑:要知道,Java有更多的历史包袱,动辄在语法上作大改动,会牵连到大批用户。这是成熟和流行的代价。
>

> 回应:老赵想说的是,"改进语言"并不代表如Rails 2之于Rails 1.2,Python 3之于Python 2.5那样的"破坏性"改变。改进语言只要保持向前兼容,还会有什么问题吗?难道C#1.0到3.0的过程中破坏了以前的程序吗?很明显,C# 1.0中的所有语法到3.0还可以用,而.NET Fx 1.0编写出的应用程序在3.5上也基本能用。这不就是很好的证明吗?这样的升级无论是语言(包括语法和IL/Binary Code级别的指令)、框架/类库、亦或是平台都不会造成问题,为什么在Java上面就成为无法升级的理由了呢?Java为.NET证明了统一托管平台的成功, 由此诞生了.NET,而.NET为Java证明了那么多有生产力的高级语法,社区也吵吵嚷嚷多年----Java又在做什么呢?


>
> 质疑:想想c++吧,十年还没有出一个新标准呢。另外,微软一直不肯提供C#在Windows平台之外的支持,算不算固步自封呢?
>

> 回应:最后说C++,十年还没有出一个新标准----我不知道,我不关心别人为什么做的不好,我不关心别人的缺点为什么就能成为我不向前看的理由。我不提C++的另 一个原因,是因为我对它的了解程度还不够,说了怕别人笑话。还有说微软一直不让C#在Windows以外平台上支持,这是固步自封吗?这是微软的一贯策略而已, 当然这个策略我也不会认为是好事,但是谁能告诉我为什么这就叫"固步自封"?难道没有看到mono已经越来越引人注目了吗?微软在这方面的确"封闭",但可没有 "固步自封"。
>
> 质疑:Java开发效率虽然比Ruby、Python低,但有丰富的类库、框架和开发工具,更何况Java语言更加严谨,程序员的风格较为一致,减少了许多可能 的犯错机会。综合起来,其效率真的会比C#低吗?
>
> 回应:某个语言"功能强大",便说它"混乱",自己"能力不足"便说是"严谨"。说实话,我认为这是一个很可笑的理由----不过也不是第一次见到这样的说法。从R uby流行开始就有这种说法了,每次我都看得无可奈何,一笑了之。记得之前哪位朋友在园子里说过类似的话:"人们都希望事物发展,但是一旦事物发展让自己感到难 以控制,就会引起恐慌,并对其打压"。虽然当时是在说C#语法的升级,但是现在也恰好可以用在C#与Java方面。至于框架的强大----我知道这一点肯定会被拿出 来提,因此每次说Java"坏话"时总归会强调一下Java这一优势,只可惜似乎又被忽略了。那么我再强调一次,我谈论的是Java语法的生产力,不是Java 平台的生产力----平台上框架的强大,难道语言上就可以不进行改进了吗?难道进行了语言能力上的强化,用它编写的框架就会变少了吗?平台能力就减弱了吗?当一个事 物要用其优势来为自己的劣势做掩饰的时候......老赵就不多说了。
>
> 质疑:"难以辩驳的事实"是从什么数据得来的?太夸张了吧?即使用C和C++,只要对语言足够的熟悉,也不致于寸步难行。若果真Java如此难用,Java早就 被淘汰了,不劳你唱衰了。
>
> 回应:我错了,我举不出"数据",但是以前的文章都已经给过"示例",个中比较可以由大家自行体会。至于"寸步难行"......的确也是我夸张了,我错了,以后不随意 用修辞手法了。至于Java是否难用,是否早该被淘汰,我想说的是,您又犯了"极端化"的逻辑滑坡错误了。Java的确难用,但是我并没有说他难用到以至于无法 推广,无法使用的地步。Java也不是没有过"优雅"的时期,只是到现在来说已经太不够看了,而且还是那四个字"固步自封"。我也从来没说Java平台应该被淘 汰了,老赵还眼馋它们上面那么多项目呢,而且平台的能力并不是一个"语法"一个因素就能"拖垮"的。那么多年下来,大家早有依赖性了,肯定会继续用Java。不 过我想说,如果回到十几年前Java刚出现那会儿,出现一种各方面都和Java一样,唯一的区别便是拥有C#语法的语言,Java能否活到现在还是个问题。
>
> 质疑:"你可以说ruby某个功能1行就能做,而C#要5行,那么我可以补充一个类库,完成1 行的功能。而Java就做不到"为什么Java就做不到呢?能说个理由吗?"这也是为什么现在不少编程语言的书,都喜欢和Java做对比,因为Java的生产力 的确是'难以提高'"----这个说法十分站不住脚。什么语言都与Java比,那是因为Java是当今最流行的语言。等C#在流行度超过了Java,人们自然会找C #比。
>
> 回应:不知道郑同学说这句话的时候有没有看过我那篇文章中给出的链接----没看过也不要紧,现在我再整理一下。那篇文章是《从CSDN的趣味题学C# 3.0》,因为有朋友认为Python做字符串小游戏很顺手,于是老赵也就顺便使用C#实现了一下,体现以下C# 3.0的强大特性。这个字符串游戏挺有意思的,不如郑同学用Java也来玩一下?C# 3.0已经不同以往,引入了Lambda表达式、扩展方法、LINQ语法之后在很多方便已经不熟于Ruby、Python等语言,用来玩玩这种小游戏也丝毫不落 下风。而且您还别认为这只是一个"玩具",就在老赵《高阶函数、委托与匿名方法》这篇文章里就用Java来设法"模拟"了一把C#里轻易实现的功能,不知道郑同 学对此如何感想----求求您不要告诉我这个例子实际生产中没有用,因为这并不是我乱想出来的,在函数式编程语言,或者Parallel Fx中早就大量运用了。我懒得"列举"出来了,原谅我吧。
>

>   至于"作对比"是因为"流行"还是"能力"原因,似乎有点微妙,在这里不多作讨论了。现在呢老赵想多谈谈为什么说"生产力的确是难以提高"----老赵忽然又想到当 时初学Ruby时看的《Everyday Scripting with Ruby》一书中对Ruby的功能大家赞赏,尤其是它的正则表达式配合灵活强大的语法给我留下了无比深刻的印象。当时C#还处于2.0阶段,由于没有Lambd a表达式和扩展方法的特性,C#在这方面远远落后于Ruby。不过不久之前刚好施杨同学刚好需要《实现一个项目需求》,要求把一个字符串中1存在的位置区间表现 出来,例如"00101111110111101110 => 3, 5-10, 12-15, 17-19",这时某位匿名大虾用Ruby给出了一段实现,很好很强大:


>
> i=0;
> "00101111110111101110"
> .scan(/0+|1+/)
> .map
> {|s|
> l=s.length;
> i+=l;
> s.to_i.zero? ? nil : (l>1 ? "#{i-l}-#{i-1}" : "#{i-l}")
> }.compact * ", "

> ...
>
> 阅读更多 >>

OwnWaterloo

unread,
Apr 19, 2009, 11:04:40 AM4/19/09
to pon...@googlegroups.com
楼主想讨论的就是这个。
如果你觉得非要扯上应用环境才有讨论的意义, 是否作为另一帖子比较好?
相反,讨论偏题更容易引起意气之争。

楼上可以去看看pongda对讨论的几个建议。

btw: 我也是即不用C#也不用java的。


2009/4/19 wing <wing9...@gmail.com>:

Eric.Wang

unread,
Apr 19, 2009, 12:00:02 PM4/19/09
to TopLanguage
和招两个会java的人比起来(为了backup,至少招两个),开一台win server成本要低得多吧?win server不运行复杂应用,几
乎是机器放在那里就可以了。
混合环境的优势在于,让最合适的机器做最合适的事情。我虽然很喜欢linux,但是我并不排斥asp.net的生产力。
而且环境里面有台windows,很多事情都会更方便。谁用谁知道。

On 4月19日, 下午9时16分, wing <wing922w...@gmail.com> wrote:
> 嗯,阁下意思是,不谈语言的应用环境,专门比C#和java的语言特性?这确实是java的弱点,该死的sun都快倒闭了,讨论这些有意义吗?
> 只需要把java没实现的都列出来就行了,如果可以满足C#ER的优越感,也算有意义了,不过我既不用C#,也不用java,就不参与这种剑气之争了。
>
> "我们公司选用的是C++和C#。linux server用C++做,配置页面用C#做。client则有C++的也有C#的"
>
> 真有个性,为了搞几个配置页面,专门设台win server?
>

> 2009/4/19 OwnWaterloo <ownwater...@gmail.com>:

Jack.Chu

unread,
Apr 19, 2009, 9:29:23 PM4/19/09
to TopLanguage
要想令人信服,用数据来证明。泛泛而谈没有意义,沽名钓誉而已。


On 4月19日, 上午4时55分, "Jeffrey Zhao" <je...@live.com> wrote:

> 写了一篇容易引起吵架的文章,不过还是希望也能和TL的弟兄们一起讨论一下这个问题,喜欢Java的兄弟们多多包涵。(代码上有点小,您可以查看原文)
>
> 事理越辩越明,那么就来详细说说为啥老赵不喜欢Java*语言*

> 原文链接:http://www.cnblogs.com/JeffreyZhao/archive/2009/04/19/why-i-do-not-li...
>
>   最近老赵对Java语言唱衰似乎凶狠了一点,让有些朋友不是很爽,认为我不负责任凭个人感觉乱说话,影响不好。这讨论事情事小,否认我做事方式就不好了。因此老赵这里也继续整理一下我对Java语言的观点,这样大家不必四处查看老赵的说辞,再者也可以控制一下讨论事情的方式,以免大家舞蹈半天尘土飞扬最后停下一看----得,双方在自说自话,这怎能辩明事理,您说呢?


>
>   在这里,老赵借用一下郑晖同学(再此强烈推荐一下他的《冒号课堂》系列,如此好文不该受到如此冷落)在《高阶函数、委托与匿名方法》中留下的评论,这可能也是目前为止最具体最集中的质疑了。老赵很喜欢,因为可以一条一条的应对,思路清晰。
>
> 质疑:Java固步自封?Java语言从1.0到即将的7.0,每次都有新的语法特征加入。C#作为后辈,起点高,对函数式、动态类型等的支持是Java所没有的,但不代表Java今后就不支持。
>

> 回应:首先,"Java语言从1.0到7.0,每次都有新语法加入",就能代表它"不固步自封"了吗?固步自封,是说它改进不大,不顺应"历史潮流"。C#的很多特性Java没有,但不代表Java今后不支持----是啊,的确"能力"是肯定有的,但是有能力而不去做,难道这不是"固步自封"的最好证明?Java 7已经再一次把业界早已强烈要求的闭包特性排除在门外了,只是增加了一些例如"[]式下标"或"使用->而不是get/set访问属性"这样的简单语法糖,看看每次C#改进的力度,具有可比性吗?


>
> 质疑:此外,Java的小兄弟Groovy也是动态语言,与Java很容易集成。其他的如JRuby、Jython与Java的集成也不难。
>
> 回应:JVM上实现的Groovy、Ruby、Python语言实现,不是我想讨论的内容。我说的是Java语言,由语言的规约来确定。我说Java生产力低下,其实只是说Java这门语言在设计上特性缺失过于严重,而不评论所谓JVM的能力。而JVM上可以实现Groovy等高生产力语言,更是证明了JVM的能力是足够的,而Java有那么好的平台基础,却不愿意发展,这也是我说的"固步自封"的原因之一。
>
> 质疑:要知道,Java有更多的历史包袱,动辄在语法上作大改动,会牵连到大批用户。这是成熟和流行的代价。
>

> 回应:老赵想说的是,"改进语言"并不代表如Rails 2之于Rails 1.2,Python 3之于Python 2.5那样的"破坏性"改变。改进语言只要保持向前兼容,还会有什么问题吗?难道C#1.0到3.0的过程中破坏了以前的程序吗?很明显,C# 1.0中的所有语法到3.0还可以用,而.NET Fx 1.0编写出的应用程序在3.5上也基本能用。这不就是很好的证明吗?这样的升级无论是语言(包括语法和IL/Binary Code级别的指令)、框架/类库、亦或是平台都不会造成问题,为什么在Java上面就成为无法升级的理由了呢?Java为.NET证明了统一托管平台的成功,由此诞生了.NET,而.NET为Java证明了那么多有生产力的高级语法,社区也吵吵嚷嚷多年----Java又在做什么呢?


>
> 质疑:想想c++吧,十年还没有出一个新标准呢。另外,微软一直不肯提供C#在Windows平台之外的支持,算不算固步自封呢?
>

> 回应:最后说C++,十年还没有出一个新标准----我不知道,我不关心别人为什么做的不好,我不关心别人的缺点为什么就能成为我不向前看的理由。我不提C++的另一个原因,是因为我对它的了解程度还不够,说了怕别人笑话。还有说微软一直不让C#在Windows以外平台上支持,这是固步自封吗?这是微软的一贯策略而已,当然这个策略我也不会认为是好事,但是谁能告诉我为什么这就叫"固步自封"?难道没有看到mono已经越来越引人注目了吗?微软在这方面的确"封闭",但可没有"固步自封"。


>
> 质疑:Java开发效率虽然比Ruby、Python低,但有丰富的类库、框架和开发工具,更何况Java语言更加严谨,程序员的风格较为一致,减少了许多可能的犯错机会。综合起来,其效率真的会比C#低吗?
>

> 回应:某个语言"功能强大",便说它"混乱",自己"能力不足"便说是"严谨"。说实话,我认为这是一个很可笑的理由----不过也不是第一次见到这样的说法。从Ruby流行开始就有这种说法了,每次我都看得无可奈何,一笑了之。记得之前哪位朋友在园子里说过类似的话:"人们都希望事物发展,但是一旦事物发展让自己感到难以控制,就会引起恐慌,并对其打压"。虽然当时是在说C#语法的升级,但是现在也恰好可以用在C#与Java方面。至于框架的强大----我知道这一点肯定会被拿出来提,因此每次说Java"坏话"时总归会强调一下Java这一优势,只可惜似乎又被忽略了。那么我再强调一次,我谈论的是Java语法的生产力,不是Java平台的生产力----平台上框架的强大,难道语言上就可以不进行改进了吗?难道进行了语言能力上的强化,用它编写的框架就会变少了吗?平台能力就减弱了吗?当一个事物要用其优势来为自己的劣势做掩饰的时候......老赵就不多说了。
>

> 质疑:"难以辩驳的事实"是从什么数据得来的?太夸张了吧?即使用C和C++,只要对语言足够的熟悉,也不致于寸步难行。若果真Java如此难用,Java早就被淘汰了,不劳你唱衰了。
>

> 回应:我错了,我举不出"数据",但是以前的文章都已经给过"示例",个中比较可以由大家自行体会。至于"寸步难行"......的确也是我夸张了,我错了,以后不随意用修辞手法了。至于Java是否难用,是否早该被淘汰,我想说的是,您又犯了"极端化"的逻辑滑坡错误了。Java的确难用,但是我并没有说他难用到以至于无法推广,无法使用的地步。Java也不是没有过"优雅"的时期,只是到现在来说已经太不够看了,而且还是那四个字"固步自封"。我也从来没说Java平台应该被淘汰了,老赵还眼馋它们上面那么多项目呢,而且平台的能力并不是一个"语法"一个因素就能"拖垮"的。那么多年下来,大家早有依赖性了,肯定会继续用Java。不过我想说,如果回到十几年前Java刚出现那会儿,出现一种各方面都和Java一样,唯一的区别便是拥有C#语法的语言,Java能否活到现在还是个问题。
>
> 质疑:"你可以说ruby某个功能1行就能做,而C#要5行,那么我可以补充一个类库,完成1 行的功能。而Java就做不到"为什么Java就做不到呢?能说个理由吗?"这也是为什么现在不少编程语言的书,都喜欢和Java做对比,因为Java的生产力的确是'难以提高'"----这个说法十分站不住脚。什么语言都与Java比,那是因为Java是当今最流行的语言。等C#在流行度超过了Java,人们自然会找C#比。
>
> 回应:不知道郑同学说这句话的时候有没有看过我那篇文章中给出的链接----没看过也不要紧,现在我再整理一下。那篇文章是《从CSDN的趣味题学C# 3.0》,因为有朋友认为Python做字符串小游戏很顺手,于是老赵也就顺便使用C#实现了一下,体现以下C# 3.0的强大特性。这个字符串游戏挺有意思的,不如郑同学用Java也来玩一下?C# 3.0已经不同以往,引入了Lambda表达式、扩展方法、LINQ语法之后在很多方便已经不熟于Ruby、Python等语言,用来玩玩这种小游戏也丝毫不落下风。而且您还别认为这只是一个"玩具",就在老赵《高阶函数、委托与匿名方法》这篇文章里就用Java来设法"模拟"了一把C#里轻易实现的功能,不知道郑同学对此如何感想----求求您不要告诉我这个例子实际生产中没有用,因为这并不是我乱想出来的,在函数式编程语言,或者Parallel Fx中早就大量运用了。我懒得"列举"出来了,原谅我吧。
>
>   至于"作对比"是因为"流行"还是"能力"原因,似乎有点微妙,在这里不多作讨论了。现在呢老赵想多谈谈为什么说"生产力的确是难以提高"----老赵忽然又想到当时初学Ruby时看的《Everyday Scripting with Ruby》一书中对Ruby的功能大家赞赏,尤其是它的正则表达式配合灵活强大的语法给我留下了无比深刻的印象。当时C#还处于2.0阶段,由于没有Lambda表达式和扩展方法的特性,C#在这方面远远落后于Ruby。不过不久之前刚好施杨同学刚好需要《实现一个项目需求》,要求把一个字符串中1存在的位置区间表现出来,例如"00101111110111101110 => 3, 5-10, 12-15, 17-19",这时某位匿名大虾用Ruby给出了一段实现,很好很强大:


>
> i=0;
> "00101111110111101110"
> .scan(/0+|1+/)
> .map
> {|s|
> l=s.length;
> i+=l;
> s.to_i.zero? ? nil : (l>1 ? "#{i-l}-#{i-1}" : "#{i-l}")
> }.compact * ", "
>   虽然在正则表达式的使用上略有缺陷,不过这段代码使用表达式配合map方法把Ruby的特点实实在在地表现了出来,很有典型意义。老赵一时兴起,也用C#实现了一把类似的:
>
> String.Join(
> ", ",
> Regex.Matches("00101111110111101110", "1+")
> .Cast<Match>()
> .Select(m =>
> m.Length == 1 ?
> m.Index + 1 + "" :
> String.Format("{0} - {1}", m.Index + 1, m.Index + m.Length))
> .ToArray())

>   嗯嗯,更好地利用了类库中正则表达式的功能,因此整体上更"函数式"一些,也更流畅了一些,不过基本思路是和之前的Ruby实现是一样的。不过好像......还是不够意思?没事,咱可以扩展嘛,简单扩展以后就可以变成这样了:


>
> "00101111110111101110"
> .Scan("1+")
> .Select(
> m => m.Length == 1 ?
> m.Index + 1 + "" :
> String.Format("{0} - {1}", m.Index + 1, m.Index + m.Length))
> .Join(", ");
>   简简单单扩展10行代码,这边的实现便可以更进一步,这便是语言的能力,C#能做到,Ruby能做到,而老赵的Java造诣只能得出"Java无法实现"的结论了,又不知哪位兄台可以试试看?由于语言能力的缺乏,"无法提高"也已经是"不争的事实"了,还需要更多证据吗?其实老赵最近也常思考一个问题,那就是"语言和框架/类库"之间的关系以及重要性。目前老赵的结论是:语言与框架/类库相辅相成,但总体来说"语言 > 框架/类库",因为框架类库可以在现有语言能力的基础上进行补充,新开发也好,从其他平台进行移植也好,都很难说是"能力"问题。但是语言难以由框架来增强,框架最多只能为"特定场景"增强,无法弥补"语言"上的整体能力缺失。关于这个问题,也欢迎大家和老赵一起来讨论。
>
> 质疑:楼主喜欢C#是你的事情,犯不着一而再、再而三地贬低Java吧?没有人反驳你,是因为园子里大多以.net技术为主,对Java不一定熟悉,而你在这里似乎又是个权威。但那不代表你说的都是正确的。本来你关起门来自说自话,我也不会费神去反驳。但既然放在首页,总要经得起推敲吧?尤其你还是个在园子里有影响的人,说话更要严谨。楼主听惯了太多的恭维话,我的话想必有些刺耳。先别急着反驳我,心平气和地想一想。一个好的程序员,应该有一颗开放的心,任何语言、任何技术都可为我所用,不带偏见,不拘一格。
>

> 回应:这可真是"终极质疑"了,直接怀疑老赵的做事方式,我不爱听,必须好好解释一下。我贬低Java不是因为偏见,而是因为Java本身不争气;老赵也在很多公开场合(比如.NET技术大会或MSDN Web Cast的讲座时,还够正式吧)发表对微软的不满(比如Oxite这个绝佳的反面教材);此外,博客园给我带来那么多好处,老赵不也很有唱衰的欲望吗?----这是一贯做事方式而已,不搞"平衡",一个东西某方面不好也不会非要帮它找理由来掩盖。当然我承认,里面可能会夹杂对C#的好感,但是至少我举出自认为非常恰当的实例来证明我的观点。老赵也知道弟兄们对我的厚爱,因此说话最多"偷懒"不会"随意",说出来的话自认非常严谨,欢迎大家推敲,也欢迎郑同学在此继续推推敲敲----不过咱讨论问题不光要"讲道理",还要"摆事实"不是吗?郑同学的质疑啥都好,条理清晰,就是缺少事实依据。对您这点要求不为过吧?这也不光是对您的要求,老赵现在这篇文章也够有诚意了是不?
>
>   老赵其实也做过1年多2年不到的Java程序员,也一直在关注Java(语言和框架)的发展,做出现在这样的判断绝不是图一时之快,而是长久以来积压的不满情绪。老赵同意"一个好的程序员,应该有一颗开放的心,任何语言、任何技术都可为我所用,不带偏见,不拘一格"这样的说法,也是这样的做的。之前在QCon上还和一些朋友谈过我对混合编程的实践和热爱呢(我认为"混合编程"绝对是趋势),而作为一个山寨版的Web 2.0架构师,对于其他平台的各种技术必须得有足够多的了解啊。请大家相信老赵,老赵一直在关注其他各种语言/平台/框架(实际上我也一直在结合使用,上次北京俱乐部聚会中我也强调了这方面的重要性),绝对不是井底之蛙----就算还没有变成"王子",不管怎么说也是个井外的蛙呢。
>
>   可惜,对于Java......不用多说了罢。
>

>   咳咳,好累,好累。大家也一起来讨论,也欢迎大家叫上Java的朋友一起来玩,转载到Java的阵地上也无不可。不过有些东西兄弟我说在前头,一些啥"语言不是关键,没有讨论必要","你个死胖子有什么资格评论这些个"或者"MVP鼓吹微软技术不可信"这类问题咱就先放放吧,大家在进行讨论的时候记得切中关键,并且看清老赵已经谈过的东西----咱也要遵循DRY原则嘛。

Jeffrey Zhao

unread,
Apr 19, 2009, 9:50:57 PM4/19/09
to pon...@googlegroups.com
语言特性不是数据能支持的,数据只能支持流行度,流行的原因很多,历史原因,平台原因,语言只是一小方面。

再者,虽然没有调查数据,但是我在泛泛而谈吗?我总觉得批评之前看完文章是比较基本的要求吧。

--------------------------------------------------
From: "Jack.Chu" <worki...@gmail.com>
Sent: Monday, April 20, 2009 9:29 AM
To: "TopLanguage" <pon...@googlegroups.com>


Subject: [TL] Re: 详细说说为啥我不喜欢Java“语言”{讨论}{技术}{Java}

> 要想令人信服,用数据来证明。泛泛而谈没有意义,沽名钓誉而已。

wing

unread,
Apr 20, 2009, 1:25:31 AM4/20/09
to pon...@googlegroups.com
仅仅从语言特性来讨论,我完全赞同楼主的看法,但是这可能并不是java本身的问题,而是sun的问题,事实上何止语言特性,sun的jvm性能,jsp/servlet的设计,最早期ide缺乏,swing、ejb、jsf...
除了发明java外,sun在java上大部分东西都是为人诟病的,事实上,sun也没从java上赚到什么钱。
针对楼主说的那些语言特性,java圈的人也都期待能尽快加入到java中,但是这和jsf不一样,jsf你可以放弃不用,ejb也可以不用,语言特性你没法自己加,java的标准还是掌握在sun手里,除非你把sun买下来,如果java在ibm手里,也许情况会不同,但是这个谁能说得清。
好吧,关于语言特性,能说的就是这些了,但是如果要得出其他什么结论,就是另外的话题了,仅仅从语言特性来说,我觉得java无论怎么改进,也不可能超越动态语言,最终还是会更多的使用动态语言,这点对于C#也是一样,静态编译语言固有的缺陷,不是添加一些特性能克服的,事实上对java最大的威胁并不是C#,而是ruby类似的东西,看看现在java社区讨论ruby甚至多于java就知道了。
--
wing
wing9...@gmail.com

Jeffrey Zhao

unread,
Apr 20, 2009, 1:36:20 AM4/20/09
to pon...@googlegroups.com
动态语言一定是趋势吗?我还是习惯于静态类型推断。

QCon上请来的国外大牛也谈论过这个问题,我只记得Martin Fowler并不认为动态语言是趋势,静态语言的缺陷明显。具体内容过一段时间应该会公开的。

Java社区讨论ruby真很多吗?那还叫java社区吗?

javaeye的确讨论很多,但是我很长时间以来不认为它是java社区了,这是个较为前沿的技术社区,不仅限于java。

--------------------------------------------------
From: "wing" <wing9...@gmail.com>
Sent: Monday, April 20, 2009 1:25 PM
To: <pon...@googlegroups.com>


Subject: [TL] Re: 详细说说为啥我不喜欢Java“语言”{讨论}{技术}{Java}

> 仅仅从语言特性来讨论,我完全赞同楼主的看法,但是这可能并不是java本身的问题,而是sun的问题,事实上何止语言特性,sun的jvm性能,jsp/servlet的设计,最早期ide缺乏,swing、ejb、jsf...

wing

unread,
Apr 20, 2009, 2:12:15 AM4/20/09
to pon...@googlegroups.com
java固步自封是个假命题,不如直接说sun已经快完蛋了,这个更准确,也是真正的原因所在,但是我不认为离开java的那些程序员会投入到c#阵营,对于这个转型来说,代价绝对不是学习一门语言这么简单,不知道这样讨论是不是又离题了,因为我觉得仅仅从语言特性上,没什么可以讨论,事实上楼主说的这些,在对jdk7的抱怨列表中,即便不是全部也是大部分列出来了,如果要说这些功能毫无用处,我觉得显然是强词夺理,事实上java社区这几年,没看到什么新玩意出来,至于说java社区讨论ruby我指的当然不是javaeye,只是引用某外国外大牛的话,出处我真的忘了,原话引用,如果记错了,请原谅。

作为我来说,除了开发客户端cs程序外,不会考虑ms的技术,并不是偏见问题,事实上我的水平远未到有资格bs
ms的水准,而是个人习惯、使用工具等等方面,对我来说已经不习惯win的开发习惯了,比如vs,我一直用不顺,即便我写win的c代码,都是用其他编辑器,仅仅用vs来调试,我想很多unxi下c程序员、java程序员也有类似的问题。

如果你让我学习php、perl或者ruby、python,我想我会很乐意,这是不是能解释java - > ruby的迁移问题?

当然如果楼主仅仅只是列举c#比java多了那些东西,而不涉及其他任何推论,那我又离题了,只是我不知道,这些有什么可讨论,java确实没有闭包、没有lambda、没有。。。。,长长的列表,参见javaer自己对jdk7的抱怨吧,这是无可辩驳的事实啊。

Mingli Yuan

unread,
Apr 20, 2009, 2:40:18 AM4/20/09
to pon...@googlegroups.com
抱歉,我在这里说和大家大多数不一样的观点。

先说关于动态语言这一条:我喜欢动态语言的快捷,但当项目代码量从几万行过渡到几十万行乃至百万行级,这个时候你代码的维护成本有多么高,你选择的语言是否有能够支持你平滑扩张的能力?Java以及其他静态类型语言比较容易做到这一点,但动态语言恐怕要陷入灾难。几万行过渡到几十万行乃至百万行级大致是一个什么概念,可以参考我以前的一篇文章 http://www.mingli-yuan.info/archives/95

架构师在选择的时候,要综合考虑已有的类库支持、程序员的skill set,语言的成熟程度,对大型编程的支持。综合来看,在很多领域,Java在今后至少一年内仍然是上佳的选择。譬如,Scala,虽然静态类型,有比较强的类型推理,函数式,活跃的社群,但它还没有足够成熟到大型系统的必然选择,招Scala程序员比较难。所以从架构师的角度综合来看,作大型系统且和已有老系统集成,Java得分还是不少的。

说到大型系统开发,在语言这个层面的机制,除了分别编译、包或者模块机制,似乎还少见其他机制,这方面进展似乎比较缓慢。组内有知晓这方面动态的没有?不过我依然相信,软件工程里没有银弹。


2009/4/19 wing <wing9...@gmail.com>

mocibb

unread,
Apr 20, 2009, 12:14:03 AM4/20/09
to TopLanguage
不觉得这样的代码好。
理由:
1. 易读行
完全不易理解
2. 效率
不如直接循环的高, 而且差的很多, 正则表达式的复杂度跟语言实现有很大关系。
如果还是服务器的代码, 直接拍死
3. 重用性。
没法重用
没有很好的抽象, 如果匹配的不是字符是对象,你怎么办?

qiaojie

unread,
Apr 20, 2009, 1:52:29 AM4/20/09
to pon...@googlegroups.com
我也觉得动态语言不可能成为趋势。在需要关注性能的领域,动态语言肯定得靠边站,这个没什么好讨论的。我就说说一般的应用,动态语言确实开发效率很高,写个几十行代码就能抵得上静态语言上百行代码,但是也导致了动态语言可读性差可维护性差,不要说看别人写的代码,就算自己写的代码,过段时间回头看看也可能忘记了当初怎么写出来的,所以动态语言用来做1、2个人维护的小模块还行,那些需要多人协同开发的程序,用动态语言就非常糟糕了。
对静态语言来说,类型就是文档,我在静态语言里定义个接口,使用者光看函数定义就能明白这个接口怎么用,但是动态语言就做不到。我尝试过一些JS的库,拿到那些库常感觉无从下手,只能从一些例子下手,因为没有类型,静态代码分析不起作用,光看代码根本搞不清楚库是怎么工作的。
所以说动态语言只能说是静态语言的一种有益的补充,不存在取代的问题。C#4.0主要添加了和动态语言的集成特性,使之更容易的和动态语言协作,这才是未来的方向。



2009/4/20 Jeffrey Zhao <je...@live.com>

OwnWaterloo

unread,
Apr 20, 2009, 2:17:34 AM4/20/09
to pon...@googlegroups.com
但是, 动态类型语言也是有固有缺陷的吧?
比如效率。
比如规模大之后的管理。

动态类型语言的灵活性, 是以”增加出错几率“为代价换取的。
就是在自然语言中,情况也是这样:
严谨的语法, 说话呆板, 但是不容易产生歧义。
灵活的语法相反。

我觉得它们之间应该是有各自的应用场合, 不会在所有场合都存在谁取代谁的必然关系。
对于大型项目使用动态类型语言的经验我没有, 不过老赵有篇文章, 叫《使用强类型的xxx》什么的。 也许能说明弱类型开发方便, 维护就有点噩梦了。


同时, ruby、python它们能动态, 也是靠元数据支持的。
C#、java也带有元数据, 也应该可以通过反射来进行类似的工作。
C#还加入了dynamic类型, 也许就能很大程度上支持动态语言的特性了??


2009/4/20 wing <wing9...@gmail.com>:

OwnWaterloo

unread,
Apr 20, 2009, 2:21:49 AM4/20/09
to pon...@googlegroups.com
> 事实上java社区这几年,没看到什么新玩意出来
同感 ……

我同时订阅了博客园,blogjava, 现在都有想退的冲动 ……
退博客园的一个原因博客园的用户基本也能体会 ……
但是上面也有很多对新技术的讨论, 退了又有点舍不得……

而blogjava …… 真没什么新鲜东西 ……
通常都是2、3天, 看看标题, 然后全部标记为已读 ……

去订个javaeye? 或者别的?


2009/4/20 wing <wing9...@gmail.com>:

qiaojie

unread,
Apr 20, 2009, 3:09:25 AM4/20/09
to pon...@googlegroups.com
这段代码只是楼主用来炫耀小聪明的,在多人协作的项目里,是不建议写这样的代码的,但我不反对在单人维护的小模块里耍耍这样的小聪明。


2009/4/20 mocibb <xiaox...@gmail.com>

Jeffrey Zhao

unread,
Apr 20, 2009, 3:13:04 AM4/20/09
to pon...@googlegroups.com
1、“完全不易理解”是习惯问题,无数FP程序的优雅,在很多习惯命令式程序的开发人员面前都接受不了,所以我后面提供了经过扩展的版本,会看得好些。

2、的确没有考虑效率,这是一个示例,用来说明语言特性而已。

3、这里哪个地方需要重用吗?为什么要考虑非字符串的情况?许多时候是不需要重用的,比如某个时候我说要从User对象里拿到id为5的用户,我直接users.Where(u => u.UserID ==5),你要说年龄大于20,那么
users.Where(u => u.UserID > 20)。不需要特别的重用,或者说,类库+编译器已经帮你重用好了。

--------------------------------------------------
From: "mocibb" <xiaox...@gmail.com>
Sent: Monday, April 20, 2009 12:14 PM
To: "TopLanguage" <pon...@googlegroups.com>


Subject: [TL] Re: 详细说说为啥我不喜欢Java“语言”{讨论}{技术}{Java}

> 不觉得这样的代码好。

Mingli Yuan

unread,
Apr 20, 2009, 3:15:45 AM4/20/09
to pon...@googlegroups.com
动态语言并不一定可读性差,乃至API设计混乱。JQuery、Rails本身代码质量都很高。

但对动态语言有个致命的问题:不论是框架或者应用的底层代码有了改动,你都很难事先就把错误评估出来。动态语言本身就缺少类型机制来避免这个问题。

我就有过复杂Rails应用迁移版本的痛苦经历。

2009/4/20 qiaojie <qia...@gmail.com>

OwnWaterloo

unread,
Apr 20, 2009, 4:11:37 AM4/20/09
to pon...@googlegroups.com
> 但对动态语言有个致命的问题:不论是框架或者应用的底层代码有了改动,你都很难事先就把错误评估出来。动态语言本身就缺少类型机制来避免这个问题。

精辟! 一针见血!!!


2009/4/20 Mingli Yuan <mingl...@gmail.com>:

xxmplus

unread,
Apr 20, 2009, 9:24:22 AM4/20/09
to pon...@googlegroups.com
最新消息:Java以后就是Oracle的了

--
Any complex technology which doesn’t come with documentation must be the best
available.
Sent from Sydney, Nsw, Australia

Jeffrey Zhao

unread,
Apr 20, 2009, 9:25:20 AM4/20/09
to pon...@googlegroups.com
我更关心MySql,其实。

--------------------------------------------------
From: "xxmplus" <xxm...@gmail.com>
Sent: Monday, April 20, 2009 9:24 PM
To: <pon...@googlegroups.com>


Subject: [TL] Re: 详细说说为啥我不喜欢Java“语言”{讨论}{技术}{Java}

> 最新消息:Java以后就是Oracle的了

Doyle

unread,
Apr 20, 2009, 9:50:04 AM4/20/09
to pon...@googlegroups.com


2009/4/20 Jeffrey Zhao <je...@live.com>

我更关心MySql,其实。


这样一说,还真的是有点担心呢。。。虽然应该是多余的

 



--

Woody Allen  - "I am not afraid of death, I just don't want to be there when it happens."

chaoyan ma

unread,
Apr 20, 2009, 10:04:32 AM4/20/09
to pon...@googlegroups.com
小白路过
java 效率太低了 好的地方是开源 支持多平台  这些每个人都懂吧

Linker

unread,
Apr 20, 2009, 1:35:44 PM4/20/09
to pon...@googlegroups.com
有人关注boo语言吗?静态python的dotnet实现。

--

中龙任

unread,
Apr 20, 2009, 10:11:18 AM4/20/09
to pon...@googlegroups.com
说Java效率低要看和谁比,还有,讲什么效率吧?
难道Java的运行效率会比Ruby/Python之类的脚本还低?
或者说开发效率比C/C++低?
另外,Sun真的买Oracle了?
2009/4/20 chaoyan ma <chaoy...@gmail.com>:

> 小白路过
> java 效率太低了 好的地方是开源 支持多平台 这些每个人都懂吧

--
Bearice@Guilin, Guangxi, China
一头宅熊、坚定的反Microsoft主义者、开源支持者、P2P拥护者;
Google粉,FF粉,桂林米粉;翻墙运动爱好者,以及アナキズム;马勒戈壁驻桂办事处干事;最近添加眼镜属性(据说原因是很萌)。

Linker

unread,
Apr 20, 2009, 2:49:52 PM4/20/09
to pon...@googlegroups.com
java的运行效率比一般的动态语言要快一些。主要是来源于静态类型的优势,gc会导致暂停在有些场合不太好。微软的c#的发展速度还是可以的,如果能够动静结合就更加有优势了。非常推荐c++/cli,很多时候能大大简化工作。

--

Shuo Chen

unread,
Apr 20, 2009, 7:38:22 PM4/20/09
to TopLanguage
Java 现在的效率一点也不低,虽然曾经低过。Java就算跟C++比也最多慢一到两倍,不过内存消耗比较大:

http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=java&lang2=gpp&box=1

另外转老孟的一段博客:

"Java的执行速度在JDK1.4的时候达到了这样一个水平,就是对于一个一般水平的开发者来说,他写的C++程序已经不再比对等的Java程序跑得
更快了。随后的JDK 5.0和6.0进一步提高了执行性能,由不同的组织举行的多项评测结果表明,Java与C语言的整体执行效率差距在一倍以内,也
就是说,素以速度著称、并且为了速度放弃了很多东西的C语言,现在比装备齐全的Java只快不到一倍了。这还不算,如果考虑到新的计算环境,C语言的速
度优势有可能仅仅是一个错觉。因为,世界上只有很少的人有能力在多CPU计算平台上用C语言写出又快又正确的大程序,在这些人中间,又只有很少很少的人
有能力用C语言写出一个在大型的、异构的网络环境下能够充分发挥各节点计算能力的大规模并行程序。也就是说,你也许有能力把程序效能提高一倍,从而充分
发挥一台价值6000元人民币的PC的计算潜力,为客户节省1000元钱。但如果是在一个由1000台机器组成的大型异构网络并行计算的环境下,你写的
C程序恐怕性能还会远远低于对应的Java程序,更不要说巨大的后期维护成本,而由此带来的损失可能是1000万或者更多。"

http://blog.csdn.net/myan/archive/2007/01/14/1482614.aspx

Jeffrey Zhao

unread,
Apr 20, 2009, 9:21:55 PM4/20/09
to pon...@googlegroups.com
关注中,在比较用不同语言实现DSL的优劣。

之前对F#的感觉不错,只是F#易读难写,的确难写,各种符号太多,掌握不易。

因此也在考虑Boo,其中macro与编译器扩展特性比较吸引眼球。

--------------------------------------------------
From: "Linker" <linker...@gmail.com>
Sent: Tuesday, April 21, 2009 1:35 AM

Linker

unread,
Apr 20, 2009, 10:59:31 PM4/20/09
to pon...@googlegroups.com
嗯,这些图刷新了我的看法。
看来Java的运行速度已经很快了。
比动态语言快很多。

2009/4/21 Shuo Chen <gian...@gmail.com>



--
Regards,
Linker Lin
linker...@gmail.com

Linker

unread,
Apr 20, 2009, 11:39:48 PM4/20/09
to pon...@googlegroups.com
补充一下:
NCSoft在用java做主机游戏,Jmonkey engine的3个作者在NCSoft.

2009/4/21 Linker <linker...@gmail.com>

wing

unread,
Apr 20, 2009, 11:42:47 PM4/20/09
to pon...@googlegroups.com
这和动态语言不是一个级别的,讨论语言最终还是落到应用上,对于很多企业应用,并没有迫切要升级jdk,使用那些漂亮特性的需求,至少国内很多企业应用如此。
但是对互联网应用来说,完全不同,楼上很多人说过,动态语言的一些缺点,我承认都存在,但问题是如果在互联网这样的环境,对于大部分应用,这些缺点并不是问题。
困境在于,企业级应用未必需要那么多漂亮特性,更看重工程性、厂商支持、稳定这方面的东西,这方面java已经很不错了。而对于互联网应用,更喜欢轻量、灵活的动态语言,当然,企业级应用也会演化的,否则我们还在使用c++,但是这个过程会慢的多,就如cobol还被使用一样。
作为企业级应用来说,微软只能做中小企业多,互联网来说,喜欢用c#的只能说是微软控,C#那些漂亮特性,对大企业应用来说,目前需求不大(好吧,我承认这个领域确实不思进取,但事实就是如此),对互联网来说,还有更多好的,所以,除了客户端我会考虑C#,其他方面我不知道在哪里可以用它,有且只有客户端,对我而言就是如此,相对于java的种种缺点,C#只要一个缺点就让我觉得java更可爱----绑定win平台,甚至绑定iis,还绑定。。。。。(别和我说mono那东西)
我想在客户端使用C#写wpf,但是200多m的运行库,让我觉得这东西想都别想了,反正我机器上没有这玩意儿,也没有这玩意儿开发的软件。大家可以看看自己机器上有几个dot.net的软件。

2009/4/21 Linker <linker...@gmail.com>:

--

Linker

unread,
Apr 20, 2009, 11:48:29 PM4/20/09
to pon...@googlegroups.com
http://mina.apache.org/
此框架的性能已经接近Apache的C版本。可见对Java性能的过度担心是不必要的。
但是,我想,所有问题归根到底还是人的问题,要不怎么会有人用RakNet这种垃圾东东呢?

2009/4/21 wing <wing9...@gmail.com>

Linker

unread,
Apr 20, 2009, 11:53:45 PM4/20/09
to pon...@googlegroups.com
Mina框架的性能测试

Linker

unread,
Apr 20, 2009, 11:58:38 PM4/20/09
to pon...@googlegroups.com
从测试中,可以看出Java和写的一般的C程序比,性能已经不相上下。
(Apache的C版本是有并发设计问题的。)

2009/4/21 Linker <linker...@gmail.com>

Jeffrey Zhao

unread,
Apr 21, 2009, 12:17:31 AM4/21/09
to pon...@googlegroups.com
你这也带有很多主观特色,可能很多朋友还停留在过去几年对微软的感受,我对微软了解比较多,不知道也会去打听,所以多说几句。

企业应用:
虽然未必需要高级特性,但是高级特性并不代表不稳定,不工程,但是的确大大带来生产力。无论是操作系统、数据库还是.net平台在这方面已经丝毫不差了,无论安全性还是性能。十年前微软服务器端市场占有率几乎为零,那个时候无论*nix还是Java还是Oracle/DB2已经一统天下了,现在中小企业80%以上基于Windows平台,大企业里相当部分,记得是超过一半也是微软平台。
最好例子,纳斯达克,全部微软系统,别说不核心,数据库也是SQL Server。Sql
Server很强大,按照CPU数早就占据数据库市场大半江山,不过实在太便宜,和Oracle基本上是数量级的差距,所以销售额不行。你看看Oracle一直吹得是什么?就是销售额占有比例。微软最大劣势是市场,比如十几年前就稳定的各种银行系统,谁会去动它?但是我相信早晚要动的。国内市场好多银行也开始用微软系统了,看看招商银行网上银行是不是aspx?至于总是被人提到授权的价格,首先Oracle很贵咱已经说过了,难道企业本身不给IBM他们送服务费?微软操作系统授权算多少钱。
最后如果说跨平台,企业真关心跨平台吗?企业关心的是成本和效益,微软的统一平台威力有目共睹,例如Unified Conmmunication,在软件层面做整合,可以运用大量廉价硬件,大大减少成
本花费,随便找一台普通的电话/手机/服务器就可以。而且企业集成目前大都基于标准,不会是问题。

互联网应用:
能力就不说了,MySpace,纳斯达克都是典型案例,绝对足够。
成本可能是个问题,对于普通初创企业来说Sql Server肯定买不起。不过Windows
Server呢?一个OEM才多少钱?一个普通程序员的一个月工资而以,而开公司要招多少人?做多长时间?场地?当然朋友们不用指着企业版报价给我看,我们做互联网应用用Web Edition就可以了(最近微软在打算出更
便宜的)。不要说是“阉割版”,“要用就用功能完整的版本”是国内用户的坏习惯。微软技术的人力成本我不知道,我的感觉成本低,兄弟可以反驳,但是我想肯定没有人会说微软技术人才招聘难,使用昂贵。
互联网应用软件栈很长,asp.net/web server只占一小部分,其他东西很多:缓存,数据库,负载均衡,存储……大部分人比较都是说全部微软平台+全部*unix平台,我认为这是错误的,不合理的,要我我也不会这么做。如果真做大,一个F5的成本,是用*nix服务器就能省下的吗?Squid,Nginx关心后面的服务器到底是Windows还是*nix吗?mysql和memcached关心是asp.net还是ror在连接它吗?其实大家都是基于标准的协议进行通信,各自平台使用各自的binding而以。如果说一台运行着*nix的ror服务器连接另一台tokyo cabinet服务器大家觉得很正常,那么为什么用windows上运行asp.net连接tokyo
cabinet就觉得是天方夜谭了呢?大家走的难道不都是tcp,udp,http这种东西吗?

做技术,就应该各种东西一起上。我做微软平台也很喜欢*nix,相反的话……大家都看得到,呵呵。

--------------------------------------------------
From: "wing" <wing9...@gmail.com>
Sent: Tuesday, April 21, 2009 11:42 AM


To: <pon...@googlegroups.com>
Subject: [TL] Re: 详细说说为啥我不喜欢Java“语言”{讨论}{技术}{Java}

> 这和动态语言不是一个级别的,讨论语言最终还是落到应用上,对于很多企业应用,并没有迫切要升级jdk,使用那些漂亮特性的需求,至少国内很多企业应用如此。

avalon

unread,
Apr 21, 2009, 12:24:46 AM4/21/09
to pon...@googlegroups.com
我不懂java,说java性能和c不相上下,倒是让我有兴趣想尝试使用java了,因为
我知道java后面有着庞大的lib支撑...
所以很想了解一下,比如写个简单点的测试,比如计算PI或者其他什么的,或者已
经有了结果可以参考?

对于网络应用,如果瓶颈在于网络带宽,那么用i7代替p4,也不会有性能提高。比
较这样的性能,只能说,语言的性能不是真正的瓶颈。


Linker wrote:
> 从测试中,可以看出Java和写的一般的C程序比,性能已经不相上下。
> (Apache的C版本是有并发设计问题的。)
>

> 2009/4/21 Linker <linker...@gmail.com <mailto:linker...@gmail.com>>
>
> Mina 框架的性能测试

> <mailto:linker...@gmail.com>>
>
> http://mina.apache.org/
> 此框架的性能已经接近Apache的C版本。可见对Java性能的过度担心是
> 不必要的。
> 但是,我想,所有问题归根到底还是人的问题,要不怎么会有人用
> RakNet这种垃圾东东呢?
>
> 2009/4/21 wing <wing9...@gmail.com
> <mailto:wing9...@gmail.com>>
>
> 这和动态语言不是一个级别的,讨论语言最终还是落到应
> 用上,对于很多企业应用,并没有迫切要升级jdk,使用那些漂亮
> 特性的需求,至少国内很多企业应用如此。
> 但是对互联网应用来说,完全不同,楼上很多人说过,动
> 态语言的一些缺点,我承认都存在,但问题是如果在互联网这样的
> 环境,对于大部分应用,这些缺点并不是问题。
> 困境在于,企业级应用未必需要那么多漂亮特性,更看重
> 工程性、厂商支持、稳定这方面的东西,这方面java已经很不错
> 了。而对于互联网应用,更喜欢轻量、灵活的动态语言,当然,企
> 业级应用也会演化的,否则我们还在使用c++,但是这个过程会慢
> 的多,就如cobol还被使用一样。
> 作为企业级应用来说,微软只能做中小企业多,互联网来
> 说,喜欢用c#的只能说是微软控,C#那些漂亮特性,对大企业应用
> 来说,目前需求不大(好吧,我承认这个领域确实不思进取,但事
> 实就是如此),对互联网来说,还有更多好的,所以,除了客户端
> 我会考虑C#,其他方面我不知道在哪里可以用它,有且只有客户
> 端,对我而言就是如此,相对于java的种种缺点,C#只要一个缺点
> 就让我觉得java更可爱----绑定win平台,甚至绑定iis,还绑
> 定。。。。。(别和我说mono那东西)
> 我想在客户端使用C#写wpf,但是200多m的运行库,让我觉
> 得这东西想都别想了,反正我机器上没有这玩意儿,也没有这玩意
> 儿开发的软件。大家可以看看自己机器上有几个dot.net
> <http://dot.net>的软件。
>
> 2009/4/21 Linker <linker...@gmail.com
> <mailto:linker...@gmail.com>>:


> > 嗯,这些图刷新了我的看法。
> > 看来Java的运行速度已经很快了。
> > 比动态语言快很多。
> >
> > 2009/4/21 Shuo Chen <gian...@gmail.com

> <mailto:gian...@gmail.com>>
> >>
> >> Java 现在的效率一点也不低,虽然曾经低过。Java就算跟C++
> 比也最多慢一到两倍,不过内存消耗比较大:
> >>
> >>
> >>
> http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=java&lang2=gpp&box=1
> <http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=java&lang2=gpp&box=1>
> >>
> >> 另外转老孟的一段博客:
> >>
> >> "Java的执行速度在JDK1.4的时候达到了这样一个水平,就是对
> 于一个一般水平的开发者来说,他写的C++程序已经不再比对等的
> Java程序跑得
> >> 更快了。随后的JDK 5.0和6.0进一步提高了执行性能,由不同
> 的组织举行的多项评测结果表明,Java与C语言的整体执行效率差
> 距在一倍以内,也
> >> 就是说,素以速度著称、并且为了速度放弃了很多东西的C语
> 言,现在比装备齐全的Java只快不到一倍了。这还不算,如果考虑
> 到新的计算环境,C语言的速
> >> 度优势有可能仅仅是一个错觉。因为,世界上只有很少的人有
> 能力在多CPU计算平台上用C语言写出又快又正确的大程序,在这些
> 人中间,又只有很少很少的人
> >> 有能力用C语言写出一个在大型的、异构的网络环境下能够充分
> 发挥各节点计算能力的大规模并行程序。也就是说,你也许有能力
> 把程序效能提高一倍,从而充分
> >> 发挥一台价值6000元人民币的PC的计算潜力,为客户节省1000
> 元钱。但如果是在一个由1000台机器组成的大型异构网络并行计算
> 的环境下,你写的
> >> C程序恐怕性能还会远远低于对应的Java程序,更不要说巨大的


> 后期维护成本,而由此带来的损失可能是1000万或者更多。"
> >>
> >> http://blog.csdn.net/myan/archive/2007/01/14/1482614.aspx
> >>
> >> On Apr 20, 10:04 pm, chaoyan ma <chaoyan...@gmail.com

> <mailto:chaoyan...@gmail.com>> wrote:
> >> > 小白路过
> >> > java 效率太低了 好的地方是开源 支持多平台 这些每个人
> 都懂吧
> >
> >
> > --
> > Regards,
> > Linker Lin

> > linker...@gmail.com <mailto:linker...@gmail.com>
> >
>
>
>
> --
> wing
> wing9...@gmail.com <mailto:wing9...@gmail.com>


> Hope is a good thing, maybe the best of things.
>
>
>
>
> --
> Regards,
> Linker Lin

> linker...@gmail.com <mailto:linker...@gmail.com>
>
>
>
>
> --
> Regards,
> Linker Lin
> linker...@gmail.com <mailto:linker...@gmail.com>
>
>
>
>
> --
> Regards,
> Linker Lin
> linker...@gmail.com <mailto:linker...@gmail.com>

Jeffrey Zhao

unread,
Apr 21, 2009, 12:31:31 AM4/21/09
to pon...@googlegroups.com
我也不掩饰微软恶心的地方,比如IE6,比如不够free,我也耿耿于怀,但是我也一直不觉得认为微软一无是处的看法有什么正确的道理,大家听到说微软技术差的最多的途径,应该还是媒体/竞争对手之类的吧。

还有一点,在互联网上搞技术容易兴起腥风血雨的都是些Geek,微软的东西的确不适合Geek,因为自己动手丰衣足食的能力肯定不如开放平台。因此网络上指责微软的人最多,然后有人跟风,所以我说鄙视微软是一种流行。但我不觉得Geek们能够花那么多心思搞*unix,却搞不定Windows平台,因为我不觉得搞定Windows平台的人就有那么大本事——大家不愿搞而以。

而被微软老大宠坏的开发人员,的确能力比较弱,大家喜欢跟在微软屁股后面搞些新鲜事物,遇到吵架自然无法力敌。这当然不是好事,也不能推托微软的责任。微软是把技术作简单了,我们不能说这就是邪恶吧?更何况,这也根本和微软技术平台的能力没有什么关系。

早上有人留言给我说“我只是希望java的产品能够越来越广,能够垄断。开发效率低?开发效率低,代表要聘请很多的人,扩大就业机会。语言不进步?语言不进步,代表程序员的知识比较稳定,不需要总去接触新的东西,从而和建筑工程师一样。花十几年学东西,剩下的几十年,看看图纸收钱。体系复杂?体系复杂代表进入门槛高,可以不让街头的什么培训学校培训一年出来的人就能和我们平起平坐。”

没错,对他来说的确可能是好事,不过这真是正确的发展方向?

--------------------------------------------------
From: "Jeffrey Zhao" <je...@live.com>
Sent: Tuesday, April 21, 2009 12:17 PM


To: <pon...@googlegroups.com>
Subject: [TL] Re: 详细说说为啥我不喜欢Java“语言”{讨论}{技术}{Java}

>

qiaojie

unread,
Apr 21, 2009, 12:36:41 AM4/21/09
to pon...@googlegroups.com
有些空话多说就嚼舌根了,没什么说服力,不如谈谈.net在你工作中的具体应用。


2009/4/21 Jeffrey Zhao <je...@live.com>

Jeffrey Zhao

unread,
Apr 21, 2009, 1:24:09 AM4/21/09
to pon...@googlegroups.com
我以前是做互联网应用的,现在还是做互联网应用的,策略就是微软平台(ASP.NET,SQL Server) + 其他平台(memcached)。

Linker

unread,
Apr 21, 2009, 1:56:11 AM4/21/09
to pon...@googlegroups.com
http://www.evermoresw.com.cn/webch/index.jsp
大家看一下这个office.
速度比WPS还要快一些。

2009/4/21 Jeffrey Zhao <je...@live.com>

李博渊

unread,
Apr 20, 2009, 8:36:08 PM4/20/09
to pon...@googlegroups.com
对于这个问题,我认为不能仅从语言的一辆个侧面来讨论语言的好坏。老赵一直强调java语法上的略势,并且咬住这点不放,有种"死盯别人缺点不放的感觉"。每种语言都有自己的优缺点,平台,语法,个个方面都是语言的一部分,评价语言应当综合考虑。
何况随着软件工程的成熟,业界更需要训练有素,富有纪律的软件蓝领,而不是独占鳌头的个体程序员。好用的语言应当是更具有适用性而不是解决个别问题。即使程序的每一行不是最优的,但应当是易读易维护的。
另外微软是用来卖的,sun是来贡献的,强求java是否太苛刻了?

在 09-4-19,Jeffrey Zhao<je...@live.com> 写道:
> 写了一篇容易引起吵架的文章,不过还是希望也能和TL的弟兄们一起讨论一下这个问题,喜欢Java的兄弟们多多包涵。(代码上有点小,您可以查看原文)
>
> 事理越辩越明,那么就来详细说说为啥老赵不喜欢Java*语言*
> 原文链接:http://www.cnblogs.com/JeffreyZhao/archive/2009/04/19/why-i-do-not-like-java.html
>
>
>   最近老赵对Java语言唱衰似乎凶狠了一点,让有些朋友不是很爽,认为我不负责任凭个人感觉乱说话,影响不好。这讨论事情事小,否认我做事方式就不好了。因此老赵这里也继续整理一下我对Java语言的观点,这样大家不必四处查看老赵的说辞,再者也可以控制一下讨论事情的方式,以免大家舞蹈半天尘土飞扬最后停下一看——得,双方在自说自话,这怎能辩明事理,您说呢?
>
>   在这里,老赵借用一下郑晖同学(再此强烈推荐一下他的《冒号课堂》系列,如此好文不该受到如此冷落)在《高阶函数、委托与匿名方法》中留下的评论,这可能也是目前为止最具体最集中的质疑了。老赵很喜欢,因为可以一条一条的应对,思路清晰。
>
> 质疑:Java固步自封?Java语言从1.0到即将的7.0,每次都有新的语法特征加入。C#作为后辈,起点高,对函数式、动态类型等的支持是Java所没有的,但不代表Java今后就不支持。
>
> 回应:首先,“Java语言从1.0到7.0,每次都有新语法加入”,就能代表它“不固步自封”了吗?固步自封,是说它改进不大,不顺应“历史潮流”。C#的很多特性Java没有,但不代表Java今后不支持——是啊,的确“能力”是肯定有的,但是有能力而不去做,难道这不是“固步自封”的最好证明?Java
> 7已经再一次把业界早已强烈要求的闭包特性排除在门外了,只是增加了一些例如“[]式下标”或“使用->而不是get/set访问属性”这样的简单语法糖,看看每次C#改进的力度,具有可比性吗?
>
> 质疑:此外,Java的小兄弟Groovy也是动态语言,与Java很容易集成。其他的如JRuby、Jython与Java的集成也不难。
>
> 回应:JVM上实现的Groovy、Ruby、Python语言实现,不是我想讨论的内容。我说的是Java语言,由语言的规约来确定。我说Java生产力低下,其实只是说Java这门语言在设计上特性缺失过于严重,而不评论所谓JVM的能力。而JVM上可以实现Groovy等高生产力语言,更是证明了JVM的能力是足够的,而Java有那么好的平台基础,却不愿意发展,这也是我说的“固步自封”的原因之一。
>
> 质疑:要知道,Java有更多的历史包袱,动辄在语法上作大改动,会牵连到大批用户。这是成熟和流行的代价。
>
> 回应:老赵想说的是,“改进语言”并不代表如Rails 2之于Rails 1.2,Python 3之于Python
> 2.5那样的“破坏性”改变。改进语言只要保持向前兼容,还会有什么问题吗?难道C#1.0到3.0的过程中破坏了以前的程序吗?很明显,C#
> 1.0中的所有语法到3.0还可以用,而.NET Fx
> 1.0编写出的应用程序在3.5上也基本能用。这不就是很好的证明吗?这样的升级无论是语言(包括语法和IL/Binary
> Code级别的指令)、框架/类库、亦或是平台都不会造成问题,为什么在Java上面就成为无法升级的理由了呢?Java为.NET证明了统一托管平台的成功,由此诞生了.NET,而.NET为Java证明了那么多有生产力的高级语法,社区也吵吵嚷嚷多年——Java又在做什么呢?
>
> 质疑:想想c++吧,十年还没有出一个新标准呢。另外,微软一直不肯提供C#在Windows平台之外的支持,算不算固步自封呢?
>
> 回应:最后说C++,十年还没有出一个新标准——我不知道,我不关心别人为什么做的不好,我不关心别人的缺点为什么就能成为我不向前看的理由。我不提C++的另一个原因,是因为我对它的了解程度还不够,说了怕别人笑话。还有说微软一直不让C#在Windows以外平台上支持,这是固步自封吗?这是微软的一贯策略而已,当然这个策略我也不会认为是好事,但是谁能告诉我为什么这就叫“固步自封”?难道没有看到mono已经越来越引人注目了吗?微软在这方面的确“封闭”,但可没有“固步自封”。
>
> 质疑:Java开发效率虽然比Ruby、Python低,但有丰富的类库、框架和开发工具,更何况Java语言更加严谨,程序员的风格较为一致,减少了许多可能的犯错机会。综合起来,其效率真的会比C#低吗?
>
> 回应:某个语言“功能强大”,便说它“混乱”,自己“能力不足”便说是“严谨”。说实话,我认为这是一个很可笑的理由——不过也不是第一次见到这样的说法。从Ruby流行开始就有这种说法了,每次我都看得无可奈何,一笑了之。记得之前哪位朋友在园子里说过类似的话:“人们都希望事物发展,但是一旦事物发展让自己感到难以控制,就会引起恐慌,并对其打压”。虽然当时是在说C#语法的升级,但是现在也恰好可以用在C#与Java方面。至于框架的强大——我知道这一点肯定会被拿出来提,因此每次说Java“坏话”时总归会强调一下Java这一优势,只可惜似乎又被忽略了。那么我再强调一次,我谈论的是Java语法的生产力,不是Java平台的生产力——平台上框架的强大,难道语言上就可以不进行改进了吗?难道进行了语言能力上的强化,用它编写的框架就会变少了吗?平台能力就减弱了吗?当一个事物要用其优势来为自己的劣势做掩饰的时候……老赵就不多说了。
>
> 质疑:“难以辩驳的事实”是从什么数据得来的?太夸张了吧?即使用C和C++,只要对语言足够的熟悉,也不致于寸步难行。若果真Java如此难用,Java早就被淘汰了,不劳你唱衰了。
>
> 回应:我错了,我举不出“数据”,但是以前的文章都已经给过“示例”,个中比较可以由大家自行体会。至于“寸步难行”……的确也是我夸张了,我错了,以后不随意用修辞手法了。至于Java是否难用,是否早该被淘汰,我想说的是,您又犯了“极端化”的逻辑滑坡错误了。Java的确难用,但是我并没有说他难用到以至于无法推广,无法使用的地步。Java也不是没有过“优雅”的时期,只是到现在来说已经太不够看了,而且还是那四个字“固步自封”。我也从来没说Java平台应该被淘汰了,老赵还眼馋它们上面那么多项目呢,而且平台的能力并不是一个“语法”一个因素就能“拖垮”的。那么多年下来,大家早有依赖性了,肯定会继续用Java。不过我想说,如果回到十几年前Java刚出现那会儿,出现一种各方面都和Java一样,唯一的区别便是拥有C#语法的语言,Java能否活到现在还是个问题。
>
> 质疑:“你可以说ruby某个功能1行就能做,而C#要5行,那么我可以补充一个类库,完成1
> 行的功能。而Java就做不到”为什么Java就做不到呢?能说个理由吗?“这也是为什么现在不少编程语言的书,都喜欢和Java做对比,因为Java的生产力的确是‘难以提高’”——这个说法十分站不住脚。什么语言都与Java比,那是因为Java是当今最流行的语言。等C#在流行度超过了Java,人们自然会找C#比。
>
> 回应:不知道郑同学说这句话的时候有没有看过我那篇文章中给出的链接——没看过也不要紧,现在我再整理一下。那篇文章是《从CSDN的趣味题学C#
> 3.0》,因为有朋友认为Python做字符串小游戏很顺手,于是老赵也就顺便使用C#实现了一下,体现以下C#
> 3.0的强大特性。这个字符串游戏挺有意思的,不如郑同学用Java也来玩一下?C#
> 3.0已经不同以往,引入了Lambda表达式、扩展方法、LINQ语法之后在很多方便已经不熟于Ruby、Python等语言,用来玩玩这种小游戏也丝毫不落下风。而且您还别认为这只是一个“玩具”,就在老赵《高阶函数、委托与匿名方法》这篇文章里就用Java来设法“模拟”了一把C#里轻易实现的功能,不知道郑同学对此如何感想——求求您不要告诉我这个例子实际生产中没有用,因为这并不是我乱想出来的,在函数式编程语言,或者Parallel
> Fx中早就大量运用了。我懒得“列举”出来了,原谅我吧。
>
>   至于“作对比”是因为“流行”还是“能力”原因,似乎有点微妙,在这里不多作讨论了。现在呢老赵想多谈谈为什么说“生产力的确是难以提高”——老赵忽然又想到当时初学Ruby时看的《Everyday
> Scripting with
> Ruby》一书中对Ruby的功能大家赞赏,尤其是它的正则表达式配合灵活强大的语法给我留下了无比深刻的印象。当时C#还处于2.0阶段,由于没有Lambda表达式和扩展方法的特性,C#在这方面远远落后于Ruby。不过不久之前刚好施杨同学刚好需要《实现一个项目需求》,要求把一个字符串中1存在的位置区间表现出来,例如“00101111110111101110
> => 3, 5-10, 12-15, 17-19”,这时某位匿名大虾用Ruby给出了一段实现,很好很强大:
>
> i=0;
> "00101111110111101110"
> .scan(/0+|1+/)
> .map
> {|s|
> l=s.length;
> i+=l;
> s.to_i.zero? ? nil : (l>1 ? "#{i-l}-#{i-1}" : "#{i-l}")
> }.compact * ", "
>   虽然在正则表达式的使用上略有缺陷,不过这段代码使用表达式配合map方法把Ruby的特点实实在在地表现了出来,很有典型意义。老赵一时兴起,也用C#实现了一把类似的:


>
> String.Join(
> ", ",
> Regex.Matches("00101111110111101110", "1+")
> .Cast<Match>()
> .Select(m =>
> m.Length == 1 ?
> m.Index + 1 + "" :
> String.Format("{0} - {1}", m.Index + 1, m.Index + m.Length))
> .ToArray())

>   嗯嗯,更好地利用了类库中正则表达式的功能,因此整体上更“函数式”一些,也更流畅了一些,不过基本思路是和之前的Ruby实现是一样的。不过好像……还是不够意思?没事,咱可以扩展嘛,简单扩展以后就可以变成这样了:
>
> "00101111110111101110"
> .Scan("1+")
> .Select(


> m => m.Length == 1 ?
> m.Index + 1 + "" :
> String.Format("{0} - {1}", m.Index + 1, m.Index + m.Length))

> .Join(", ");
>   简简单单扩展10行代码,这边的实现便可以更进一步,这便是语言的能力,C#能做到,Ruby能做到,而老赵的Java造诣只能得出“Java无法实现”的结论了,又不知哪位兄台可以试试看?由于语言能力的缺乏,“无法提高”也已经是“不争的事实”了,还需要更多证据吗?其实老赵最近也常思考一个问题,那就是“语言和框架/类库”之间的关系以及重要性。目前老赵的结论是:语言与框架/类库相辅相成,但总体来说“语言
>>
> 框架/类库”,因为框架类库可以在现有语言能力的基础上进行补充,新开发也好,从其他平台进行移植也好,都很难说是“能力”问题。但是语言难以由框架来增强,框架最多只能为“特定场景”增强,无法弥补“语言”上的整体能力缺失。关于这个问题,也欢迎大家和老赵一起来讨论。
>
> 质疑:楼主喜欢C#是你的事情,犯不着一而再、再而三地贬低Java吧?没有人反驳你,是因为园子里大多以.net技术为主,对Java不一定熟悉,而你在这里似乎又是个权威。但那不代表你说的都是正确的。本来你关起门来自说自话,我也不会费神去反驳。但既然放在首页,总要经得起推敲吧?尤其你还是个在园子里有影响的人,说话更要严谨。楼主听惯了太多的恭维话,我的话想必有些刺耳。先别急着反驳我,心平气和地想一想。一个好的程序员,应该有一颗开放的心,任何语言、任何技术都可为我所用,不带偏见,不拘一格。
>
> 回应:这可真是“终极质疑”了,直接怀疑老赵的做事方式,我不爱听,必须好好解释一下。我贬低Java不是因为偏见,而是因为Java本身不争气;老赵也在很多公开场合(比如.NET技术大会或MSDN
> Web
> Cast的讲座时,还够正式吧)发表对微软的不满(比如Oxite这个绝佳的反面教材);此外,博客园给我带来那么多好处,老赵不也很有唱衰的欲望吗?——这是一贯做事方式而已,不搞“平衡”,一个东西某方面不好也不会非要帮它找理由来掩盖。当然我承认,里面可能会夹杂对C#的好感,但是至少我举出自认为非常恰当的实例来证明我的观点。老赵也知道弟兄们对我的厚爱,因此说话最多“偷懒”不会“随意”,说出来的话自认非常严谨,欢迎大家推敲,也欢迎郑同学在此继续推推敲敲——不过咱讨论问题不光要“讲道理”,还要“摆事实”不是吗?郑同学的质疑啥都好,条理清晰,就是缺少事实依据。对您这点要求不为过吧?这也不光是对您的要求,老赵现在这篇文章也够有诚意了是不?
>
>   老赵其实也做过1年多2年不到的Java程序员,也一直在关注Java(语言和框架)的发展,做出现在这样的判断绝不是图一时之快,而是长久以来积压的不满情绪。老赵同意“一个好的程序员,应该有一颗开放的心,任何语言、任何技术都可为我所用,不带偏见,不拘一格”这样的说法,也是这样的做的。之前在QCon上还和一些朋友谈过我对混合编程的实践和热爱呢(我认为“混合编程”绝对是趋势),而作为一个山寨版的Web
> 2.0架构师,对于其他平台的各种技术必须得有足够多的了解啊。请大家相信老赵,老赵一直在关注其他各种语言/平台/框架(实际上我也一直在结合使用,上次北京俱乐部聚会中我也强调了这方面的重要性),绝对不是井底之蛙——就算还没有变成“王子”,不管怎么说也是个井外的蛙呢。
>
>   可惜,对于Java……不用多说了罢。
>
>
>
>   咳咳,好累,好累。大家也一起来讨论,也欢迎大家叫上Java的朋友一起来玩,转载到Java的阵地上也无不可。不过有些东西兄弟我说在前头,一些啥“语言不是关键,没有讨论必要”,“你个死胖子有什么资格评论这些个”或者“MVP鼓吹微软技术不可信”这类问题咱就先放放吧,大家在进行讨论的时候记得切中关键,并且看清老赵已经谈过的东西——咱也要遵循DRY原则嘛。

Eric.Wang

unread,
Apr 20, 2009, 11:29:34 PM4/20/09
to TopLanguage
你被孟岩忽悠了。

最直接的例子:OpenOffice主要是用C++写的。作为Sun做的产品,如果能够用Java做,肯定会用Java做的。
不用Java的原因是什么?主要就是Java太慢了。

任何语言都可以设计一些测试用例来说明他多快,这些专门设计的用例不能说明任何问题。
用C++写个函数:
int add(int a, int b)
{
for (int i = 0; i < 1000000; i++)
{
string ss = "i am foolish code";
}
return (a+b);
}
肯定比正常写的Java代码要更慢。

说Java快的同学,举一个Java快的大型应用出来吧。

Java开发效率比C++高,这是比较靠谱的。说Java运行比C++快,就不太靠谱了。

从我的实践中来看,我看到的Java应用大部分都是慢得跟蜗牛一样的。虽然很多应用即使慢得跟蜗牛一样也不要紧。


On 4月21日, 上午7时38分, Shuo Chen <giantc...@gmail.com> wrote:
> Java 现在的效率一点也不低,虽然曾经低过。Java就算跟C++比也最多慢一到两倍,不过内存消耗比较大:
>

> http://shootout.alioth.debian.org/u32q/benchmark.php?test=all〈=ja...

Linker

unread,
Apr 21, 2009, 2:14:32 AM4/21/09
to pon...@googlegroups.com
http://www.evermoresw.com.cn/webch/index.jsp
大家看一下这个office.
速度比WPS还要快一些。

2009/4/21 Eric.Wang <wangsh...@gmail.com>

Jeffrey Zhao

unread,
Apr 21, 2009, 2:20:16 AM4/21/09
to pon...@googlegroups.com
我觉得很奇怪,我的文章从头至尾没有透露过“如果新作项目不应该选择Java”的意思,只是在批评Java语言。我文章里多次强调JVM的能力,Java开源项目的重要性,为什么好像总是被视而不见?再者……

语言和平台为什么不能分开讨论?
Java语言提高会给平台带来坏处吗?
C#的高级特性是解决“特别问题”的吗?
Java十几年来改进那么少,现在这是对Java的强求吗?
因为“开源”(也没开源多少时间),所以不进取,进取少就是应该的吗?

再退n步讲,我也是第一次写这样的文章,也不是三天两头拿出来说一次——还是,事实上根本就不应该指出一个缺点狠狠批评一番?

--------------------------------------------------
From: "李博渊" <nju.b...@gmail.com>
Sent: Tuesday, April 21, 2009 8:36 AM


To: <pon...@googlegroups.com>
Subject: [TL] Re: 详细说说为啥我不喜欢Java“语言”{讨论}{技术}{Java}

> 对于这个问题,我认为不能仅从语言的一辆个侧面来讨论语言的好坏。老赵一直强调java语法上的略势,并且咬住这点不放,有种"死盯别人缺点不放的感觉"。每种语言都有自己的优缺点,平台,语法,个个方面都是语言的一部分,评价语言应当综合考虑。

Jeffrey Zhao

unread,
Apr 21, 2009, 2:22:08 AM4/21/09
to pon...@googlegroups.com
如果比单台机器的计算密集应用,当然比不过C++,关键是这样的应用越来越少了。

--------------------------------------------------
From: "Eric.Wang" <wangsh...@gmail.com>
Sent: Tuesday, April 21, 2009 11:29 AM
To: "TopLanguage" <pon...@googlegroups.com>


Subject: [TL] Re: 详细说说为啥我不喜欢Java“语言”{讨论}{技术}{Java}

> 你被孟岩忽悠了。

Linker

unread,
Apr 21, 2009, 2:23:28 AM4/21/09
to pon...@googlegroups.com
http://www.evermoresw.com.cn/webch/index.jsp
大家看一下这个office.
速度比WPS还要快一些。

2009/4/21 Jeffrey Zhao <je...@live.com>

Kenny Yuan

unread,
Apr 21, 2009, 2:26:27 AM4/21/09
to pon...@googlegroups.com
不想掺和别的,就想指出这个例子不靠谱

OpenOffice是SUN买来的,不是SUN做的(不过SUN又被买了,哈,高兴)。“作为Sun做的产品,如果能够用Java做,肯定会用Java做的”这一条也太过武断了……


2009/4/21 Eric.Wang <wangsh...@gmail.com>

你被孟岩忽悠了。

最直接的例子:OpenOffice主要是用C++写的。作为Sun做的产品,如果能够用Java做,肯定会用Java做的。
不用Java的原因是什么?主要就是Java太慢了。




--
Kenny Yuan
C++, UI, LISP, MMA, Psychology and Automobile.
BLOG: CS巴别塔(Computer Science Babel)
URL: http://blog.csdn.net/yuankaining/


Linker

unread,
Apr 21, 2009, 2:27:59 AM4/21/09
to pon...@googlegroups.com
http://www.evermoresw.com.cn/webch/index.jsp
大家看一下这个office.
速度比WPS还要快一些。

2009/4/21 Kenny Yuan <yuank...@gmail.com>

xxmplus

unread,
Apr 21, 2009, 2:29:51 AM4/21/09
to pon...@googlegroups.com
这位朋友是不是中毒了??怎么一条接一条不停的发

2009/4/21 Linker <linker...@gmail.com>:

--
Any complex technology which doesn’t come with documentation must be the best
available.
Sent from Sydney, Nsw, Australia

居振梁

unread,
Apr 21, 2009, 2:38:00 AM4/21/09
to pon...@googlegroups.com
老赵,我支持你。
你“再者”里面的部分也是我一直想不明白的地方。
上次,有一哥们说他基于某某演算设计了一个新语言。然后就有一群人非要那哥们说是应用在什么地方,甚至还举出某某评委的例子。
我就不明白了,人家分明就是在说语言(或语言的编译器)的实现,实现好了,在根据特定的领域来优化编译器或专门设计内库怎么就不行了?难道说用“MyJavac”编译的(符合java class规范的)jsp项目就不是一个jsp项目了吗?

2009/4/21 Jeffrey Zhao <je...@live.com>


我觉得很奇怪,我的文章从头至尾没有透露过“如果新作项目不应该选择Java”的意思,只是在批评Java语言。我文章里多次强调JVM的能力,Java开源项目的重要性,为什么好像总是被视而不见?再者……

语言和平台为什么不能分开讨论?
Java语言提高会给平台带来坏处吗?
C#的高级特性是解决“特别问题”的吗?
Java十几年来改进那么少,现在这是对Java的强求吗?
因为“开源”(也没开源多少时间),所以不进取,进取少就是应该的吗?

再退n步讲,我也是第一次写这样的文章,也不是三天两头拿出来说一次——还是,事实上根本就不应该指出一个缺点狠狠批评一番?


--
自学走了不少弯路,更浪费了太多的时间,寻找良师益友。
追求黑客精神和清心寡欲的心态。
http://wargrey.yo2.cn
http://wargrey.blogspot.com
主要兴趣:Unix/GNU Linux、人工智能、移动计算、虚拟化
其他兴趣:心理学、自然科学、数学、武术、自然语言

Doyle

unread,
Apr 21, 2009, 2:38:47 AM4/21/09
to pon...@googlegroups.com
楼主知识告诉大家 为啥不喜欢Java“语言”
并且是在告诉大家为什么不喜欢的详细版本

可是大家似乎都在说
楼主你不应该不喜欢Java“语言”

个人喜好大家都要管么?

另:

我也是用c#的
但是我也来说说我喜欢的java语言中的一个特性吧:
java需要在会抛出异常的方法上标注异常,我觉得这个要是c#也有该多好
这样我就不会忘记加try块了

2009/4/21 xxmplus <xxm...@gmail.com>

Linker

unread,
Apr 21, 2009, 2:43:13 AM4/21/09
to pon...@googlegroups.com
没中毒。
怎么就没人看一下呢??????
永中office确实做得很好,
速度快。
而且是Java的。

2009/4/21 xxmplus <xxm...@gmail.com>

qiaojie

unread,
Apr 21, 2009, 2:44:13 AM4/21/09
to pon...@googlegroups.com
exception specification是最傻的异常设计了,我最讨厌的就是java的这个特性



2009/4/21 Doyle <doyl...@gmail.com>

居振梁

unread,
Apr 21, 2009, 2:47:52 AM4/21/09
to pon...@googlegroups.com
你可以在抛出前用RuntimeException包装一下,如果你喜欢写库的话
这么一来,你的程序如果构建在你的库上,那就跟c#一样了。

2009/4/21 qiaojie <qia...@gmail.com>
exception specification是最傻的异常设计了,我最讨厌的就是java的这个特性

Jeffrey Zhao

unread,
Apr 21, 2009, 2:53:28 AM4/21/09
to pon...@googlegroups.com
这……我觉得不是“个人喜好不能管”……

而是,一个事物固然有其优点,却让别人连其缺点都不能讨厌了,这个道理说不通,尤其是根本没有人要一棒子打倒整个事物。

--------------------------------------------------
From: "Doyle" <doyl...@gmail.com>
Sent: Tuesday, April 21, 2009 2:38 PM
To: <pon...@googlegroups.com>


Subject: [TL] Re: 详细说说为啥我不喜欢Java“语言”{讨论}{技术}{Java}

> 楼主知识告诉大家 为啥不喜欢Java“语言”

Eric.Wang

unread,
Apr 21, 2009, 2:54:32 AM4/21/09
to TopLanguage

多台机器的计算密集应用,Java也比不过C++的。
在金融行业和电信行业,计算密集型应用还是有一些的,虽然计算不密集的也很多。
如果做的是公司投诉管理系统这样的非核心系统,或者服装厂进销存系统这样数据不多的系统,那自然用Java就足以搞定。

我知道有家不小的公司,正在把后台系统从Java切换到C++。原因就是原先Java的后台系统太慢了。不要问我细节,我也不清楚细节。


On 4月21日, 下午2时22分, "Jeffrey Zhao" <je...@live.com> wrote:
> 如果比单台机器的计算密集应用,当然比不过C++,关键是这样的应用越来越少了。
>
> Jeffrey Zhao
> Blog:http://jeffreyzhao.cnblogs.com
> Twitter:http://twitter.com/jeffz_cn
>
> --------------------------------------------------

> From: "Eric.Wang" <wangshaoq...@gmail.com>

居振梁

unread,
Apr 21, 2009, 2:56:47 AM4/21/09
to pon...@googlegroups.com
也许是标题里含“{讨论}”的缘故,然后大家只是单纯的讨论讨论。
也许是老赵在.net圈里的名望,使得让有些人找到了一个“我总算找到一个老赵不如我考了周全的地方了”的缘故。

PS:我也只关注解决的问题是什么,不再纠缠于语言。
之前我也一直提到我喜欢混合编程,在这种情况下,因为语言特性本身让我感到这个语言用不顺也是正常现象。


2009/4/21 Doyle <doyl...@gmail.com>

楼主知识告诉大家  为啥不喜欢Java“语言”
并且是在告诉大家为什么不喜欢的详细版本

可是大家似乎都在说
楼主你不应该不喜欢Java“语言”

个人喜好大家都要管么?

OwnWaterloo

unread,
Apr 21, 2009, 2:51:38 AM4/21/09
to pon...@googlegroups.com
你讨厌的是exception specification+checked exception吧?
如果没有checked exception,exception specificationh还是那么令人讨厌么?

2009/4/21 qiaojie <qia...@gmail.com>:

wing

unread,
Apr 21, 2009, 3:44:10 AM4/21/09
to pon...@googlegroups.com
哈哈,我也有同感!握个手先!^_^

2009/4/21 qiaojie <qia...@gmail.com>:


> exception specification是最傻的异常设计了,我最讨厌的就是java的这个特性
>
>
>
> 2009/4/21 Doyle <doyl...@gmail.com>
>>
>> 楼主知识告诉大家 为啥不喜欢Java"语言"
>> 并且是在告诉大家为什么不喜欢的详细版本
>>
>> 可是大家似乎都在说
>> 楼主你不应该不喜欢Java"语言"
>>
>> 个人喜好大家都要管么?
>>
>> 另:
>>
>> 我也是用c#的
>> 但是我也来说说我喜欢的java语言中的一个特性吧:
>> java需要在会抛出异常的方法上标注异常,我觉得这个要是c#也有该多好
>> 这样我就不会忘记加try块了
>>
>> 2009/4/21 xxmplus <xxm...@gmail.com>
>> >
>> > 这位朋友是不是中毒了??怎么一条接一条不停的发
>> >
>> > 2009/4/21 Linker <linker...@gmail.com>:
>> > > http://www.evermoresw.com.cn/webch/index.jsp
>> > > 大家看一下这个office.
>> > > 速度比WPS还要快一些。
>> > > 2009/4/21 Kenny Yuan <yuank...@gmail.com>
>> > >>
>> > >> 不想掺和别的,就想指出这个例子不靠谱
>> > >>
>> > >>
>> > >>

>> > >> OpenOffice是SUN买来的,不是SUN做的(不过SUN又被买了,哈,高兴)。"作为Sun做的产品,如果能够用Java做,肯定会用Java做的"这一条也太过武断了......


>> > >>
>> > >>
>> > >> 2009/4/21 Eric.Wang <wangsh...@gmail.com>
>> > >>>
>> > >>> 你被孟岩忽悠了。
>> > >>>
>> > >>> 最直接的例子:OpenOffice主要是用C++写的。作为Sun做的产品,如果能够用Java做,肯定会用Java做的。
>> > >>> 不用Java的原因是什么?主要就是Java太慢了。
>> > >>>
>> > >>
>> > >>
>> > >>
>> > >> --
>> > >> Kenny Yuan
>> > >> C++, UI, LISP, MMA, Psychology and Automobile.
>> > >> BLOG: CS巴别塔(Computer Science Babel)
>> > >> URL: http://blog.csdn.net/yuankaining/
>> > >>
>> > >>
>> > >
>> > >
>> > >
>> > > --
>> > > Regards,
>> > > Linker Lin
>> > > linker...@gmail.com
>> > >
>> >
>> >
>> >
>> > --
>> > Any complex technology which doesn't come with documentation must be the
>> > best
>> > available.
>> > Sent from Sydney, Nsw, Australia
>
>

--

七夜 七连星

unread,
Apr 21, 2009, 4:24:07 AM4/21/09
to pon...@googlegroups.com
  我用过几个java写的桌面程序,速度确实慢,是WIN平台上运行的,不知是不是微软故意搞得这么慢,但是速度与资源消耗应该是java最大的遗憾。我不看帮助文件就会使用C++开发环境编译个程序运行一下,但自己不看帮助文件却无法使用java开发环境运行起一个例子程序。对我来说java比C++还难得多。

--
七夜&七连星,你最真诚的朋友!
http://hi.baidu.com/qqwaqq

wing

unread,
Apr 21, 2009, 4:33:15 AM4/21/09
to pon...@googlegroups.com
你说的c++是linux下的,还是window下的?如果linux下c程序员,我觉得即便讨厌java,肯定是因为慢或者其他什么,怎么也不会因为难用的原因吧,win下面我就不奇怪了。

2009/4/21 七夜 七连星 <qqw...@gmail.com>:

--

Jeffrey Zhao

unread,
Apr 21, 2009, 4:37:18 AM4/21/09
to pon...@googlegroups.com
Win下又不是写不快,Win下的JVM又不是微软做的,我不知道这些个推论,或是奇怪不奇怪的是怎么得出的。

--------------------------------------------------
From: "wing" <wing9...@gmail.com>
Sent: Tuesday, April 21, 2009 4:33 PM
To: <pon...@googlegroups.com>


Subject: [TL] Re: 详细说说为啥我不喜欢Java“语言”{讨论}{技术}{Java}

> 你说的c++是linux下的,还是window下的?如果linux下c程序员,我觉得即便讨厌java,肯定是因为慢或者其他什么,怎么也不会因为难用的原因吧,win下面我就不奇怪了。

Jeffrey Zhao

unread,
Apr 21, 2009, 4:39:21 AM4/21/09
to pon...@googlegroups.com
为什么不看帮助文件C++就能写,Java就不能啊?记得当时初学Java也就是文本编辑器+javac,当然有书教,但是也不觉得会那么复杂。

Sent: Tuesday, April 21, 2009 4:24 PM
Subject: [TL] Re: 详细说说为啥我不喜欢Java“语言”{讨论}{技术}{Java}

wing

unread,
Apr 21, 2009, 4:43:22 AM4/21/09
to pon...@googlegroups.com
我又不是说java在win下跑不快,更不是说在win下开发难,你仔细看看回复,我只是奇怪,有人说写一个java例子比写c++还难,我觉得只有依赖vs这样ide的win程序员,才会觉得写java例子有多难,用过命令行的,写一个hello
world,javac一下,java一下,很难?

2009/4/21 Jeffrey Zhao <je...@live.com>:

Jeffrey Zhao

unread,
Apr 21, 2009, 4:46:19 AM4/21/09
to pon...@googlegroups.com
是我看错了,不好意思,呵呵。VS很强大,不多的确宠坏一批人。

--------------------------------------------------
From: "wing" <wing9...@gmail.com>
Sent: Tuesday, April 21, 2009 4:43 PM

qiaojie

unread,
Apr 21, 2009, 4:48:34 AM4/21/09
to pon...@googlegroups.com
我不知道exception specification存在的意义是什么?
会抛出什么异常是根据实现来决定的,通常定义接口的时候我不知道
也不关心会采用什么实现,所以无法确定会抛出什么异常,要把异常
写到接口函数里这不是一件非常糟糕的事情么?



2009/4/21 OwnWaterloo <ownwa...@gmail.com>

居振梁

unread,
Apr 21, 2009, 4:50:59 AM4/21/09
to pon...@googlegroups.com
那你来看这个吧:http://www.javaeye.com/topic/2038

2009/4/21 qiaojie <qia...@gmail.com>

我不知道exception specification存在的意义是什么?
会抛出什么异常是根据实现来决定的,通常定义接口的时候我不知道
也不关心会采用什么实现,所以无法确定会抛出什么异常,要把异常
写到接口函数里这不是一件非常糟糕的事情么?

qiaojie

unread,
Apr 21, 2009, 5:06:39 AM4/21/09
to pon...@googlegroups.com
是的,这个争论由来已久,很早以前就关注过。
经过我多年的编程实践,我得出的结论就是Checked Exception is Bull Shit.
Checked Exception可以增加程序可靠性的观点完全是扯淡, Checked
Exception只能让程序员抓狂,最后完全放弃使用。



2009/4/21 居振梁 <juzhe...@gmail.com>

居振梁

unread,
Apr 21, 2009, 5:16:15 AM4/21/09
to pon...@googlegroups.com
我自己是倾向于写提供机制的程序,这种情况下会多一点Checked Exception,但是做纯粹的业务处理时,非常头痛这些Checked Exception,因此我都在库里把他们转成RuntimeException。

其实很多讨论最后都归结为“视情况或环境而定”。有时候真的想问一下,讨论的必要性何在?(当然这本身也是一个讨论)
老赵的这篇文章也是如此。矛盾的是,论题本身的内容可以脱了具体的环境,但正要得出一个结论却不能脱离具体的环境。
因而随着参与人数的增加而难以控制讨论的方向。

这就是我不喜欢看到跑题的原因,甚至,引用一句话:回帖不看帖的人太恐怖了。

2009/4/21 qiaojie <qia...@gmail.com>

是的,这个争论由来已久,很早以前就关注过。
经过我多年的编程实践,我得出的结论就是Checked Exception is Bull Shit.
Checked Exception可以增加程序可靠性的观点完全是扯淡, Checked
Exception只能让程序员抓狂,最后完全放弃使用。

qiaojie

unread,
Apr 21, 2009, 5:45:08 AM4/21/09
to pon...@googlegroups.com
假设你要设计一个库,在库定义了完整的异常类层次,然后在函数签名上写上了会抛出什么什么异常,
从设计库的角度看是非常的完美,哪个函数会抛什么异常就定义的清清楚楚。然后有人开始用你的
库做业务逻辑了,当他调用库的某函数的时候碰上了xxx exception,但是他又不知道如何处理这个异
常,当然更不好意思在代码里try catch里了什么都不管,于是就只好改一下函数签名把异常往外抛,
然后依赖这个函数的其他代码又没法正常编译了,只好逐层往上修改,一直改到让人抓狂。于是大家
想了个办法,把Checked Exception统统catch了以后包装成RuntimeException抛出去,这下总算把
Checked Exception引入的代码修改问题限制到最小范围内了,但是增加了一些丑陋的低层次try catch
代码,这还不算,原来库的设计者用心良苦设计的异常类层次全都退化成了原始的RuntimeException,
让设计良好的异常类全都打了水漂。早知道使用者会把这些异常转化成RuntimeException,那当初还要
设计这些异常类干嘛呢?还要在函数的签名里写上这些Checked Exception干嘛呢?在库里直接抛
RuntimeException不是更节省大家的时间么?
所以Checked Exception存在的意义就是让库的设计者抛出一沱BullShit,然后让使用者去抓狂,最后用
RuntimeException收拾这沱BullShit的。








2009/4/21 居振梁 <juzhe...@gmail.com>

居振梁

unread,
Apr 21, 2009, 5:54:42 AM4/21/09
to pon...@googlegroups.com
存在RuntimeException本身也是一种机制,它允许开发人员像C#那样来处理异常,但是不保证所有的开发人员都领悟到这点并正确应用(包括java自己)。

2009/4/21 qiaojie <qia...@gmail.com>

早知道使用者会把这些异常转化成RuntimeException,那当初还要
设计这些异常类干嘛呢?还要在函数的签名里写上这些Checked Exception干嘛呢?在库里直接抛
RuntimeException不是更节省大家的时间么?

Eric.Wang

unread,
Apr 21, 2009, 5:55:57 AM4/21/09
to TopLanguage
@@~

这个例子是不太恰当。虽然StarOffice后来是被SUN买下并继续开发的,但是最初确实是Star公司创建的。有个有趣的事实,Star公司想创
造一个跨平台的Office,但是他们选用了C++,而没有选用“号称可以跨平台”的Java。这不是很有趣吗?

前面有位童鞋举永中Office的例子,我对永中Office不太熟悉。不过应该不算成功的软件吧?希望熟悉永中Office的童鞋来介绍一下。
有人说:"它不是完全用Java实现的,从帮助中可以看出永中Office利用了Gtk+(一个跨平台的GUI库,用c实现)"。Java在永中
Office里面扮演的更多的可能是胶水的角色。

我用过几个Java写的桌面程序的,基本上都比较笨重。也接触过几个Java的后台,基本上都比较慢。这可能是我见识比较少的原因。能否请哪位童鞋列举
几个轻快的Java桌面,或者高效的Java后台,让我有机会扩展视野?

Mina不要了,http://mina.apache.org/performance-test-reports.html的测试我认为是在测硬件
IO。


On 4月21日, 下午2时26分, Kenny Yuan <yuankain...@gmail.com> wrote:
> 不想掺和别的,就想指出这个例子不靠谱
>

> OpenOffice是SUN买来的,不是SUN做的(不过SUN又被买了,哈,高兴)。“*作为Sun做的产品,如果能够用Java做,肯定会用Java做的*
> ”这一条也太过武断了……
>
> 2009/4/21 Eric.Wang <wangshaoq...@gmail.com>

Eric.Wang

unread,
Apr 21, 2009, 5:59:53 AM4/21/09
to TopLanguage
非常同意你的观点。当初我们公司选择C#而不选择Java,一个很重要的原因就是"checked exception is bullshit."


On 4月21日, 下午5时45分, qiaojie <qiao...@gmail.com> wrote:
> 假设你要设计一个库,在库定义了完整的异常类层次,然后在函数签名上写上了会抛出什么什么异常,
> 从设计库的角度看是非常的完美,哪个函数会抛什么异常就定义的清清楚楚。然后有人开始用你的
> 库做业务逻辑了,当他调用库的某函数的时候碰上了xxx exception,但是他又不知道如何处理这个异
> 常,当然更不好意思在代码里try catch里了什么都不管,于是就只好改一下函数签名把异常往外抛,
> 然后依赖这个函数的其他代码又没法正常编译了,只好逐层往上修改,一直改到让人抓狂。于是大家
> 想了个办法,把Checked Exception统统catch了以后包装成RuntimeException抛出去,这下总算把
> Checked Exception引入的代码修改问题限制到最小范围内了,但是增加了一些丑陋的低层次try catch
> 代码,这还不算,原来库的设计者用心良苦设计的异常类层次全都退化成了原始的RuntimeException,
> 让设计良好的异常类全都打了水漂。早知道使用者会把这些异常转化成RuntimeException,那当初还要
> 设计这些异常类干嘛呢?还要在函数的签名里写上这些Checked Exception干嘛呢?在库里直接抛
> RuntimeException不是更节省大家的时间么?
> 所以Checked Exception存在的意义就是让库的设计者抛出一沱BullShit,然后让使用者去抓狂,最后用
> RuntimeException收拾这沱BullShit的。
>

> 2009/4/21 居振梁 <juzhenli...@gmail.com>


>
> > 我自己是倾向于写提供机制的程序,这种情况下会多一点Checked Exception,但是做纯粹的业务处理时,非常头痛这些Checked
> > Exception,因此我都在库里把他们转成RuntimeException。
>
> > 其实很多讨论最后都归结为“视情况或环境而定”。有时候真的想问一下,讨论的必要性何在?(当然这本身也是一个讨论)
> > 老赵的这篇文章也是如此。矛盾的是,论题本身的内容可以脱了具体的环境,但正要得出一个结论却不能脱离具体的环境。
> > 因而随着参与人数的增加而难以控制讨论的方向。
>
> > 这就是我不喜欢看到跑题的原因,甚至,引用一句话:回帖不看帖的人太恐怖了。
>

> > 2009/4/21 qiaojie <qiao...@gmail.com>

wing

unread,
Apr 21, 2009, 6:06:38 AM4/21/09
to pon...@googlegroups.com
Eclipse如何,虽然现在确实越做越大了,不过不装插件的话,不算慢,我觉得比vs好用,只是个人习惯,不要又引起新的争论。
没有跨平台的需要,是不会用java来写客户端的,office也不是c#写的吧?java的后台比较慢,指什么应用?如果web应用,瓶颈一般不会在这里的,吃内存倒是真的。


2009/4/21 Eric.Wang <wangsh...@gmail.com>:

--

Eric.Wang

unread,
Apr 21, 2009, 8:07:44 AM4/21/09
to TopLanguage
Eclipse比VS慢。速度上我感觉Eclipse<NetBeans<VS。后来Eclipse变得更快了一点,但是还是没有VS快。启动
VS2003只要两三秒钟,编辑代码、调试程序的时候,VS操作也很灵敏快速。

我试过用Eclipse写代码,不太习惯这只是个人问题,可以慢慢熟悉,但是Eclipse缺乏一个好的UI编辑器。我们选Java或者C#是希望快速
的写一些公司自己使用的UI 程序(client and web),这些程序用C++做不划算。Eclipse慢尚可忍受,UI编辑器不够强大就不满
足我们的需要了。

C#和Java都不够快,所以写office基本上都是用C++来写(永中office另议)。

我接触的几个java后台应用都是金融电信方面的,对外提供socket方式的服务。响应慢,处理能力低。


On 4月21日, 下午6时06分, wing <wing922w...@gmail.com> wrote:
> Eclipse如何,虽然现在确实越做越大了,不过不装插件的话,不算慢,我觉得比vs好用,只是个人习惯,不要又引起新的争论。
> 没有跨平台的需要,是不会用java来写客户端的,office也不是c#写的吧?java的后台比较慢,指什么应用?如果web应用,瓶颈一般不会在这里的,吃内存倒是真的。
>

> 2009/4/21 Eric.Wang <wangshaoq...@gmail.com>:


>
>
>
> > @@~
>
> > 这个例子是不太恰当。虽然StarOffice后来是被SUN买下并继续开发的,但是最初确实是Star公司创建的。有个有趣的事实,Star公司想创
> > 造一个跨平台的Office,但是他们选用了C++,而没有选用"号称可以跨平台"的Java。这不是很有趣吗?
>
> > 前面有位童鞋举永中Office的例子,我对永中Office不太熟悉。不过应该不算成功的软件吧?希望熟悉永中Office的童鞋来介绍一下。
> > 有人说:"它不是完全用Java实现的,从帮助中可以看出永中Office利用了Gtk+(一个跨平台的GUI库,用c实现)"。Java在永中
> > Office里面扮演的更多的可能是胶水的角色。
>
> > 我用过几个Java写的桌面程序的,基本上都比较笨重。也接触过几个Java的后台,基本上都比较慢。这可能是我见识比较少的原因。能否请哪位童鞋列举
> > 几个轻快的Java桌面,或者高效的Java后台,让我有机会扩展视野?
>
> > Mina不要了,http://mina.apache.org/performance-test-reports.html的测试我认为是在测硬件
> > IO。
>
> > On 4月21日, 下午2时26分, Kenny Yuan <yuankain...@gmail.com> wrote:
> >> 不想掺和别的,就想指出这个例子不靠谱
>
> >> OpenOffice是SUN买来的,不是SUN做的(不过SUN又被买了,哈,高兴)。"*作为Sun做的产品,如果能够用Java做,肯定会用Java做的*

> >> "这一条也太过武断了......


>
> >> 2009/4/21 Eric.Wang <wangshaoq...@gmail.com>
>
> >> > 你被孟岩忽悠了。
>
> >> > 最直接的例子:OpenOffice主要是用C++写的。作为Sun做的产品,如果能够用Java做,肯定会用Java做的。
> >> > 不用Java的原因是什么?主要就是Java太慢了。
>
> >> --
> >> Kenny Yuan
> >> C++, UI, LISP, MMA, Psychology and Automobile.
> >> BLOG: CS巴别塔(Computer Science Babel)
> >> URL:http://blog.csdn.net/yuankaining/
>
> --
> wing

> wing922w...@gmail.com

wing

unread,
Apr 21, 2009, 8:12:21 AM4/21/09
to pon...@googlegroups.com
web需要什么ui编辑器?我只用ue,后来js多了,就用js专用工具(主要是可以找到js语法错误),你说rad那种,我觉得那些入门觉得好,写多了,就觉得不好用了。

--
wing
wing9...@gmail.com

wing

unread,
Apr 21, 2009, 8:18:11 AM4/21/09
to pon...@googlegroups.com
win的一般的客户端工具,那就首选c#开发,我也很想用它写一些快速的东西,就是很多机器没装dot.net,ms为什么不把dot.net集成到os,和补丁一起更新,如果那样,c#能用的地方就很多了,就很愿意抽时间来学习它。

pongba

unread,
Apr 21, 2009, 8:55:18 AM4/21/09
to pon...@googlegroups.com


2009/4/21 Kenny Yuan <yuank...@gmail.com>
OpenOffice是SUN买来的,不是SUN做的(不过SUN又被买了,哈,高兴)。“作为Sun做的产品,如果能够用Java做,肯定会用Java做的”这一条也太过武断了……

我也正想说这个。OpenOffice的前身是StarOffice,1994年(对于其中一些组件,历史甚至更久远)就开始开发了,1999年被Sun收购随后开源。

94年的时候用C++做office看上去是一个不得已的选择:内存占用、Java平台(当时的)速度、本地外观可能都是考量的因素。所以这个例子只能说明在94年的时候做Office的话C++比Java是更好的选择。并不能证明在2009年的时候这仍然是最佳选择。

至于后来Sun为什么没用Java重写的决策因素我就不清楚了,也没搜到。也许对于这种大型项目,Big Rewrite的成本太高,也许开源开发模式主要还是改进为主(有谁知道的请指教?)

如果把这个决策问题放到目前的话,也许速度已经不是问题;在绝大多数个人PC的内存仍然<4G的前提下,内存占用也许仍是个问题,不过Linker提到的永中Office似乎是一个不错的正面案例。

--
刘未鹏(pongba)
Blog | Mind Hacks
http://mindhacks.cn
TopLanguage
http://groups.google.com/group/pongba

Flouse Blue

unread,
Apr 21, 2009, 4:50:29 AM4/21/09
to pon...@googlegroups.com
“写一个java例子比写c++还难”
我想那位朋友的意思确实是说在有IDE的帮助下
 
就我的感觉而言,搭建开发环境,java似乎真的比c/c++难,尤其是以前JAVA IDE不成熟的时候。

至于对于有耐心去学编译命令的朋友来说,这两种HELLO WORLD程序的费的功夫应该是差不多的吧?

2009/4/21 wing <wing9...@gmail.com>



--
@Flouse

OwnWaterloo

unread,
Apr 21, 2009, 5:20:13 AM4/21/09
to pon...@googlegroups.com
首先, 语言提供某个特性, 并不要求程序员一定要采用这个特性, 是吧?
exception specification存在的意义就是: 清晰的区分错误处理的责任端。

如果你设计一个f, 需要表达:
直接调用者或者间接调用者需要处理——或者说只需关心——某些错误。
其他的错误, 由被调用者——f——处理。
那么exception specification是最适合不过的手段了。

exception specification是将这种责任区分, 直接写入“源代码”的一种强有力的方式。
而非写入文档这种间接的方式。

如果你设计一个f, 需要表达:
我(被调用者f)不知道会发生什么错误,直接调用者或者间接调用者必须处理全部错误。
那么, 不用exception specification就是了。
它的存在, 是为了满足上面的表达, 而不是这个表达。


同时, java还提供了另一个有力的表达: checked exception。
当需要表达:直接调用者必须立即处理这个错误的时候, 可以采用。
只是, checked exception容易被滥用, 造成:
直接调用者其实并不知道如何处理错误, 只能勉强抓出, 再重新抛出给间接调用者。

说实话, 我到希望exception specification和checked exception都被加入C++。
后者没有, 可能是担心被滥用, 需要它的情况确实不多。
前者在C++中也有缺陷:
1. 它是运行时检查, 而非java编译时检查
2. 当违反——因为是运行时检查——时, 应该采取何种措施, 标准描述并不清晰
3. 当exception specification和函数指针, 成员函数指针和在一起时, 那才叫混乱……

PS: 我对java经验不多, 没写过多少java代码。
如果对exception specification的理解有误, 还望qiaojie兄和其他兄弟指点。

比如:在java和C#中
1. exception specification是否可以省略?
2. exception specification是否是编译时检查,运行时绝不会违反?
3. java和C#都有平台调用机制
那么如果被调用函数抛出异常(这是被调用端的失误, 不应该将异常抛出模块边界)
java和C#将如何处理? 将其封装成java和C#认识的,并且在exception specification中列出的异常???

2009/4/21 qiaojie <qia...@gmail.com>:

OwnWaterloo

unread,
Apr 21, 2009, 5:21:56 AM4/21/09
to pon...@googlegroups.com
>我得出的结论就是Checked Exception is Bull Shit.
>Checked Exception可以增加程序可靠性的观点完全是扯淡, Checked Exception只能让程序员抓狂
>最后完全放弃使用。
顶!!!

java之父还非要强调其”可以增加程序可靠性“ ……
一个完全不考虑程序员感受的偏执狂……


2009/4/21 qiaojie <qia...@gmail.com>:

It is loading more messages.
0 new messages