Hello World
Spiga

事理越辩越明,那么就来详细说说为什么我不喜欢Java*语言*

2009-04-19 02:56 by 老赵, 36999 visits

写在前面:这篇文章是在谈Java“语言”,文章里面也会再强调一下的。支持.NET的朋友也不用认为Java平台就此没落了,搞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的阵地上也无不可。不过有些东西兄弟我说在前头,一些啥“语言不是关键,没有讨论必要”,“你个死胖子有什么资格评论这些个”这类问题咱就先放放吧,大家在进行讨论的时候记得切中关键,并且看清我已经谈过的东西——咱也要遵循DRY原则嘛。至于如果您还要说我是“MVP鼓吹微软技术”不可信,那还真不怕您笑话,我半夜里辛辛苦苦码上这四五千字,微软不会给我一定点儿额外好处——平时也没有。信不信由您,咱也恨着呐,真的。

所属话题:谈谈Java语言
Creative Commons License

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名赵劼(包含链接),具体操作方式可参考此处。如您有任何疑问或者授权方面的协商,请给我留言

Add your comment

345 条回复

  1. 老赵
    admin
    链接

    老赵 2009-04-19 03:00:00

    一时兴起又扯了一大堆,嗯嗯。

  2. TT.Net
    *.*.*.*
    链接

    TT.Net 2009-04-19 03:12:00

    夜猫子

  3. 飞林沙
    *.*.*.*
    链接

    飞林沙 2009-04-19 03:22:00

    实在是夜猫子....

  4. 不是我不想说[未注册用户]
    *.*.*.*
    链接

    不是我不想说[未注册用户] 2009-04-19 03:50:00

    都一样~~

  5. 老赵
    admin
    链接

    老赵 2009-04-19 03:57:00

    @不是我不想说
    啥和啥一样?

  6. 我厂制造[未注册用户]
    *.*.*.*
    链接

    我厂制造[未注册用户] 2009-04-19 04:13:00

    晚睡的猫有耗子吃..果然看到好文了...java俺不熟,但c#一代一代的语法特性真是用起来越来越舒服了

  7. hlfStephen[未注册用户]
    *.*.*.*
    链接

    hlfStephen[未注册用户] 2009-04-19 04:40:00

    最近越来越关注楼主的博客了。

    总结得出:
    过去延伸至现在“流行”并不等于现在的“能力”的强大。
    “稳定”并不是不变的理由。

    受教了。

  8. 老赵
    admin
    链接

    老赵 2009-04-19 04:45:00

    @hlfStephen
    这是我的想法,欢迎不同的想法。
    例如肯定有人喜欢稳定,只是我喜欢不断进步的东西,所以没法理解吧。

  9. hlfStephen[未注册用户]
    *.*.*.*
    链接

    hlfStephen[未注册用户] 2009-04-19 04:50:00

    我的想法是C#这个语言发展得太快,2.0和3.0都还没完全搞懂就差不多4.0了。你写的《高阶函数、委托与匿名方法》还没完全看懂。

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

    涉及到哪些语法点,能告诉我一下么?谢谢。

  10. 老赵
    admin
    链接

    老赵 2009-04-19 04:56:00

    @hlfStephen
    扩展方法
    使用Lambda表达式创建匿名方法(或者说是委托对象)

  11. 温景良(Jason)
    *.*.*.*
    链接

    温景良(Jason) 2009-04-19 09:32:00

    哈哈

  12. Zhuang miao
    *.*.*.*
    链接

    Zhuang miao 2009-04-19 09:34:00

    没兴趣。。。。

  13. 名刘天下
    *.*.*.*
    链接

    名刘天下 2009-04-19 09:37:00

    真是夜猫子啊
    支持一下!

  14. 疯流成性
    *.*.*.*
    链接

    疯流成性 2009-04-19 09:43:00

    我也不喜欢JAVA,不过不是因为它的语言特性。而是一切皆为配置让我有点心烦。什么项目都是ssh。每次和JAVA组的人一起吃饭,都想干一架。这个争论真的没底的

  15. 韦恩卑鄙
    *.*.*.*
    链接

    韦恩卑鄙 2009-04-19 10:00:00

    老赵 你着相拉

    做人太厚道不好
    就好象看见一对友人情侣 男的偷吃 你告诉那个女人男人不忠
    要是两个人分了也还好 如果复合了 你就是罪人

    傻女人到处都是

  16. 一个爱编程的老人家
    *.*.*.*
    链接

    一个爱编程的老人家 2009-04-19 10:16:00

    路过,喜欢!!
    但主场和客场还是有分别的。
    但我还是比较喜欢C#!!!!!
    呵!呵!

  17. 雨中漫步的太阳
    *.*.*.*
    链接

    雨中漫步的太阳 2009-04-19 10:21:00

    我们公司就是从C#转入java的,当然这个都是领导的决定,而我们必须服从,一点点学习java,还好 java和C#语法上很类似.学习起来不是很累,对于某些东西的处理我也会不由自主的将java和C#比较,的确java在很多时候都不如c#方便,就是你说的生产力吧,可是我们头还是义无反顾的选择了java,以前我们所有的c#项目全部使用java重做了,这点我一直不明白为什么,但是java下面开源的东东着实让我欢喜,我想这个可能算是一个原因吧 其他的原因只能慢慢体会

  18. 怪怪
    *.*.*.*
    链接

    怪怪 2009-04-19 10:22:00

    “一个好的程序员,应该有一颗开放的心,任何语言、任何技术都可为我所用,不带偏见,不拘一格。”

    符合郑同学的一贯风格.... :P 不过认真地说,这确实是一句屁话。

  19. 百利
    *.*.*.*
    链接

    百利 2009-04-19 10:23:00

    赵老师你好
    很支持你的观点
    我是一个大四的学生,不过现在做.NET的开发, 在大二的时候我们同时开了C#和JAVA课,那个时候我就认定以后做.NET,当时最直接的原因是我看的所有JAVA方面的参考书都没有C#的书里面的代码写的优雅漂亮,呵呵现在想想当时很幼稚,不过现在很庆幸当初的选择

  20. aa666[未注册用户]
    *.*.*.*
    链接

    aa666[未注册用户] 2009-04-19 10:25:00

    整天争论这些东西一点用到没有,无聊,浪费时间

    你不喜欢不等于别人不喜欢,况且java工作远远多于.net,整体工资也比.net高,语言只是一种工具,一种实现功能的工具。

    我要说的是,java和C#都是很优秀的语言,都有很强大的功能,都能做出很大很好的产品来,只是java出来得比较早,所以导致了这样的局面,我完全相信有一天C#会排在java前面

  21. 冰の酷龙
    *.*.*.*
    链接

    冰の酷龙 2009-04-19 10:41:00

    我到觉得java也蛮好的,反正主要是学.net,java也捎带看一下。

  22. 对牛谈请
    *.*.*.*
    链接

    对牛谈请 2009-04-19 10:46:00

    C# 越到后面越要变成傻瓜式开发,不过效率确实很高

  23. Jason.Wei
    *.*.*.*
    链接

    Jason.Wei 2009-04-19 10:47:00

    说白了,
    业内对java的喜欢,个人觉得还是在于
    java开源的特性以及强大的开源社区资源支持!
    更重要的一点便是成本!

  24. Jason.Wei
    *.*.*.*
    链接

    Jason.Wei 2009-04-19 10:49:00

    老赵比以前帅气多了。

  25. 黑羽飘舞
    *.*.*.*
    链接

    黑羽飘舞 2009-04-19 11:05:00

    发现了老赵的新照片,视乎比以前瘦了好多,看来减肥很成功啊!

  26. Ariex[未注册用户]
    *.*.*.*
    链接

    Ariex[未注册用户] 2009-04-19 11:25:00

    单就语言亲和力来说,Java比C#差的太多

    至于说java不断改进的,看看那些int之流的非对象基本类型,还有Java所谓的泛型,就知道那都是狗屁

  27. ZelluX[未注册用户]
    *.*.*.*
    链接

    ZelluX[未注册用户] 2009-04-19 11:30:00

    俺也不喜欢Java这语言 太土了 连个closure都没有 嘿嘿

  28. zhu liangxiong[未注册用户…
    *.*.*.*
    链接

    zhu liangxiong[未注册用户] 2009-04-19 11:33:00

    說一個Java的優勢:
    Java有JCP 所以有很多公司都在參與,而C#呢 一切都由MS控制着.對於這一點,我對MS深恶痛絕.

  29. aminic
    *.*.*.*
    链接

    aminic 2009-04-19 11:37:00

    身体真好啊!!半夜还写!!
    保持身体健康为第一要务!!

  30. aa666[未注册用户]
    *.*.*.*
    链接

    aa666[未注册用户] 2009-04-19 11:40:00

    博客园越来越差了,成天讨论这些无聊的东西,无用的东西,还放在首页,我早就不在这里发文了

  31. 一人行
    *.*.*.*
    链接

    一人行 2009-04-19 11:41:00

    希望微软一统天下!
    ::C#是业余爱好,不喜欢jAVa

  32. 郑晖
    *.*.*.*
    链接

    郑晖 2009-04-19 11:41:00

    @Jeffrey Zhao
    昨天半夜失眠,爬起来上网,顺便写了一个回复。想不到楼主更猛,不仅两三点还在写博客,4点多钟还在回复在下的回复,哈哈。真心地提醒一下:熬夜伤身哦。

    网上的争论之所以十之有十是不了了之,至少有两方面的问题。
    一是语言表达问题,自然语言太有限了,无法形成对思维的准确映射。比如我们对“固步自封”和“寸步难行”的理解看起来就很不一样(总不至于要到成语字典上找定义吧),还有流行当然不代表合理,但“流行”总有背后的原因。在此我就不多说了。
    二是态度问题。绝大多数人争论的目的不是为了在思想撞击中产生火花,而是为了证明自己的正确。在不少人潜意识里面,面子比真理更重要。从一个错误的方向出发,结果可想而知。楼主既然为此专门发帖,至少说明态度是认真的,还特意推荐我的博客,在此表示感谢。这倒不是因为我有多么重视点击率,而是从中看到了楼主的诚意,为此感到很欣慰。

    我发帖主要有两个目的:
    一是认为楼主有一些我认为不合适的措辞和说法。其实我也很恼火Java7拒绝了闭包的提案,但语言是别人的,评头论足自无不可,但更重要的还是踏踏实实提高自身水平。楼主作为老程序员,我相信你可以把握这个度,但你的说法却可能对许多一知半解的人造成误导,所以我说过,我的评论更多地是针对你的读者。
    二是觉得博客园似乎过于局限.NET技术,不少人眼中微软就是IT的唯一化身。以此评论刺激一下,也算是用心良苦吧。

    最后说一点,也是一个争论的一个关键点。
    >>(引用):改进语言只要保持向前兼容,还会有什么问题吗?

    向前兼容可不是件容易的事,要保证源码兼容:比如:加一个关键词,以前所有拿关键词作变量名的代码都成了非法的了;还要保证二进制码兼容,比如:Java的泛型(type erasure)之所以不如C#的泛型(reification),更不如c++的泛型(template),就是为了保证不破坏以前程序bytecode的有效性。

    “事理越辩越明”,只是一个美好的愿望,大多时候是越辩越浑。我就不继续搅浑了。无论如何,还是非常感谢楼主的用心回复!

  33. Martin(高超)
    *.*.*.*
    链接

    Martin(高超) 2009-04-19 11:45:00

    个人从事.net开发,没有研究过Java。挺不错的。至于微软的霸道,都是人人皆知的事情。

  34. 郑晖
    *.*.*.*
    链接

    郑晖 2009-04-19 11:57:00

    --引用--------------------------------------------------
    怪怪: “一个好的程序员,应该有一颗开放的心,任何语言、任何技术都可为我所用,不带偏见,不拘一格。”

    符合郑同学的一贯风格.... :P 不过认真地说,这确实是一句屁话。

    --------------------------------------------------------
    这话似乎也符号怪怪同学的一贯风格:喜欢故作惊人之语。

    真理从某种角度看就是屁话,但又有多少人真正愿意去体会真理的气味呢?

  35. C#还是挺好的[未注册用户]
    *.*.*.*
    链接

    C#还是挺好的[未注册用户] 2009-04-19 12:05:00

    做java的对C#和.net的打压也不是一时半会的事了。可以问那些刚入code不久的人,你会得到一个统一的说法,他们一准会告诉你C#和.net怎么怎么不如java和java平台, 更有甚者还把asp与asp.net混为一潭,问其哪来的说法,java书籍、java社区。java到底是哪比C#好呢?运行速度?开发效率?适用场景?跨平台性(这个最让人窝火,mono都那么多年了,还是有java人说.net只能在windows上运行)?
    还有人说asp.net的不好,说只能做小网站,都不知道是从哪得来的结论。
    java的优点C#现在已经都有了,C#的n多优点却是java没有的。(不要提java泛型,内部实际是object类型转换的东西)

    java现在的市场占有率高,和它出现的时间还是有关系的。印象中java早在1983年就出现了。

    楼上有人说了收入的问题。这个跟个人能力有关,好像是51job上的统计,做ms高级开发的人普遍收入要高于做java的。为什么?能把软件做到傻瓜化的人,收入能不高么?

  36. junchu[未注册用户]
    *.*.*.*
    链接

    junchu[未注册用户] 2009-04-19 12:09:00

    JAVA无法做到C/C++的那种沉淀. 但比C#早诞生, 又不能随波逐流的跟在后面不断变化自己. 变的有些尴尬的语言.
    P.S 个人觉得疯狂的程序员应该是有语言宗教信仰的. 疯狂到一定程度就是好的程序员了. - -

  37. 老赵
    admin
    链接

    老赵 2009-04-19 12:52:00

    好吧,谢谢大家支持,不过老赵其实还是最想听有针对性地反对意见。
    考虑去Java社区玩一玩……

  38. 老赵
    admin
    链接

    老赵 2009-04-19 12:56:00

    --引用--------------------------------------------------
    aa666: 博客园越来越差了,成天讨论这些无聊的东西,无用的东西,还放在首页,我早就不在这里发文了
    --------------------------------------------------------
    哈哈,您喜欢什么?ASP.NET编程百例?

  39. 楚广明
    *.*.*.*
    链接

    楚广明 2009-04-19 13:06:00

    从近期的Cnblogs的首页文章与楼主的文章后面的回复,看来这是一场有蓄谋的java门徒对.net社区的袭击,我们有点反击是正常的。

  40. YingcongShaw[未注册用户]
    *.*.*.*
    链接

    YingcongShaw[未注册用户] 2009-04-19 13:06:00

    个人也用Java过一年左右的时间,半瓶水.看了老赵的文章,还是忍不住说句,呵呵.个人认为Java目前还很流行,并不是因为他真的比别的语言NB得多,而是个先机问题.

  41. 老赵
    admin
    链接

    老赵 2009-04-19 13:09:00

    --引用--------------------------------------------------
    楚广明: 从近期的Cnblogs的首页文章与楼主的文章后面的回复,看来这是一场有蓄谋的java门徒对.net社区的袭击
    --------------------------------------------------------
    说实话我真没看出来……

  42. 匿名[未注册用户]
    *.*.*.*
    链接

    匿名[未注册用户] 2009-04-19 13:11:00

    老赵的照片很像金胖子,同意的举手

  43. MATZ[未注册用户]
    *.*.*.*
    链接

    MATZ[未注册用户] 2009-04-19 13:18:00

    用正则确实很方便也很高效,但既然是算法题,为何不用算法的思想去做呢

    00101111110111101110
    观察可知
    每个区间的end的条件满足str[i+1]>str[i] 时,end = i+1
    每个区间的start是start = end+2

  44. 楚广明
    *.*.*.*
    链接

    楚广明 2009-04-19 13:21:00

    @Jeffrey Zhao
    从我身边的程序员的情绪能看的出来,近期SUN所出的一些事对java程序员有非常大的心理影响,java程序员所认同的“只要有开源,java就是不死的,说实话这是自已骗自已的”。

  45. 老赵
    admin
    链接

    老赵 2009-04-19 13:23:00

    --引用--------------------------------------------------
    MATZ: 用正则确实很方便也很高效,但既然是算法题,为何不用算法的思想去做呢

    00101111110111101110
    观察可知
    每个区间的end的条件满足str[i+1]&gt;str[i] 时,end = i+1
    每个区间的start是start = end+2
    --------------------------------------------------------
    正则表达式只是封装了算法的实现而已,不是么,呵呵。
    当然本来就是不难得问题,现在只是拿出来说明问题而已。

  46. 老赵
    admin
    链接

    老赵 2009-04-19 13:25:00

    --引用--------------------------------------------------
    楚广明: @Jeffrey Zhao
    从我身边的程序员的情绪能看的出来,近期SUN所出的一些事对java程序员有非常大的心理影响,java程序员所认同的“只要有开源,java就是不死的,说实话这是自已骗自已的”。
    --------------------------------------------------------
    其实我觉得这句话并非假话……Java那么多年下来,积累无数,又是开源,真死不掉的,这也是我觉得不爽的原因之一,靠着这些也能活下来,是阿,你是用不着改进了,但你好意思么……

  47. 上不了岸的鱼{ttzhang}
    *.*.*.*
    链接

    上不了岸的鱼{ttzhang} 2009-04-19 13:35:00

    看来老赵很有时间,不过感觉大家一再争论着问题,实在没有意思,做好自己选择的技术就OK了

  48. 银河
    *.*.*.*
    链接

    银河 2009-04-19 13:35:00

    路过,打酱油的。
    不过,我也觉得 C# 比 Java 好用。

  49. Leem
    *.*.*.*
    链接

    Leem 2009-04-19 13:47:00

    语言本身确实是最重要的,其他的类库或者开源项目什么的只是时间问题而已。

    大家还知不知道C#的语言的创造者是什么身份吗?好像前身就是参与Java语言创造的。

    也是因为觉得Java有很多不足之处,才想到再创造一种更好更优雅的语言,那就是C#

  50. 非强人[未注册用户]
    *.*.*.*
    链接

    非强人[未注册用户] 2009-04-19 13:51:00

    赵老师的眼镜太丑了,请换一个吧。你也想自己更帅气一点吧,哈哈哈哈哈


    赵老师还是很有才的。

  51. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-19 13:59:00

    @junchu

    java目前的沉淀体现在库上,比如,在web开发和Client之外,java到目前为止硕果累累。此外,Java社区群星灿烂,.net社区很多明星项目不是慢慢的闭源了,就是原作者撂挑子不干了,也没人接手。到现在.net下还没一个好用的XQuery库。

    @C#还是挺好的

    java的优点C#现在已经都有了?

    咱先说说跨平台,目前电脑越来越便宜,在这种背景下Windows的价格显得越来越“贵”了,因此,在很多情况下希望客户端或服务器跑在linux下。你写一个WPF程序,在mono上能运行?WPF这是.net 3.0的标准配置吧。就说Server程序吧?看看mono对wcf惨兮兮的实现,敢用吗?好,咱就不用wcf,wcf是给懒人用的,咱就用用Socket,Java社区有Mina,.net下呢?

    跨平台说完了,继续说库。不能说.net无法跨平台,但这个跨平台是惨兮兮的,丫鬟级别的。导致很多重量级别的基础性项目选择java开发。很多人不愿意同时推出Java版本与.Net版本,让他们选择推出一个版本,他们愿意选择Java还是.Net?就我的感觉,大部分选择了Java。

    计算设备种类越来越多,这些设备,Windows并不占主导地位,这个操作系统显得贵、庞大。.net下的库是什么状态呢?只要MS官方不想做的,要在社区里找个可用的,只能听天命。还说XQuery吧,微软死都不搞正式的XQuery,它说你们有XSLT用就够了。社区里也找不到好用的。哦,.Net下有Linq 2 XML,问题用这个就是同.net绑定了,会失去很大的灵活性。

    库说完了,再说所谓的云计算。云计算的后台,从经济性上来说,Linux + 烂机器集群是最具优势的,从操作系统的可定制性上来说,Linux也是最具优势的。也就是说,今后的最流行云计算平台,支撑它的后台极有可能是 Linux。在这一个领域,.net拿得出手的只有mono。虽然微软也在搞云计算平台,但微软在web上的成就之差是有目共睹的。以现状来看,GAE是相当强势的。GAE对.net的支持还不知什么时候才能来到。

    云计算说完了,再说特殊领域的开发。假如我要做语音识别引擎,不用IBM的那个和微软的那个,我要有个自己的引擎。IBM那个和微软的那个都是由开源的CMU Sphinx一脉发展出来的。CMU Sphinx V1-V3是C写的。它从V4开始,用Java写了。假如要在Cmu Sphinx基础上开发自己的引擎,用什么语言?

    .net社区现状是,微软光芒照不到的地方,大部分是荒芜的。微软光芒照到的地方,照死一大片社区项目。

  52. 老赵
    admin
    链接

    老赵 2009-04-19 14:06:00

    --引用--------------------------------------------------
    上不了岸的鱼{ttzhang}: 看来老赵很有时间,不过感觉大家一再争论着问题,实在没有意思,做好自己选择的技术就OK了
    --------------------------------------------------------
    不要看到争论就觉得没意思,平衡论啊,争论了才能眼界宽广。

  53. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-19 14:09:00

    @Leem

    语言本身确实是最重要的,其他的类库或者开源项目什么的只是时间问题而已。

    >> 时间比语言、类库和开源项目都重要。

  54. 老赵
    admin
    链接

    老赵 2009-04-19 14:11:00

    @xiaotie
    呵呵,其实我也不同意他说的“Java的优势C#都有了”。不过你说的也有偏颇,不过有机会我也现在这篇文章那样谈谈,这里咱就不作话题延伸了。
    不过您能否针对我的文章内容,也就是Java语言发表意见?不用抓住其中某条不恰当的回复来施以笔墨,没啥效果的,呵呵。

  55. 老赵
    admin
    链接

    老赵 2009-04-19 14:14:00

    --引用--------------------------------------------------
    xiaotie: @Leem
    语言本身确实是最重要的,其他的类库或者开源项目什么的只是时间问题而已。
    >> 时间比语言、类库和开源项目都重要。
    --------------------------------------------------------
    好了好了偏题了偏题了,兄弟们这些我都谈过了,咱来点新意可以吗?为什么我说Java语言不好就以为我要否认Java全部了?
    Java平台上的项目优势我又没有否认,不过难道这就是Java语言不发展的理由吗?

  56. GoGoSonny
    *.*.*.*
    链接

    GoGoSonny 2009-04-19 14:15:00

    至少没搞的跟C++哪样乱也就蛮不错了。。。

  57. 老赵
    admin
    链接

    老赵 2009-04-19 14:17:00

    --引用--------------------------------------------------
    GoGoSonny: 至少没搞的跟C++哪样乱也就蛮不错了。。。
    --------------------------------------------------------
    呵呵,你老把Java和别人的缺点比,Java兄弟也会不乐意的,你说呢?

  58. Terry.Feng.C
    *.*.*.*
    链接

    Terry.Feng.C 2009-04-19 14:21:00

    又换照片了,这次还挺酷

  59. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-19 14:23:00

    @Jeffrey Zhao

    谈语言发展没啥好谈的,Java 和 .Net语言发展的对比就如同印度与中国搞拆迁那样,都是有自身的约束条件的。

  60. 说的是捏[未注册用户]
    *.*.*.*
    链接

    说的是捏[未注册用户] 2009-04-19 14:25:00

    支持老赵,我也很喜欢C#,因为代码写起来很优雅,看的很舒服^_^,不过因为公司需要,近期要转去学c++了,迷茫加困惑中*_*。

  61. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-19 14:31:00

    @xiaotie

    谈谈两个语言的约束条件:

    第一,两个平台发展方向的决策机制不一样,这个不详谈。
    第二,主导.net发展的微软是卖软件的,主导java发展的那帮哥们是卖服务的。.net好用有助于微软卖软件,java好用,不一定有助于卖服务。比较两者可以看出,.net的tradeoff,易用性是在可靠性之前的,可移植性,不知被微软放在哪里去了。java的tradeoff,可靠性是在易用性之前的,从两者对异常的态度可以看出。Java下可移植性也是相当靠前的,因此,java上永远也出不了与WPF相同质量的东西。
    说白了这种比较就是田忌赛马。

  62. 老赵
    admin
    链接

    老赵 2009-04-19 14:32:00

    @说的是捏
    为什么要迷茫困惑?多了解一样东西,多好。

  63. 老赵
    admin
    链接

    老赵 2009-04-19 14:35:00

    @xiaotie
    “决策论”似乎值得推敲,让我想想,呵呵。

  64. 一人行
    *.*.*.*
    链接

    一人行 2009-04-19 14:48:00

    --引用--------------------------------------------------
    其实我觉得这句话并非假话……Java那么多年下来,积累无数,又是开源,真死不掉的,这也是我觉得不爽的原因之一,靠着这些也能活下来,是阿,你是用不着改进了,但你好意思么……
    --------------------------------------------------------
    一句话:Java不死,老赵不爽

  65. 老赵
    admin
    链接

    老赵 2009-04-19 14:49:00

    @一人行
    错了,是“Java不死 && Java不改进”,老赵不爽

  66. Clingingboy
    *.*.*.*
    链接

    Clingingboy 2009-04-19 14:52:00

    这个世界上就没完美的东西,时代需要c++,于是c++出来了.c#比c++优雅,但c++就已经这么设计了.接受了就好.java也如此,存在就合理...要是.net早些出来,c#早些设计出来就不同了,过去的事情就这么过去了.存在还是存在.就这样了.

  67. 老赵
    admin
    链接

    老赵 2009-04-19 14:55:00

    @Clingingboy
    “存在便是合理”真是百搭啊,不过这就是Java不进步的原因吗?

  68. jilin[未注册用户]
    *.*.*.*
    链接

    jilin[未注册用户] 2009-04-19 15:02:00

    欣喜的看到老赵终于公开批评JAVA了。我个人也很反感老好人似的做法,不好的就是要批评,出于社会责任感的角度讲的话那就更加要实事求是的批评到底!

    其实很多程序员选择哪个语言和平台,不是自己说了算的,毕竟要生存,企业的选择成就了现实的格局。但是做为每一个头脑清醒的程序员来说,应该知道拿什么吃饭并不代表什么就是好的。

    JAVA生产力之低确实是事实,不能拿个别资深的熟练工来说事,用JAVA编程和精通JAVA是两个截然不同的概念,但他们在网络上发言却是同权的,这会给人以很大的假象。去年有半年的时间,我带一个JAVA项目,虽然对JAVA介入的并不是特别深,但一样可以得出一些一般性的结论,超过我以前对它的想象:
    企业JAVA开发平台的搭建不是一般的麻烦;
    ECLIPSE的性能、稳定性与VS.net IDE相比差的不是一星半点;
    同样的业务逻辑下的WEB项目,与微软平台相比,调试,运行的效率相差几十倍;
    中、初级JAVA程序员的大局感以及编程水平比微软平台开发人员差很多,一个项目中五六十人,我心里清楚其中真正起作用的不过二三人,其他人是充数给客户看的,基本和打字员的作用差不太多;
    JAVA的特点决定了它的不一致性,在一个项目中,众多的第三方JAR包带来的显性的及隐性的冲突数不胜数;
    我们的项目最后要发布到WAS集群上,但就是在这个WAS集群上,同样的步骤发布WAR包,就有30%左右的概率不成功,失败的提示多种多样,让我不禁胆寒,发布个JAVA项目就像是竖起个鸡蛋一样,一旦弄好,就不敢再碰它了!这么多年那些做JAVA的人是在怎么样的折磨自己、折磨客户啊!

    再举一个实例:与我们系统有接口的平台传给我们一个XML串,我们需要解析出其中的数据,然后再组织成一个我们的XML串,用于传到页面上来显示。如果在.net中完成此事,一个System.Xml命名空间几分钟就可以搞定,但是我们团队里的JAVA程序员却结合了两三个包,我记得有dom4j,w3c dom,好像还有jdom,才完成此事。因为其中的一个不能"LoadXml",能LoadXml的又不能selectSingleNode...,再比如调用WEB SERVICE,N种方法可用,但是程序员们就是不能快速一致的开发好,你能说碰巧我手下的程序员都差吗?管中窥豹啊!
    我觉得企业选择JAVA最初是源自欧美的ANTI-MS的公司的对MS的仇视,进而带起了一批国内企业的“骨干”选择JAVA,他们大力鼓吹JAVA,抨击MS;另外一个选择JAVA的原因就是所谓的跨平台和开源项目了。但是不知道有没有人算过TCO,如果算一算的话,我想结论一定是惊人的。
    我现在觉得坚持真心认为JAVA好的人,性格可能有缺陷,需要看看心理医生。

  69. Clingingboy
    *.*.*.*
    链接

    Clingingboy 2009-04-19 15:06:00

    @Jeffrey Zhao
    我感觉可能因为微软太大,大家的心理就是跟他对着干.即使c#优雅,我也不用.不改进照样做事情.

  70. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-19 15:09:00

    这兄弟两个完全可以看成两个不同的东西。就像windows和linux。

    Java要在.net的地盘战胜.Net,必须要放弃可移植性,增加易用性。.Net要在Java的核心地盘战胜Java,必须要解决可移植性问题(不提mono这山寨货),而这对Windows意味着什么?

    不出特别情况,上面两者都是不可能的。各持一端,岂不很好?

    就我这个尽量避免Web开发的人而言,我把.Net定位为客户端相关的技术,Java定位为服务器端的技术。做我自己的事情,我可能这样进行技术选型。

  71. 老赵
    admin
    链接

    老赵 2009-04-19 15:11:00

    @xiaotie
    我不太同意这个观点,我很想陪你说下去,不过我也真不想偏题,怎么办?

  72. 老赵
    admin
    链接

    老赵 2009-04-19 15:13:00

    @jilin
    你说的这些也谈到平台和周边工具上去了,我不发表意见了,我只谈语言,因为其他东西说不清啊,比如TCO,我不知道该怎么算。

  73. jilin[未注册用户]
    *.*.*.*
    链接

    jilin[未注册用户] 2009-04-19 15:16:00

    @xiaotie
    MS不大可能会解决.net的可移植性问题,至少不会公开那么做。其实就一般的企业来讲,他们关注的始终是用信息化解决业务问题,提高效率,为什么一定要用非WINDOWS的服务器呢?企业系统也大多是内网系统,干吗那么担心所谓的安全性问题呢?再说就算是外网,WINDOWS就那么不安全吗?我不这么认为。

    但我觉得JAVA有很大的上升空间啊,比如SUN官方放下面子,学一下.net framework的类库设计,来一套JAVA版本的。第三方的用着总不是那么踏实,总不能让大企业做小白鼠吧。

  74. peace
    *.*.*.*
    链接

    peace 2009-04-19 15:20:00

    温柔的顶一下

  75. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-19 15:21:00

    @Jeffrey Zhao
    晚上再聊,我还在干活中

  76. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-19 15:24:00

    @jilin

    (1) 2001年 Code Red, Nimda, and Slammer,一朝被蛇咬。。。。。。
    (2) Sun快死了
    (3) 你那项目不好评价,一评价就要打口水战

  77. jilin[未注册用户]
    *.*.*.*
    链接

    jilin[未注册用户] 2009-04-19 15:26:00

    @Jeffrey Zhao
    的确,我也没顾忌太多,我也不喜欢束缚,但老赵不一样,要注意身份形象嘛^_^

    其实,很难脱离开平台与周边工具谈语言,毕竟写程序时刻都和类库,工具打交道,对于程序员感性的认识来讲,语言并不是影响最深的。

    就语言来说,我倒觉得中间语言确定下来之后,基调也就是确定的了,至于语法上的增强,倒似是一门艺术,不影响完备性,只是多了些选择,不被工具左右而迷茫的话,总归是好事。

  78. 老赵
    admin
    链接

    老赵 2009-04-19 15:26:00

    @xiaotie
    士别三日当刮目相看,都过了1000个三日了,你还嗷嗷的,只能说是你的损失啊……

  79. 老赵
    admin
    链接

    老赵 2009-04-19 15:28:00

    @jilin
    我是看到Java平台上那么多宝物确是由Java这个低效的语言实现的,实在不爽。

  80. canbeing
    *.*.*.*
    链接

    canbeing 2009-04-19 15:29:00

    过于敏感的话题~~

  81. jilin[未注册用户]
    *.*.*.*
    链接

    jilin[未注册用户] 2009-04-19 15:30:00

    @Jeffrey Zhao
    那你就振臂一呼,大家把宝物移植到.net上吧!能不能说说排在你心中前十名的宝物。。

    干的话,算上我一个;)

  82. 楚广明
    *.*.*.*
    链接

    楚广明 2009-04-19 15:32:00

    @xiaotie
    让微软把.net平台实现官方跨平台,那我想全世界有一半以上的程序员要疯掉。

  83. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-19 15:34:00

    @Jeffrey Zhao

    我知道现在的windows比linux还安全。问题,历史摆在那里 。。。 有口难言。

    你那还好,我涉及的很多宝贝是C++,TCL这种古董写的。那才痛苦。

  84. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-19 15:38:00

    @jilin

    顺便帮我移植几个:

    mina
    ssfnet
    cmusphinx
    repast
    openfire
    SweetHome3D

  85. 老赵
    admin
    链接

    老赵 2009-04-19 15:38:00

    @jilin
    不容易的,很多东西平台依赖性太强,例如Hadoop就是基于SSH来通知nodes。能移植的往往就是Lucene,Nibernate这种纯粹的东西。

  86. 老赵
    admin
    链接

    老赵 2009-04-19 15:39:00

    @xiaotie
    我认为,Java如此多项目的发展还是因为它的文化而不是平台能力。
    例如IE的扩展能力不比FireFox差,但是IE的插件就是不多,确切地说,是大量的插件是要用钱买的。

  87. ffdsafdsafdsa[未注册用户]
    *.*.*.*
    链接

    ffdsafdsafdsa[未注册用户] 2009-04-19 15:40:00

    老赵也弄个流芳百世的.net开源项目吧。

  88. 老赵
    admin
    链接

    老赵 2009-04-19 15:42:00

    @ffdsafdsafdsa
    这也是我的愿望

  89. kate[未注册用户]
    *.*.*.*
    链接

    kate[未注册用户] 2009-04-19 15:47:00

    你还不够资格评判Java呢!
    吃人家的嘴软!不要拿了微软的好处就说Java的坏话!

  90. 老赵
    admin
    链接

    老赵 2009-04-19 15:50:00

    --引用--------------------------------------------------
    kate: 你还不够资格评判Java呢!
    吃人家的嘴软!不要拿了微软的好处就说Java的坏话!
    --------------------------------------------------------
    哈哈,果然不出所料,其实文章最后一段话就是为您准备的。:)

  91. 怪怪
    *.*.*.*
    链接

    怪怪 2009-04-19 15:53:00

    @郑晖
    呵呵,随便侃侃大山就是惊人之语?确实惊人。

    从古至今,抱着和这种说法类似的名言警句很多,可惜无一例外都没有什么建设性。这不是针对你的、或者说专指技术领域的。真理和屁话也许很象,但是它们背后是有非常现实的区别的。

    不过你最后那句有些道理,确实很多人不喜欢或者干脆仅仅一时没闻见真理的味道,就去闻屁、传屁了。:P西方人总是带着各种各样的困惑死去,而东方人却总是拈花一笑;其结果又如何呢?

    拿你这句话来说什么是“偏见”、什么又是“好程序员”呢?

    把一些激化各种范式之争的家伙比如Stroustrup、Richard Gabriel、Linus,与你我甚至某些“大家风范”的技术明星相比,谁更有偏见、谁又是好程序员呢?

    伤和气的话不想多说了,工作性质不同、目标也不一样;只是相对于我这样的野孩子,我总觉得职业/半职业作者应该少些个人的感慨(不是指幽默的风格,这个很棒!)、多些实质性内容。

    在这里其实也并不是想支持老赵,只是看到类似于“真谛”的说法就有点忍不住,见笑了。当然这些也只是我的个人看法,得罪勿怪。

  92. helodsw[未注册用户]
    *.*.*.*
    链接

    helodsw[未注册用户] 2009-04-19 15:59:00

    看来老赵还是菜鸟,到现在为止还在为语言而争,不是你不喜欢,就说明该语言不好了,为什么中国的软件行业这么不发达,就是象你们这样的Microsoft走狗在。

  93. 老赵
    admin
    链接

    老赵 2009-04-19 16:12:00

    @helodsw
    咦,争论语言不是流行吗?你看Linus,Stroustrup等大牛一天到晚出来争论C/C++。
    非常感谢您能把我放到如此重要的位置上,我想如果我有那么大影响力,一定可以名留青史的,呵呵。

  94. feilng[未注册用户]
    *.*.*.*
    链接

    feilng[未注册用户] 2009-04-19 16:13:00

    其实就是大教堂与集市
    Java本质上和C++一样是大集市,
    从机制上缺乏创新所需的魄力,每次前进都只是各方妥协的结果,所以导致包袱越来越大

  95. feilng[未注册用户]
    *.*.*.*
    链接

    feilng[未注册用户] 2009-04-19 16:18:00

    语言及平台唯一的衡量就是生产力/成本
    当初你选择C、C++而不选汇编做开发,只是因为生产力/成本的考虑,这个是由社会生态决定,不是单独一个人决定的。同样道理当你的公司发现Java比C++的生产力/成本值更高的时候,他们慢慢转向了Java,所以语言不是你自己就能选择的,而是社会的选择。

  96. 老赵
    admin
    链接

    老赵 2009-04-19 16:26:00

    @feilng
    “个人无用论”也是百搭啊。
    在“个人无用论”和“存在合理论”之前,还有啥讨论的起来呢?

  97. 郑晖
    *.*.*.*
    链接

    郑晖 2009-04-19 16:39:00

    @怪怪
    >>呵呵,随便侃侃大山就是惊人之语?确实惊人。
    哈哈,你的话谈不上是惊人,正如我的话谈不上屁话。这叫以毒攻毒:-)
    别误会,我可没那么死板,这点幽默感还是有的。

    >>从古至今,抱着和这种说法类似的名言警句很多,可惜无一例外都没有什么建设性。
    许多名言警句不是没有建设性,而是人们并未真正领会其意,或者领会却做不到。比如:”己所不欲,勿施于人“多简单,”己之所欲,施诸于人“多有建设性,但能真正做到的恐怕只有圣人。

    >>拿你这句话说来什么是“偏见”、什么是“好程序员”呢?过去参与咱们搞得这些范式和C之争的那些家伙比如Linus、Richard Gabriel,和你我相比,谁有偏见、谁是好程序员呢?

    好程序员应尽量少些有偏见,但不等于有偏见的程序员如Linus就不是好程序员。这并不能否定我那句话的成立性。

    >>我总觉得半职业作者应该少些个人的感慨(不是指幽默的风格,这个很棒!)、多些实质性内容。当然这些也只是我的个人看法。

    我明白你的意思。你是说我的书中感慨和形而上的东西多于实质,但那是公开的前半部。未公开的后半部讲的都是实质或者更具体的东西。许多程序员喜欢听小道理,认为大道理无用。我不这么认为,只要有一小部分人能体会我的苦心,便知足了。

    最后,真心地谢谢你的回复和解释。

  98. feilng[未注册用户]
    *.*.*.*
    链接

    feilng[未注册用户] 2009-04-19 16:40:00

    不是“单独一个人”决定的,不是个人无用论
    社会是由人组成的,关系是相互的。
    作为个人的技术决策人在社会需求及公司共同作用下,长期看自然会选择更有利于生产率提高的技术路线。
    首先我认为C#生产力高于Java,选择Java还是C#的关键在于你所面对的领域C#和Java各自的总体成本

  99. xjb
    *.*.*.*
    链接

    xjb 2009-04-19 17:02:00

    这样争论有意思,长见识

  100. hlfStephen[未注册用户]
    *.*.*.*
    链接

    hlfStephen[未注册用户] 2009-04-19 17:08:00

    C#的发展速度很快,是件好事,可惜自己有点跟不上了。。。现在还只处于C#2.0的阶段。

  101. 梁逸晨
    *.*.*.*
    链接

    梁逸晨 2009-04-19 17:13:00

    老赵,JAVA好与不好我不知道。
    但是你相片中的形象可是越来越苗条了。

  102. feilng[未注册用户]
    *.*.*.*
    链接

    feilng[未注册用户] 2009-04-19 17:28:00

    不过C#生产力高于Java是应当的,否则怎么后起啊
    只是目前在企业应用领域成本还是比Java高,光说服客户的成本就高了

  103. jxp8626[未注册用户]
    *.*.*.*
    链接

    jxp8626[未注册用户] 2009-04-19 17:56:00

    c#什么时候可以在linux下面实现关键企业应用,那时再写这篇文章才是真正有意义的。否则我认为C#永远没法打败java。

  104. hlfStephen[未注册用户]
    *.*.*.*
    链接

    hlfStephen[未注册用户] 2009-04-19 18:08:00

    相信mono
    http://mono-project.com/

    感觉mono发育得不错啊,只是时间的问题。感觉微软不做不赚钱的事情,但是会交给开源帮他在linux下退浆。

  105. hlfStephen[未注册用户]
    *.*.*.*
    链接

    hlfStephen[未注册用户] 2009-04-19 18:15:00

    发错了,是"在linux下推行"。

    欢迎大家看看下面的文章,mono的阵型也是很强大的。已经不同于几年前的mono了。
    http://shanyou.blog.51cto.com/363653/75083

  106. hlfStephen[未注册用户]
    *.*.*.*
    链接

    hlfStephen[未注册用户] 2009-04-19 18:20:00

    --引用--------------------------------------------------
    jxp8626: c#什么时候可以在linux下面实现关键企业应用,那时再写这篇文章才是真正有意义的。否则我认为C#永远没法打败java。
    --------------------------------------------------------

    看了http://shanyou.blog.51cto.com/363653/75083这篇文章后,个人觉得能否在linux下面实现关键企业应用,是看你是否清楚认识mono相关的技术,以及亲手动手去设计实现。至于“关键企业应用”的“关键”程度,刚接触社会,所以不是很懂,请指教。

  107. 一个爱编程的老人家
    *.*.*.*
    链接

    一个爱编程的老人家 2009-04-19 18:24:00

    想都别想,有微软在,.Net就不会真正跨平台!

  108. 老赵
    admin
    链接

    老赵 2009-04-19 18:36:00

    --引用--------------------------------------------------
    一个爱编程的老人家: 想都别想,有微软在,.Net就不会真正跨平台!
    --------------------------------------------------------
    老人家,您过时了,现在有mono了。当然,微软肯定不会让mono追上并超过的,不过只要mono足够好,追求所谓的“同步”又有啥重要的。

  109. 怪怪
    *.*.*.*
    链接

    怪怪 2009-04-19 18:59:00

    @郑晖
    那我也得澄清一下,我说的可是“类似的名言警句”,而不是所有名言警句。这个问题Pass。

    我的另一个意思是,上面提到的这几位适不适用你的“应该....”呢?别人按你的“应该....”做,是不是就能超过他们呢?这几位按照你的“应该....”做,就一定有更大而不是更小的贡献吗? :)

    其实我不是想讨论这个的,因为很难有标准答案。

    不过也正因为如此,我才不太认同过多的讲这些东西;其实我觉得这些对很多人还是有吸引力的,而融入到以其它话题为中心的内容中往往更有潜移默化的作用,这才是我制造点噪声的原因。

    我们自己所采取的价值观,往往是我们自己成长路径的一个结果;我们之所以推崇,也确实是因为在这个过程中,它们或多或少带来了好处。这对拥有者来说就好比一个正反馈循环。

    但这在一个喜欢并接受了某个调调、但成长路径不同的人,也保证至少不会起到反面的效果吗?实际上你的苦心不是没有风险的,也许你认为“这么棒的道理怎么会有害”,但那正是咱们无法体会到的。

    “己之所欲,施诸于人”,说得好。记得混沌开七窍的故事吗?

  110. win[未注册用户]
    *.*.*.*
    链接

    win[未注册用户] 2009-04-19 19:10:00

    自从人类学会了使用工具, 人类就开始主宰这个世界. 不管是C#, 还是Java, 都只是我们的工具, 用来生产出给别人用的工具.
    在java世界中, 没有Property, 难以从一堆的setter和getter中找出关键的代码, 没有string块,没有delegate, 没有...
    但又能怎么样呢? 我们只是生产工具而已, 为别人生产.

  111. 匿了[未注册用户]
    *.*.*.*
    链接

    匿了[未注册用户] 2009-04-19 19:13:00

    一声叹息。如果可以把观注点放到语法、语义而不只是某种语言。就可以通中、英文。。。。通java、C#。。。。而之后让外国人看中文写的中文创造的程序语言了。

    匿了。有与 Jeffrey 博客签名有同一颗心。但这样非本质的争论会让我感觉羞愧。如果要有一种高通用、无限可能的语言,那就是基于语法、语义的开放式自定义语言。那时可以用中文,也可以是自己发明的符号对语言定义,对语言的应用只与个人的心境、选择有关。

  112. 匿了[未注册用户]
    *.*.*.*
    链接

    匿了[未注册用户] 2009-04-19 19:21:00

    另:个人不感觉郑晖同学的博文被冷了。只是郑同学曲高可附随着寡,只剩下大众静心聆听。从点击可以看出。

    一般的博文点击有两种,浏览点击与讨论点击,而郑同学的点击浏览点击占了绝大多数。很多时候讨论点击在一般博文的总点击占有可能在三分一到二分一。

  113. 水果阿生
    *.*.*.*
    链接

    水果阿生 2009-04-19 19:27:00

    战起来了,有点意思。不过老赵啊,你忘了傅聪他爸爸跟他说的话了?

  114. 老赵
    admin
    链接

    老赵 2009-04-19 19:31:00

    @水果阿生
    但是在技术方面老赵不想搞平衡论呐,遇到这样的问题也不想就这样让它们就这样过去,对这么都一笑而过的“境界”实在还做不到啊。

  115. Vincent Liang[未注册用户]
    *.*.*.*
    链接

    Vincent Liang[未注册用户] 2009-04-19 19:45:00

    从类比的角度,这个是类似长跑竞赛的问题,跑在第一位和第二位采用的不同策略,”固步自封”有时往往也是第一名采用的策略,毕竟整个大方向都在手上,很难作出不同角度的尝试。因此也很欣赏Windows,在毫无疑问的第一名地位下,还是能很好的吸收不同平台的优点。

    如果就文化而言,我想也是Java背后的老大和微软的文化理念不太一样。

  116. kiler
    *.*.*.*
    链接

    kiler 2009-04-19 19:55:00

    微软要是能用一种正确的态度对待开源项目,C#就可以很快的打败Java了,可惜微软没这么做。

  117. Dove.Net
    *.*.*.*
    链接

    Dove.Net 2009-04-19 20:41:00

    我也是从C#、JAVA二选一中开始.NET的
    现在.NET唯一让我不爽的是,不是所有的Windows系统都内置了.NET Framework 2.0

  118. Nick Wang
    *.*.*.*
    链接

    Nick Wang 2009-04-19 20:51:00

    好长的评论啊,博客园又掀起了一场腥风血雨。
    本来写了一些东西,想一想还是别掺和了,又删了。

  119. 知北游
    *.*.*.*
    链接

    知北游 2009-04-19 21:18:00

    基本同意老赵的论断,JAVA语言的生产力确实要差C#好多好多.SUN公司的不思进取,希望IBM入主以后会好点吧。。。。。。
    但是不可否认,JAVA方面大量优秀的开源框架又给JAVA拉了不少分。。。。。。
    很多公司选择JAVA做,也是无奈的事,Windows服务器性能要比LINUX服务器性能差了好多,前几天还在博客园看到了说什么前100台服务器中只有一台WINDWS服务器,还是中国国内的【忘了文章是怎么说的了,大意如此】。。。。。。【C#方面虽然有MOMO,但是真正用MOMO开发的公司又有几家呢?】

    无论如何,“一个好的程序员,应该有一颗开放的心,任何语言、任何技术都可为我所用,不带偏见,不拘一格”,对比着学习,对比着使用,对比着提高,兼容并包,总是不错的

  120. 老赵
    admin
    链接

    老赵 2009-04-19 21:22:00

    @知北游
    谁告诉你windows服务器性能被Linux差好多阿?听风就是雨是不对的……windows服务器的性能已经很好了,不是10年前了。
    什么叫做前100台服务器啊?你说的是高性能运算,超级计算机吧,那是微软起步晚,自然比不得。这些场景定制要求高,各家都号称用Linux,其实都是自己修改了再修改了,随便揪两个出来就不一样,定制的嘛。
    还有,你真的了解过有多少家公司在用mono吗?就算先去mono的网站看看再说也好啊……

  121. 紫色永恒
    *.*.*.*
    链接

    紫色永恒 2009-04-19 21:29:00

    你还真快 不过此类长篇大论是无法打倒红卫兵的

  122. jilin[未注册用户]
    *.*.*.*
    链接

    jilin[未注册用户] 2009-04-19 22:03:00

    --引用--------------------------------------------------
    Dove.Net: 我也是从C#、JAVA二选一中开始.NET的
    现在.NET唯一让我不爽的是,不是所有的Windows系统都内置了.NET Framework 2.0
    --------------------------------------------------------

    这个不能算是问题,你让人家WINDOWS内置.net framework 2.0很可能是要发布 winform程序上去,那你大可以做安装程序时把.net framework集成进去,只是安装包大了些,或者只给个引用,连安装包都不会变大。用户体验不会差多少啊。

  123. CowNew开源团队
    *.*.*.*
    链接

    CowNew开源团队 2009-04-19 22:49:00

    只想问一老赵一句,C#能在AS400、AIX、HP-UX、Solaris上跑吗?要知道核心服务器都是这些操作系统。
    Java是工业级语言,就像Cobol一样。老赵没在大型机上写过程序吧,呵呵,估计C#也就能做做网站这类的非核心应用。

  124. 老赵
    admin
    链接

    老赵 2009-04-19 23:02:00

    @CowNew开源团队
    我是没有为大机写过程序,但也不是没有接触过,工作平台不同而已,读书时也有大机方向,我不喜欢,因为我相信这年头趋势是大量廉价机器,而不是大机。就算大机上有一些“关键应用”,市场最广泛的也是大量廉价机。
    还有不过不太理解你说的“核心”是什么意思,呵呵。工业与否,我不知道,不过我看不出C#的“能力”差在哪里,只是没有人去做而已,因为有现成的可以用的了,做不做得了我不清楚。
    不过我觉得很可惜,我文章写了那么多你还是没有理解我在说什么。如果你能分清语言和平台的区别,那么我会很感激的。Java这种低效的语言是“工业级”的语言?当然理解你的意思,你是指“Java平台”。
    所以只能说Java是运用在工业级的语言,而不是Java语言是工业级的。

    我说要用C#代替Java吗?我在对别人说作项目时不应该选用Java吗?
    我一直在说的是Java为什么如此固步自封,难道它提高语言能力就会降低它其他方面的优势吗?
    莫非你认为,Java已经可以做A,B,C,因此它的语言功能不提高也无所谓?
    我现在真想在说,如果现在有个C#编译器可以生成Java的binary code该多好,不知道你现在有没有听懂我的意思。

  125. 梁逸晨
    *.*.*.*
    链接

    梁逸晨 2009-04-20 00:24:00


    @CowNew开源团队

    也不知道您所谓的 “核心服务器” 与本文有何直接关系?

  126. 小猴子
    *.*.*.*
    链接

    小猴子 2009-04-20 08:40:00

    我现在真想在说,如果现在有个C#编译器可以生成Java的binary code该多好,不知道你现在有没有听懂我的意思.
    LZ这不是自己打自己嘴巴么???
    就因为。NET不能跨平台操作才出现这样的情况。
    而你把希望嫁接给JAVA而不是MS,站不住脚啊!
    说的有点直,多多包涵。

  127. 巫云
    *.*.*.*
    链接

    巫云 2009-04-20 09:02:00

    好久没见能分页的文章了,哈哈哈。

  128. brightwang
    *.*.*.*
    链接

    brightwang 2009-04-20 09:13:00

    几天没来,老赵又来了个大招。

  129. 老赵
    admin
    链接

    老赵 2009-04-20 09:15:00

    --引用--------------------------------------------------
    小猴子: 我现在真想在说,如果现在有个C#编译器可以生成Java的binary code该多好,不知道你现在有没有听懂我的意思.
    LZ这不是自己打自己嘴巴么???
    就因为。NET不能跨平台操作才出现这样的情况。
    而你把希望嫁接给JAVA而不是MS,站不住脚啊!
    说的有点直,多多包涵。
    --------------------------------------------------------
    什么叫做打自己嘴巴?我说过我的目的是把所有希望放到C#身上吗?没有看出我一直希望Java语言有所改进?
    “Java语言”不愿意改进,我又想直接使用“Java平台”的东西,所以我说,我想把C#移植到Java平台上。谁让Java平台占据了历史优势呢?虽然.NET平台也不差,但是Java平台已经站住脚了,没有办法。
    我真怀疑你在说这些话之前有没有看过我的文章到底在写什么,我已经在文章里强调n遍的东西,都用红字标出来了,似乎一点作用也没有。

  130. 老赵
    admin
    链接

    老赵 2009-04-20 09:17:00

    --引用--------------------------------------------------
    brightwang: 几天没来,老赵又来了个大招。
    --------------------------------------------------------
    现在看来,大招只是热闹热闹,不少兄弟依旧不看文章,看个标题,看个评论,然后就跑过来说一堆东西,让我觉得很无奈。

  131. 沧海月明
    *.*.*.*
    链接

    沧海月明 2009-04-20 09:26:00

    我也觉得"可以生成Java的binary code的C#编译器“这个东西大有可为,是不是还要一些dotnet下的库的java实现,比如WPF(当然可以先从服务端技术着手),这些都未必要动JAVA的语法。

  132. 老赵
    admin
    链接

    老赵 2009-04-20 09:26:00

    --引用--------------------------------------------------
    紫色永恒: 你还真快 不过此类长篇大论是无法打倒红卫兵的
    --------------------------------------------------------
    “太阳”最红……呵呵

  133. 小猴子
    *.*.*.*
    链接

    小猴子 2009-04-20 09:33:00

    你很气愤是正常的,LZ。因为我也很气愤
    我真没有怎么看你的文章,你的标题是你自己为什么不喜欢JAVA语言,我个人对JAVA一点都不感冒,何必要去细看,未来也不打算看。

    做为。NET开发人员,听到你把跨平台的希望寄托在JAVA上面。我才直说的。
    想想把这句话放在JAVA的社区,不知道JAVA开发者如何评论。
    你这明显是条既不合乎情理又不现实的主意,为什么就那么刺眼,不让外人评论呢?我还是第一次听到这样的观点。

    现在看来,大招只是热闹热闹,不少兄弟依旧不看文章,看个标题,看个评论,然后就跑过来说一堆东西,让我觉得很无奈。
    兄弟,在我的回复前已经很明确的说明了我要说的东西。不是针对你的文章而是针对你的观点。希望明白我的意思,不要弄误会了。

  134. D.N.A
    *.*.*.*
    链接

    D.N.A 2009-04-20 09:33:00

    --引用--------------------------------------------------
    小猴子: 我现在真想在说,如果现在有个C#编译器可以生成Java的binary code该多好,不知道你现在有没有听懂我的意思.
    LZ这不是自己打自己嘴巴么???
    就因为。NET不能跨平台操作才出现这样的情况。
    而你把希望嫁接给JAVA而不是MS,站不住脚啊!
    说的有点直,多多包涵。
    --------------------------------------------------------
    很傻很天真,.NET没实力跨平台吗?一小三方都能实现的东西MS没能力做?只是出于商业考虑不愿做而已啊。谁他妈说要编译成binary code就是把希望嫁接给JAVA而不是MS,典型脑子被们夹了,发言之前也先用天真的大脑想想。java是你亲爹?什么东西都只能他实现别人就没办法实现啊?还有在这里反复出现的所谓“核心企业应用”,“核心服务”这是啥玩意啊,可以吃不?,能跑就是程序,别什么核心不核心INSTALL B,听了蛮想笑

  135. 老赵
    admin
    链接

    老赵 2009-04-20 09:40:00

    --引用--------------------------------------------------
    沧海月明: 我也觉得&quot;可以生成Java的binary code的C#编译器“这个东西大有可为,是不是还要一些dotnet下的库的java实现,比如WPF(当然可以先从服务端技术着手),这些都未必要动JAVA的语法。
    --------------------------------------------------------
    其实我的目的只是要改进java,我不是说要让C#程序可以直接编译,我只是想把C#的语言特性带过去,所以其实也并非需要.net类库了,因为.net类库是和C#语言脱离的。
    当然肯定也有特性是脱离不得的,例如using(IDisposable),不过这个忽略也没有关系。
    或者说,只是为Java带来新语法吧。

  136. 老赵
    admin
    链接

    老赵 2009-04-20 09:42:00

    @小猴子
    为什么你不看文章就发表评论还能够如此理直气壮的……
    你气氛的原因是不是因为我“背叛”了.NET社区?
    移植语言就是不合乎情理不现实的东西吗?那么为什么CLR和JVM平台上各Ruby/Python语言都移植地如火如荼?
    技术本来就是相通的,博采众长从来不会是不合情理不现实,争执个“.NET”的面子问题意义何在?

  137. D.N.A
    *.*.*.*
    链接

    D.N.A 2009-04-20 09:48:00

    我觉得很多程序员编程编的越来越傻×了,没事的时候多散散心吧,多和别人多交流交流,别真傻×了,了解你们压力大,生活窘迫,感觉生不逢时,情绪一直有波动,但也别是个人就喷吧,要喷也拿点货出来证明您喷的有道理吧?没看清别人说什么就来喷了,没想到喷子年年有啊,今年特别多,老赵,节哀吧~~第一次发贴,实在看不过去了~~

  138. 小猴子
    *.*.*.*
    链接

    小猴子 2009-04-20 09:48:00

    @D.N.A
    很傻很天真,.NET没实力跨平台吗?一小三方都能实现的东西MS没能力做?只是出于商业考虑不愿做而已啊。谁他妈说要编译成binary code就是把希望嫁接给JAVA而不是MS,典型脑子被们夹了,发言之前也先用天真的大脑想想。java是你亲爹?什么东西都只能他实现别人就没办法实现啊?还有在这里反复出现的所谓“核心企业应用”,“核心服务”这是啥玩意啊,可以吃不?,能跑就是程序,别什么核心不核心INSTALL B,听了蛮想笑

    我个人认为很傻很天真的是你,兄弟。
    1 .NET不跨平台的原因,我想即使是最基础的。NET开发人员都能明白你说的这个原因。
    2 谁他妈说要编译成binary code就是把希望嫁接给JAVA而不是MS,典型脑子被们夹了。
    为什么要把前面LZ说的JAVA去掉?没有JAVA的跨平台,LZ还能说那句话?
    你这个回复过于粗暴了,你自己静下来仔细想想吧。


    我有什么不对,请指出,但别动不动就说典型脑子被们夹了。那样只会让我们看不起。
    正因为看中这个BLOG的评论很热闹,我才天天来。兄弟我愿意就不同的观点和别人对擂,很欢迎。

  139. 韦恩卑鄙
    *.*.*.*
    链接

    韦恩卑鄙 2009-04-20 09:50:00

    老赵阿老赵

    不要和傻女人说太多了阿

  140. 老赵
    admin
    链接

    老赵 2009-04-20 09:51:00

    @韦恩卑鄙
    嗯,做事了

  141. 韦恩卑鄙
    *.*.*.*
    链接

    韦恩卑鄙 2009-04-20 09:52:00

    连javavm 和java 语言都分不清楚的 鸟他干什么。

  142. 小猴子
    *.*.*.*
    链接

    小猴子 2009-04-20 09:54:00

    移植语言就是不合乎情理不现实的东西吗?那么为什么CLR和JVM平台上各Ruby/Python语言都移植地如火如荼?
    技术本来就是相通的,博采众长从来不会是不合情理不现实,争执个“.NET”的面子问题意义何在?

    兄弟,没有办法!.net的出现,我个人认为使命之一就是要打击JAVA,而且MS极力推广。NET,不就是要抢占JAVA的地盘么??
    你现在这样的观点,是希望他们共溶共通!我反驳你的依据没有多少,就一条:
    JAVA目前是。NET唯一的敌人。

  143. Nick Wang
    *.*.*.*
    链接

    Nick Wang 2009-04-20 09:57:00

    --引用--------------------------------------------------
    兄弟,没有办法!.net的出现,我个人认为使命之一就是要打击JAVA,而且MS极力推广。NET,不就是要抢占JAVA的地盘么??
    你现在这样的观点,是希望他们共溶共通!我反驳你的依据没有多少,就一条:
    JAVA目前是。NET唯一的敌人。
    --------------------------------------------------------
    敌人不敌人的是相对MS的,跟我们有啥关系。做应用的什么好使拿什么。

  144. 小猴子
    *.*.*.*
    链接

    小猴子 2009-04-20 10:01:00

    我觉得很多程序员编程编的越来越傻×了,没事的时候多散散心吧,多和别人多交流交流,别真傻×了,了解你们压力大,生活窘迫,感觉生不逢时,情绪一直有波动,但也别是个人就喷吧,要喷也拿点货出来证明您喷的有道理吧?没看清别人说什么就来喷了,没想到喷子年年有啊,今年特别多,老赵,节哀吧~~第一次发贴,实在看不过去了~~

    @D.N.A
    兄弟,你刚刚批评我脑子不好使,现在又这样。我工资虽然不高,但也不至于到生活窘迫。有工作压力,但还是能在上班时间抽出几个小时来学习,来BLOG看看。你说我傻X,这点勉强同意。我老婆也说过我傻X,那次是因为我把一个工作岗位让给一个兄弟,换来一个朋友。

  145. Leon Weng
    *.*.*.*
    链接

    Leon Weng 2009-04-20 10:12:00

    技术讨论而已,不必粗俗吧···

  146. 小猴子
    *.*.*.*
    链接

    小猴子 2009-04-20 10:12:00

    为了一个LZ一个不可能实现的观点,而导致这么多人针对我。
    也许是我观点不对!
    我个人希望就此打住,这个BLOG,我不再评论。
    今天跟了这个帖子,没有学到什么,但着实领教了一翻。
    多谢LZ,不是这个帖子,还真看不穿一些人和一些事情!

  147. bengxia
    *.*.*.*
    链接

    bengxia 2009-04-20 10:15:00

    嗯哼,很好很强大。。。但是有个小请求,楼主换个非MS的操作系统再来把你的程序跑一遍。mono?不会是moon吧,总之对我们这些“实际”程序员来讲,比去太阳近一点?唉,大家在MS这条贼船上,还是给贼人摇摇旗吧。
    大伙别误会,我用C#比java还多点。

  148. 老赵
    admin
    链接

    老赵 2009-04-20 10:17:00

    @小猴子
    兄弟你还真是极端真是冲动,我都学到很多东西了,那么多人意见和你不同,你却说没有学到,这究竟是你自己的固执,还是真的学不到东西呢?
    还有就算“不可能”实现,从技术上讨论一下又有什么关系,你觉得不能实现也是基于市场策略,搞技术的时候纯粹一下,没什么不可以的吧?

  149. 韦恩卑鄙
    *.*.*.*
    链接

    韦恩卑鄙 2009-04-20 10:19:00

    小猴子你先好好学学 什么叫做java binary code 什么叫做local code

    个性不是靠不懂装懂耍出来的

    另外 懂得交朋友
    就要懂得
    1 永远不要和朋友扯上利害关系
    2 永远不要让老婆对某个朋友有成见
    不然朋友或者老婆必有一样长久不了

  150. 老赵
    admin
    链接

    老赵 2009-04-20 10:20:00

    @bengxia
    你没有听说过mono?那么搜一下也好啊。
    我这些代码完全可以在mono上跑,mono 2早就完全支持C# 3.0了。

  151. 韦恩卑鄙
    *.*.*.*
    链接

    韦恩卑鄙 2009-04-20 10:22:00

    意见是可以存在的

    针对小猴子的人真的是针对他的意见么?
    支撑此人意见的是一堆似是而非的证据
    大家不过是纠正他的一些错误证据
    到底是我们在反对他的意见 还是他自己给自己的意见留下了太多破绽 反而害了自己的观点呢?



  152. 小猴子
    *.*.*.*
    链接

    小猴子 2009-04-20 10:30:00

    @Nick Wang
    --引用--------------------------------------------------
    兄弟,没有办法!.net的出现,我个人认为使命之一就是要打击JAVA,而且MS极力推广。NET,不就是要抢占JAVA的地盘么??
    你现在这样的观点,是希望他们共溶共通!我反驳你的依据没有多少,就一条:
    JAVA目前是。NET唯一的敌人。
    --------------------------------------------------------
    敌人不敌人的是相对MS的,跟我们有啥关系。做应用的什么好使拿什么。

    兄弟,回复你是因为2点。
    1 尊重,礼仪
    2 你的观点也是对的。
    本来已经不打算回复的,但还是看到你回复。觉得你这个观点是比较厉害的,
    直接切中了要害。也是我放弃继续和LZ评论的主要理由。
    因为是做CS结构程序的,而且平时经常和硬件打交道,经常要考虑市场策略,多象对手学习是必须要做的事情,但要和对手兼容,门都没有。

  153. 幸存者[未注册用户]
    *.*.*.*
    链接

    幸存者[未注册用户] 2009-04-20 10:33:00

    既然是讨论语言,为什么不把范围扩大一点,整天比较C#和Java其实挺没劲的,似乎即使是Java社区的人,也有很大一部分都已经承认C#从 *语言* 级别上已经甩下 Java不是一星半点了。
    不过在我看来,有很多比C#和Java这种典型的工业语言要优秀得多的语言,至少在某种程度或某个领域上是这样。

  154. 老赵
    admin
    链接

    老赵 2009-04-20 10:38:00

    @幸存者
    所以我认为混合式编程是趋势,把语言用在特定的地方。
    不过说实话我不知道什么语言比C#好,Ruby/Python很有趣,动态性很强大,但是我并不觉得它们是我必须的。
    不过,对于一些语言有Pattern Matching特性,我觉得非常好用,例如F#,我甚至觉得这就是C#中下一个Killer特性,希望能在C# 5里见到。

  155. 装配脑袋
    *.*.*.*
    链接

    装配脑袋 2009-04-20 10:39:00

    飘过~哈哈,好玩

  156. 老赵
    admin
    链接

    老赵 2009-04-20 10:41:00

    @装配脑袋
    C#泛型的类型推断发现真是有很大提高空间,啥时能做成F#这样就好了。

  157. 韦恩卑鄙
    *.*.*.*
    链接

    韦恩卑鄙 2009-04-20 10:41:00

    恩 最近我也有从vb 打退堂鼓的倾向

    如果c# 也支持 linq 2 xml xsd的集成 我对vb就毫无遗憾了

  158. Jeffrey Zhao
    *.*.*.*
    链接

    Jeffrey Zhao 2009-04-20 10:42:00

    @韦恩卑鄙
    这是语言层面的还是类库层面的功能?

  159. brightwang
    *.*.*.*
    链接

    brightwang 2009-04-20 10:42:00

    --引用--------------------------------------------------
    Jeffrey Zhao: --引用--------------------------------------------------
    brightwang: 几天没来,老赵又来了个大招。
    --------------------------------------------------------
    现在看来,大招只是热闹热闹,不少兄弟依旧不看文章,看个标题,看个评论,然后就跑过来说一堆东西,让我觉得很无奈。
    --------------------------------------------------------
    呵呵,都是沟通的问题,现在人交谈都是自说自话,真正有几个人认真倾听了,看文章也是如此。

  160. 老赵
    admin
    链接

    老赵 2009-04-20 10:45:00

    @韦恩卑鄙
    这是语言层面的还是类库层面的功能?

  161. Cat Chen
    *.*.*.*
    链接

    Cat Chen 2009-04-20 10:46:00

    我想说的是,如果说C# 1.0兼容的是VC和VB的语言习惯,那么C# 3.0就能够兼容一些functional programming language的语言习惯了。

    你只要愿意,可以直接用functional programming language的思维方式来写C#,这没有任何问题。虽然在整体设计上,你还是必须现有类再有方法,方法内写lamda也还有一些限制,但总体上还算是『可用』的。

  162. 装配脑袋
    *.*.*.*
    链接

    装配脑袋 2009-04-20 10:51:00

    语言不满意不能等微软,要自己动手做^_^
    继续快乐地改造VB……

  163. 装配脑袋
    *.*.*.*
    链接

    装配脑袋 2009-04-20 10:54:00

    --引用--------------------------------------------------
    韦恩卑鄙: 恩 最近我也有从vb 打退堂鼓的倾向

    如果c# 也支持 linq 2 xml xsd的集成 我对vb就毫无遗憾了


    --------------------------------------------------------

    VB10的改进非常多,重燃你的信心吧~

  164. 幸存者[未注册用户]
    *.*.*.*
    链接

    幸存者[未注册用户] 2009-04-20 11:07:00

    @Jeffrey Zhao
    我觉得Meta Programming更重要一些,这可是实现DSL的利器啊。所以C#5相比C#4对我的吸引力要大得多。

  165. 老赵
    admin
    链接

    老赵 2009-04-20 11:08:00

    @幸存者
    但是世界上并不只有DSL的需求……所以要混合编程么……

  166. bengxia
    *.*.*.*
    链接

    bengxia 2009-04-20 11:13:00

    @Jeffrey Zhao
    我一直把MONO看成一个没有前途的玩具,貌似当初微软还警告过这个项目,三年前把CLR代码公开了(还是阉割过的,share source,不过很正常。IBM、ORACLE也这么作秀,只有SUN傻的可爱),看来对这个MONO倒有很大帮助作用,竟然能支持C#3.0的语言特性了。
    但是,我是一个很“实际”的程序员,让我用C#开发的应用通过MONO发布到其他平台,我都觉得滑稽,如此为什么还要搞这个MONO呢?有不代表适用!

    对语言的态度,我倾向于多语言混合使用,而不支持新特性加的太猛,毕竟这是生产工具,不是试验田。以前感叹C++,然后是java,现在时C#,几年前我可以很清晰的知道用perl干什么,c#干什么,C++干什么,python、ruby干什么,erlang干什么,js干什么,而如今呢?谁在家用瑞士军刀切菜?

    并行的世界会迎来服务聚合的时代(看看google的app engine, amazon的s3),对99%的程序员来说,唯一重要的根本是“解决问题”。而不是花很大精力研究新特性,那是天资聪颖酷爱专研的专家来做的。

  167. 老赵
    admin
    链接

    老赵 2009-04-20 11:21:00

    @bengxia
    你太小看mono了,我跟你打赌,2010年内,肯定会出现成熟的,大规模的mono项目。mono是不能看微软公布的代码的,Licence限制的。
    我奇怪的是,为什么Java跨平台,大家觉得好,觉得微软不好。但是微软一跨平台,却又有人说这是滑稽的事情呢?呵呵……
    为什么增加新特性你就觉得是试验田呢?我觉得C#特性很好,很有效,语言生产力提高很大。提高新特性并非要让语言覆盖另一种语言。
    语言特性和它适用的环境很大程度上是正交的,我认为也应该正交地去看待它。
    就好比Java语言和Java平台,本来就是没有直接关系的。事实上业界也这么认为,因此希望利用Java平台所以搞出了Groovy,JRuby等等语言。这难道不是语言+平台的最好例子吗?

  168. 幸存者[未注册用户]
    *.*.*.*
    链接

    幸存者[未注册用户] 2009-04-20 11:22:00

    所谓的混合语言编程,最后会不会发展成平台+DSL呢?呵呵。

  169. 老赵
    admin
    链接

    老赵 2009-04-20 11:22:00

    --引用--------------------------------------------------
    bengxia: 对99%的程序员来说,唯一重要的根本是“解决问题”。而不是花很大精力研究新特性,那是天资聪颖酷爱专研的专家来做的。
    --------------------------------------------------------
    本就如此,如果是需要“研究”的新特性就是不好的新特性。
    不过,就拿C# 3.0来说,它真是很难掌握,值得研究的吗?
    我看大都是“害怕”或“天然”的排斥吧。

  170. Clingingboy
    *.*.*.*
    链接

    Clingingboy 2009-04-20 11:50:00

    --引用--------------------------------------------------
    Jeffrey Zhao: @bengxia

    你太小看mono了,我跟你打赌,2010年内,肯定会出现成熟的,大规模的mono项目。mono是不能看微软公布的代码的,Licence限制的。

    我奇怪的是,为什么Java跨平台,大家觉得好,觉得微软不好。但是微软一跨平台,却又有人说这是滑稽的事情呢?呵呵……

    为什么增加新特性你就觉得是试验田呢?我觉得C#特性很好,很有效,语言生产力提高很大。提高新特性并非要让语言覆盖另一种语言。

    语言特性和它适用的环境很大程度上是正交的,我认为也应该正交地去看待它。

    就好比Java语言和Java平台,本来就是没有直接关系的。事实上业界也这么认为,因此希望利用Java平台所以搞出了Groovy,JRuby等等语言。这难道不是语言+平台的最好例子吗?
    --------------------------------------------------------

    为什么Java跨平台,大家觉得好,觉得微软不好?
    因为他是微软...技术归技术,市场归市场,竞争还是要存在.

  171. 韦恩卑鄙
    *.*.*.*
    链接

    韦恩卑鄙 2009-04-20 11:53:00

    --引用--------------------------------------------------
    韦恩卑鄙: 恩 最近我也有从vb 打退堂鼓的倾向

    如果c# 也支持 linq 2 xml xsd的集成 我对vb就毫无遗憾了


    --------------------------------------------------------
    是IDE集成的功能

    在vb项目里面增加一个 xsd的话
    在任何linq2xml 类里面 可以直接用
    dim x =new xelement()
    x.<childnam>=new xmlelement
    x.@key=1

  172. 老赵
    admin
    链接

    老赵 2009-04-20 11:58:00

    --引用--------------------------------------------------
    Clingingboy: 因为他是微软...技术归技术,市场归市场,竞争还是要存在.
    --------------------------------------------------------
    微软这么想是正常的,但是为什么用户也要这么想呢?

  173. uda1341
    *.*.*.*
    链接

    uda1341 2009-04-20 12:05:00

    @匿了
    --引用--------------------------------------------------
    匿了: 一声叹息。如果可以把观注点放到语法、语义而不只是某种语言。就可以通中、英文。。。。通java、C#。。。。而之后让外国人看中文写的中文创造的程序语言了。

    匿了。有与 Jeffrey 博客签名有同一颗心。但这样非本质的争论会让我感觉羞愧。如果要有一种高通用、无限可能的语言,那就是基于语法、语义的开放式自定义语言。那时可以用中文,也可以是自己发明的符号对语言定义,对语言的应用只与个人的心境、选择有关。
    --------------------------------------------------------

    这位是何方高人?不妨看看我的胡言乱语:
    http://groups.google.com/group/zero-programming-language?hl=zh-CN

  174. bengxia
    *.*.*.*
    链接

    bengxia 2009-04-20 12:07:00

    @Jeffrey Zhao
    好吧,今早在哪儿看到的一句话,大概意思:人总期望改变与革新,但是当这些改变失去控制时,人就会开始排斥。

    同理,人还是会很自然的选择性失明失聪失忆,不仅仅是我。

    -----------------------------------------------------
    我奇怪的是,为什么Java跨平台,大家觉得好,觉得微软不好。但是微软一跨平台,却又有人说这是滑稽的事情呢?呵呵……
    -----------------------------------------------------
    这就因该微软来反思了.

    -----------------------------------------------------
    本就如此,如果是需要“研究”的新特性就是不好的新特性。
    -----------------------------------------------------
    如果新特性(不单指语言)的引入破坏了我写程序的风格与习惯个一致性,这也归咎于我的“害怕”?比较一下C#1.0, 2.0, 3.0看看呢?在回头看看MS在最近3年的.NET战略中,引入了多少概念,又夭折的多少,这给人什么感觉?我们可不是探雷工兵。微软CLR升一次级,我的代码就得检查一下,项目转换一下,如果偶尔为之也就算了,这一年一度,我可消受不起新特性。

    还有,我最近不得不用的微软同步框架,最近改过几次名了?而且,缺省还只支持MSSQL,如果想用其他的,自个先“研究”一下吧。MS这种昂首阔步,我看也挺盲目的。

    ------------------------------------------------------
    你太小看mono了,我跟你打赌,2010年内,肯定会出现成熟的,大规模的mono项目。
    ------------------------------------------------------
    打赌没有啥不可以,http://mono-project.com/Screenshots 这些项目确实超出我的预料。不过比原生的或类似的性能/并发/安全如何? ECMA标准是以shared source CLI为基础,而虽然微软的.net framework以此为基础,但是又不完全一致,这能让人放心吗?MONO的license限制会不会对MONO的将来有威胁?(有不代表实用!这些项目没有令人眼睛一亮的,现有的做的比这些更好,不是吗?)

    还是原来的观念,在需要跨平台时我不会因为C#的牛叉语言特性而去使用MONO(语言排最次),有没有其他足够打动人心的理由?

  175. 老赵
    admin
    链接

    老赵 2009-04-20 12:14:00

    @bengxia
    第一条不是“失去控制”而是“自己控制不了”,对于C#或.NET升级而言,我觉得“控制不了”的原因大部分在于开发人员。例如,有多少开发人员在嚷嚷的时候,经过仔细思考呢?我关注的国外社区,真的很少发现有抱怨的,大家大都在拍手称快。

    微软是该反思,但是我觉得更应该反思的是不少人一贯对微软的偏见,如果是像你一下的确思考过的,那么还好,无数人只是跟风——敌视微软是流行么,呵呵。微软的改变有目共睹,当然有色眼镜是会过滤掉这些东西的。

    我也是C# 1.0用到3.0的,我不知道你的感受为什么会是这样,我认为没有丝毫影响,我参与的也是数百万行的大项目,微软进行升级也不是什么都不考虑,兼容性有那么糟糕吗?

    mono的licence都用了n多年了,这方面问题mono团队考虑的比谁都多,微软也在支持mono项目,这方面不会有所障碍的。
    写代码自然要写兼容的代码,只要一直遵守这点就没有问题,而且也不会降低生产力。
    至于性能,并发,安全自然会有项目来证明这一点,所以我说等着看大型的示例推出咯。
    C#现在自然不是跨平台的选择,这个我也同意,我的意思也是让你一直关注,不要灰心,也不要那么早下断言mono是没有前途的。

  176. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-20 12:19:00

    @Cat Chen
    你只要愿意,可以直接用functional programming language的思维方式来写C#,这没有任何问题。
    >> 问题大着呢。光写类型就要写死。

  177. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-20 12:21:00

    C#2.0之后,俺对.net的关心就集中在library了。

  178. 老赵
    admin
    链接

    老赵 2009-04-20 12:23:00

    --引用--------------------------------------------------
    xiaotie: C#2.0之后,俺对.net的关心就集中在library了。
    --------------------------------------------------------
    不过我觉得.NET 3.5最大的成长在于语言,或者说是围绕着语言特性的类库。

  179. 老赵
    admin
    链接

    老赵 2009-04-20 12:23:00

    @xiaotie
    他也不是要求用纯粹的FP思维吧,类型的确是个问题,至少C#的类型推断支持还不太能够写纯粹FP程序,我们也不强求这个,不是么……

  180. 小猴子
    *.*.*.*
    链接

    小猴子 2009-04-20 12:30:00

    我奇怪的是,为什么Java跨平台,大家觉得好,觉得微软不好。但是微软一跨平台,却又有人说这是滑稽的事情呢?呵呵……
    总算知道LZ那句话冒出来的原因了。真的很惊讶!
    举个例子,电信和网通~为什么电信和网通互连的时候速度差很多?那网通为什么比电信便宜很多,而很多人要装更贵的电信呢?
    现在在操作系统里面,WINDOWS占有绝对的用户资源优势,要是通过。NET开放给LINUX等其它操作系统,那用。NET开发的程序也可以在LINUX下正常运行,谁还会买WINDOWS操作而不直接用LINUX,那不是自掘坟墓么?
    统一标准固然是好事情,可在利益面前、甚至于生存面前,就会变味、扭曲。

  181. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-20 12:35:00

    @Jeffrey Zhao

    原话:“只要”,“直接”,“没有任何问题”。。。

    我确实试探过那样去写,没写多少,我就坚持不下去了。

  182. 老赵
    admin
    链接

    老赵 2009-04-20 12:35:00

    @xiaotie
    具体谈谈?我一直CLSComplaint,没有遇到过问题。

  183. 老赵
    admin
    链接

    老赵 2009-04-20 12:37:00

    @小猴子
    我怎么会不知道所谓商业策略?我文章里都写过了,所以我始终认为你不看文章就来这里评价让我觉得很不可理解。
    不过我也说过了,搞技术就纯粹一些,探索是需要的,否则技术怎么发展?
    您是搞商业的,思考问题方式和我们技术人员不太一样,我理解您,您也理解我们一下不行么,呵呵。

  184. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-20 12:45:00

    @Jeffrey Zhao

    我更看好WPF。我知道有人因为WPF的原因弃Java而投奔C#,在语言上,那些家伙们比较鄙视C#,Java这种庸俗语言的。XNA又会挖走了一帮C++的。正如,推动Ruby的是RoR,虽然Ruby的语言特性是RoR的基础。不过我不觉得C# 3.0之后的特性是WPF,XNA的基础。目前遗憾的是除了db4o,没有非gpl的开源C# OODBMS。这些,对生产力的提高是非常巨大的。

  185. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-20 12:54:00

    晕,刚才回复的没贴上去。

    我试过将一段程序用Lambda表达式写,没写几行,那个类型声明就占了一行多。真按FP思维写,Lambda堆Lambda,类型声明没几十行拿不下来。又不让用var ......

  186. 小猴子
    *.*.*.*
    链接

    小猴子 2009-04-20 13:03:00

    你怎么知道我没有理解我们自己呢???
    大家都是做开发的。
    做开发的,不要只关注技术!我们开发系统,都是有商业需求的,是这个在驱动着开发。不是技术或者语言在驱动着应用程序的开发。你那个观点违背最根本的一条开发原则,没有可行性。
    微软这么想是正常的,但是为什么用户也要这么想呢?
    这个观点应该是MONO的,至少他们在实践在探索。
    我是个观望者,LZ你呢?与其你在这里品评JAVA语法不足,不如发个更好的帖子。哪怕是推广MONO的项目,也比这个来的实在。
    最后打自己一嘴巴,成了一个是非人!

  187. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-20 13:13:00

    目前C# 3.* 的那点进步,只相当于 Boost 于 C++。可恶的是,那些特征,都实现的不彻底,泛型的约束太可恶,导致使用一些高级技巧时那个类型声明也很长。类型层次一多,问题就来了。看我的一个类声明:

    public class XXXXManager<TFileInfo, TInfo, TConfig>
    where TConfig : IItemConfig, new()
    where TInfo : class
    where TFileInfo : ItemFileInfo<TInfo, TConfig>, new()

    这是另一个:

    public abstract class XXXXAdapter<TFileInfo, TInfo, TConfig, TPair> : IBaseItemManagerAdapter
    where TConfig : IItemConfig, new()
    where TInfo : class, IItemInfo
    where TFileInfo : ItemFileInfo<TInfo, TConfig>, new()
    where TPair : ItemPair<TFileInfo, TInfo, TConfig>, new()

    我要继续嵌套的话,相当难受。没事还要声明一大堆接口。

    C#下 Lambda 表达式也是这样,嵌套层次一高,问题就大了。让人很难从更高的抽象层面去编程。

  188. 老赵
    admin
    链接

    老赵 2009-04-20 13:18:00

    @xiaotie
    你说的是2.0还是3.0?

  189. 装配脑袋
    *.*.*.*
    链接

    装配脑袋 2009-04-20 13:19:00

    --引用--------------------------------------------------
    xiaotie: 晕,刚才回复的没贴上去。

    我试过将一段程序用Lambda表达式写,没写几行,那个类型声明就占了一行多。真按FP思维写,Lambda堆Lambda,类型声明没几十行拿不下来。又不让用var ......
    --------------------------------------------------------
    这时候你应该用一下VB,VB支持隐式委托类型,后期绑定以及即时调用等重要特性。在VB理可以较为轻松地实现一些函数式的写法。

  190. 老赵
    admin
    链接

    老赵 2009-04-20 13:20:00

    @小猴子
    我支持mono,我现在宣传mono的想法有什么问题呢?你是观望者,我是一边思考一边探索的人,因此你不理解我。
    我不想和你争论下去了,你看看我的文章,仔细了解一下我的观点再说话吧,该说的我都说了很多次了。
    不要冲上来就说我打自己一嘴巴云云,最后还是表现出你本身没有分清“语言”和“平台”这两个应该是正交的东西。
    还有我也不觉得随便推广一下mono就比我这个有意义,转载了一些地方,也得到一定反馈了,远比介绍mono来的大。
    因为有这方面想法的人,自然会关注mono,否则介绍了,你看如现在这里的评论,又有多少接受的呢?这东西是需要探索的。

  191. 装配脑袋
    *.*.*.*
    链接

    装配脑袋 2009-04-20 13:22:00

    其实最好的泛型约束就是不约束,然后你根据传入类型Pattern自动进行处理。只是.NET泛型没有提供诸如特化等机制来帮你强类型地实现。

  192. 老赵
    admin
    链接

    老赵 2009-04-20 13:24:00

    @装配脑袋
    其实F#的类型推断已经做得很漂亮的,所以这还是实现的关系。
    当然你说的也是目前的限制,但是在这个限制下已经能做的很漂亮了。

  193. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-20 13:29:00

    @装配脑袋
    不喜欢VB的语法,看着头疼

    @Jeffrey Zhao
    骂3.0,顺便也骂下2.0。3.0中的Lambda和2.0的泛型是同一个问题: 类型声明的爆炸

  194. 老赵
    admin
    链接

    老赵 2009-04-20 13:33:00

    @xiaotie
    你骂得完全都是2.0的特性吧,3.0的类型推断虽然有很多不足,但是大部分时候已经不需要显式指定了——当然Expression让我很纳闷,为什么非要显示指定。

  195. 装配脑袋
    *.*.*.*
    链接

    装配脑袋 2009-04-20 13:34:00

    @xiaotie

    嘿嘿,你把这个翻译成C#才头疼。其实头不头疼有时只差一丁点观念

    Dim _3 = Function(f) Function(x) f(f(f(x)))

  196. 老赵
    admin
    链接

    老赵 2009-04-20 13:37:00

    @装配脑袋
    F#, F#, F#, F#……

  197. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-20 13:40:00

    @Jeffrey Zhao

    3.0和2.0一个德行。继续嵌套就感到痛苦了。我尝试嵌套Lambda,由于Lambda类型的粒度比泛型类型的粒度要小得多,类型爆炸的更快。手中没Lambda嵌套的代码,是因为实在在工作中没法这样干,得不偿失。泛型嵌套个几层还可以忍受(上面的代码,本来我的原意还要再套一层,但越向上套成本约高,代码的减少量是固定的,到了边际效用为0时,就不套了)。

  198. 老赵
    admin
    链接

    老赵 2009-04-20 13:44:00

    @xiaotie
    3.0是声明一次,使用时可以有类型推断。
    如此复杂的嵌套出现的确不好,当然如果合适的类型推断那可能就好了。
    但是我估计料想得到,如果类型推断太强,又有人会认为可读性不好了,呵呵——例如F#

  199. 装配脑袋
    *.*.*.*
    链接

    装配脑袋 2009-04-20 13:46:00

    @Jeffrey Zhao
    好吧,我飘走看看去…… 研究下F#的推测到底有没有可能加VB这样的语言里……

  200. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-20 13:47:00

    @装配脑袋
    嘿嘿,这种目前用写C#是头疼。

  201. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-20 13:49:00

    @Jeffrey Zhao

    假如我想将现有的重要方法抽象或分解成一系列Lambda表达式,来作为一个Lambda表达式库。全部需要声明吧,嘿嘿。

    不需要声明的只能用于局部,没太大用途。

  202. 老赵
    admin
    链接

    老赵 2009-04-20 13:54:00

    @xiaotie
    类型推断不能应付复杂情况,但也不能说没有太大用途吧?我平时开发中感觉现在基本上使用时都不需要些类型。
    局限肯定是有不少的,不过我听不懂了,你能不能举一些实际的例子来一起研究一下,比如你平时开发中遇到的情况?

  203. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-20 14:02:00

    @Jeffrey Zhao

    就拿那个四个程序员的一天中那例子当例子吧。用C#的Lambda写看好写不,只允许有一个Main方法。framework现有类与现有方法也可调用。

  204. feilng[未注册用户]
    *.*.*.*
    链接

    feilng[未注册用户] 2009-04-20 14:04:00

    serverside的开发我看好C# + mono
    clientseide更不用考虑跨平台,随便什么开发

  205. 老赵
    admin
    链接

    老赵 2009-04-20 14:11:00

    @xiaotie
    这样?

    char 

  206. bengxia
    *.*.*.*
    链接

    bengxia 2009-04-20 14:18:00

    @Jeffrey Zhao
    好吧,您对我能力的怀疑是有道理的,是我控制不了,这没什么丢人的,只不过这让我联想起python 3.0。

    写代码是要写CLI兼容的代码,可为什么微软自己却没有这么做呢,我想以老赵这样的身手肯定是反编译过微软的核心类库或者研究过CLR源码的,真的CLI兼容吗?用.net开发百万行的项目不利用平台特性还真的不怎么靠谱(至少性能上)。

    还有程序员的精力是有限的,知识跟财富一样,能积累的才有价值。前几年学的.net remoting现在不用了吧,改用WCF(HTTP协议明白啦?)了,之前写的那些DAL啦持久层啦的也没用了吧,改用LINQ了(SQL会写吗?)。现在是不是又开始学SliverLight啦(AXML学过不?)。Reporting Service还有谁在用(RDL学过没?),还有WSS, SPS, CardSpace, InfoCard, Sync Service, WinFS, WF, ....这些真的需要花精力学吗(看了Window核心编程看过没有)?也不知道当一个程序员在写“““var x = from n in arr where n < 5 orderby n select n;”””时真的不需要研究就能理解微软帮你做了什么吗?关键的是,你真的认为在数据库是MySQL , MSSQL, ORACLE时他们的表现是一致的吗?老赵都讲了:跟风不对! 但是乱刮风更不对!

    作为一个程序员应该明白“Windows为最终用户创造价值,Unix为程序员创造价值”。

    还有,老赵您“““我关注的国外社区,真的很少发现有抱怨的,大家大都在拍手称快。”””,我也觉得国内社区很无聊,CSDN最垃圾,Javaeye挺不错,cnblogs很有前途,joycode自从牛人越来越多之后反成了微软的非官方宣传部。但我觉得国外的程序员拍手的时候也挺可爱的。

    扯远了,我想问的是:老赵您在国外社区只关注.NET吗?我想肯定不会的,所以我想你是不是也选择性失明了某些东西?下面的是不是你主观臆断
    ---------------------------------------------------
    微软是该反思,但是我觉得更应该反思的是不少人一贯对微软的偏见,如果是像你一下的确思考过的,那么还好,无数人只是跟风——敌视微软是流行么
    ---------------------------------------------------
    是我们太偏见,还是微软过于傲慢?当IE6 N多年没更新,当盗版Windows开始黑屏的时候你有没有思考过呢?并不是另类的观念就代表您见识卓越。


    ---------------------------------------------------
    C#现在自然不是跨平台的选择,这个我也同意,我的意思也是让你一直关注,不要灰心,也不要那么早下断言mono是没有前途的。
    ---------------------------------------------------
    跨平台难道现在不需要考虑吗?有现成的解决方案不用,却来押宝MONO?(你敢保证微软将来就不会见风使舵,推出自己的.NET跨平台方案?)。当然我对MONO下的结论是很武断,但偶呢人微言轻不足为害,只能代表MONO在我这没前途,呵呵,但老赵你不一样啊,好歹也是个园子里的人物,很多fans都看着你呢,所以讲话呢一定要客观理性不能失明,您说不喜欢java,他们可就觉得java马上就要退出江湖,C#武林独尊了。(无辜的揣摩一下,你写完这篇文章按下【发布】时是不是笑的很烂漫啊?哈哈)。

    另外,在您眼里我怎么就灰心了呢?我很乐观,对于赌博来说,要想不输,只有两边下注。我呢偏偏不押java , C#。


    好了说点正题:
    还是,语言只是工具,java vs C#,不如JVM比比CLR还高级一点。

    语言引入新特性是需要很慎重的考虑的,有时候可以通过语言变种来实现,比如(C->C++, Scala, Groovy, BEAM上的Reia),CLR上完全可以也有搞出类似的东西来,为什么非要把这些特性一股脑加到C#中?C#到了3.0也该稳定下来了,结果没一年又要来4.0,这不是折腾是什么吗?

    最后,当老赵和国外的程序员为C#引入新特性拍手雀跃时,不知道MS大哥有没有事先咨询一下你们的意见?但愿你们不是不得不拍手。。。

  207. 水果阿生
    *.*.*.*
    链接

    水果阿生 2009-04-20 14:24:00

    @小猴子
    不看帖就评论,理屈词穷之后就说我们搞商业的智慧高远,你们搞技术的很少很天真,咱们不是一个层面讨论不到一块去,然后闪人吗?这样太不爷们了,哥们我支持你从文章里找出点硬伤来,给予老赵迎头痛击。我每次看老赵说什么都对也早就不忿了,可惜我技术水平有限,不能从他文章中找出硬伤来,你要想动摇他这种人,就必须得从技术角度驳倒他的观点,这不是一个轻松的活,加油啊。

  208. 老赵
    admin
    链接

    老赵 2009-04-20 14:26:00

    @bengxia
    我也知道这个文章很敏感,所以其实我写文章的时候很小心,如果有些朋友觉得我是再说Java可以消亡了,那么可以再去看看我的说法……
    mono它不是要移植.net fx全部,更何况它们还不能反编译看.net的代码,它们的目标是基于标准来实现一套与.net fx兼容的接口,这个是可以做到的。内部实现肯定会不同啊,因为有p/invoke的东西,怎么会一样。
    还有我说的升级,是windows平台上C#1.0-3.0的升级,所以不会遇到p/invoke的问题,如果要从win切换到其他平台,自然会遇到了。所以mono也提供了一个分析器。
    我知道微软之前的一系列事情,比如IE6不上档次,但是微软也在进步,有目共睹吧,使用MS-PL开源的东西也有了。
    MS现在和社区关系很紧密的,无论是框架还是语言都会征询大量反馈,这点不是我瞎说,所以我说它也在进步。
    我不否认我喜欢MS阿,但是我也时刻提醒自己要客观,我也喜欢free的精神——欢迎指正,监督我。:)

  209. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-20 14:47:00

    @Jeffrey Zhao

    这些写只能用于int类型。C#只要把泛型的约束松一点,然后把 Lambda 加上自动类型推演,写很多代码会优雅的多。前者有C++的模板成功在前,后者,VB, F#都实现了,C#却没。不谈FP这种最强大的类型编程范式,就是泛型编程,这种类似FP,比FP弱得多的类型编程,在C#下广泛使用的话,也不好用。C# 4.0出来了可能会好一些。

    我这几个回复回的是那句C#完全可以实现FP思维那句话。至少我的实践是,别提FP思维,连泛型思维,都受很大限制。不借助反射,我根本无法实现Loki那样精炼的程序。就是借助反射,实现的也不优雅。

  210. yeml[未注册用户]
    *.*.*.*
    链接

    yeml[未注册用户] 2009-04-20 14:48:00

    其实用java 的好处很明显的,因为java可以在linux跑

    还有免费的app server

    当从技术角度来比,太细节了

  211. bengxia
    *.*.*.*
    链接

    bengxia 2009-04-20 14:54:00

    @Jeffrey Zhao
    如你所说,事理越辩越明。有时候争论是个很好的方式。
    而且“喜欢”本身就是个很主观的词,就跟喜欢美女一样,角度问题。

    对于语言的竞争,归根结底是平台的竞争,而平台之间的竞争关键在于谁能顺应潮流。而现在的潮流就是应用服务化,看看AppEngine, S3, Azure,...就会发现我们差的有多远。我们还是应该把精力从语言(技术)上移开一点,不在语言特性后追逐过紧,看看那些大公司IBM、MS、Oracle、Apple就知道了,他们是不会在生产中引入新技术的,为什么呢?同样我们做开发时也是这样,跟的太紧往往没好果子吃。看看做开发的,日子过的滋润的是C#、Java、Ruby程序员吗?我看未必。价值一在分配,二在创造,不在于你写程序的效率有多高,而在于你写出来的东西有没人用。

    新技术要关注,但是没个一年半载(更多的是三年五载)是不可能吃透的,用一个没吃透的技术去完成工作,谁知道结果会怎样啊。

  212. 老赵
    admin
    链接

    老赵 2009-04-20 14:56:00

    @xiaotie
    嗯,其实还是FP思维的度的问题。我觉得在一定程度上FP思维还是可以满足的,当然这个度是个人感觉,难以统一。
    所以我基本上同意你的说法,C#在类型推演上做的还不够。

  213. 小猴子
    *.*.*.*
    链接

    小猴子 2009-04-20 14:58:00

    @水果阿生
    在回复前,我就已经预料到自己最后落不了什么好。嘿嘿!
    不看帖就评论,理屈词穷之后就说我们搞商业的智慧高远,你们搞技术的很少很天真,咱们不是一个层面讨论不到一块去,然后闪人吗?这样太不爷们了,哥们我支持你从文章里找出点硬伤来,给予老赵迎头痛击。
    有好也有坏,说一点没看文章,那也是假的。很认真的看了,也是假的!我个人不习惯研究什么语法,就连现在有时候都会忘记基础的语法格式,知道就可以了!不过我倒没有觉得做 “搞商业的智慧高远,你们搞技术的很少很天真”,
    大家立场不一样,得出的结论不一致很正常。说别人天真的人,往往自己天真。

    以前公司还专门组织头脑风暴呢,大家在一起聊些千奇百怪的问题,可以很好的发散自己的思维,冲击别人的观点同时,也冲击自己的观点。
    对laozhao,不过是碰上了,巧合而已。在现实中,我也曾经因为软件设计问题和主管争论过,而且相当的激烈,虽然当时我们都不好受,可是事后,我们都觉得有好处,这也是我与众不同的地方!

  214. 老赵
    admin
    链接

    老赵 2009-04-20 15:02:00

    @bengxia
    好吧,那么我再次强调一下,不要追逐新技术,呵呵。
    这些看法应该蛮有道理,值得思考一下,虽然我觉得还是不能一概而论,因为新技术也是在旧技术基础上的,所以我觉得很少遇到真正的新东西。
    就算是Azure,GAE这种东西,很新吧,但是在这之前的铺垫也会很长。
    总之就是对某个东西理解的如何,倒并不强求时间长短。理解足够的,有资源(比如有官方帮忙的)先上。

  215. 韦恩卑鄙
    *.*.*.*
    链接

    韦恩卑鄙 2009-04-20 15:18:00

    @装配脑袋
    --引用--------------------------------------------------
    装配脑袋: @xiaotie

    嘿嘿,你把这个翻译成C#才头疼。其实头不头疼有时只差一丁点观念

    Dim _3 = Function(f) Function(x) f(f(f(x)))
    --------------------------------------------------------

    我最近真的觉得 (o)=>比function(o) 好看得多

    我从三岁1984年开始用basic 还没遇到这么郁闷过

  216. 老赵
    admin
    链接

    老赵 2009-04-20 15:20:00

    @韦恩卑鄙
    我有时候会奇怪,为什么C#和VB不能取长补短,要搞得两边都有遗憾的。

  217. bengxia
    *.*.*.*
    链接

    bengxia 2009-04-20 15:25:00

    @Jeffrey Zhao
    关注可以,但不能忘了根本目标。大公司搞点新技术总是乱花渐欲迷人眼,咋不是随便的人,当然不能随便给他们忽悠。

    另外一点,我想老赵在MS平台上绑的太紧可能不太合适,因为我对MS的将来不怎么看好。不是偏见也不是唱衰,而是微软这么多年在互联网上无所建树实在不应该,还有MS搞开源连自己都骗不了如何骗明眼人,MS自己也想转可给我的感觉就是有心无力(他在自己身上打了烙印已无法抹去),没准vista/windows 2008就是个分水岭。

  218. 韦恩卑鄙
    *.*.*.*
    链接

    韦恩卑鄙 2009-04-20 15:29:00

    @Jeffrey Zhao
    感觉这两个team 宿怨已久了 :(

  219. 幸存者[未注册用户]
    *.*.*.*
    链接

    幸存者[未注册用户] 2009-04-20 15:30:00

    如果有一天C#和VB完全等价(除了语法、关键字之类的东西),那么它们还有什么意义成为两个独立的语言?

  220. 老赵
    admin
    链接

    老赵 2009-04-20 15:30:00

    @bengxia
    谢谢你的建议。不过我倒从来不担心微软的兴衰和我自己的发展问题,因为我平时也一直再搞ms和非ms的共存,而且我觉得技术这东西基本上都是通的,不同的是具体技术实现而已。我很多在.net上的想法也是从其他平台吸取的,对其他平台的意见也是从.net来的。
    我的目标其实就是好好搞技术,呵呵。

  221. 老赵
    admin
    链接

    老赵 2009-04-20 15:33:00

    @幸存者
    意义就是不同的语法。
    因为语言也是要发展的,不是说为了保持单一性就放弃生产力,你不前进,别人就在前进,所以在“足够的时间”之后,我认为同种语言之间越来越相近几乎是确定的,这是事物发展规律啊。
    当然,语言千千万,特性万万千,想要真的等到足够相近也不是那么容易的。

  222. 幸存者[未注册用户]
    *.*.*.*
    链接

    幸存者[未注册用户] 2009-04-20 15:34:00

    --引用--------------------------------------------------
    bengxia: @Jeffrey Zhao
    关注可以,但不能忘了根本目标。大公司搞点新技术总是乱花渐欲迷人眼,咋不是随便的人,当然不能随便给他们忽悠。

    另外一点,我想老赵在MS平台上绑的太紧可能不太合适,因为我对MS的将来不怎么看好。不是偏见也不是唱衰,而是微软这么多年在互联网上无所建树实在不应该,还有MS搞开源连自己都骗不了如何骗明眼人,MS自己也想转可给我的感觉就是有心无力(他在自己身上打了烙印已无法抹去),没准vista/windows 2008就是个分水岭。
    --------------------------------------------------------
    说实话,中国有几个公司认为自己能比微软活得更久?所以你这种担心大可不必,虽然我也对微软在互联网的作为表示无语。

  223. 韦恩卑鄙
    *.*.*.*
    链接

    韦恩卑鄙 2009-04-20 15:34:00

    幸存者老先生

    除去不常用的功能 现在就是完全等价

    就是集成开发环境和我们过不去 两个team各开发各的

  224. 幸存者[未注册用户]
    *.*.*.*
    链接

    幸存者[未注册用户] 2009-04-20 15:40:00

    @韦恩卑鄙
    我说的完全等价是说同一件是有相同或相似的实现,很显然目前有些用VB能轻松实现的东西用C#就麻烦得多(比如 late binding)。
    如果你要说他们在IL级别完全等价,我是不是也可以说C#和C在ASM级别完全等价呢?

  225. 老赵
    admin
    链接

    老赵 2009-04-20 15:42:00

    @幸存者
    我没有理解你的意思,现在的确是有VB可以轻松实现C#实现不了的东西,因此C#引入这块也是可以理解的吧。

  226. 幸存者[未注册用户]
    *.*.*.*
    链接

    幸存者[未注册用户] 2009-04-20 15:46:00

    @Jeffrey Zhao
    我并不是这个意思,相反我大大赞成VB和C#互相取长补短。只不过,保持一个语言的“个性”还是很重要的,呵呵。

  227. 香港陈冠希[未注册用户]
    *.*.*.*
    链接

    香港陈冠希[未注册用户] 2009-04-20 15:50:00

    问:
    什么样的人才能做MVP?

    答:
    MVP是有使命的,干掉一切对ms有威胁的东东

  228. 韦恩卑鄙
    *.*.*.*
    链接

    韦恩卑鄙 2009-04-20 16:17:00

    @幸存者
    我个人的感觉 从.net 1.1开始
    说服我所在的team新项目使用vb.net越来越难
    vb.net的个性 越来越成为累赘了
    我很郁闷阿


  229. 老赵
    admin
    链接

    老赵 2009-04-20 16:19:00

    @香港陈冠希
    腊肠兄,回帖前可要看贴啊,您这些调调已经too old sometimes naive了,小弟我都已经回应过了,呵呵。

  230. 韦恩卑鄙
    *.*.*.*
    链接

    韦恩卑鄙 2009-04-20 16:44:00

    老赵不要讽刺太上皇阿

  231. 零八宪章[未注册用户]
    *.*.*.*
    链接

    零八宪章[未注册用户] 2009-04-20 16:53:00

    正在看第一页,一刷新。我靠。都三页了啊。
    对java。我最羡慕的是那些开源的项目。
    不过,不过.net也不是吃素的。
    优秀的开源项目也在风起云涌。
    但是由于某些原因,这些开源项目做着做着就成收费的了。
    哎。郁闷。

  232. chenkai
    *.*.*.*
    链接

    chenkai 2009-04-20 17:28:00

    今天老赵把楼盖的这末高 一直就看评论就发了45风中 .....

  233. chenkai
    *.*.*.*
    链接

    chenkai 2009-04-20 17:48:00

    看了楼上的各式各样的评论,有技术争议 等等 读完评论我自己就乐了 我觉得这样的气氛很好 老赵还是具有一定凝聚力 希望老赵没事多拿点东西出来讨论 这样的方式我感觉真的很不错!

  234. 幸存者[未注册用户]
    *.*.*.*
    链接

    幸存者[未注册用户] 2009-04-20 18:03:00

    @chenkai
    可惜blog这种形式实在不适合作集中讨论

  235. 装配脑袋
    *.*.*.*
    链接

    装配脑袋 2009-04-20 18:34:00

    --引用--------------------------------------------------
    韦恩卑鄙: @幸存者
    我个人的感觉 从.net 1.1开始
    说服我所在的team新项目使用vb.net越来越难
    vb.net的个性 越来越成为累赘了
    我很郁闷阿



    --------------------------------------------------------
    让我来排解你心中的郁闷吧:D

  236. 老赵
    admin
    链接

    老赵 2009-04-20 18:39:00

    @装配脑袋
    还有我,我对VB的了解现在完全是靠你们来的……

  237. jun
    *.*.*.*
    链接

    jun 2009-04-20 22:52:00

    --引用--------------------------------------------------
    兄弟,你刚刚批评我脑子不好使,现在又这样。我工资虽然不高,但也不至于到生活窘迫。有工作压力,但还是能在上班时间抽出几个小时来学习,来BLOG看看。你说我傻X,这点勉强同意。我老婆也说过我傻X,那次是因为我把一个工作岗位让给一个兄弟,换来一个朋友。
    --------------------------------------------------------

    赞一个小猴子,撇开技术不说,这样的人才值得一交。

  238. 躺着读书[未注册用户]
    *.*.*.*
    链接

    躺着读书[未注册用户] 2009-04-21 07:04:00

    首先java是不大可能有太大的变化了。即使是在oracle74亿美金买下以后。

    很多的技术互相依赖。我个人是做科研的,用的就是java,目前的总趋势是一些化学啊,生物啊,物理啊等领域原来都有专业软件的(比如说什么D语言之类,名字都未曾听过在某个领域却是响当当)现在这些专业软件都在往java转移。当然java在这些领域做得还十分的有限,根本不能和这些专业软件比,但是很多的项目都根植于java好多年头了。

    科研领域和生产领域有很大的不同就是:一个项目做了1、2年,然后就完成了。接下来,没有任何的改变,但是因为你的项目发布了出去。就会有几个或者几十个项目基于你的项目。接下来,年复一年。如果一旦有成果,这些java的实验项目很容易的就转化成了产品。如果像C#那样几年一个变化,等到几年后你之前写的东西就过时了,那你又要不停的重写那简直是不可能的。而java,哪怕你是几年前写的代码,别人看你的代码还是那么的“时尚”。

    还有就是跨平台、修改二进制码和脚本生成代码。C#是也都能做到。但是能不能做到和做得怎么样是两码事。做得怎么样还是要靠产品说话的。就好比C#支持泛型,我说java也支持呢。哪个好?我总不能说c#能做的java也能做到,java做不到的在未来jdk7中也会做到的,java也是向前进步的嘛。

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

    看C#最近是往动态语言方面走了,感慨良多。C#和Java已经是截然不同的2条路了。以后C#可能会占有相当程度的网站市场。但是网站市场变数太大:asp, php, jsp, python, perl, aspx, struts.do....谁知道将来还会有什么呢。 java可能会慢慢替代cobol,以及在数据库领域、通讯和科研领域成为工业标准。

  239. 张蒙蒙
    *.*.*.*
    链接

    张蒙蒙 2009-04-21 09:01:00

    我两个一起用,是被逼两个一起用的,有时想如果可以留着相互的优点该多好啊。

  240. 老赵
    admin
    链接

    老赵 2009-04-21 09:05:00

    @躺着读书
    我文章论述的那么多,C#升级,代码是不需要重写的,还是被你忽略了,可见现在想要让人“看清楚文章内容”是一件多么困难的事情……
    你说的“希望不进步,以保持代码‘时尚’”,或者“不希望提高生产力,以保持相对优越性,扩大就业机会,并且垄断”之类的说法,很有意思,虽然我觉得历史上从没有什么事情是这样发展的,呵呵。

  241. lex choi[未注册用户]
    *.*.*.*
    链接

    lex choi[未注册用户] 2009-04-21 09:57:00

    @躺着读书
    不知道以后O记Java还能否保持现有的开放性,如果Oracle把Java也商业化了,恐怕就无法继续用在科研领域了。

  242. Jeffrey Hua[未注册用户]
    *.*.*.*
    链接

    Jeffrey Hua[未注册用户] 2009-04-21 10:28:00

    Jeffrey Zhao,
    Have you ever kissed a girl?

  243. 老赵
    admin
    链接

    老赵 2009-04-21 10:38:00

    @Jeffrey Hua
    kiss a girl有什么特殊含义吗?

  244. 老赵
    admin
    链接

    老赵 2009-04-21 10:38:00

    @Jeffrey Hua
    kiss a girl有什么特殊含义吗?

  245. Ryan Gene
    *.*.*.*
    链接

    Ryan Gene 2009-04-21 10:52:00

    感觉讨论这个没有太大意义

  246. 勇者之心
    *.*.*.*
    链接

    勇者之心 2009-04-21 14:45:00

    恩,英文没有中文好,英文只有十四行诗没有骈体文。。。

  247. zhao_jis [未注册用户]
    *.*.*.*
    链接

    zhao_jis [未注册用户] 2009-04-22 14:26:00

    大家来围观LZ装X

  248. Victor
    *.*.*.*
    链接

    Victor 2009-04-22 16:15:00

    @zhao_jis
    ....脑子被驴T了吧...

  249. 躺着读书[未注册用户]
    *.*.*.*
    链接

    躺着读书[未注册用户] 2009-04-22 20:33:00

    不仅仅是代码吧,java也能做到字节码的向下兼容,这个的确不容易。当然这个是jvm和.net平台的问题。不过讨论语言也不能完全不谈平台,也是不切实际的。因为并不是所有的时候都能拿到源代码的。我知道或许c#有dll的转换工具,不过用vs转换以前的项目总是失败,想着都不放心哪。

    对于语言的新特征。可以这样说:如果有一个写C的人,他的工作就是用C语言调整霓虹灯的播放顺序。他已经写好了几千多种程序。这个时候你却对他说,你可以不用这么写,你可以试下2.0的语言特征少写几行。然后试一下3.0的语言特征再少写几行。这看上去是好事情,因为当他如果要写新的播放程序的时候,他能少写几行,获得解放。

    但是那个人,肯定会破口大骂的。呵呵。因为第一他每天要去喝酒,要去见客户,要去玩,他哪有时间学习新的东西?第二,虽然以前的代码兼容,他还是可以像以前那样写,但是新招的学徒都是这么写,他恼火不已。第三,有一天上网,他去上他的霓虹灯专业论坛,看看高高手的程序,发现怎么也都是全部用了新语言特征,花花绿绿的。所以他觉得他不得不学。于是他喝酒的时间没有了,玩的时间也没有了。等到他学完。又有人告诉他,喂,4.0的新语言特征出来啦。5.0在议程之上了哦。他肯定会一口鲜血喷出。呵呵。

    其实我也是这样一个工人,比起编程我还是更喜欢吃吃喝喝,到处玩玩。你说不停的学下去何时是个尽头?总要留点时间想想生活吧。可不要出去玩个半年,天都变了。不然程序员总是被束缚在键盘之上,生怕被淘汰了。而那些学汽车的,学机械的,他们确可以潇洒快活。你说凭什么呢?想100年前,汽车不也是个时髦的行业?一天不学习就会被新的知识给淹没。

    Anders在08年的演讲我也听了。说是c#4.0的新特征就是动态性。后来,他又在推广F#。python我用过,我也想谈谈,动态性强,建网站的速度肯定又快又好。我觉得没有一个语言能解决所有的问题,c也好,c++也罢,java也好,.net也好。其实都是在各自的领域内为战的。

    Linq确实是一个伟大的创新,能够把函数编程里头的lamda这样的用,挺新鲜的。其他的东西,我并不觉得c#和.net平台是在创新,而是不停的把其他语言的东西拿进来做成大杂烩。也亏得是Anders这样的伟人设计的,其他人恐怕早就搞砸了。Anders终究还是没有吧函数编程里头的list comprehensive, lazy evaluation 拿进c#而是弄了个f#,遗憾哪。

    至于oracle倒不必太过于担心。首先,oracle也不见得非得封闭不可。是人都知道java就是靠开放才有今天的成就的。他一拿到就封闭,你也太小看那个比比尔盖茨还会玩兼并的埃里森了。其次sun早就开放了jdk而且是基于GNU授权的,而非sun的jvm本来就有很多个各家公司都有,ibm,redhat,oracle,开源组织都各有各家的jdk。如果oracle真的搞封闭。那我们也只有挑一个兼容现在字节码的jvm的机器,反正现在很多项目还是在jdk1.4之上呢。没办法,很多人都不理解泛型是什么东西?觉得尖括号太难看。而且用那个也没什么好处嘛。而,我觉得任何一家做大了,恐怕都不会放弃对于1.4的字节码的兼容吧。

    其实很多人把问题想得很复杂。我们需要一个什么样的语言?第一,有垃圾回收机制。第二,面向对象,类库强大。第三,有个傻帽公司不去研究新的东西,而是不停的把这个语言实现到各个最新最先进的系统之上。至于语法上的特征,多写几行就多写几行呗。

  250. 躺着读书[未注册用户]
    *.*.*.*
    链接

    躺着读书[未注册用户] 2009-04-22 22:37:00

    其实我对c#也有很多意见的

    比如说它的操作符重载只支持少数几个操作符,要是能和c++或者haskell一样完全自定义操作符那就好了。这样才能和函数指针以及lamda表达式配合得天衣无缝。比如说既然有了lamda表达式,为什么不支持list comprehensive?

    既然4.0支持了dynamic我估计lazy evaluation肯定也会获得支持的。这样,很利于写随机测试。

    好了,这一切都有了,为什么不弄个message passing的内存模式?这样写多线程就可以不必写效率低下的lock了。

    但是这样一想,那c#到底是一个什么样的东西?到底是适合在哪个领域?就像我之前所说的,适合一切的编程语言是不可能的。C++把以上的特征几乎全部做到,还是始终跑在底层上。c#弄了这么多,确还是一个asp.net。我倒是挺希望windows 7 能赶快普及,这样c#起码能进入到桌面程序领域。

    至于oracle,我看大家了解太少
    http://www.jroller.com/scolebourne/entry/no_java_se_7_the1

    首先oracle是积极支持JCP独立,把java语言公有化的,早在2007年就是它提议给JCP更大的权利,支持apache项目而反对sun对java语言的独占。

    JCP EC meeting summary - December 7th 2007
    Resolution 1 (proposed by Oracle, seconded by BEA)
    "It is the sense of the Executive Committee that the JCP become an open independent vendor-neutral Standards Organization where all members participate on a level playing field with the following characteristics:

    当然,不知道现在oracle拥有了java以后还会不会如此。这是一个很有意思的事情。

  251. 老赵
    admin
    链接

    老赵 2009-04-22 22:51:00

    @躺着读书
    C#其实和Java能做的事情一样,唯一的区别看来只是“舆论”,能力什么的都有证明了。
    还有message passing适合框架来做吧,比如微软的CCR已经实现了这样的功能。

  252. 老赵
    admin
    链接

    老赵 2009-04-22 22:54:00

    @躺着读书
    oracle老大很有意思,n多年前就说“我觉得世界上几台计算机就行了”,后来计算机铺天盖地。但是现在进入云计算时代了,似乎又接近他当年的思路,现在却忽然说“我不知道云计算有什么意义”——真是商业利益可以改变一切呀,呵呵。

  253. 幸存者[未注册用户]
    *.*.*.*
    链接

    幸存者[未注册用户] 2009-04-23 00:16:00

    @躺着读书
    似乎公认共享内存的线程同步模型比消息传递效率高,共享内存的缺点是对开发者不友好,lock很难用好。

  254. 躺着读书[未注册用户]
    *.*.*.*
    链接

    躺着读书[未注册用户] 2009-04-23 02:02:00

    @幸存者
    你完全弄反了。 共享内存是开发者友好,但是效率低下。消息传递是效率高,但是开发者不友好。 你去搜一下erlang的资料就知道了。

    这个我还是专门培训过的,还记得很清楚。

  255. 躺着读书[未注册用户]
    *.*.*.*
    链接

    躺着读书[未注册用户] 2009-04-23 02:09:00

    @Jeffrey Zhao
    “舆论”的力量很重要啊。 话是人说的,这里的舆论就是各家公司的言论,也从另外一个侧面说明了其他公司对于java和c#的态度。如果人家的产品是java的,当然说java的好咯。c#的没有,当然要谴责c#没有能力。关键是产品啊,产品!

    c#的跨平台始终是个问题,我不是说mono的坏话。我觉得mono的前途在与把c#的windows桌面程序移植到linux下,这个很有吸引力。你说企业级,或者科研,还是不碰为好。至少java的虚拟机早就是linux\unix下的标配了。说来可笑,就有点像windows排斥linux一样。 先占领市场的,有客户依赖噢。后起者再优秀,别人的产品一堆压死你。你再优秀你还要开发呢。人家连开发都免了,直接用就是了。

    至于oracle,sun做了一件大好事就是在自己完蛋之前几乎吧java的所有部分都开放了,这样即使oracle要封闭,其他公司如果要产生基于java的新语言也八九不离十的。不过我还是不希望这样。我觉得oracle不会傻到闹分裂,而是会把各个方面都打理好,只要大家都用java,他又有java的版权,不正好收培训费和咨询费么?

    话说我早就偏题了。我本人学了好些年的java了,最近也研究c#,还指望您的指导呢。呵呵。我觉得在语言级加新功能要有个度,我现在学c#我就觉的c#太复杂了。比java难学一倍还不止。java以eclipse的出现为分水岭,eclipse出现以前,java是很难写的,写得太繁琐。eclipse以后,很多代码都是自动生成,重构也很强大。所以我觉得很多语言级别的增强,为什么不能放到IDE或者平台的新语言上去解决呢?这样一个语言就干一个语言的事情,各有分工合作。

    最后赞一下LinQ,绝对是伟大。O(∩_∩)O

  256. 老赵
    admin
    链接

    老赵 2009-04-23 02:15:00

    @躺着读书
    我也看过erlang,不过我觉的你说反了?
    之所以内存共享效率高,是因为它不需要做数据的复制。说消息传递效率高,是因为它可以大量并行。
    但是如果内存共享也写成并行的,那么效率自然也就高了,而且还不像erlang需要复制数据。
    所以有人说erlang是欲练神功挥刀子宫,大量复制数据造成浪费,不适合计算密集型应用。

  257. 躺着读书[未注册用户]
    *.*.*.*
    链接

    躺着读书[未注册用户] 2009-04-23 02:26:00

    @Jeffrey Zhao
    那要看你怎么定义效率了。以及程序是在什么环境下并行。

    我所说的效率是并发效率。erlang所宣传常常是什么在普通的PC上百万线程并发。这个java和.net都做不到吧?
    在高并发的环境下,lock的瓶颈就产生了。因为lock的时候各个线程之间访问这个程序块,要么效率低下,要么编程困难。而消息传递模式则不然。这一原本lock的部分在各个线程之间还是同时计算的。所以叫做“效率高”。

    所以消息传递模式比较适合运算密集型的程序,也就是各个线程都比较轻量级(我指内存)。通常用在通讯和科学计算领域。

  258. 老赵
    admin
    链接

    老赵 2009-04-23 02:26:00

    @躺着读书
    舆论我不想谈,我只想谈能力,因为我又不是要为微软做销售,.net有能力就够了,而且产品和实例也已经讲的够过了,真正企业中的说法和社区这边胡乱嚷嚷的不一样。比如有些人就会嚷嚷银行,没办法银行都十几二十年的老系统了,当年还没有微软的服务器市场呢——现在都逐步抢占过来了。
    至于跨平台,企业的目标不是跨平台,它是节省成本,微软的解决方案综合产品成本低,自然会选择微软的(微软有授权费用,但是开元平台也要负服务费阿,oracle比sql server贵10倍,sql server性能也根本不差)。而且就算要和linux系统配合也不难,现在都是基于标准了阿,大家都用tcp/ip,http,ws,没有区别,两台linux服务器之间和一台win一台linux之间配合一样的。
    我也偏题了,赫赫。我不觉得工具可以弥补语言的生产力,但是我觉得语言这东西的确混合使用是必然趋势,因为没有语言能做任何事情——但是我也不觉得这就是语言不发展的理由……

  259. 老赵
    admin
    链接

    老赵 2009-04-23 02:30:00

    @躺着读书
    消息传递如果不用lock,那么也是基于不共享的原则。如果要共享数据,那么还是需要lock了,比如多个消息读取同一个资源(文件/网络)
    内存共享也可以做到线程之间不共享的,比如做矩阵乘法各做独立的一部分,所以也不存在瓶颈的问题,当然编程麻烦是确定的。
    这里麻烦还是简单说的是,基于现有模型下麻烦还是简单,不是实现一个消息传递模型的难度。
    所以消息传递是个“模型”,实现这个模型麻烦,基于这个模型开发简单。实现消息传递模型,用内存共享的方式也完全可以做到low-lock或lock-free的。
    erlang那种消息传递,如果复制了大量数据,内存复制的开销就是浪费的。所以我觉得趋势应该是读取数据通过内存共享方式,而任务分配方式是消息传递的。
    // 睡了,醒了再讨论,赫赫。

  260. 躺着读书[未注册用户]
    *.*.*.*
    链接

    躺着读书[未注册用户] 2009-04-23 02:42:00

    确实无论是消息传递还是共享内存,这都只是内存的模型而已。

    只是“开发者友好”和“效率”,这2个很难定义哪。如果是消息传递模式,势必你以前的编程习惯也要改变,这个你适应了就友好了。关键是很多人很难转过脑筋来。相反,如果要在共享内存的模式下,实现复杂的消息传递,那势必“不友好”。但是如果你对lock-free技术等等都有了解。lock-free其实也可以看成一种简单的消息传递。那么你也就“友好”了

    至于效率看来我说得也是有问题的。同样的,如果消息传递模式里头也有优化,比如说不复制了。那么效率也高。实际上也有人做这种优化。不过在分布式运算的环境下,你势必是需要复制的。

  261. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-23 04:35:00

    @躺着读书
    .Net下并发百万线程可以做到,得自己写线程库或用第三方线程库。

  262. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-23 04:41:00

    @躺着读书

    erlang只不过把这种线程模型内置入语言之中了。Java, .Net, C, C++都可以做到百万线程甚至千万线程,但需要第三方库,网上都有实现的。在此之上,如果需要更高的运行效率,需要自己写Scheduler。

  263. 老赵
    admin
    链接

    老赵 2009-04-23 09:27:00

    @躺着读书
    lock-free怎么理解为一种消息传递?
    erlang的问题我觉得是无论分布不分布都会复制,这是它内置模型决定的。
    所以我觉得这个模型还需要调整,相信会有更好的东西出现。

  264. 老赵
    admin
    链接

    老赵 2009-04-23 09:29:00

    @xiaotie
    不是百万线程千万线程,操作系统抗不起的,erlang也只是说百万千万的process,这个process可以认为就是“任务”。
    所以其实实质是百万千万任务同时进行,这个是.NET/Java也做得到的。

  265. fs[未注册用户]
    *.*.*.*
    链接

    fs[未注册用户] 2009-04-23 11:45:00

    System.out.println("太有道理了!");

  266. 躺着读书[未注册用户]
    *.*.*.*
    链接

    躺着读书[未注册用户] 2009-04-23 20:09:00

    @Jeffrey Zhao

    lock-free的原理就是写一个loop,开头的时候记录某个资源的值,当loop结束的时候去比较这个资源的原始值和最新值。如果最新值变化了,那就表示有其他线程访问和更新了值,自己就从新执行这个loop。如没有变化,则自己更新这个值。这个资源其实就相当被拿来通讯。

    你说的我并不同意,看下面:

    如果有2个线程p1和p2他们都要访问一个资源r,进行操作action。如果是erlang的模型,会把这个资源r复制2份传递给p1和p2,当他们计算完成再通过一个线程D来收集r1和r2的值,获得总值,这个时候计算完成。

    如果你采用的原始的lock。那么资源r不会复制,但是p1和p2进行action运算的时候必须是p1和p2按一定顺序进行(因为action被锁住了)。如果这个时候是一万个线程,这个时候的等待时间就很长。所以效率低下。

    这个时候如果采用lock-free技术:同样的资源r不会复制,这个时候没有同步的运算快(synchronized),p1和p2同时进行action运算,但是他们在更新的时候会比较刚开始进行action运算的时候的r值和运算结束后的r值是否一样。如果一样,在自己运算的时候没有其他的线程更新这个资源r,那么自己更新。如果变化了?则重新读取r值,自己的action模块按新值重新跑一次。这样如果是一万个线程跑的时候,没有等待,但是会有大约100个线程重新跑了2遍action甚至4,5遍。这样效率大幅提高,但是还是运算的时间还是大于消息传递模式。

    这个时候,问题来了。是这重跑的200多遍的时间大呢?还是复制资源r的时间大呢?如果r只是一个原始类型,那么肯定是重跑200遍的时间大。消息传递模式胜出。如果资源是一个开销大的资源,那么内存复制的开销就不能忽略。

    这个时候要具体分析:
    首先考虑矩阵的情况,如果整个矩阵是一个资源,那么通过人的思维很容易的吧这个矩阵分成一个一个的模块,先分别运算,在最后的时候一起相加。这个时候其实与其说是复制资源r,不如说是分解整体资源R给很多的r。内存开销仅仅只是共享内存模式的2倍而已。

    如果你编程的时候没有分解,而是把整个大的资源R给了很多的小线程,那么你的运算就是一个灾难。

    所以说erlang的应用范围很小,仅仅在于电信领域,和部分科学计算领域。

    顺便提一下这种思维方式和jdk7中所要添加的fork然后合并模式很类似。但是消息传递模式能够实现的运算模式绝不只有这一种。我提到这个例子只是因为这是最简单的。

  267. 幸存者[未注册用户]
    *.*.*.*
    链接

    幸存者[未注册用户] 2009-04-23 21:40:00

    @躺着读书
    我虽然不了解erlang,但是你描述的机制很像STM,即共享事务内存。
    但是严格来说STM的机制是obstruction-free的

  268. 幸存者[未注册用户]
    *.*.*.*
    链接

    幸存者[未注册用户] 2009-04-23 21:45:00

    并且STM和message passing是有区别的
    不过未来并行计算的发展方向似乎是结合STM和message passing

  269. 躺着读书[未注册用户]
    *.*.*.*
    链接

    躺着读书[未注册用户] 2009-04-23 21:50:00

    从我上面说的看来

    lock-free技术其实也还不是真正的并发,实际上action运算还是有先后顺序的。只是不会像有lock的时候那样,傻傻的等在那里。(这个有点类似cpu的超线程技术?)真正的并发还是只有消息传递模式。

    当然,内存的开销是在那里的。无法避免的。

  270. 躺着读书[未注册用户]
    *.*.*.*
    链接

    躺着读书[未注册用户] 2009-04-23 21:52:00

    @幸存者
    你说的是我对lock-free的描述? 正是!

  271. 老赵
    admin
    链接

    老赵 2009-04-23 23:02:00

    你说的完全正确,但是我说的没有问题。
    我说了前提啊,要把不同线程做不同事情,不会互相阻碍,如果真要互相阻碍,那么也可以看情况复制成多份,权衡复制开销和锁开销。而且有时候共享内存,而不是互斥的资源,也没有问题,例如只读的资源。
    我说的lock-free不是替代message passing,而且lock-free也不一定适合所有情况,就像你说的那样。
    所以就像我说的一点,erlang强制复制,没有选择,这点可能会遇到瓶颈,而共享内存可以共享只读的资源,不用额外复制。所以我倾向message passing但是不倾向erlang。

  272. Bob-wei
    *.*.*.*
    链接

    Bob-wei 2009-04-24 16:01:00

    前辈们都吵吧,真是大开眼界。
    难怪程序员总该有做不完的工作,
    这不,没事做了,就开始自相残杀。
    都是搞程序来解决现实问题的,吵什么吵。

  273. 阿滨
    *.*.*.*
    链接

    阿滨 2009-04-24 17:09:00

    @躺着读书 哈哈,骨灰级的吵架大师!!!

  274. dfd[未注册用户]
    *.*.*.*
    链接

    dfd[未注册用户] 2009-04-24 21:17:00

    身心原因

  275. xiaotie
    *.*.*.*
    链接

    xiaotie 2009-04-25 03:02:00

    @Jeffrey Zhao

    又不是内核线程,没啥扛不起的。这些线程库,都是用的 Thread 这个词的。

  276. 老赵
    admin
    链接

    老赵 2009-04-25 14:41:00

    @xiaotie
    你说的是fiber?
    首先托管代码里是操作不了fiber的(pinvoke或cli/c++例外),其次fiber也不适合相当多场景的。
    我没听懂什么叫作“thread”这个词,不过如果要真正跑数千个线程,上下文切换已经耗时太多了,数千个thread要的stack也已经撑了几百兆到几个G了,所以才要线程池这个东西,操作系统也提供原生支持。

  277. mysun
    *.*.*.*
    链接

    mysun 2009-04-25 22:29:00

    老赵辛苦!
    以前我埋怨跟着MS走太累,更新太快,天天都在学习。后来我终于明白了。技术的更新进步,促进我们的进步。

  278. Nick Wang
    *.*.*.*
    链接

    Nick Wang 2009-04-25 23:39:00

    万丈高楼平地起啊,老赵的楼特别容易盖...

    今天听到周爱民的一句话:有时候的争论,不是为了正误,而是为了面子。不知道盖楼的都是为了正误呢,还是为了面子.

  279. Ramy
    *.*.*.*
    链接

    Ramy 2009-04-28 12:56:00

    评论某个语言首先看看自己有没有那个资格,你觉得资格够和java语言的开发者相提并论么?还是你觉得你够资格和C#语言的开发者相提并论?
    你可以说.net如何如何强大,没人会骂你!
    甚至你可以说你不喜欢java,也没人骂你!
    但你不能说java如何如何不行,那肯定会有人骂你!

  280. 老赵
    admin
    链接

    老赵 2009-04-28 13:07:00

    @Ramy
    其实我觉得啥时你不谈资格论了,啥时你就搞得好技术了,呵呵。

  281. 韦恩卑鄙
    *.*.*.*
    链接

    韦恩卑鄙 2009-04-28 16:21:00

    java本身也是产品么
    对产品不批评只知道捧 无异于被卖了还帮人数钱
    老赵骂m$也丝毫没软过 更没有必要给什么别的产品留情的余地

    还是事实说话

  282. 幸存者[未注册用户]
    *.*.*.*
    链接

    幸存者[未注册用户] 2009-04-28 17:01:00

    什么样的语言才是优秀的语言?突然想到很久以前看的一篇文章,有兴趣的可以google “百年语言”。

  283. Sai~
    *.*.*.*
    链接

    Sai~ 2009-04-29 09:02:00

    唉,怎么 又来 比这些东西,
    再好用的语言 也是为了做 商业产品,
    再牛X的C# 做出来的东西,没有商业价值都是 0

    国家单位 要 Java 怎么说的?
    C# 那种被微软 恶魔化的东西,不能用,防止微软垄断化,


    老赵 很明显的 是 不挣钱的帮微软做活 广告啊,
    要知道 以后 的语言
    是不用会编程的也会做的

    不给你废话了。

  284. 老赵
    admin
    链接

    老赵 2009-04-29 09:14:00

    @Sai~
    C#做出一个失败的产品当然没用,但是我现在说得就是C#写出优秀的产品更方便嘛,呵呵。
    还有C#被微软恶魔化啦?我觉得是微软被你妖魔化了,哈哈。
    我现在看到这种说好话就是做广告的说法真的很无奈啊,啥时吵架时能够专业点,做到对事不对人,做到客观,你就可以进步了。

  285. 我是阿狼
    *.*.*.*
    链接

    我是阿狼 2009-04-30 11:18:00

    有在进行这种无聊的争论,谁愿意用什么就用什么呀,干嘛非得分个你死我活无聊呀,就是闲的

  286. CowboyRyan
    *.*.*.*
    链接

    CowboyRyan 2009-04-30 14:03:00

    路过,“一个好的程序员,应该有一颗开放的心,任何语言、任何技术都可为我所用,不带偏见,不拘一格。”这句讲得好。

  287. zzyy[未注册用户]
    *.*.*.*
    链接

    zzyy[未注册用户] 2009-05-05 12:31:00

    什么时候世界上会有中国人发明的语言的一席之地。好闲啊!

  288. 老赵
    admin
    链接

    老赵 2009-05-05 12:42:00

    @zzyy
    别紧张,全世界看来看去也就美国人在发明语言,其他国家发明的人也变成美国公民了。
    但是各个国家的计算机行业还是那么热闹,说明发明不了是很正常的,争论也是必须的。
    否则全世界都把美国当大爷算了,都别搞了,你说是不。

  289. blacktear
    *.*.*.*
    链接

    blacktear 2009-05-06 10:05:00

    路过,楼主可以试着比较比较汉语和英语。

  290. jiabaozhen[未注册用户]
    *.*.*.*
    链接

    jiabaozhen[未注册用户] 2009-05-07 15:28:00

    写个java实现:

    public static void main(String[] args) {
    Matcher matcher = Pattern.compile("1+").matcher("00101111110111101110");
    List<Object> list = new ArrayList<Object>();
    while (matcher.find()) {
    if (matcher.start() + 1 == matcher.end()) {
    list.add(matcher.start());
    } else {
    list.add(matcher.start() + "-" + matcher.end());
    }
    }
    String s = list.toString();
    System.out.println(s.substring(1, s.length() - 1));
    }

  291. jiabaozhen[未注册用户]
    *.*.*.*
    链接

    jiabaozhen[未注册用户] 2009-05-07 15:34:00

    关于java与c#,我关注的一点:c#似乎只能运行在windows平台下吧?

    大型企业应用中,windows哪里是*inux的对手?

  292. 老赵
    admin
    链接

    老赵 2009-05-07 16:18:00

    @jiabaozhen
    嗯,Java实现的冗余可见一斑吧。
    还有,你一定没有仔细看文章和评论,否则你肯定知道我说的是“语言”而不是“平台”。
    再者,你的观点又过时了,Windows早就在大型企业应用中分了一杯羹了。最近的消息:伦敦奥运会只在某些地方用了一点点Linux,大型应用统统跑在Windows下。

  293. jiabaozhen[未注册用户]
    *.*.*.*
    链接

    jiabaozhen[未注册用户] 2009-05-07 18:39:00

    @Jeffrey Zhao

    我觉得这个例子并不能说明java的冗余,不都是10来行代码吗? 或许你需要一个更好的例子。

    我知道你说的是“语言”而不是“平台”,但是程序最后还是会运行在某个os上;
    还有,windows的服务器市场份额能有多少?高端的服务器向来都是类Unix,你看看电信行业、通信行业、银行系统,有多少用windows做服务器的?

  294. 老赵
    admin
    链接

    老赵 2009-05-07 18:56:00

    @jiabaozhen
    这个例子还不够典型吗?Ruby和C#都是1行,而且是流畅接口(Fluent Interface),Java用了10来行。
    语言是能够,也应该脱离平台来讨论的,这也是为什么会有语言向平台移植的情况。因为平台是好的,语言不行,所以靠其他语言移植过来希望可以弥补语言的低生产力。
    至于windows服务器市场,中小企业90%+,世界500强50%+,中石油,纳斯达克全部Windows,新构建的银行平台已经大量考虑windows了。这些都是事实,只是没有被人关注而已,呵呵。
    大型系统Unix多是因为历史遗留问题,没人会重写呗。这些系统大都已经有15年以上历史了,而10年前Windows服务器还没有半点市场份额。
    入手太迟,Windows的失误。

  295. MarkY[未注册用户]
    *.*.*.*
    链接

    MarkY[未注册用户] 2009-05-08 10:19:00

    兄弟们,有时间多去研究和创造吧,还有好多的事要做呀!
    当八路军在研究究竟是德国造的驳壳枪好使还是小鬼子的王八盒子管用的时候,美日已经在中途岛展开的是多艘航母和几百架战机的对战.我们落后呀,得加油哇,兄弟们.

  296. 老赵
    admin
    链接

    老赵 2009-05-08 10:40:00

    @MarkY
    可惜没有正确对待识别德国造的驳壳枪好使还是小鬼子的王八盒子好用时,根本就没能力造出航母和战机呀。

  297. 5207
    *.*.*.*
    链接

    5207 2009-05-10 01:46:00

    对于老赵对java生产力方面的论述,还比较同意。但是java框架上的优势是这么多年形成的,也是有其道理的。

    C#路还很长,不见得就是未来。就像微软在网络方面做了很多,但却被别人走在了前面一样。

    java这种无平台支持的东西是没法走向未来的。这是注定的,也是必然的。跨平台永远都不可能是最主流。否则就不会有跨平台一说

  298. 打酱油的[未注册用户]
    *.*.*.*
    链接

    打酱油的[未注册用户] 2009-05-10 02:02:00

    因为无知,所以无畏!

  299. zzyy[未注册用户]
    *.*.*.*
    链接

    zzyy[未注册用户] 2009-05-10 17:58:00

    @Jeffrey Zhao
    O(∩_∩)O~

  300. 柳城之城
    *.*.*.*
    链接

    柳城之城 2009-05-11 11:27:00

    我倒是仔细地看过了正文的文章,不过再看完后面的评论之后,已经把正文忘记得差不多了。

    我的观点是带着个人喜好的:微软的东西其实“可以有”。

    这个C#,我学着、用着感觉很舒服。基本上是我心目中很理想的语言了,例如:

    相当完美的面向对象
    有一个很强大的娘家——MS
    不断进步——有让人感觉到惊喜的

    我的回复简单地说,就是支持老赵!

  301. Kirov[未注册用户]
    *.*.*.*
    链接

    Kirov[未注册用户] 2009-05-13 21:35:00

    看了这么多,有点想去关注一下C#的语法。
    我是欣赏UNIX的,爱看《UNIX编程艺术》,同时也不喜欢微软。
    如果仅从计算机语言的语法上来比较,这篇文章挺有趣。
    原谅Java语法吧,他从来就不是一把简单的螺丝刀。我喜欢shell & perl等等基于UNIX发展的语言,因为他们是好用的螺丝刀,而不是包罗万象的航母。
    KISS原则让人很舒服。

    感觉个人成长最迅速的一段时间,就是逐渐脱离MS,走入UNIX世界的这两年。

  302. 老赵
    admin
    链接

    老赵 2009-05-13 22:49:00

    @Kirov
    我成长最快的一段时间是深入MS的时候,当然我倒一直是跨平台工作的,呵呵。
    Java让我反感的地方,并非是一种包罗万象的航母,C++更像。Java给我的感觉更像是一把钢刀,可惜是大家刚会炼钢时练出的一把。
    因此比木刀强,但是由于不肯加入最新萃取技术,已经渐渐落后于时代了,呵呵。

  303. ZilchWei
    *.*.*.*
    链接

    ZilchWei 2009-05-20 08:26:00

    大牛们在争论..
    不管什么语言..学精了就是好语言...跟着老赵走...希望老赵出一本asp.net mvc的书籍....顺便弱弱的问下:Professional ASP.NET mvc 1.0国内哪儿有卖.

  304. 老赵
    admin
    链接

    老赵 2009-05-20 09:06:00

    @ZilchWei
    学精了就是牛人,学精了不好的语言还是不好的语言,呵呵。
    这本书国内没卖,不过网上有公开版本啊。

  305. Wells[未注册用户]
    *.*.*.*
    链接

    Wells[未注册用户] 2009-05-24 13:33:00

    做什么样的事情就选什么样的工具
    “筷子”和“勺子”谁更有用,您要不也给分析分析

  306. 老赵
    admin
    链接

    老赵 2009-05-24 15:12:00

    --引用--------------------------------------------------
    Wells: 做什么样的事情就选什么样的工具
    “筷子”和“勺子”谁更有用,您要不也给分析分析
    --------------------------------------------------------
    您偷换概念,用大道理唬人。Java和C#同族同宗,要比,也就是一把勺子和另一把勺子之间的比较
    其中一把勺子旧,破,许久不打磨了,其中一把勺子不断进化,想让使用者更顺手,更好用。
    对了,其实我是混合编程的实践者,而不是说“什么样的事情什么样的工具”等套话的人。只可惜,有了C#,我真不了解什么情况适合用java语言。

  307. 高歌
    *.*.*.*
    链接

    高歌 2009-05-27 21:14:00

    看的好累,老赵果然fans无数啊

    每次别人问我Java好还是.NET好,我就问他你知道明天那只股票更好?

    只不过我现在满仓的.NET,只能希望MS大旗不倒了...

    支持老赵!

  308. CowNew开源团队
    *.*.*.*
    链接

    CowNew开源团队 2009-05-27 21:31:00

    --引用--------------------------------------------------
    高歌: 看的好累,老赵果然fans无数啊

    每次别人问我Java好还是.NET好,我就问他你知道明天那只股票更好?

    只不过我现在满仓的.NET,只能希望MS大旗不倒了...

    支持老赵!
    --------------------------------------------------------
    听类似的言论总感觉好别扭,难道真的MS倒闭了你就失业了吗?

  309. live41
    *.*.*.*
    链接

    live41 2009-05-30 23:58:00

    “你个死胖子有什么资格评论这些个”

  310. live41
    *.*.*.*
    链接

    live41 2009-05-30 23:59:00

    "你个死胖子有什么资格评论这些个"

    楼上是发错了,我想说,这句最好笑,哈哈,喜欢blog主直率的为人..

  311. 大白
    *.*.*.*
    链接

    大白 2009-05-31 10:37:00

    用了几年的C#.Java没用过。学过一点。
    个人认为,在语法上,Java没有C#先进,优美。
    比如属性访问器之类的。
    C#语言设计上的优势是不可否认的。
    Java之所以比.net普及,是因为,.net出生的有点晚。
    如果,同时出生呢?
    当时,和Java挣天下的,难道有.net ?
    相对于asp,java肯定是首选。因为,大多数的人,喜欢c,C++.
    转到Java学习容易。
    当前,Java的优势,就是普及。长得比较大,成熟。
    但未来不好说。
    以后的windows,都直接集成.net framework了,当新的系统都集成了.net framework,那么到时.net程序,就是现在的win form程序了一样了。




  312. 路过得[未注册用户]
    *.*.*.*
    链接

    路过得[未注册用户] 2009-06-16 11:42:00

    说了半天,我看说得意义不大,楼主得意思是c#语言本身得设计比java优秀,反对意见是说java得应用比C#广泛。其实,这两种语言的特点是由它们的开发公司的利益决定的。因为sun当时是一个服务器提供商,它开发java是为了更好的卖服务器,说java跨平台,其实,主要是支持unix,sun的服务器都是这种系统,其实,现在大多数企业应用都是基于unix内核的,java的开源是为了吸引更多的企业购买服务器,而不是语言本身。而微软是产品公司,他开发.net平台是想把更多的程序员吸引到这个横向的开发框架下,虽然现在看,当时的这个想法有点失败。c#语言的多次特性变化是微软无奈下的决定。因为,在企业开发领域,微软根本就是后来者,许多分布式的应用技术和企业业务流程,微软不是强项,所以,.net这项本身要做企业级应用的开发平台没有获得它预想的市场。其实c#和java谁好谁不好,没有意思,单从语言上来看,C#确实是有很多新技术在里面,但是历史往往对接受那些对真正能够创造价值的技术感兴趣,有的技术现在看是新技术,但可能很快被抛弃,作为开发者讨论那种语言好,意义不大,应该讨论在特定语言下如何开发出更好的产品会更有意义

  313. 我什么都不是[未注册用户]
    *.*.*.*
    链接

    我什么都不是[未注册用户] 2009-06-29 23:10:00

    赵兄,说得有理。不过我相当不喜欢MS,,所以我用python+wxpython写桌面,用django写web,只用linux或unix,用openoffice,用firefox和你吹水。

  314. 老赵
    admin
    链接

    老赵 2009-06-30 00:01:00

    @我什么都不是
    门户之见呀,hoho。
    我是什么都用,.NET,Java,Python,Ruby,Windows,Linux——哦,基本上不用Unix。
    总之该用啥用啥,啥顺手用啥。

  315. kgame[未注册用户]
    *.*.*.*
    链接

    kgame[未注册用户] 2009-06-30 17:22:00

    ----------------------------------
    @Jeffrey Zhao
    我现在真想在说,如果现在有个C#编译器可以生成Java的binary code该多好,不知道你现在有没有听懂我的意思。
    ----------------------------------
    當然有
    那就是Mainsoft for Java EE
    有支援Visual Studio 2008
    官網:
    http://dev.mainsoft.com/Default.aspx?tabid=177

    簡介:
    http://blog.csdn.net/heqi915/archive/2007/06/21/1660891.aspx

  316. 阿龍
    *.*.*.*
    链接

    阿龍 2009-07-16 11:11:00

    Who is '老赵'?

  317. 老赵
    admin
    链接

    老赵 2009-07-16 11:49:00

    阿龍:Who is '老赵'?


    就是兄弟俺。

  318. congling[未注册用户]
    *.*.*.*
    链接

    congling[未注册用户] 2009-07-20 05:43:00

    老赵,
    最近我做了一下.NET和java的性能测试,发现
    1. 在反射方面.NET的性能比java差上好多,很多东西都需要使用emit等方式进行优化

    2. 在hashtable的性能上,.NET的性能也比java要差不少

    我的测试
    http://blog.myspace.cn/congling1/category/585959.aspx

    我一直想优化NVelocity, 以致和Velocity一样的性能,但是目前还远未做到,您有否什么建议?

  319. 老赵
    admin
    链接

    老赵 2009-07-20 09:03:00

    @congling
    等我有时间去看看,谢谢!

  320. 假装不认识[未注册用户]
    *.*.*.*
    链接

    假装不认识[未注册用户] 2009-09-07 15:34:00

    @幸存者
    请问,你说汉语“你好”,和英语“hello" 意思一样,为什么是不同的语言?

  321. sanshi
    *.*.*.*
    链接

    sanshi 2009-09-18 16:00:00

    赞,以后有人再给我说Java怎么好怎么好的话,我就拿这篇文章吓唬他。

  322. minttang2003[未注册用户]
    *.*.*.*
    链接

    minttang2003[未注册用户] 2009-09-19 08:02:00

    @躺着读书
    这话不对,你不应当选择java,应当选择fortran

  323. googlehacks[未注册用户]
    *.*.*.*
    链接

    googlehacks[未注册用户] 2009-09-19 15:49:00

    看来当初我放弃Java,自学C#是对的,哈哈!

  324. MK2
    *.*.*.*
    链接

    MK2 2009-10-10 10:54:00

    哈哈,python也可以做到的,献丑了。。。

    import re
    ', '.join([
                len(i.group()) == 1 and '%d' % i.end() or '%d - %d' % (i.start() + 1, i.end()) 
                for i in re.finditer(r'0+|1+', '00101111110111101110') if int(i.group()) != 0
                 ])
    

  325. 老赵
    admin
    链接

    老赵 2009-10-10 11:12:00

    @MK2
    python的确是可以的。
    所以我说Java是低劣的语言,我丝毫不掩饰自己对它的厌恶,哈哈。

  326. Max On Java[未注册用户]
    *.*.*.*
    链接

    Max On Java[未注册用户] 2009-10-12 18:18:00

    一门语言是否高效不仅在于它是否能使开发者少按两下键盘。我只能说“喜欢微软技术的人,从骨子里都有一种奴性。”

  327. 老赵
    admin
    链接

    老赵 2009-10-12 18:30:00

    @Max On Java
    兄弟,别自命清高了,你还真以为自己血统有多高贵啊,不承认事实只能让别人瞧不起你,知道不?
    不过很显然,你我是属于互相瞧不起滴,没事没事。

  328. lerit
    *.*.*.*
    链接

    lerit 2009-10-15 22:17:00

    吼吼,我看到其他文章说的导火索啦

  329. 我啊我呢我呵呵[未注册用户]
    *.*.*.*
    链接

    我啊我呢我呵呵[未注册用户] 2009-10-30 15:53:00

    我想说,C#的风格比JAVA好不是一点点,JAVA本身几乎没有进步,都是别人帮衬的,这种靠别人扶未必不好,但完全是被扶着的迟早没戏的。

  330. helloworlder[未注册用户]
    *.*.*.*
    链接

    helloworlder[未注册用户] 2009-10-30 16:00:00

    java这种无平台支持的东西是没法走向未来的。这是注定的,也是必然的。跨平台永远都不可能是最主流。否则就不会有跨平台一说

    java人曾经说donet人 用VS开发,很笨,如果没有VS的智能感应。他们什么都做不成。程序还是要用写字板来写。
    多年后,jb,eclipse出来后,再也不见这种说法了。java人对于自己没有的东西一边说人家的不好一边学习人家的不好,然后重复着上一步,就这样成长起来的。
    JAVA人的特点是:
    一次编译,到处运行。现在变成 “到处调式!”
    性能超过C++! (偷学C++,接着打击C++)
    不需要物理的CPU就能运行JAVA!
    java os ! (开机半小时)

    美国大型系统用什么我不清楚,但是中小型系统绝对是.Net具有压倒性优势,我们公司专门做这块的。

  331. sharerer[未注册用户]
    *.*.*.*
    链接

    sharerer[未注册用户] 2009-10-30 16:04:00

    JAVA本身的发展明显后劲不足,现在的问题只是历史遗留问题

  332. 天堂口
    *.*.*.*
    链接

    天堂口 2009-12-28 23:10:00

    @躺着读书
    支持你的观点,.NET做网站或者中小型的系统还行,但是真正上升到企业级甚至是行业级的项目的时候,.NET很难渗入。其实也不是.NET不行,就像谁也不能拿出标准的能够说服人的证据证明windows的服务器安全性比LINUX服务器安全性差一样。所以我觉得争论这个是没有意义的。我个人觉得.NET开发起来更舒服。但是不得不说,现在市场上对.NET人才的需求远不及对java的人才需求。

  333. 天堂口
    *.*.*.*
    链接

    天堂口 2009-12-28 23:16:00

    @Jeffrey Zhao
    当客户要求用java的时候,你就得用java

  334. 老赵
    admin
    链接

    老赵 2009-12-28 23:29:00

    @天堂口
    客户又不懂Java还是.NET,hoho。

  335. 天堂口
    *.*.*.*
    链接

    天堂口 2009-12-31 19:49:00

    @Jeffrey Zhao
    呵呵,可不是所有的都不懂哦。

  336. 老赵
    admin
    链接

    老赵 2009-12-31 19:59:00

    @天堂口
    懂的就让它们懂去呗,咱找不懂的,嘿嘿。

  337. richard
    203.156.245.*
    链接

    richard 2010-08-20 12:01:01

    看了楼主举的例子,不就是一个LINQ吗?

    也没看到C#牛仔那里啊

    搞得好像不支持LINQ就怎样了

    Java也有自己的LINQ库。

    这就是JAVA的好处,好的东西永远有办法引进

  338. 老赵
    admin
    链接

    老赵 2010-08-20 14:37:31

    @richard

    看我的新文章,LINQ可不是Java能引进的,当然如果您能多给点关于这方面的资料,我自然十分欢迎。

  339. 阿斯顿
    121.18.127.*
    链接

    阿斯顿 2011-03-04 08:57:38

    其实对于一个程序员个体来说,语言的差别影响不大。哪个语言都足以养活一个人。

  340. CR
    183.62.5.*
    链接

    CR 2011-12-05 09:11:14

    JAVA是语言,.net只是平台而已(类似于eclipse或者photoshop),不是语言,虽然我搞C++的,也了解过JAVA和C#,起码JAVA还是可以跨平台的,C#真没什么好说的,VC和C#中的字母C真该去掉

  341. 老赵
    admin
    链接

    老赵 2011-12-05 09:48:33

    @CR

    完全不知道你在说什么。

  342. 链接

    isee 2013-10-07 16:59:55

    这几天看了下lz的一些blog,觉得lz觉得java语言生产力低下 大致上是觉得有很多多余的代码。

    例如上面说的例子还有在其他blog提出的排序这种例子。利用Lambda等特性 能把java中几行的代码 几个字母就能写出来。

    但是有没想过另外几个问题

    1. 拿排序的例子来说,那种java写法是可以写成一个静态排序方法然后直接调用。而且排序这个需求复杂起来之后就会更意识到扩展性的重要性,当然lz的写法也许也是很具有扩展性的,只是我不了解。

    2. 拿这篇中提出的例子来说,lz视乎很喜欢以代码量少为荣。认为xxx语言几行代码就能完成这个需求,比xxx语言具有更高的生产力。

    这点是完全错的,每种语言都有自己的一些特点,比较起来java则显得很笨拙,lz的代码写完之后可能觉得成就感颇高,聊天的时候也许还会跟别人讲讲我xx行就实现了xx功能,这点反而不是java的追求,易学易用一千个人只写出1种风格的代码,这点可能才是javaer的亮点。

    比起更少的代码,javaer更看重可读性和扩展性。

    lz的例子我是不知道以后怎么去对其做调整和修改的,也不知道怎么去调试代码。可能只是我水平太低了。

  343. 老赵
    admin
    链接

    老赵 2013-10-07 17:24:20

    @isee

    说的不错,你是真的不了解,等你了解了之后,你就知道Java所谓的可读性是多么差,扩展性是多么糟糕。一千个人写出同一种代码有什么好的?又不是好代码,是很丑的垃圾代码。

    至于你不知道怎么调整和修改我的代码,这很正常,小学生怎么会解高等数学题啊。

    你也是被Java毒害的一类人啊,水平就愣是上不去,因为Java不给你上,呵呵。

  344. netfocus
    42.120.74.*
    链接

    netfocus 2013-12-05 19:28:37

    佩服老赵,看你的文章真是受益匪浅。我也想做出一个流芳百世的项目,正在努力中。你觉得一个人要做出一个流芳百世的开源项目,最重要的是要具备哪些品质呢?

  345. 老赵
    admin
    链接

    老赵 2013-12-05 23:45:31

    @netfocus

    等我做出一个流芳百世的开源项目以后再来告诉你……

发表回复

登录 / 登录并记住我 ,登陆后便可删除或修改已发表的评论 (请注意保留评论内容)

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

评论内容(大于5个字符):

  1. Your Name yyyy-MM-dd HH:mm:ss

使用Live Messenger联系我