Hello World
Spiga

Why Java Sucks and C# Rocks(1):比较的意义与目的

2010-04-16 23:48 by 老赵, 30932 visits

消息发布之后,许多朋友都表示对我这个主题的关注——无论是正面还是负面的——这让我很高兴。不过说实话,我原本并没有打算写这篇文章。我原本的打算是从一开始就进行技术方面的讨论,但是大家在前文的反馈让我把一些问题想得更清楚了,也认识到有些东西可能需要先说在前面可以有更好的效果。希望各位朋友可以继续给我一些反馈,这样我可以在必要的时候进行补充更完整的内容。这次的话题很有价值,我想把它做的更好。

为什么是Java?

这个系列我将详细比较C#和Java——语言,而不关Java平台任何事情。其实这本不想强调这一点,因为语言和平台之间是没有任何可比性的。因为C#明显只是一门语言,因此根据“类型推断”,则Java也应该是“语言”类型才对。因此,我在标题中就不想加入“Language”这样较长的单词了,累赘啊!

那么,我为什么选中Java来和C#进行比较,而不是其他语言呢?原因很多,主要有以下几点。

首先,Java语言足够热门。看看TIOBE语言排行榜,Java语言风光无限,从2002年开始几乎全程领跑。如果我说这门受众如此之广的语言一些坏话(好吧,其实是很多坏话),那响应的人一定会非常多。例如,事实上Delphi语言在停滞发展之后,在我看来它也已经和Java处于同一级别了。但是我不想说Delphi Sucks,因为即便这么说,可能也不会有多大影响力——当然,可能在盛大创新院里会正好相反。

其次,Java语言真的很糟糕。好吧我承认,它在诞生初期还是有重大意义的,它简化了编程难度,大大提高了生产力。但是,由于它多年来的固步自封,它已经完全跟不上如今时代的发展了。用现在的标准来衡量Java语言,会发现它是如何拖累程序员的生产力,如何成为Java平台上最短的一块木板。作为一次关于语言比较这种“争议性话题”来说,如果不是有一方“全面落后”的话,那一定就会陷入双方粉丝的口水战——掺杂大量主观内容的讨论,那倒真就没有任何意义了。

还有,知道Java语言有多糟糕的人并不多。可能有不少朋友的确会感觉Java语言在使用时“挺啰嗦”的,但是由于并没有去仔细了解其他语言的的发展情况,对Java语言的糟糕之处也说不出个所以然来。但是大部分人,真的是大部分,他们一直认为Java是一门不错,甚至很优秀的语言了。为什么?看看排行榜咯。但是我想说,排行榜只能说明它的“热门”程度,并不能代表Java语言有多么优秀。正所谓“劣币驱逐良币”,我这个系列的文章也是想告诉坚持Java语言的程序员们,您到底损失了什么。

更重要的是,那就是Java虽然糟糕,但还是有解决办法的。如果没有解决办法,那么这场讨论的价值就会大打折扣了,因为讨论了半天我们还是只能保持现状。例如,C语言生产力高吗?当然不如如今许多高级语言。但是,C语言是不朽的,因为我们必须有一种语言来负责底层的开发,这要求它和冯·诺依曼结构尽可能的对应,而不能有太高级的抽象(因为一高级就难以生成最为高效的机器码了)。因此,我不会讨论C语言的特性,我会选择Java语言。当然,这个解决办法就是抛弃Java,换用一种生产力更高的语言。

最后,好吧,其实还有一点便是,我对Java语言足够熟悉。我的“职业程序员”生涯便是从Java开始的(之前都算是小打小闹),大学里的编程课学的也是Java(期末考试时是全班最高的106分,满分是100+10分附加题),也用它做了不少项目。我还记得最后一个Java项目是2004年参与开发的是海关审批工作流,当时翻来覆去看的参考书是《J2EE Development without EJB》。只不过接下来我便投身于.NET世界,用的最多的语言便是C#了。C#从2.0起突然发力,瞬间将Java语言甩开几条马路,而3.0的改进更是堪称经典。不是我不想回到Java平台,是我实在不想在Java语言上浪费生命。

嗯嗯,其实我也挺希望许多朋友在批评一个事物的时候,先对它的现状有足够了解的。否则,真挺没意思的。

又为什么是C#?

好吧,那为啥要拿C#出来耍?直接说Java的不是就行了嘛。其实我也有几点理由:

首先,我的博客毕竟还是主要关注于.NET技术的,来看我文章的大部分朋友相信使用的还是C#语言。我这一系列文章虽说是要讲Java烂,但可能大部分“手法”是在说明C#和Java语言之间的差距。因此,我也会努力地在文章中体现C#的美妙之处,会展示大量C#的编程模式。这些模式并非只是为了好看,而绝对是在生产过程中非常有用且常用的。我希望这系列文章除了鼓励别人摆脱Java语言的负累以外,也可以给C#程序员带来同样的价值。

其次,我想改变许多朋友对C#的看法。我想大部分朋友应该了解C#语言比Java的特性多,但是您可能不太了解C#目前的发展状况,以及C#和Java之间的真实差距。您可能会认为,C#虽然比Java特性多,但也只是一些语法糖而已,虽然可能的确比Java生产力来的高,但是优势并不明显。我想要告诉大家的便是,C#有别于Java的特性并非这么普通,它是凝聚了Anders Hejlsberg这个天才的理想,都是对生产力提高有重大意义的。

还有,如果要与Java语言进行比较,还有比C#合适的对手吗?我想不到很合适的。因为根据TIOBE语言排行榜的纪录,排名靠前的语言中也只有C#和Java颇为相似。这个相似体现在多个地方,其中最重要的在于它们所在的平台所面向的应用类型几乎完全相同。C#和Java语言也是纠缠如斯,相信这两者的碰撞会比其他情况带来更多关注。同样,至今还有些朋友认为C#只不过是在抄袭Java而已。不过我在这里想说的是,好吧我承认C#在最初和Java颇为相似(但也有许多不同),但是自从C# 1.0诞生之日起,就只出现Java借鉴C#特性的情况,至今已将近10年。您可以记住这句话,我会证明给您看的。:)

当然,我对C#也足够熟悉,我想这点就不用多做解释了吧。

LISP那点事儿

呃,我在表示要写Why Java Sucks and C# Rocks系列文章后,收到的许多质疑是有关LISP的。LISP是一门(或者说是一类)神奇的语言,虽然在工业界的应用并不广泛,但是却有着不容置疑的历史意义。我有幸在大学时加入了复旦大学软件学院和爱尔兰都柏林大学合办的所谓“爱尔兰班”,开办的第一门课便是函数式编程,使用LISP讲解(不过现在的同学已经使用Haskell了),于是我在那时候也对LISP产生了一定的兴趣,也有了大半年的学习接触。虽远不能说是精通,但基本的了解想必还是有的。

关于LISP,有种说法便是“LISP之后,再无创新”。于是有朋友说,那么你不谈LISP,在Java和C#之间比什么劲儿嘛。首先,我想上文也已经表现了我的一部分想法了,现在则再谈一些。其实我觉得这种说法就好比说“某某人已经是第一名了,后面的争夺又有什么意义呢?”,这个说法显然是不妥当的。语言的争论和评价从来不曾停止,即便是大师们,例如Linus炮轰C++高司令谈C#Anders认为Java的泛型不好,Matz在邮件列表中戏称Ruby为MatzLisp,这些都是有趣的,有价值的,值得关注的东西。

也有朋友说,有什么语言能带来LISP那般革命意义,能够代替Java呢?LISP的确有其革命意义,但是语言的确知道它的缺陷,因此也就主要是把它供在神坛上,需要的时候膜拜一下便是,紧抱不放便是问题了。语言同样在不断发展和演变,尤其是对于工程应用来说,人们对于生产力的追求永远不满足,这点从业界关于语言的会议(如Lang.NET)便可得知。而即便是如IFL这类专注于函数式编程的学术会议,对于LISP语言本身的关注程度也有所降低。人们都知道,是该站在LISP的肩膀上向前看的时候了——其实很久以前就是这样了。

而且,我的目的主要还是想鼓动大家抛弃Java语言,这和它的替代者是否革命意义并没有关系。这就好比,对于石器时代的人们来说,第一根铁棍的革命意义远超后来的神兵利器,但是人们什么时候放弃过对神兵利器的追求呢?只要真正是“更好”的东西,那也就足够了。

我也是个俗人,讨论讨论对真正生产有直接影响的东西,也就够了。

糖、糖、糖

再回到关于“语法糖”的讨论。之前提到,有不少朋友认为C#相对于Java只是语法糖较多,够甜。但事实上,我在这一系列文章中并不想提“语法糖”这些东西。嗯,我是说,我眼中的语法糖。

从理论上说,只要是图灵完备的语言,就不存在“能力”上的根本差异,任何工作都是可以实现的。但是我们使用的语言,往往也会影响,甚至决定了我们的思维方式。因此一门语言的关键,我认为就是它的思想,或者说,是它对我们“思维方式”的影响。同时,由于语言会影响我们的编程思维,甚至系统的架构设计,因此在我看来它也是至关重要的。

举个有些极端的例子,如果人们还在使用汇编语言进行开发,那么估计程序员的思维永远无法跳出“子过程”这个抽象级别,什么面向对象设计,函数式编程几乎无从谈起。人们在生产和学习过程种会引发一些需求,因而需要产生一些工具来辅助学习和生产,而“语言”便是此类工具之一。只有利用高级语言,人们才能有效地把真实世界抽象成计算机这些机器盒子能认识的东西。

如今,可用于构建项目可选的主流语言往往都会有多种,有时候我们的确会发现,好像不同的语言——例如Ruby和Python——从各方面来说并没有太大区别(或者说优劣之分)。这是比较正常的,因为某些(甚至是大部分的)语言特性,并没有对我们的“思维”产生影响。

举例来说,某些喜欢Ruby的朋友认为Ruby语言的编程体验非常良好,好比它的数组操作可以直接做加法或减法:

array = ['aaa', 'bbb', 'ccc'] - ['ccc', 'ddd'] 

或者说,在Python里交换两个变量的值也只需要一行代码(大部分语言中可能需要借助中间变量,好吧,我承认Ruby里也能做到这一点):

a, b = b, a

但是,就我个人观点来说,这些语言特性,虽然它们的确可以让编程工作变的相对轻松一些,例如可以让我们少些一点代码,但终究没有改变,或是表现出另一种编程思维。这样的语法特性,一般来说都可以通过构建一些简单的辅助函数来做到类似程度的“简化开发”(如上面Ruby的例子),对于那些非“即写即抛”的程序来说,这些特性的优势并不明显。就我个人来看,我并不会太重视这些内容。

而与此相比,Ruby的Mixin机制和Python的Decorator就不仅仅是“语法糖”,而是比较重要的语言特性了,因为它们可以带来或大大简化某些十分有用的编程模式。“简化”也是语言设计中非常重要的一点,我始终认为,一个语言特性只有真正“好用”,它才能被人们广为接受。例如,使用Java语言能实现Actor模型吗?能,但是它缺少Scala那样灵活的函数式语法,以及模式匹配等特性,因此无法构建出一个好用、易用的Actor框架,自然也就无人问津了。这其实也是“语言影响思维方式”的典型案例之一。

其实人们在LISP之后继续前进的原因,也是因为LISP虽然提出了许多编程理念,范式,但是每个都不够“好”、“优雅”、“简单”等等。做的“更好”便是其他语言不可忽视的意义。

是的,我不会强调C#如“属性”,“操作符重载”等语言特性,虽然它很多时候的确让开发变得简单,但是它们并不能改变我们的开发思维。那么这一系列的文章中我会重视哪些语言特性呢?我想,它们至少应该同时具备以下三个条件吧:

  • 必须是纯粹的语言特性:有人说Python方便,很多事情一个方法就能搞定了。这在我看来只是类库相关的东西而已。在这里,我并不关注类库与框架,我只关注纯粹语言特性。
  • 无法,或很难通过类库或框架弥补的差距:同样是一个方法能搞定的案例,但是如果这个方法必须借助特定的语言特性才能实现,那么这便是我的关注点。
  • 能够改变编程思维、或是引出额外的编程范式:正如上文讨论的那样,这是我最为重视的东西。

嗯嗯,就是这样。

再补充一些内容

好吧好吧,我知道您看到那么多文字之后也一定也想说些什么了,不过您再坚持一下,等我把话说完吧。

写这一系列文章的目的,我想已经说得很清楚了。不过我想我还是有必要强调一下,我并不想让您:

  • 立即抛弃Java语言(不过我希望您可以现在就开始准备了)
  • 使用C#来代替Java语言
  • 使用.NET来代替Java平台
  • 认为.NET平台胜过Java平台
  • 认为CLR强于JVM
  • ……

总之一句话:我没说过的东西,您也别多想。我说过的,您也不用怀疑我的“诚意”。:)

再来一些问答吧,如果有需要的话我也会不断补充一些内容的。

  • 问:语言的生产力,关键还是看熟悉程度吧?答:我不这样认为,很多东西的差距是实实在在,不容置疑的。例如,C语言的生产力就比汇编要高,电锯的切割效率就比手工锯条要好。的确,我承认使用者对工具的熟悉程度会影响生产力,但我想您可以想,就当您已经对两种语言都足够熟悉了,这时候总可以开始比较生产力了吧。不了解怎么办?学咯,“磨刀不误砍柴工”,有句俗话应该是这么说的吧。
  • 问:开发项目并不由语言一个方面来决定吧?答:没错,所以我也不认为您应该“立即”将Java语言抛弃。例如,假如您对它的替代品还不够熟悉的话,假如您的团队还是对Java语言有足够了解的话,假如您的老板决定非要用Java语言而您离开他又活不了的话……那就继续用Java咯。总之,项目的技术选型是个平衡的结果。我只是给您在语言方面给出建议而已。
  • 问:Java语言的替代品足够成熟吗?答:足够成熟。当然,它的社区资源肯定还不如Java语言,但我认为它也足够了。而且,如果我现在对它进行推广,那么它又会有什么发展,资源又如何增多呢?是啊我承认,我是个颇有理想主义的人。
  • 问:为什么不比较Java与.NET平台?答:因为在我看来两者实在难分高下,上文也说了,这样的比较几乎就一定会沦为双方程序员的口水战,因为没有一方可以拿出切实的证据来说服对方,大家主观对主观,实在不专业。当然,如果您感兴趣的话可以自己比较一下,我会适时跟进的。:)

好,该说也说得差不多了。那么从下一篇文章开始,我们就来一起享受技术带给我们的快乐——和挫折吧!

相关文章

Creative Commons License

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

Add your comment

139 条回复

  1. sunny peng
    113.88.65.*
    链接

    sunny peng 2010-04-17 00:28:49

    呵呵,沙发,老赵辛苦了。

  2. Kenny Yuan
    148.87.1.*
    链接

    Kenny Yuan 2010-04-17 00:30:50

    个人感觉有句话不是特别妥当:其实人们在LISP之后继续前进的原因,也是因为LISP虽然提出了许多编程理念,范式,但是每个都不够“好”、“优雅”、“简单”等等。做的“更好”便是其他语言不可忽视的意义。

    其实LISP是数学符号,不是计算机语言。说它“提出了许多编程理念”总感觉有点不太对劲

  3. pixysoft
    121.32.25.*
    链接

    pixysoft 2010-04-17 00:31:14

    虽然java有很多不爽的地方。

    但是,java的exception处理机制比c#好,是强迫用户处理当前方法可能存在的exception。要么就try,要么就方法标注 throw

    不知道为什么c#不引用这个习惯。导致我现在的项目exception重复记录,也不确定当前调用是否有exception。非常不爽。

  4. sunny peng
    113.88.65.*
    链接

    sunny peng 2010-04-17 00:31:39

    就我个人而言,我还是希望C#能有更多更强的竞争对手,这样C#也能够不断前进。

  5. hyson
    221.5.67.*
    链接

    hyson 2010-04-17 00:31:48

    生产力是公司强市场的推动力,故系统在初期,架构师会考虑语言的选择> > >

  6. Gsanidt
    119.6.48.*
    链接

    Gsanidt 2010-04-17 00:33:52

    体会中...

  7. pixysoft
    121.32.25.*
    链接

    pixysoft 2010-04-17 00:34:00

    还有,老兄的个人主页能否像cnblogs一样增加email通知回复。否则很不爽。

  8. 老赵
    admin
    链接

    老赵 2010-04-17 00:36:50

    @pixysoft

    的确,从理论上来说,Java的Checked Exception机制是保护程序质量的重要手段之一,不过在实际应用中……还是由Anders来谈这方面问题吧。:)

    The Trouble with Checked Exceptions, A Conversation with Anders Hejlsberg, Part II, by Bill Venners with Bruce Eckel

  9. 老赵
    admin
    链接

    老赵 2010-04-17 00:38:03

    @pixysoft

    这里没有博客园的统一帐号管理,还是挺麻烦的。我打算添加评论的RSS订阅,应该一定程度上也可以起到差不多的效果吧。

  10. 链接

    熙智 2010-04-17 00:38:43

    確實很想很想支持C#語言,但某程度上大陸給人的感覺就是喜歡使用免費,"開源"的東西,導致Java語言或者平台大行其道.其EJB,SSH框架被吹捧至企業必用之領域.C#真的這麼不濟嗎?雖然做開發亦有3個年頭,從原來的ASP到ASP.net,從VBScript到現在的C#3.5,感慨程序員眼中的C#語言不如Java的現像一大堆. 或者必需承認如果某個平台范疇裡有更多的可使用資源,會令其"活"起來,可是當被問起為什麼使用C#做開發時要寫如此多的代碼(因為某人曾習慣於使用MyEclipse生成整個DAO訪問代碼),實在不知道如何應答.我承認,到現在為止對C#,Java語言還只是達到皮毛的階段.希望老趙的文章可能繼續給大家指引C#的方向.希望從中領悟到一些東西. 從語言角度計,C#比起Java,我更願意使用C#,可是面對一些朋友的問題,若涉及諸如平台,框架的時候,又可以如何向其陳述C#的優勢.

  11. 路人甲
    116.233.212.*
    链接

    路人甲 2010-04-17 00:42:50

    Java语法的问题大家都清楚,不然也不会有JPython和Groovy了。脱离平台单纯谈语言有什么意义吗?与其那语法这种鸡毛蒜皮的小事情比,还不如拿.net和java比比,看看.net的web框架有多糟糕,vs那个ide效率有多低。

  12. 老赵
    admin
    链接

    老赵 2010-04-17 00:50:49

    @路人甲

    其实这篇文章就是写给您看的,只可惜您或是没看,或是仍然不同意我的观点,那我就真没办法了,呵呵。

    至于您希望比较的话题,就由您来展开吧,我会适时跟进的。

  13. Yankee
    221.223.212.*
    链接

    Yankee 2010-04-17 00:51:37

    <%: %> 咋又搞个冒号出来了么??<%: %> 貌似== <%= %> ???

    老赵:为什么呢???

  14. 田中海陆空
    125.86.107.*
    链接

    田中海陆空 2010-04-17 00:53:13

    @pixysoft: 虽然java有很多不爽的地方。

    但是,java的exception处理机制比c#好,是强迫用户处理当前方法可能存在的exception。要么就try,要么就方法标注 throw

    不知道为什么c#不引用这个习惯。导致我现在的项目exception重复记录,也不确定当前调用是否有exception。非常不爽。

    不明白pixysoft的意思.我觉得强迫当前方法处理exception的做法让人不爽.虽然我不太懂java,

    但就我的个人经验来说,我一般项目中都不会try(除了必须报明确的错误或吃掉异常).而是在global中统一来抓catch.

    原因:既然都出现异常了,再try了也没有用.并且耗资源.还不如在global中统一抓一下

  15. 田中海
    125.86.107.*
    链接

    田中海 2010-04-17 00:54:35

    我的项目一般不要求同事在代码中到处都是try

  16. 链接

    hmfly 2010-04-17 00:55:35

    好吧,我承认我看完了。。

  17. 路人甲
    116.233.212.*
    链接

    路人甲 2010-04-17 00:57:07

    @熙智

    大陆做.net的大部分都是用盗版。正规的企业是不允许用盗版的,所以没钱的就用开源;有钱的买sap、oracle的商业系统,当然全部都是java的。java后台有ibm、oracle、tibco、sap……,为了能进大企业,有更好前途,大陆的学校都是教java的。

  18. pixysoft
    121.32.25.*
    链接

    pixysoft 2010-04-17 01:08:26

    @田中海: 我的项目一般不要求同事在代码中到处都是try

    有时候,不一定是有错误才exception。比如一个解析字符的方法,如果输入空,就exception,如果不空,就返回解析的对象。

    但是输入空不一定就是错误。虽然,可以在调用前去做个入口参数判断。。。不过。。想到个有代表性的例子。

    就是在线程里面操作,一旦网络链接出现问题,就会爆出exception。但是这个时候不能让线程停止。

    嗨。。在这里讨论还真不方便。老赵应该考虑升级一下了。

  19. 老赵
    admin
    链接

    老赵 2010-04-17 01:12:49

    @Yankee: <%: %> 咋又搞个冒号出来了么??<%: %> 貌似== <%= %>

    我也没研究过,自己找一点文章看吧。

  20. bang
    119.131.121.*
    链接

    bang 2010-04-17 01:13:59

    相当期待这个系列~

  21. pixysoft
    121.32.25.*
    链接

    pixysoft 2010-04-17 01:20:00

    大概小结了一下The Trouble with Checked Exceptions

    这个家伙提出了2个问题:

    ONE. 版本问题,版本1中foo抛出ABC异常,版本2中多抛出了D异常。如果使用check exception, 会导致旧代码不兼容。

    java中使用了throw 关键词在method,可以表示不处理。这样导致重复在方法写throw。

    TWO. 第二个问题是扩展性。如果一个方法有10个exception。某个方法调用了类似的方法10个。那么就要处理100个exception。这个非常糟糕。

    我说下自己的观点。之前我做过一个design by contract,就遇到了scalability的问题,在底层的方法有个precondition很容易满足。可是到了高层之后,会遇到超过10+个precondition需要满足。否则不通过,导致我随意的在method上添加了满足commitment。最终整个design by contract没有任何意义。

    不过最近准备再转战回来这个exception问题,顺便把design by contract搞定。

  22. 路人甲
    116.233.212.*
    链接

    路人甲 2010-04-17 01:24:06

    我同意你说的java语法问题,不过你这里要讨论的是“比较的意义与目的”。你说解决java问题的办法是换用一种生产力更高的语言。你说的生产率更高的语言是什么呢?是C#吗?JVM支持C#这种语言吗? 要知道,相比.net,java的开源和商业程序占据压倒性的优势,java牵动着整个it产业链。如果你没有办法让sun支持c#,没有办法让整个产业到转到c#到航道上来。你讨论的意义和目的何在呢? 所以我说你抛开平台谈语言没有意义。

    至于.net web框架的比较,就不需我多此一举了,大家心里都明白。

  23. GuangXiN
    123.120.33.*
    链接

    GuangXiN 2010-04-17 01:33:20

    @田中海陆空

    Java的异常处理不是要求你一定要到处写try,它只是要求你如果不在当前方法中处理,就需要声明这个方法可能会抛出异常

  24. 老赵
    admin
    链接

    老赵 2010-04-17 01:36:34

    @路人甲

    建议您还是好好看看我的文章,尤其是最后一段,“我不想做什么”,有时候我写的清清楚楚的东西还被人忽略,真的真的很无奈。算了,反正总有一天我会写到Java的替代品是什么的,希望您到时候不会再有什么“误会”。

    我想,您应该是Java平台的爱好者或程序员吧,我建议您可以打开视野,了解一下Java平台上目前最火的语言是什么,这样也就不会认为我想用C#来代替Java了。如果要靠我这样一个.NET程序员来推动Java平台的发展,真挺讽刺的。Java界一直自诩开放,您的视野也要开放才好。

    至于.net web框架的比较,大家心里的确都觉得明白,只是估计我明白的和你明白的不一样而已,所以还是说说比较好。就像我们都明白Java语言的糟糕之处,只可惜,不明白的人还是太多太多。

  25. hgamezoom
    218.82.242.*
    链接

    hgamezoom 2010-04-17 05:34:55

    有请路人甲说说,.Net的web框架哪里不如java了?至少我从开发效率以及运行的性能来看丝毫不逊色。

  26. songxiangzaiya
    125.40.58.*
    链接

    songxiangzaiya 2010-04-17 09:07:43

    我也是学.net的,但是不管.net有多好,但是他不支持跨平台(至少现在估计商业级的应用没有),有开源项目,但是用的人非常少,微软估计也不会支持跨平台的,如果支持,早就支持了,不会等到现在了,就是.net的硬伤。

  27. ruson
    202.96.181.*
    链接

    ruson 2010-04-17 09:33:26

    从语言的角度角,可能c#的体验更好、产量更高、理念更先进。 但不是想就可以替代Java的。 Java十年积累的不少优秀开源产品、官方天生支持的跨平台性(一般大型企业服务器都不是用windows的),都是c#目前不可替代的。 还有正如楼上几位所说:

    “大陆做.net的大部分都是用盗版。正规的企业是不允许用盗版的,所以没钱的就用开源;有钱的买sap、oracle的商业系统,当然全部都是java的。java后台有ibm、oracle、tibco、sap……,为了能进大企业,有更好前途,大陆的学校都是教java的。”

    以及

    “確實很想很想支持C#語言,但某程度上大陸給人的感覺就是喜歡使用免費,"開源"的東西,導致Java語言或者平台大行其道.其EJB,SSH框架被吹捧至企業必用之領域.C#真的這麼不濟嗎?雖然做開發亦有3個年頭,從原來的ASP到ASP.net,從VBScript到現在的C#3.5,感慨程序員眼中的C#語言不如Java的現像一大堆. 或者必需承認如果某個平台范疇裡有更多的可使用資源,會令其"活"起來,可是當被問起為什麼使用C#做開發時要寫如此多的代碼(因為某人曾習慣於使用MyEclipse生成整個DAO訪問代碼),實在不知道如何應答.我承認,到現在為止對C#,Java語言還只是達到皮毛的階段.希望老趙的文章可能繼續給大家指引C#的方向.希望從中領悟到一些東西. 從語言角度計,C#比起Java,我更願意使用C#,可是面對一些朋友的問題,若涉及諸如平台,框架的時候,又可以如何向其陳述C#的優勢.”

  28. JimLiu
    221.223.40.*
    链接

    JimLiu 2010-04-17 09:36:49

    我也是一个从C#3.0就开始对JAVA语言有点恼火的人,现在C++0x开始得到编译器支持,突然觉得语言有的方面C++0x都比现在的Java有活力。Java是该向前看了。

  29. 链接

    driedbeef 2010-04-17 09:43:53

    @Yankee: <%: %> 咋又搞个冒号出来了么??<%: %> 貌似== <%= %> ???

    看这里

  30. assiwe
    123.91.24.*
    链接

    assiwe 2010-04-17 09:48:34

    哎,磨磨唧唧说了这么多还没到正题……

  31. 链接

    Jeff 2010-04-17 10:19:53

    期待正文。我也是从Java走向C#的,原因是换了公司,现在的公司用C#。两种语言都略懂。

    至于自己的体会:

    一方面,因为我的工作都是基本的增删改查,所以我会觉得Java的Hibernate很好用。又再如一些简单的类,比如Java里边的Set,而到了C#以后我是自己写了个类继承List,然后重写Add()。还有很重要的一点,.NET的开发需要收费,用破解的东西我总是遇到这样那样的问题,而且我一直觉得那样很不尊重别人的劳动。

    另一方面,感觉在visual studio下面做一些2-3个月可以完成的小项目真的很方便,随便从工具箱里头拖点东西过来就可以。

  32. 水的影子
    123.123.254.*
    链接

    水的影子 2010-04-17 10:23:18

    同意老赵的说法。语言确实决定了我们在编程时的思维方式。所以我一直认为《Thinking in c++》翻译成《C++编程思想》不太好。原书名的意思是用C++的方式去思维,翻成C++编程思想就失去了原来的意思。

  33. 链接

    loveyneo 2010-04-17 10:39:23

    @路人甲: 我同意你说的java语法问题,不过你这里要讨论的是“比较的意义与目的”。你说解决java问题的办法是换用一种生产力更高的语言。你说的生产率更高的语言是什么呢?是C#吗?JVM支持C#这种语言吗?要知道,相比.net,java的开源和商业程序占据压倒性的优势,java牵动着整个it产业链。如果你没有办法让sun支持c#,没有办法让整个产业到转到c#到航道上来。你讨论的意义和目的何在呢?所以我说你抛开平台谈语言没有意义。

    至于.net web框架的比较,就不需我多此一举了,大家心里都明白。

    java的压倒性优势只限于企业应用吧,整个IT产业链是不是夸张了?照你这么说,那我们其他的C,C++,PHP,.....程序员是不是没有存在的意义了?

  34. asd
    121.62.120.*
    链接

    asd 2010-04-17 10:52:57

    看看..........

  35. 链接

    tuablove 2010-04-17 11:08:29

    什么时候.net可以不用花钱的windows平台了,什么时候.net才能牛起来,毕竟,经济决定一切!

    目前状况,.net只是java的跟屁虫! 就是这样!

  36. 路人
    115.61.108.*
    链接

    路人 2010-04-17 11:35:35

    比较下 C#的生态圈 和 java的生态圈 比较下.C#程序员的薪资和 Java程序的薪资

    你就知道 C#为啥比不过 java了..多说无益..

  37. 路人甲
    115.61.108.*
    链接

    路人甲 2010-04-17 11:52:36

    就我所接触的这些企业级开发(电信,政府,电力,金融)来说,用到C#的地方,也就是做个桌面客户端罢了..小公司买不起这个工具,大公司都有了整合自己行业业务需求的eclipse的IDE环境. 数据库呢 MSSQL与ORACLE和DB2 相比不是一个档次的..主机呢 你见那家公司敢用PC server 装windows的.(小公司除外). web服务器哪有敢用 IIS的? 大多都是apache weblogic tomcat吧 连一套完成的体系都没有 你还觉得C# 能超越java 嘛 ?

  38. 老赵
    admin
    链接

    老赵 2010-04-17 12:12:55

    @路人甲

    看了您摆出许多事实,什么时候能给出理由就好了,例如为什么

    数据库呢 MSSQL与ORACLE和DB2 相比不是一个档次的..主机呢 你见那家公司敢用PC server 装windows的.(小公司除外). web服务器哪有敢用 IIS的?

    嗯,我只想说,据我了解,一大问题在于MS的东西实在太便宜,回扣太少了啊。要说系统的能力,中石油这种规模都在用全MS系统。

    还有,我讨论语言特性,您急着摆出那么多无关紧要的东西那么多干什么,我不还没说我的解决方案么,呵呵。

  39. 链接

    tuablove 2010-04-17 12:31:09

    中石油就是国家的蛀虫,他知道什么叫技术,他知道什么叫省钱,他就知道中饱私囊,他用MS平台唯一就看上了这平台很方便,他管什么漏洞不漏洞,反正他没钱了喊喊,发改委就提油价,他就有钱了! 真正的技术公司,你见过哪个傻X用.net?

  40. dege301
    125.39.131.*
    链接

    dege301 2010-04-17 12:49:26

    为什么非要分出个胜负呢,我到觉得这是个良性循环,相互对比相互学习,结果是越来越好。对于非编程语言研究者只要能提出问题就行了,把问题交给专家去处理,而把注意力集中在学习业务领域上,这是一个称职的程序员应该做的,除非你只想做个Coder

  41. forhell21
    61.144.207.*
    链接

    forhell21 2010-04-17 12:50:32

    我相信微软不用.net是不可能的。

  42. BaoBeiMe
    222.240.148.*
    链接

    BaoBeiMe 2010-04-17 12:57:32

    老赵啊,又出争论咯~~~呵呵~~~期待后续博文~~~

  43. Snake
    120.42.196.*
    链接

    Snake 2010-04-17 13:17:40

    虽然老赵一直提醒我们您谈论的是语言层面的问题,但我还是非常担心读者会从语言层面吵开去,吵到平台上..

  44. Snake
    120.42.196.*
    链接

    Snake 2010-04-17 13:21:42

    貌似没吵到平台上,而吵到平台的相关软硬件设施和平台应用的广泛程度. 我也有这样的想法,我内心是极为想到国内超大公司去工作的,但是目前来看,不论百度,网易,新浪,腾讯,甚至是Google,没一个地方用.net的,就目前这一点来说我还是比较担心的..

  45. 链接

    lawsong 2010-04-17 13:41:58

    作为一个菜鸟.我不讨论技术方面的种种. 我仅仅只说一下面对态度的问题.

    javaer 我见了很多了.绝大多数,狂妄,自满. 一旦涉及到批评java 的地方,就骂骂咧咧的出来了.

    有时候也只能笑笑而已.

    我想问.几个骂.net 的人里面.自己真正去用过.net

    说到IDE 效率问题.首先.我用java IDE 的次数并不多.我不评价. 这里面还有一个问题就是使用习惯问题.

    请问:你凭什么说visual studio 效率低?

    更可笑的是,JSF 一边想实现asp.net的webform模式 (不是模仿.谁先谁后我不知道.所以在这里强调一下.免得又惹来莫名的谩骂.),一边javaer们就在嘲笑asp.net只是拖控件.如果还是这么认为的话.赶紧看点书.别出洋相.

    如果说.net 2.0以前是模仿java的话.(不完全是,比如泛型来自C++的模板)

    .net3.0之后. 如果你是一个用过 Linq等特性的javaer 的话. 你懂的.我不说了.

    我想说.我是一个不会拒绝更好技术的人.如果java够优秀.我会毫不犹豫的选择.

    前提是,请你们停止谩骂.给出理由和证据.

    出了学校我就再也没用过java了.

  46. 链接

    loveyneo 2010-04-17 13:44:17

    @Snake: "不论百度,网易,新浪,腾讯,甚至是Google"

    ..........

    啥叫“甚至是Google”?

    你列的这些中只有Google才谈得上技术型的公司吧?

  47. abc
    117.85.1.*
    链接

    abc 2010-04-17 14:26:04

    不敢用java和.NET平台。因为计算机一定要有完备性。无法映射自身是它们最为致命的缺陷。 再作一个比喻:C就相当于微分, java, C#就相当于积分。 每个函数都可以用解析的方法微分,即这个过程可以演算(就是编程),并确定它。 但给定某个函数,就是不可能解析地找到它的积分是什么。就是说你希望对某个函数解析并确定它,但是你可能找不到它,而且是不存在的。

  48. 老赵
    admin
    链接

    老赵 2010-04-17 14:44:37

    @abc

    还是您彻底,一句话就放倒了所有C语言以前及以后的语言发展……

  49. netBeginner
    206.217.215.*
    链接

    netBeginner 2010-04-17 14:47:56

    我也喜欢C#语言,但是java的社区支持很丰富,做开发的时候很多东西随时都可以拿来用
    但是.NET就必须看微软的脸色,总感觉东西支持太少,所以用VS开发的很郁闷,大部分时间都是花在编写和自己业务不相关的基础代码上,而且我经验也不够,基础代码不够严谨也不够通用.
    而且我感觉网络上java方面的资料比.net的资料丰富,所以对我这样的.net初学者来说很难找到学习的空间.

    不知道老赵有没有时间开个新人专栏,只要给予我们这些.NET新人一些学习方向指引,实用资料搜集,或者开发工具和开发框架的推荐啊等等.

    对了,老赵原来在博客园的Q&A版块,在这里怎么找不到了 :(

  50. Windie Chai
    123.113.119.*
    链接

    Windie Chai 2010-04-17 15:18:44

    顶老赵,期待后续文章。

  51. abc
    117.85.1.*
    链接

    abc 2010-04-17 16:18:47

    操作系统用C写的, 嵌入式系统用C写的, java,.NET平台用C写的, 单片机用C写的。 平台程序基本都是用C写的。 编译器C,函数式,声明式都可以写的。 所以个人认为,C#,java之类在编译器类(极端动态)程序上比较有优势, 比如网络等。 而把整个平台纳人其中就不是它自身最适合的领域。MS也不会这么做。

  52. fuxy
    112.66.66.*
    链接

    fuxy 2010-04-17 17:15:35

    就只谈语言的话,java的发展确实给人滞后的感觉,java 5后才觉得有活力,语言特性改变了不少,但已经不在是领袖,而是为了应对别的语言的压力特别是C#的压力才做出改变。java这方面做的确实不够好,也许和公司有关,毕竟SUN从java中没拿到太多的好处。

    C#每一个版本的升级,都添加了不少语言上的特性,吸收了不少语言的优点。C#的发展明显比java快很多。

    但是,就算java语法上落后于C#,但也不至于是糟糕。java 7让我们有很多的期待,java也在跟进,别说java落后。

    如果老赵就从语言这个层面上说,抛弃java,用C#,我想是没太大问题,而且老赵的观点也许很有道理,是值得大家放弃java的。

    只是,做软件,要考虑的不仅仅是语言,要考虑的实在太多,哪怕在多考虑一点,选择java的人就会比C#多了,所以java一直是Top 1。

    因此,老赵只在语言这个层面上就想让别人放弃java实在是不现实。我想老赵要做的不是让别人抛弃java,而是,应该让更多不了解C#的人了解C#。

  53. locus
    125.39.143.*
    链接

    locus 2010-04-17 17:34:08

    不知道老赵有没有用过VB.NET,想知道你对VB.NET的看法。 关注过TIOBE语言排行榜,VB占的比例一直高于C#,但是感觉国内C#的势头要盖过于VB,这是为什么呢? 还有老赵为什么不用VB.NET?要论生产力,VS里的VB代码编辑器更加智能,起码我在写一个方法签名之后按下回车就可以立刻开始写方法体,但是C#里还要输入{},再将光标移到括号内。而且现在这两门语言的发展都差不多,出现的新特性两边都有。很多人会觉得VB简单,有点小儿科。我觉得它“简单”是因为.net在底层封装了很多基本功能,以方便上层调用,比如9.0里出现的My命名空间。再比如事件的声明,直接用event关键字就可以,而不用去声明一个委托,再用委托去声明事件,.NET会帮你隐式的创建这个委托。这不就是更高的生产力吗?

  54. 果丹皮
    219.142.189.*
    链接

    果丹皮 2010-04-17 17:38:50

    从语言角度 c#很棒 但纯粹从语言角度 我倒觉得ruby最美

    不过java的优势就是 语言过得去 虚拟机很不错 开源解决方案多到难以想象

    So...

  55. 链接

    宁静 2010-04-17 17:57:23

    @locus 非常好,支持!

  56. 链接

    xiaotie 2010-04-17 18:00:14

    @果丹皮

    ruby 的这个最美在性能上花的代价太大了。C#在这一块付出的代价很小,哦,最近在C#里直接玩指针,Ruby啊,java啊,都没法这样玩,哈哈。

  57. tmac
    58.38.62.*
    链接

    tmac 2010-04-17 18:24:10

    哦也,下午终于见识了老赵的真面目了~话说和照片上还是有点出入的嘛~ :D 嗯,演讲效果不错,挺有激情~~字符串索引以及cachehelper那个例子似乎是从以前文章给中拿过来的把~

    PS:偶就是那个在自我介绍中说来“围观”你的人~哇哈

  58. 赵伟
    218.9.124.*
    链接

    赵伟 2010-04-17 19:41:22

    您好!首先说下,我超级喜欢用C#语言做开发,真的从来没有哪种语言可以给我这种感觉,再加上VS2008就更加无敌了,真的感觉用VS2008写C#代码很幸福,而我也一直享受着这种小小的幸福。可是现实中的情况让我很担心,我现在还是大三的学生,不过大四马上就要出去实习了,是公司来我们学校招的,这几天也陆续开始了,可是从来的企业的招聘需求我明显看出基本没有要.NET程序员的(偶尔会有几个要做网站的,不过我感觉他们自己都不看重,感觉是可有可无的职位),更可恶的是我在一次宣讲会上问那人他们公司有用.NET平台吗,要C#吗?他说什么都要,就是vb,汇编也行,只要编程能力强。然后,我又更进了一步,问,那我们去你们公司用C#具体做什么呢?结果把我雷到了,他说,哦,我们公司不要.NET的,我狂晕!而且被满教室的人鄙视了。这几天的招聘也真的让我绝望,感觉都没人要,好杯具的说,感觉自己有大志而不得抒!唯一让人兴奋的是,看到了微软的实习生招聘需求,总算有人要了(好好迎接微软的笔试……)。针对,我这种非常喜欢C#,但面对中国的这种现实(据我所知,没几家像样的公司用.NET),真的好迷茫啊,还望您给予指点。我是继续在C#这条路上发展呢,还是改投C++?还有我本人不太喜欢做web开发。顺便问一下,您在公司都用.NET做什么呢?

    PS:你们公司也有说来我们学校招人,我也投了简历,就是不知盛大用.NET做什么?(我只知道做游戏好像没.NET的事,如我直言,嘿嘿)。有缘的话,盛大见了……

  59. 链接

    panan.songyu 2010-04-17 22:18:23

    这个就是老赵今天下午的演讲稿啊 今天下午围观了了一下老赵 相当有激情啊

  60. 老赵
    admin
    链接

    老赵 2010-04-17 23:36:46

    @fuxy: 但是,就算java语法上落后于C#,但也不至于是糟糕。java 7让我们有很多的期待,java也在跟进,别说java落后。

    Java 7的确有所改进,但还是落后,而且我以后也会说,进步的有些半吊子。例如,C# 3.0增加了LINQ,其中包含了7个小特性,其中至少有5个是不可或缺的,缺了一个就差了一截……以后会详说。

    其实我做这个比较,的确是想让不了解C#的人了解C#,让了解C#的人更了解C#,同时继续鼓励别人抛弃Java。但是,我可没说抛弃Java就是去用C#,呵呵。

  61. 老赵
    admin
    链接

    老赵 2010-04-17 23:38:36

    @netBeginner

    其实我并没觉得做.NET就要看微软脸色,其实微软社区也很活跃。如果说做.NET要看微软脸色,那么做Java难道就不用看谁脸色了吗?只不过不看某个特定公司而已,看的是一个“组织”,呵呵。

  62. 老赵
    admin
    链接

    老赵 2010-04-17 23:41:02

    @果丹皮: 从语言角度 c#很棒 但纯粹从语言角度 我倒觉得ruby最美

    其实我倒觉得,C#和Ruby的区别,主要还是在于你是倾向于动态语言还是静态语言。如果C#是静态语言,那它已经很美了,也做不到Ruby之美。而Ruby的话,关注它也没法做到静态语言的效果。

  63. 老赵
    admin
    链接

    老赵 2010-04-17 23:43:48

    @locus

    VB和VB.NET是两码事,呵呵。我不太了解VB.NET啊,我个人不是很喜欢这门语言,例如它的Lambda无法省去Function关键字这点,让我觉的十分古怪。VB的End我也不太喜欢,还有Sub和Function之分。XML Literal倒不错。您说的编辑器方面,我倒真不太在乎这些,呵呵。

    至于为啥不比VB.NET和C#,原因在文章里也已经说了,呵呵。

  64. 老赵
    admin
    链接

    老赵 2010-04-17 23:45:48

    @赵伟

    .NET没那么惨吧,我看工作也是一搜一大把的,不是嘛。博客园里也到处是.NET的公司和人,呵呵。

    至于做游戏,盛大比较多的是用Delphi做客户端,而.NET可以用来做服务器端啊。

  65. gbx
    114.92.171.*
    链接

    gbx 2010-04-18 01:35:38

    跨平台是C#/.NET最大的硬伤,也是很难解决的难题。

    对于Windows平台来说,做应用肯定会用C#。可是对于企业级开发来说,很多场合都有Unix/Linux的存在,或者根本无法换成Windows环境,那就无法使用C#了。

    可是从微软的市场策略来说,又绝对不能跨平台。如果C#/.NET可以跨平台,那么用户为什么一定要用Windows?

    所以这是进退维谷的困境:C#/.NET or Windows,只能二选一。很明显,微软会选Windows.

  66. Snake
    120.42.196.*
    链接

    Snake 2010-04-18 02:11:27

    @loveyneo

    我说的"甚至"的意思是Google是国外的公司,并非国内的- -

  67. Alex
    83.70.251.*
    链接

    Alex 2010-04-18 03:34:18

    我觉得Java在web领域之所以能有现在这个地位一个很大原因是科研上对于Java的依赖,目前在web领域,大部分科研性质的原型和产品都是Java为基础的,所以由此衍生的产品如果MS跟进的话还需要一个向.net平台的移植。跨平台是.Net的硬伤。

  68. 京东
    118.246.127.*
    链接

    京东 2010-04-18 08:19:55

    不说其它的,京东目前来说是.net架构,他们正在有计划全部迁入java平台。为什么在京东这个电子商务公司会抛弃.net呢?你最好是去京东做一下调查再发言吧。

    另外,再告诉你,.Net程序员90%除了拖控件之外,其它啥也不会。而java程序员90%都是比较了解java甚至语言核心的。

  69. simmson
    221.137.74.*
    链接

    simmson 2010-04-18 09:23:59

    你昨天所说的自动C#1.0之后便没有什么进展,而且有很多地方都在邯郸学步,学C#,但是想想C#这些语言特性是C#自己发明的吗?其实只不是用了别的语言的思想,只不过必须承认微软在改进语言使用方面花了很大的功夫和精力.

    但是这些语言方面的特性能帮助你快速开发一个真正的,大型的企业应用软件系统吗?所以你所说的几点都是C#的语言特性,而不是C#能带来多少生产力,毕竟生产力不是单单靠省去几行代码就能解决的,而且在开发软件过程中不要重复发明轮子.

  70. BigFool
    111.193.8.*
    链接

    BigFool 2010-04-18 10:20:58

    十分期待啊... C#真的会有这么好吗?不过C#会比Scala好吗?

  71. ls176
    222.244.5.*
    链接

    ls176 2010-04-18 11:09:29

    很多持反对意见还是没仔细看老赵说的开发语言会影响编程思维这个论点。

    以扩展方法为例,在以往设计业务模型时,总是苦恼于当业务变更或新增后要修改上下文服务的代码,使用扩展方法后,这部分代码就和业务模型放在了同一个地方,编程思维从这一刻开始就发生了改变。

    比较两边平台的话,.NET社区还真的无法和JAVA社区相抗衡,但这不是老赵文章里要讨论的。不过要想脱离平台来讨论一个语言工具优劣,这还需要老赵找到一个比较好的切入点。这正是我所期待的。

  72. Whiz
    113.119.15.*
    链接

    Whiz 2010-04-18 11:10:48

    这件事我觉得很难谈的,不了解C#的人实在太多了。北大青鸟害的。 像我现在招聘(小公司),大部分应聘者都在用VS2005,什么Linq、Mvc根本不用提了,只能挑一些素质好的、学校好的进行培训,起码要培训3个月以上才能稍微懂得用一下——主要是思维被原来的拖控件方法禁锢得太厉害了,而我们从来不拖控件。面试的时候多在吹嘘标准的三层架构,很难谈到一些深入的话题。曾经和一些培训机构说过,要推荐人的话最好懂得ASP.NET Mvc,但可能连他们的讲师也没什么了解。于是,一方面大量充斥着培训机构发过来的简历,一方面我们又很难请到合适的人。 而请Java的人是很方便的,都是标准化的简历,SSH、Eclipse(Netbean发现很少人会用),专用来做垃圾项目的,反正做出来基本都一样。 我曾想过上一些Ruby或者Python的项目,但鉴于招聘的难度,也就不得不先观望了。

    至于上面朋友说很多缺点,什么SQL Server与Oracle的比较。其实我们的项目很多都用Oracle,也有MySql的,并不存在这样的问题;还有Web框架的问题,我觉得SSH比ASP.NET Mvc差远了。

    老赵说的是语言差异,我很期待,但下面叫嚣反对最大声的,往往都是码工级别的,语言的级别根本不存在他们的思维里面。

  73. 链接

    sglicx23 2010-04-18 12:03:50

    @京东 我想问JAVA有多少控件给你拖?MyEclipse做得到像Visual Studio一样好用吗? 您说“java程序员90%都是比较了解java甚至语言核心的”,我是不是我太极品,我遇到的JAVA程序员认为JSP就是JAVA了,还有甚者通过X培训过后连刷新都不会写,还有个有个什么SUN认证的连统计一篇英文文章内单词“the”的个数都不会写的

    或者拿昨天老赵讲的一个例子:

    public static void main(String args[ ]){
        Integer a = 100;
        Integer b = 100;
        if(a == b) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
    
        Integer c = 1000;
        Integer d = 1000;
        if(c == d) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
    }
    

    您说有多少人知道这结果呢?90% 我看是10%不到吧

    我没用过JAVA开发,只看过别人开发,只知道微软的工具对程序员很友好 其他我不太清楚,我就反驳“java程序员90%都是比较了解java甚至语言核心的”这个观点

    刚起步做JSP的或者是比做ASP.NET的人写JS的能力强点,但是JS编写不是JAVA或是JVM上独有的东西吧!

  74. 赵伟
    218.9.124.*
    链接

    赵伟 2010-04-18 12:15:06

    谢谢你的回复。.NET真的可以做游戏的服务器端吗,这也是你在公司的工作吗?现在不是好多人都说.NET的效率问题,所以,我挺怀疑的(请不要见怪,嘿嘿……)。

  75. 老赵
    admin
    链接

    老赵 2010-04-18 12:27:21

    @赵伟

    我没做这个,不过我知道有人做。如果您只是听说就相信,却没有自己追求事实真相的技术态度,那么其实我现在对你随便说两句也没有什么意义……反正也只是听说。

  76. 老赵
    admin
    链接

    老赵 2010-04-18 12:27:58

    @BigFool: 十分期待啊... C#真的会有这么好吗?不过C#会比Scala好吗?

    这个就要您自己判断了,呵呵。

  77. 老赵
    admin
    链接

    老赵 2010-04-18 12:30:38

    @simmson

    如今你要发明一种语言特性几乎是不可能的了,语言之间比的就是“相同的理念上谁实现的好”。

    当然,语言方面的东西不是构建一个真正大型企业应用软件的唯一因素。但是同样实现每个东西,C#几行代码,Java洋洋洒洒,这个至少我是不能接受的,呵呵。

  78. 老赵
    admin
    链接

    老赵 2010-04-18 12:35:02

    @京东: 不说其它的,京东目前来说是.net架构,他们正在有计划全部迁入java平台。为什么在京东这个电子商务公司会抛弃.net呢?你最好是去京东做一下调查再发言吧。

    另外,再告诉你,.Net程序员90%除了拖控件之外,其它啥也不会。而java程序员90%都是比较了解java甚至语言核心的。

    为什么呢?5173也是.NET架构的电子商务公司,现在跑的好好的。新蛋也是.NET架构的电子商务公司,跑得也是好好的。到了一定程度,比的就是架构而不是具体实现用的技术。只不过有人喜欢怪罪.NET技术本身为自己开脱而已,呵呵,这种事情见得太多。

    至于你说的90%云云,说实话我真不相信。抛论点容易啊,给论据很难。我为啥文章总是写那么长?而你们总是用几句话就觉得可以反驳我呢?呵呵。

  79. 赵伟
    218.9.124.*
    链接

    赵伟 2010-04-18 12:39:16

    您教训的是,坚持我的.NET之路。谢谢了……

  80. BigFatAss
    119.146.220.*
    链接

    BigFatAss 2010-04-18 12:52:21

    其实这里存在一个很现实的问题非常值得大家去思考:

    举一个可能很不恰当的例子吧:

    一个人想要出来混,结果江湖上有两大帮派:斧头帮,和小刀会。 故名思意,斧头帮用“斧头”,小刀会用“小刀”。

    “斧头”这个武器浑厚,有杀伤力,斧头帮的爷们不支持小弟用“小刀”; “小刀”这个武器灵巧,精准致命,小刀会的汉子不支持小弟用“斧头”;

    这个人该如何选择? 我想,大多数人选择的时候,思考的更多的,是斧头帮的势力大,各方支持多,有发展? 还是小刀会的势力大,各方支持多,有发展? 这是一个很现实的问题。

    而不是纠结于“小刀”这个武器本身,能不能干的过“斧头”这个武器本身。

    就算,也许“斧头”这个武器干来干去,最终能够被证明可以干的过“小刀”, 这能够成为小刀会称霸江湖的最大障碍么? 斧头帮就一定能够保证自己一定能够称霸一方么?

    我想说的是,关于“C#”和“Java”这两种武器的PK如何再争论下去,我们绝不能够撇开、或者选择性地无视这两种语言背后事实存在的平台支持社区支持框架支持项目支持商业企业支持……

    记得从2003年开始,各大IT社区的这两种语言的PK就开始了,尤其是.NET 2.0出来以后,一直到现在,都已经7~8年了, 有结论了么?谁赢了谁了么?谁服了谁了么? 其实说句心里话, 纯“C#”和纯“Java”语言上的争论确实局限性很大,而且对于新人的误导确实很重。 两种语言的讨论,最后归结,其实还是两种强大平台的讨论,事实上也证明是这样。

    所以我个人认为:单纯地讨论2种语言的优劣,很局部,并不能从整体上反映事实~~!

  81. 老赵
    admin
    链接

    老赵 2010-04-18 12:52:57

    @赵伟

    我没让您坚持,我只是让你看清楚再说。如果您还是没有正确的态度,会轻易地接受我的看法,以后再轻易地接受别人的看法,来回摇摆,受害还是你自己啊。

  82. BigFatAss
    119.146.220.*
    链接

    BigFatAss 2010-04-18 13:23:38

    还有再想补充的一点就是, 现在的培训机构确实是太泛滥了(应该说是泛“烂”)。

    所以以至于培训机构出来的这些不合格的Java“代码工”们(我无意冒犯,但是我实在不愿意侮辱“程序员”这个词语,更况且他们都还是不合格的“代码工”),这些Java代码工们,对于.NET往往都有一种莫名的鄙视~~认为搞.NET的就只是拖拖控件,把控件摆好,项目就出来了。 貌似好像楼上正好有位仁兄就是这样想的~~~~~

    没别的,我只是觉得这些人对于.NET的无知,已经到了一种很可悲的地步,对于他们我真的没什么好说的,有时候我常常会暗自开玩笑说真是“无知者无畏”啊~~

    记得曾经有一次在午饭聊天的时候,一个新人跟我说,“学习Java的成熟期是2年,.NET只要1年就够了,.NET就是拖控件,没什么~~”, 我当时就被震惊了,可以说是被彻底“雷”到了,雷得里嫩外焦·~~ 我问他,你怎么会有这样的想法的?谁跟你说的? 他答曰:“是培训机构老师说的~~”

    然后我很好奇地问他:“你平时都看书么?我是指技术方面的~”, 答曰:“从来不看书!以前在培训学校,没有看书这一说,都是看完老师的讲义后直接看代码~”

    我于是再次被雷的里焦外胡了~~

    所以,老赵对于现今培训机构的反对,我是绝对坚定地支持的,真的是害了一代本来可以,或是本来立志可以成为“程序员”的热血青年们~~

    不好意思,有点跑题,本来在这里无意讨论关于培训机构的问题, 但是看到之前“京东”这个ID的发言,让我又再次想起公司的这个新人——一个培训机构出来的,不合格的Java“代码工”

  83. 链接

    driedbeef 2010-04-18 14:19:57

    @BigFatAss

    很赞同你的看法。没有充分了解一件事物时就肆意评价,这是非常愚蠢的行为。另外,你举例的这种“新人”我也接触过,基本上属于一问三不知,呵呵。

  84. 链接

    driedbeef 2010-04-18 14:25:50

    @老赵

    至于做游戏,盛大比较多的是用Delphi做客户端,而.NET可以用来做服务器端啊。

    我没做这个,不过我知道有人做。

    以前看Miguel de Icaza的演讲,他提到在美国有游戏公司使用mono的源码,将CLR嵌入到游戏服务器中做逻辑密集的脚本部分,得到相比传统游戏脚本(Lua, Python...)十几到几十倍的速度提升。

    创新院现在也在搞这种尝试吗?

  85. 老赵
    admin
    链接

    老赵 2010-04-18 14:30:14

    @driedbeef

    说的是Second Life,不过盛大这边似乎没有这种尝试。

  86. 老赵
    admin
    链接

    老赵 2010-04-18 14:41:03

    @BigFatAss

    有人认真PK过C#语言和Java语言吗?我真找不到,否则我也不会写这个东西了。

    讨论语言优劣是很有价值的,没有价值的是,通过单纯讨论语言来证明平台的优劣。而我只是在比较语言特性,让人知道C#比Java强大就可以了,呵呵。

  87. abc
    117.84.76.*
    链接

    abc 2010-04-18 15:02:31

    您说的语言特性是不是这样:C#可以进行声明式,函数式等范式的编程。还有领域特定语言LINQ搞得比较好?

  88. BaoBeiMe
    222.240.148.*
    链接

    BaoBeiMe 2010-04-18 15:22:26

    呵呵,每上一次博客园就来一次这里看评论,嘿嘿,继续学习~~~~

  89. 老赵
    admin
    链接

    老赵 2010-04-18 15:43:55

    @abc: 您说的语言特性是不是这样:C#可以进行声明式,函数式等范式的编程。还有领域特定语言LINQ搞得比较好?

    其实就我经验而言,LINQ倒并非十分常用。当然,声明式,函数式编程的确是生产力非常重要的一个方面。当然不止这些,包括泛型等方面,还有C#的yield等等,都是十分重要的特性。

  90. abc
    117.84.76.*
    链接

    abc 2010-04-18 16:01:58

    yield是不是和优化多核有关?瞎猜的

  91. abc
    117.84.76.*
    链接

    abc 2010-04-18 16:22:29

    好像有点类似于单片机中的中断。 强烈期待老赵的系列文章。。。

  92. 老赵
    admin
    链接

    老赵 2010-04-18 17:43:56

    @abc

    yield本身其实只是为了方便构造一个Iterator,不过它同时也带来了其他有用的编程模式。

  93. Gabry
    210.13.69.*
    链接

    Gabry 2010-04-18 18:24:26

    老赵,你这个回复怎么引用内容啊

    @京东

    拖控件也只不过是设置了那个对象的几个可视化的属性,你觉得这部分,用手敲代码就是智商高?上升到核心部分,大家都是在敲代码,所以不要拿拖控件说事,

    本人喜欢交技术方面的朋友,我觉得,智商纯属个人先天造成的,跟后天选择什么语言无关,你学中文你就是SB??

    现在公司里PHP,JAVA,.NET的程序员很多,我了解我们公司智商很高的,不巧都在搞php和.net, 老子天天给搞JAVA的小弟们擦屁股,JAR包里不提供的方法,自己就不能写了,我看我快被他们逼成java程序员了.能力因人而异,跟搞什么语言无关.

    个人喜欢C#,先是IED比较好用,环节了我大量搜索和敲击键盘的重复性劳动,这些精力我可以用在设计程序上, 曾经因为一次写可以写2000多行逻辑的C感到自豪, 现在想想,写第一次还可以,每次用到相似的问题都要写2000行,是不是在累SB呀?必须承认我讨厌重复性劳动,我是懒人.

    @老赵

    周六的演讲很精彩,不过有个地方和你的看法不同,

    你用LINQ去和JAVA代码比较时,有点偷鸡的嫌疑,那段JAVA根本就是LINQ的实现吗,你是告诉大家,LINQ的背后编译器都做了什么吧?就好象 拿%和和其算法在比较

    另外,多线程对yield的使用,想法很新颖,聪明哈,,,,有力的回击了JAVAer认为.NET程序员都是弱智的论调.代码么看见,近视眼,没带眼镜,可以放出那段代码,供大家研习研习吗?

    再次感谢周六的无私分享.

  94. Gabry
    210.13.69.*
    链接

    Gabry 2010-04-18 18:34:16

    LINQ确实很甜,甜得离不开它了,对我们这种业务需求变更密集型的公司来说,从开发,测试,到维护,都节省了超过60%的精力

  95. 老赵
    admin
    链接

    老赵 2010-04-18 18:39:22

    @Gabry: 你用LINQ去和JAVA代码比较时,有点偷鸡的嫌疑,那段JAVA根本就是LINQ的实现吗,你是告诉大家,LINQ的背后编译器都做了什么吧?就好象 拿%和和其算法在比较。

    Java那段代码本来就是和那句C#等价的,但问题就在于“Java没有更好的写法”,它只能这么麻烦地洋洋洒洒一大片,因此我说它write more and do less。其实语言之间的差距说到底就是编译器,用您的例子来说,有的语言它就是没有提供%运算符,那么假如我说它“取模操作”麻烦,又有什么问题呢?

    // 如和引用的问题看评论输入的帮助吧,编辑器上有个帮助按钮。

  96. 链接

    onecopper 2010-04-19 00:11:17

    问个跑题的,我是青鸟的在读生,读青鸟也是无奈,如果有更好的地方选择我也不会去青鸟的。

    我知道在青鸟学的肯定不够,我也找了些推荐的书看,国内几个有名的博客、社区我也常逛逛。

    希望老赵和其他前辈能给点建议,一个新人至少应该具备哪些技术和素质?培训机构出来的学生欠缺了什么?

    我只是希望以后入职,上司对我的评价是“这小子还行”,而不是“又一个被糟蹋的”。

  97. 链接

    沼泽 2010-04-19 01:19:12

    很高兴看到这样的讨论
    对于新人的引导是个很重要的问题,我作为新人学习了
    老赵(嗯还是叫赵老师把)不停强调单纯从语言来讲,可是很多人要讨论平台
    有意义么?国人的格调已经在那了,实惠第一
    不是有个例子么,安利初到上海,不满意退货,空瓶子都可以退,结果是什么不用我说吧
    那些都是商业的东西,复杂 刚走出校门 我只想好好学习CODE
    技术社区就是技术社区 商业的不要去管 就说技术的促进进步不行么

    还有,我想说,C#再好也没用,就像上面好几个说招到不合格的码工
    却也有好的找不到工作呢?

    推销C#是微软的课题,阿门 抛开支持抛开用户谈好坏总觉得缺点什么不实际 就跟女人爱多金的男人 听上面几位大哥说JAVA社区支持丰富 那我可不可以把JAVA看成多金的男子呢?

  98. 链接

    沼泽 2010-04-19 01:24:57

    貌似跑偏题了,呵呵

    只是希望不要在应用上面纠结

    给我们这些新人一些指导

    另外,本人求职 江苏地区 无工资要求(不给钱也行) 做过简单的WEB网站开发(俗称拖控件)

    在接受能力方面绝对没有问题,到目前为止,所掌握的均属自学

    虽然代码经验还不够丰富,但是有对技术的热爱

  99. 老赵
    admin
    链接

    老赵 2010-04-19 09:26:28

    @abc

    我不用qq,为了帮您保密,您的qq号我删了,呵呵。

  100. doylecnn
    222.68.249.*
    链接

    doylecnn 2010-04-19 10:31:13

    有个小建议,建议写完后,使用替换功能把"我承认"替换为空,以使的"好吧,我承认"变成"好吧".

  101. meback
    202.99.16.*
    链接

    meback 2010-04-19 10:32:30

    @京东

    .Net程序员90%除了拖控件之外,其它啥也不会。而java程序员90%都是比较了解java甚至语言核心的。

    就是不用拖控件,也一样可以写出来,拖控件只是提高工作效率,你明显不明白Net。 Java中这么多平台可用, 你们90%的人还不是只用别人写的平台和开源库,跟我们拖控件本质上不一样吗? 你们有几个可以写出Java开源库出来给别人拖呢?

  102. 麒麟.NET
    124.42.13.*
    链接

    麒麟.NET 2010-04-19 12:52:36

    哎,尽管老赵在文章和评论中反反复复一遍又一遍的声明自己所做的比较仅限于语言级别,但是还是有那么多砖家不看文章不看评论,直接将话题转移到平台级别,转移到开源框架,转移到开发成本(开发工具的价格),不断地抛出各种雷人的论点(90%Java开发者深入了解内核等等),不加佐证便用来驳斥,这实在让人感到无语。拜托各位讲讨论的核心转移到作者所限定的范围之内,OK?

    而且老赵最终的目的也并不是让大家抛弃Java语言而选择C#,只是通过Java语言与C#的比较,来说明Java语言的低效和落后,以此来引导大家讲注意力转移到另外一门基于Java平台的语言Scala上来。这样,你仍然能够使用Java的跨平台、开源框架、免费工具……我这样解释,各位砖家是否满意呢?这是否能够作为各位耐心看完这个系列的理由呢?

    老赵的这个系列是很值得期待的。从第1篇文章就可以看出,逻辑性十分严谨,很多字句都经过周密地推敲。不管你是Java、.NET还是Ruby、Python的粉丝,你都应该好好看看,特别是.NET程序员,后续的很多文章会让你对C#的认识再提升一个档次,也许很多代码都是你未曾见过未曾想到的的,你会发现C#在你的手下远没有发挥出它的真正价值。

  103. Qinw
    113.12.21.*
    链接

    Qinw 2010-04-19 13:40:37

    吸取百家之长 长我其心 你的优势就是我的优势 你的劣势不是我的劣势 什么平台都支持 想要什么特性 自己加 我以后就创一个这样的语言 没有任何局限 自己增长 真正的自由随意的理想语言 呵呵

  104. abc
    117.84.79.*
    链接

    abc 2010-04-20 19:32:59

    @Qinw

    C

  105. loveclan
    222.65.104.*
    链接

    loveclan 2010-04-22 21:47:34

    小弟不才,窃以为Java和C#做比较不是太公平,Java可能更适合去和C++比较,而C#应该去和Scala比较。

  106. 在青鸟上过课
    119.185.6.*
    链接

    在青鸟上过课 2010-04-22 21:48:57

    很好,很深刻。学习,期待后续内容。

  107. 老赵
    admin
    链接

    老赵 2010-04-22 22:20:12

    @loveclan: Java可能更适合去和C++比较,而C#应该去和Scala比较。

    为什么?

  108. youngz
    64.233.172.*
    链接

    youngz 2010-04-23 14:59:51

    别的不说,我大三了,即将毕业找工作,现在来招人的公司基本没看到招.NET的,都是C++、JAVA的,搞.NET基本就悲剧了(我也悲剧了)

  109. 链接

    loveclan 2010-04-23 19:52:04

    @老赵: 为什么?

    比如说比赛,一边倒的比赛就不怎么好看了,互有胜负的比赛才好看。 以C#目前的发展,应该算是完胜Java了吧。

  110. 老赵
    admin
    链接

    老赵 2010-04-23 23:17:48

    @loveclan

    嗯,不过还是让更多人了解一下比较好吧。

  111. 姐夫与小舅子
    114.141.162.*
    链接

    姐夫与小舅子 2010-04-26 10:38:05

    有意思吗?在合适的环境下就用合适的语言。这种使劲推C#的做法,会让人很烦感你,而不是语言本身。

  112. 老赵
    admin
    链接

    老赵 2010-04-26 10:48:27

    @姐夫与小舅子

    汗,你回在其他文章下面我还能理解为你没看到这篇文章了,而现在我可以确定你是回贴不看贴了,所以其实我也没啥好多说的啊,你还是好好看看我这篇文章吧,该说的都说过了,呵呵。

  113. 柳晛
    114.244.57.*
    链接

    柳晛 2010-04-29 16:40:47

    @路人甲

    我亲眼见过银行给计算机装系统,Win2000;汇丰银行的服务器也是Windows的。我以前在人民防空自动化研究所干过,我们的系统都是Windows的。

  114. FMax
    59.37.15.*
    链接

    FMax 2010-06-01 10:20:42

    老赵能简单介绍下.net在盛大的应用么?如你所说应用在后台,可以稍微说的详细点么?

  115. 老赵
    admin
    链接

    老赵 2010-06-01 10:22:39

    @FMax

    就是做网站。

  116. xblue
    123.156.15.*
    链接

    xblue 2010-06-28 18:36:43

    楼主纯娘们,喜欢吵架.停留在代码,语言的认识水平上面. 开个帖子假正经,本人专门到此鄙视你一下. 会两个没什么了不起,本人会好几个, Java, C#都做过几个项目,JS, TCL, perl, php, linux C, C++都会,还不是代码工人. 楼主有本事写过个Java的JRE虚拟机,或者Java的编译器.本人就服了你了.

  117. xblue
    123.156.15.*
    链接

    xblue 2010-06-28 18:38:07

    微软的IL编译器,你知道代码吗? java的编译器有好几个,我都有代码

  118. 老赵
    admin
    链接

    老赵 2010-06-28 19:44:51

    @xblue

    我不喜欢吵架,吵架的都是在下面评论的,比如您这类直接招呼人的就不是来讨论问题,而是来吵架的。编译器有啥难写的,虚拟机操作系统有啥难写的,在学校里都做过,哈哈。微软的C#编译器我不知道代码,不过我有mono的代码,Java的代码你有我也有,有啥了不起的捏?

    嗯,最后单独说一句。您说我认识水平不高,我还觉得您认识水平不高,看不明白我谈的是什么东西呢。

  119. SingleBoy
    115.60.130.*
    链接

    SingleBoy 2010-07-09 23:15:43

    恩,老赵啊!支持你!别人都说你是微软的宣传员!可我不认为,毕竟我们是做开发的,无论使用那门技术都是可以的。然后我们在闲暇的时候讨论一下语言的区别,不就是为了更深入的了解吗?通俗的说,不就是饭后娱乐一下嘛!干么这么认真呢!

    所以在这里我就要为老赵平反了,不要老是说老赵不了解这个就鼓吹微软的东西?真的是这样吗?好的东西我们为什么不能赞扬呢?啊,凭什么不好的东西我们还要坚持?

    众所周知,java的io简直是垃圾中的极品!可是老赵说什么了吗?java已被收购,问题是,oracle收购的是技术嘛!是java的市场!假如说java没市场了,oracle会收购吗?

    老赵送你一句话,走自己的路,让别人无路可走!什么叫做与时俱进!java不反思自己的不足,反而拿这些不做当多自己的亮点,从来没见过这么XXX的。我从事java和C#教学多年,从学生的反映上来看,学生喜欢net,因为简单,可有的人说,简单是因为拖拉控件,而不了解核心,我说是纯属造谣,在给学生讲课的时候,控件的拖拉的原理以及生成都讲过,而学生可以自己编写服务器控件,我想问一下,这是核心吗?你认为的核心难道说必须是jvm?如果是这样的话,那么我们人人都可以成为天才!

    无论java还是C#,用着顺手就可以了,闲暇的时候讨论一下!没必要吵,你说呢老赵?

  120. 链接

    fengfeng925 2010-07-27 17:17:37

    通篇文章和评论都看完了。先声明一下,我是做Java的。

    这篇文章主要讨论的是C#和Java单纯从语言和语法层面上的比较,并没有涉及到其他,所以大家还是不要牵扯到平台上去吧。至于京东整体架构在向Java方向转移,必然有其原因。我们公司是58同城,原来是C#做的,现在整体也在向Java迁移,但是原因不是因为技术层面或者语言层面,而是微软的东西太贵了,而Java方面开源。

    我虽然是做Java的,但我也感觉Java在某些语法方面现在已经有点落后了。(先前和公司的一些C#程序员接触过,基本算了解这门语言)。

    至于说不合格的程序员,这个呢,就又跑题了,牵扯到人的层面上了。毕竟程序员水平是良莠不齐的,上面有个同学说高手都在研究Dephi和C#,Java的都是码工什么的,那就不对了,高手应该和高手比较吧,也许你没见过用Java语言的高手呢,呵呵,我也快跑题了。

    总之,大家相互之间吸取经验才是正道,这样才能共同发展,一起进步。

  121. ahlen
    123.15.57.*
    链接

    ahlen 2010-09-20 01:57:52

    说实话 感觉说了一大堆的废话 您真是一个非常合格的讲师

  122. 老赵
    admin
    链接

    老赵 2010-09-20 16:12:24

    @ahlen

    是啊,这篇最没意思了,还不是因为某些人所以才解释的废话么,但问题是解释了这么半天,还是有无数人不看,你说我有什么办法。按理说我很不喜欢说外国人中国人什么的,但是这些内容,只有一份ppt被推送到reddit之后,老外们的讨论的确令人佩服。

    不得不说草泥马呀。

  123. 大柳
    209.118.175.*
    链接

    大柳 2010-11-16 12:56:44

    离开平台讨论语言,仅仅能做做特性和程序优雅程度的比较而已,对实际应用参考不大,如果有一天C#可以运行在linux下了,可能会更火些。

  124. 老赵
    admin
    链接

    老赵 2010-11-16 14:58:56

    @大柳

    首先,我不觉得对实际应用参考不大,说这话说明你没看清文章,嘿嘿。其次,C#早就可以运行在Linux下了,现在都能运行在Android和iPhone上,正如你看到的这个博客一样。

  125. 西坪
    222.131.186.*
    链接

    西坪 2010-12-17 23:20:30

    说实话,比较一下这两门语言确实有意义,文章写得不错。不过你废话太多了,那么老长一篇文章,一句实话总带上许多废话。简练一些可以节省很多时间。

  126. 老赵
    admin
    链接

    老赵 2010-12-18 07:52:18

    @西坪

    还不是被某些人逼的。

  127. ciznx
    122.234.252.*
    链接

    ciznx 2011-01-15 16:33:06

    不错,第一次看到老赵的博客就花了三个小时一口气读了好多篇。理性而富有启示,有深度却不难读懂。 了解Java滞后的人多不多我不知道,但了解C#优秀的人确实不多。

  128. fucku
    115.222.154.*
    链接

    fucku 2011-03-15 02:04:07

    垃圾一堆,讲大话,讲空话,言之无物,shit!

  129. None
    122.233.165.*
    链接

    None 2011-04-04 11:32:16

    老赵说的还是有道理的,Java确实有种种缺陷,很多我想要的特性都没有。不过对于自己的技术路线选择大家还是要慎重一点,这个东西会影响到自己未来几年的职业生涯的。我的意见是:

    1. 已经工作了的,Java继续Java,C#继续C#,业余不妨花一点时间选一门第二语言(当然不一定是Java/C#)。语言的转换对web、架构方面的知识影响不是太大,真的掌握一门语言了,转另一门语言的话半年足够了。

    2. 对于还没工作的同学,其实你在它们(Java,C#)上投资还不多,看自己开心吧,爱学哪个学哪个,其实这不是最重要的,好好学你自己的专业课吧,等工作几年后你会发现那才是重要的,记一堆API谁都会,但是那些并不是所有人都了解的。

  130. 链接

    方麒帆 2013-07-16 14:56:47

    没用过JAVA,不清楚JAVA什么情况 但是很喜欢C# 特别是3.0出来后,很舒服 很优雅 很享受, 对于某人抛出的“90% .net程序员只会拖控件”的论点已经不知道被拿出来多少次了 真的无力吐槽.

  131. linjie
    27.155.186.*
    链接

    linjie 2013-08-16 20:38:10

    两年多了啊,不过还是有幸看到了。 人微言轻,不过还是说说自己的看法。误见怪。 首先说一句,没有最好的语言,只有最适合的。 评价一门语言要从多个态度,就如您所说的,一门语言可能会改变一个程序员的思维,所以接触的第一门语言很重要。 Java 诞生十多年, 我所一开始认识的Java ,解释说纯面向对象,这应该是从思维上来说吧,Java 更适合面向对象,当然现在的C#也一样,虽然我不知道第一个提出面向对象的人是谁。 评价一门语言,我觉得应该从多方面。 你所说的大多为生产力,不可否认,C#的生产力高于Java,同样是面向对象,C#开发效率高很多,我专业那年学校教的是C#,而我自学的是Java,两门语言我对比过。 我觉得Java对比C#,在于开源,在于学习。C#我语法学的很快,但对于底层,对于微软封装好的东西,我很难涉及到,想去理解,又不知道从何入门。我不知道原理,但对于Java,我觉得,因为开源,所以我可以追踪。所以我觉得学的更有意义,更充实,我可以很简单的手动编译,我知道怎么运行过程。 但对于C#来说,我像是被蒙在鼓里一样,也许是C#没学到深处。呵呵。

  132. google首席架构师
    117.89.173.*
    链接

    google首席架构师 2013-09-25 18:26:03

    我认为Java是现有语言中最好的。但有趣的是,现在很流行谈Java是否即将死去。我觉得这基本上是扯淡。我认为现在最好的多线程构件就在Java里。我认为Java将迎来复兴。我不是说它是未来20年内最先进的,也不是说它是处理多核的最好方式。但是我认为从现有的东西来看,我们是足以傲视同侪的。

  133. JAVA
    118.244.255.*
    链接

    JAVA 2014-04-21 17:26:14

    其实最主要的是 99%的服务器是linux C#程序不能运行在linux上!!!。

  134. AAabc
    202.189.0.*
    链接

    AAabc 2014-11-28 19:59:49

    看到你说你不用QQ,我就觉得你真是一个极端的人。你和同事之间要分享东西,还要绕开QQ,去找别的东西呗?服了。想让程序猿放弃Java去做C#?当你真的明白开源与不开源之间他们存在多么大的差距的时候,你也许会明白,让程序猿放弃Java是不现实的事情。

  135. java
    27.115.98.*
    链接

    java 2015-03-17 17:59:10

    扯淡语言有意思么,像是要搞架的阵势;开源无敌,java依旧是企业级的中流砥柱。

  136. ……来自硅谷
    223.104.10.*
    链接

    ……来自硅谷 2015-03-25 12:06:07

    关键是,Mac和Linux用的太爽,都懒得用Windows,Windows什么8什么10等等更别说更新它了,我该怎么用C#?MONO吗?又要装软件?传说C#开源了是吧?它的社区和JAVA的比起来怎么样?如果这个能吸引我,我可以先试试打开我的windows,好久都没有看到windows桌面弹出的广告了,其实也蛮怀念的。

  137. Talan1314
    113.68.211.*
    链接

    Talan1314 2015-07-13 22:47:26

    先 Mark 一下

  138. vengo
    218.16.63.*
    链接

    vengo 2015-12-09 15:32:00

    这里不懂装懂得人太多了,还是不看评论,客观看文章为妙

  139. lbhl
    107.13.166.*
    链接

    lbhl 2016-04-03 01:42:14

    我是一个美国的程序员。以前做.NET,后来改行做JAVA。

    今天我要在这里驳斥一个世间流传已久误人子弟的谎言! “JAVA更难学习内容更多”绝对是一个弥天大谎!正好相反,.NET要学的东西其实多于JAVA,而且难度只在JAVA之上不在之下!如果决定搞.NET,那就要准备好要比JAVA吃更多的苦!

    光一个C#语言,内容就不知道比JAVA多多少了。权威的对比有: https://en.wikipedia.org/wiki/ComparisonofCSharpand_Java https://msdn.microsoft.com/en-us/library/ms836794.aspx,我把第二个网址的网页全部打印了,发现其中有一个表格对比,C#支持而JAVA没有的特性打印出11页纸,而Java支持而C#没有的特性只打印出1页纸!

    由于国内.NET应用的局限,诸如在美国大量使用的.NET技术体系中的WCF,WPF,LINQ, Entity framwork,SQL SERVER SSRS SSIS等技术在国内几乎不用或者用得很少,再加上.NET上手快, 很多国内的人有了错误的认识,以为JAVA是高大上,.NET是小儿科,这简直是天大的误会!等你来了美国,上http://pluralsight.com和amazon上随便看看(更不要说微软自己的站点了),书籍.NET是JAVA的5倍以上,教学视频.NET更是JAVA 10倍以上!是的,你没看错!也许国内是JAVA资料更多,但美国完全相反!而且不是差一点半点。再看看http://dice.com对.NET程序员和JAVA程序员要求上的差别,JAVA招聘需要的技能种类明显少于.NET。做JAVA的可以对前端就不懂也有大量职位(如CORE JAVA)。但.NET程序员对前端的要求就明显高过JAVA,很多要求前后端都要精通的。连桌面开发WPF软件的用人公司也变态地要求前端精通,结果是不懂甚至不精通前端几乎不能找.NET的工作,但JAVA就可以!

    不要以为JAVA要的技能项目要求少就是更难掌握和精通了,.NET一样可以很难!光一本WCF的书就可以一千多页,随便一个WPF这种技术难度也远在JAVA SSH之上。我深入学习过两种语言,负责任地说,C#可以说难度和知识点广度上绝对是超过JAVA SE的。你去微软MSDN上查一下API,复杂程序远远超过JAVA SE的JDK API文档。光是这些错综复杂的内容体系是如何编排的,这个知识网的结构是怎么在微软网站上组织呈现出来的都要搞很久才能真正弄清楚,更不要说知识本身了。再来个例子,看看JAVA的SERVLET和JSP网络技术,那种单纯性,简单性和浩瀚无垠的http://ASP.NET体系去比,要学习的内容无论广度很深度都要差太多。所以为什么国外http://ASP.NET的书动辄超过1000页,但大部分JSP SERVLET的书都是些5-6年前甚至十几年前出的还比http://ASP.NET的薄很多?

    .NET上手快是因为有一些自动系统自己可以做出来的东西,比如拖控件。但是如果仅仅说有拖控件就断定这个更简单那就太肤浅了!程序员一样可以自己手工做的呢!你换个思路,用几句不精确的话来描述.NET和JAVA之间的异同:JAVA不能拖控件,只能自己写程序;而.NET不但能拖控件,还可以自己写程序手动实现,而往往工作中拖控件自动完成的和自己写程序都要用到。拖控件并不是看小说那么简单也要花巨量的精力学习的。你想想,既要拖控件又要手写是不是比只要手写还多一个拖控件的内容?怎么反而会更简单呢?既然多了一项拖控件的任务那应该是内容更多了更难了,而不是更简单了!!

    JAVA技术体系更新非常慢,学完C#再去看JAVA SE感觉象小儿科,很多JAVA 8的最新特性也许多少年前C#就有了。象SERVLET,JSP,EJB,SSH等更新的速度和.NET体系更新速度比简直象蜗牛。为什么5年6年前的JAVA 技术的教学视频现在还被挂在传智播客,尚学堂和动力节点的培训班网站上,还没有淘汰呢!想想如果换了.NET,可能吗?!

    JAVA技术是开源的,可以看源码透析工作原理,但.NET没有全开源,没有源码的话要真正弄弄背后原理是很难的。如http://ASP.NET的原理就远远比JSP等深奥很多。

    工作了多年,感觉.NET最难的地方就是往往你不知道系统在背后都为你自动做了什么,什么时候和什么地方做的,自己编写的程序如何更系统背后自动做的配合在一起完成任务!而搞JAVA往往少很多这种问题,纯粹手动反而更简单更容易控制。从这个意义上讲,.NET难度也远在JAVA之上!

    .NET另一个优势是在WINDOWS上开发,而我们有哪天能离得开WINDOWS操作系统?那些所谓高大上的JAVA程序员,如果在投资银行系统工作,也许每天的工作是和几千万美元的交易打交道。但你让他编写一个小小的桌面程序完成自己业余生活中的一点需求,他们都可能会皱眉头说不好做,因为他们习惯了在服务器上使用JAVA,在自己朝夕相处的WINDOWS上写点下里巴人的实用程序反而是做不出来了,而对.NET程序员来说就是小菜了。

    只有象我这种真正两种开发都做过的程序员,才真正有权力评说java和.NET的难度差别。请不要人云亦云地认为JAVA就比.NET难东西更多。真正调查之后再评论!

    岁数大了,干不动了,还是转JAVA好。机会更多,学习量更小,难度更低,更新速度慢,工资反而更高!修改

发表回复

登录 / 登录并记住我 ,登陆后便可删除或修改已发表的评论 (请注意保留评论内容)

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

评论内容(大于5个字符):

  1. Your Name yyyy-MM-dd HH:mm:ss

使用Live Messenger联系我