Hello World
Spiga

幻灯片:Why Java Sucks and C# Rocks

2010-04-18 09:52 by 老赵, 7788 visits

昨天在5173与博客园联合举办的技术交流活动中进行了演讲,现在幻灯片终于可以放出了。当然,光看幻灯片本身的效果不大,在演讲过程中我进行了非常多的代码演示和说明,幻灯片本身只能算是一个辅助手段,因此各位没有来听演讲的朋友,还是等我慢慢地对这个话题进行详细讨论吧。

不过既然幻灯片放出了,那么我进行这场“闹剧”的目的也可以完全公开了,其中有三:

  • 揭露Java语言的生产力的缺失
  • 表达C#的发展现状与常用编程范式
  • 鼓励别人抛弃Java语言,采用Scala。

没错,我的最终目的不是为了“让Java程序员使用C#”,而是“让Java程序员使用Scala”。

这里我不得不多说几句。前天我写了“比较的意义与目的”之后得到了许多评论,从评论中我看得出,许多朋友在评论时并没有看我的文章。为什么这么说?因为我已经在文章里不断强调“只是让Java程序员抛弃Java语言,不是Java平台”,而且“并没有想让Java程序员转向C#”。难道这还不能看出,我是想要推广JVM上的另一门语言吗?只可惜我还是收到了许多类似的回复:

  • 你说要用另一门语言来代替Java,这门语言是什么,C#吗?可笑……
  • 你让黑莓,Android程序员去使用C#?他们看了只会一笑了之……
  • 比较Java和C#语言本身不会有什么结果的,做开发还得看整体情况……

如果不是没有看我的文章,那么我只能想出另一种可能了:有些朋友并不知道JVM上的语言发展情况,并不知道目前JVM平台上除Java外最火热的语言是什么。那我就觉得奇怪了,要知道,现在可是在开Scala Days 2010呢,而且之前连Java之父高司令都高度评价Scala

Java的粉丝们一直认为Java平台的最大优势是开放,我同意。但是,我想Java如此开放,但是为什么一些Java粉丝给我的感觉却是狭隘的心态和视野呢?例如,看到有人说Java坏话了,于是立即热血上涌,文章内容也不用看,文章目的也不去关心,不管三七二十一就在评论中想尽各种办法进行反驳。抛出各种论点,却鲜有论据——我是指靠谱的论据,而不是向某个朋友说的“.NET程序员90%只会拖控件,而Java程序员90%是了解核心技术的”这种莫名其妙的说法。要知道,论点易抛,论据难得。我的文章动辄数千字,就是为了想办法把文章内容说清楚。但是不管怎么努力,我还是会不断发现值得额外详述的地方——更何况在评论中的寥寥数字?

是的,从某个角度来说.NET平台资源是比Java平台要少。所以我觉得很高兴,我可以时刻发现前进的目标。例如有人说Java平台有个地方很好而.NET很糟糕,我不会想办法去驳倒对方,我会很乐意去了解它,然后看看它在.NET平台有没有类似的东西,它的思想能否借鉴给.NET平台,如果发现这种说法有明显问题才去“摆事实、讲道理”。除了Java平台之外,我还关注其他各种技术,让各技术为我所用。

Java平台的确开放,但对于某些Java粉丝来说,这难道只是您用来建立信心的借口吗?我一个封闭的微软平台的封闭的.NET程序员,如果心态和眼界都比您要开阔──就好比,一个Java平台上的Scala语言需要我一个.NET程序员告诉您,这难道不很讽刺吗?还好,我相信说一些没边评论的Java粉丝只是少数盲目分子,而Java领域的大部分朋友还是相当靠谱的。

那么,我单纯比较Java和C#语言有意义吗?当然有,我只要能说明Java语言本身是多么糟糕,让我们有足够的理由转向Scala就行了。

感谢韦恩卑鄙提供演讲录音,关于演讲的详细内容,自然还是请关注的我的后续文章:

Creative Commons License

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

Add your comment

138 条回复

  1. 链接

    韦恩卑鄙 2010-04-18 10:08:53

    啦啦啦 哪里可以上传录音捏

  2. justin
    122.234.248.*
    链接

    justin 2010-04-18 10:10:37

    鼓励别人抛弃Java语言,采用Scala。

    额,为了这的话,起“Why Java Sucks and C# Rocks”的名字就太……

  3. Fred_Xu
    116.227.39.*
    链接

    Fred_Xu 2010-04-18 10:10:59

    昨天膜拜了老赵,讲演很专业啊,佩服的五体投地,在听完您的讲演后感觉Java确实低能了一些。特别是习惯了Linq和Lambda表达式后再去用Java,过程是相当痛苦的。

  4. pixysoft
    121.32.25.*
    链接

    pixysoft 2010-04-18 10:14:06

    到了53就没有图片了?不知道其他人是否遇到

  5. 老赵
    admin
    链接

    老赵 2010-04-18 10:16:04

    @pixysoft: 到了53就没有图片了?不知道其他人是否遇到

    刷新一下看看?我检查过了没有问题。

  6. 链接

    william 2010-04-18 10:29:25

    @韦恩卑鄙
    http://twaud.io/

  7. Simcoder
    113.109.219.*
    链接

    Simcoder 2010-04-18 10:31:37

    对于JAVA与MS的讨论很难在一个时间段内消失,尤其是择业的朋友,不过随着互联网的推广,更多的重视中小型企业,我在广州看到的更多招聘还是.NET,本人也正在找这方面的工作,努力学习,不把时间浪费在争锋相对上!

  8. damngoto
    113.57.67.*
    链接

    damngoto 2010-04-18 10:41:07

    o,楼上的好眼熟

  9. xiaop
    123.185.210.*
    链接

    xiaop 2010-04-18 10:45:38

    老赵,视频有没? 还有我是在104那里没有图片的!!!

  10. xiaop
    123.185.210.*
    链接

    xiaop 2010-04-18 10:47:36

    还有,老赵你那个send my comment的按钮说实话,实在太闹心人了,尤其当我用手机版本看RSS的时候,那个按钮小的简直了。。。 还不如直接在这个输入框下面来个回复呢,还清楚还舒服!!!

  11. and
    111.173.69.*
    链接

    and 2010-04-18 10:51:11

    我们学校计算机毕业! 选择java的一般都混得不好, 选择.net的只有学得好的,都混得好!

  12. 老赵
    admin
    链接

    老赵 2010-04-18 10:55:48

    @xiaop

    我这儿每一页都是好的,重新加载吧。你说用手机看RSS,那么和这个按钮有什么关系啊。

  13. 克伟
    207.46.92.*
    链接

    克伟 2010-04-18 11:02:15

    这PPT写的真是太棒了,悔恨没能听到你的演讲

  14. 链接

    Dy Carl 2010-04-18 11:15:41

    我用了很久的java语言,也体会到java语言里一大堆的繁琐的语法,有些语法比如内部类的实现实在是sucks . 现在我已经全面转向一种更'简单'的java语言groovy了

  15. 链接

    韦恩卑鄙 2010-04-18 11:22:09

  16. grapeot
    207.46.92.*
    链接

    grapeot 2010-04-18 11:34:26

    啊,老赵的slides是在太精彩了,有理有据,条理清晰,让人信服。而且论点也很客观。很期待下面的文章!

  17. Gabry
    210.13.69.*
    链接

    Gabry 2010-04-18 11:45:04

    现场没JAVA牛人来PK,对于这个主题,可惜了

  18. 老赵
    admin
    链接

    老赵 2010-04-18 11:57:07

    @韦恩卑鄙

    昨天居然录音了?

  19. 链接

    韦恩卑鄙 2010-04-18 12:05:10

    个人爱好 里面的咳嗽都是我本人的

  20. 链接

    韦恩卑鄙 2010-04-18 12:06:41

    @Gabry

    话说java的牛人不可能对语言没有怨言啊

  21. zzfff
    222.53.140.*
    链接

    zzfff 2010-04-18 12:14:03

    老赵“折腾”完了,我来发点bia言:)

    我觉得,理工科生有真伪之分,区分标准很简单:粗暴简单。

    把这四字金言嘀咕一万遍,会得出什么结论?赚钱多少是衡量技术强弱的唯一标准。

    微软在企业领域赚钱多吗?SharePoint server,BizTalk server,Exchange server,SQL server,Windows server...(可惜我不是严谨的老赵,不然我会去找数据)

    太阳技术强吗?强就不会卖身了。

    记住:“你”是理工科生,get tmd f**king work done是你存在的唯一目的,其终极价值是:创造财富。

    (我在想,粗暴简单到底是绝对理性呢还是绝对感性?:)

  22. 老赵
    admin
    链接

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

    @zzfff: 太阳技术强吗?强就不会卖身了。

    技术强和赚钱其实是不等价的,太阳其实技术很强,可惜结果不太好。

  23. zzfff
    222.53.140.*
    链接

    zzfff 2010-04-18 12:30:58

    @老赵

    你还不是理工科生——我所谓的。

    :)

  24. 老赵
    admin
    链接

    老赵 2010-04-18 12:34:20

    @Dy Carl: 我用了很久的java语言,也体会到java语言里一大堆的繁琐的语法,有些语法比如内部类的实现实在是sucks . 现在我已经全面转向一种更'简单'的java语言groovy了

    我下周会在QCon上采访Groovy的创始人Paul King,如果您有什么问题,可以告诉我。

  25. zzfff
    222.53.140.*
    链接

    zzfff 2010-04-18 12:52:53

    照我的“理论”,太阳技术弱并不能得出Java suite弱。只要.net不若就够了(m$的server系已大量使用.net)。

  26. jason
    221.175.47.*
    链接

    jason 2010-04-18 13:40:13

    老赵你上课不会讲英文吧-

  27. crazycode
    58.32.208.*
    链接

    crazycode 2010-04-18 13:42:20

    看过slide了,写得不错,果然是标题党。

    我读出来的主体思想应该是程序员要开拓视野。里面提的大部分思想我是赞同的,如果一个Java程序员在最近三年中都没有注意到JVM的动态化及多语言化趋势,或者没有跳出简单Java语言,言必称SSH,那这个人不是初入行的工程师,就是思想相对保守的操作型人才,或者是正在向管理人员转型的有为青年。相信.net开发或其它开发平台上,这样的人也是占大多数的。

    另一方面,微软向C#这个瓶子塞入了太多的东西,作为当前市场占用率领先的公司,当然可以造就它的流行,但个人觉得,可能总有一天,C#会被所承载的东西压跨。当然,我说的是C#语言,不是.net平台,嘿嘿。

  28. zzfff
    222.53.140.*
    链接

    zzfff 2010-04-18 13:43:01

    其实这个“理论”不是我发明的——小平同志的“猫论”嘛。

    BTW:四川人都务实得令人发指~~

  29. xjb
    222.247.89.*
    链接

    xjb 2010-04-18 13:56:27

    学习老赵这种认真的精神.

    btw:在chrome下,留言如果超过两行,和左侧的ip地址重叠。

  30. 老赵
    admin
    链接

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

    @crazycode

    我还是觉得不标题党啊,呵呵,内容和标题完全吻合。

    我倒觉得,只要是真的“没注意到多语言”那就是眼界太封闭了,就不是任何类型的人才。我又不是说要有多么了解多么精通,我只是要求知道有这么个东西而已。就像你说的“正在想管理人员转型的有为青年”,转型不一定是坏事,但是管理人员连技术人员该听说过的东西都不知道,这眼界怎么做管理啊。

    当然其实我觉得在国内每个平台大部分人还都是眼界不够宽的,其实以前我倒都是对.NET平台程序员说,不要老是跟着微软,看看开源界,看看社区里的东西,技术会议等等。这次倒真是很多人跳出来了,我就正好也评论一下一部分搞Java的。

    你说C#被压垮这一点,其实我也听说过很多次了。不过我倒觉得,C#的发展状况一直不错(如C# 3.0),但C# 4.0的改变已经缓下来了。而从Anders最近的演讲中,他并没有在语法层面上做文章了,倒是再一些编译器的扩展性上,如Compilers as Services,REPL,解释执行上努力等等。

    这也是我觉得C#不会成为下一个C++的原因,因为增加语言特性不是坏事,这是进步的表现,不妥的只是“盲目”增加语言特性,或是增加“不好”的语言特性。Anders说到底还是个工程师(其他MS的Tech Fellow倒基本都是科学家,在MSR工作的,Anders从来就不是,呵呵),C#交给他我放心,嘿嘿。

  31. 老赵
    admin
    链接

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

    @jason: 老赵你上课不会讲英文吧

    这倒没有,不过基本所有东西在脑子里用英文说过一遍,就当锻炼英文,呵呵。

  32. 老赵
    admin
    链接

    老赵 2010-04-18 14:07:53

    @xjb: 在chrome下,留言如果超过两行,和左侧的ip地址重叠。

    Chrome的bug,在win xp或2003下没法显示小于10pt的字体。其他浏览器或是其他操作系统上的Chrome就完全正常。

  33. bookcold
    222.79.245.*
    链接

    bookcold 2010-04-18 14:40:04

    能不能把你演示代码打包提供下载呢?这样看幻灯片才更有感觉!哈哈

  34. 老赵
    admin
    链接

    老赵 2010-04-18 14:53:58

    @bookcold

    会有的,不过我在写文章的时候还会进行细化,所以等等吧。

  35. 姜敏
    211.102.147.*
    链接

    姜敏 2010-04-18 15:23:59

    老赵:请教个问题,你这个博客网站是用什么做的,使用的博客模板还是自己开发的?我非常想做一个自己的网站,就是不太会做博客网站啊,老赵指点下.同时你在这写文章还能转移到博客园,这多好啊.

  36. 老赵
    admin
    链接

    老赵 2010-04-18 15:33:20

    @姜敏

    皮肤是基于一个wordpress的皮肤改的,其他都是自己写的,博客网站和普通网站没什么区别,需要什么功能自己做就行了。

  37. 链接

    Ivony 2010-04-18 15:34:15

    听录音觉得没去亏了。。。。。

  38. crazycode
    58.32.208.*
    链接

    crazycode 2010-04-18 15:41:59

    我倒觉得,只要是真的“没注意到多语言”那就是眼界太封闭了,就不是任何类型的人才。我又不是说要有多么了解多么精通,我只是要求知道有这么个东西而已。就像你说的“正在想管理人员转型的有为青年”,转型不一定是坏事,但是管理人员连技术人员该听说过的东西都不知道,这眼界怎么做管理啊。

    你不会真以为我说的“人才”、“有为青年”是褒义词吧?

    当然其实我觉得在国内每个平台大部分人还都是眼界不够宽的,其实以前我倒都是对.NET平台程序员说,不要老是跟着微软,看看开源界,看看社区里的东西,技术会议等等。这次倒真是很多人跳出来了,我就正好也评论一下那些搞Java的。

    当然,我的观点和你的也有不一样,我认为每个人有每个人的世界,有自己的眼界。只会java或C#不一定是眼界低,会scala或几门动态语言,或者紧跟业界潮流也不一定是眼界宽广 :) 做好自己选择的事,love it, play it, enjoy it, 这样每个人的选择都是自己喜欢的选择,说sucks or rocks可能意义不大,不知道你怎么看,反正我是不会去强求别人如何的,当然,项目已经作出的选择需要强求大家遵循。

    我有我自己喜欢的技术,如archlinux、emacs、git、ror,但我不会主动去要求别人也喜欢这些变态(呃,说好听点,Geek)的东西,相反,我会鼓吹ubuntu、eclipse、svn、Spring这样的目前证明容易被接受的(嗯,市场所选择的)东西。至于每个人能达到什么境界,那是个人造化,与时有关,与我无关。

  39. 老赵
    admin
    链接

    老赵 2010-04-18 15:48:16

    @crazycode

    我没说一定要紧跟,我是说,“知道”总归是需要的,“知道”不能说明眼界宽,但是“不知道”肯定是眼界窄了,霍霍。例如你喜欢arch,emacs,git,ror,我喜欢ubuntu,vi,svn(其实我还是喜欢git),django(好吧,其实我也只是简单了解过一些),这都可以说是个人选择,即使别人不喜欢不研究不关注也不能说明什么。但是,如果一个人都“不知道”这些东西的话(呃……还是应该就事论事,比如一个Java程序员不知道JVM上的其他语言),这就是一个问题了。

  40. 老赵
    admin
    链接

    老赵 2010-04-18 15:50:18

    @Ivony: 听录音觉得没去亏了。。。。。

    Ivony兄太给面子了

  41. Popeye Zhong
    58.251.84.*
    链接

    Popeye Zhong 2010-04-18 16:53:49

    没有录音可惜了,要不老赵自己再重新录一遍吧,虽然我以前上课的时候,在C#课上讲解一些C#语言特性时(譬如:Propert[Setter, Getter]、构造函数的调用方式、自定义特性(Attribute)、委托、Boxing/Unboxing、Lambda、Linq...),会特别强调这门语言的美感,以及让学生讨论为什么Anders要这么设计,如果是你去设计C#语言的话,你会怎么做?在讲解的时候,为了体现它的美,经常不得不拿出别的语言来对比一下,正所谓没有对比就看不出差距,没办法。但是,却没有像老赵这样系统的整理这些论据,所以,希望老赵同志能提供视频演示。

    计算机程序语言的语言美感非常重要,这是鄙人欣赏某门语言的一个重要指标。个人感觉C#的语言设计理念与C语言是一样的,那就是“干练”。当然,由于这两种语言的定位不一样,在一些特定具体的设计上,C#更趋严谨与安全,但是,Anders对美感与安全之间的平衡拿捏得确实是非常得体而高明的。就委托(Delegate)这个特性而言,即兼顾了类型安全又照顾到了语言书写的简洁流畅,正是这么漂亮的设计,才为后来版本中的匿名委托(方法)、扩展方法、Lambda、Linq这一系列的组合拳提供了基石。后面的扩展方法、Lambda与Linq绝对不只是语法糖这么简单,其实体现了设计者的设计思想,也正是这一步步稳健有序的升级,才有Anders后来思考的Linq具有领域语言的特质,如果理解到这点,再说什么语法糖,那就有点鸡同鸭讲了。

    再来谈谈C#的属性吧,就是那个Setter和Getter以及索引器,为了不开罪J人,我就拿同是盖子同学的VB(非VB.NET)宝贝来比吧。在老VB中我们定义属性是可以从语法上把Getter和Setter进行分离的,而C#从语法的层面杜绝了这种情况,不光如此,还可以对Setter和Getter分别进行作用域定义,这就是美。或许很多人对此不以为然,窃以为美就是这样平凡,没有粉饰、没有做作,自然而然流畅的让人可以发觉不到却又实实在在。平凡中但见伟大,由此可见一番。

    C#在处处细微处闪烁着美感,这种美不光书写简洁而且表意丰富、灵活,但绝不混乱晦涩。唉,我们除了爱她还能要求她怎样呢...

  42. deepnighttwo
    114.92.141.*
    链接

    deepnighttwo 2010-04-18 17:03:21

    幻灯片看了一遍。作为一个玩了7年Java的程序员,我没找出一丝值得我放弃Java的理由。

    当然,Java不是一门完美的语言。相信现在世界上还没有一门语言从核心到边边角角都无懈可击。否则别的语言早嗝屁了。任何一门语言,都是一种取舍。关键是看语言是不是能够足以应对其所面对的应用场景。就C#和Java来说,我倾向于Java。

    我用过半年的C#,经验很浅薄,对C#基本没啥发言权。但是我确实知道,入了微软的门,就等于入了一条封闭的路。Java是有JSR驱动着发展的,而C#则是微软的一言堂。微软最喜欢做的事情,莫过于用看上去很美的IDE和小功能(语法糖?),让开发者对微软的东西产生依赖。而Java则完全没不是这样,Oracle,IBM,都有自己的JVM实现。

    至于ppt中提到的那些个问题,当然确实是存在的(Java所谓的假泛型,确实也让我觉得不爽了一下)。但是我不得不说这些确实是边边角角的小问题。作为一个程序员,我是真的不介意为了实现一个功能,多写几行代码的。反而是代码写的太少,背后隐藏的细节让我不放心。而且,我用Java语言这么些年了,也没觉得时间大部分是花在了“敲”代码上,真正的时间是花在了构思和设计上。真正这些都敲定了,刷刷几行代码还不是手到擒来的嘛。。。不知道这点赵姐夫是不是同意。

    我觉得,一门好的编程语言就应该是开放的。应该海纳百川。这样才有健康的发展。而微软的C#,在可以预见的未来,肯定都是只能玩转在Windows上的。也肯定都是微软一家说了算的。所以,虽然C#的GUI看上去比Swing漂亮,虽然微软内置.net环境让C#程序貌似可以更方便的运行,但是在大学的时候我还是选择了Java。

    封闭是有坏处的。C#这么些年来,也没有一个模块化的事实标准。而Java中OSGi的实现已经很成熟了,并且已经广泛的在商业领域使用了。为啥没人愿意为C#搞一个。让我的话我也不愿意,凭啥啊,这门语言就你一家说了算,我辛辛苦苦弄出来可能还被微软拒绝,或者说,有可能在发展的很好的时候,微软一个回马枪在自己的.net里面内置个OSGi的框架,这对于别的OSGi实现绝对是致命的打击。从这个角度说,谁也不愿意热脸贴到冷屁屁上,对吧。而Java则是开放的,Java的类库已经将很多优秀的第三方类库引入到自己的标准类库中了,这点微软做得到吗做得到吗(回声X100)。

    至于ppt中说的那几门基于JVM的语言,我大概把玩过一下,没啥大的印象。我还是属于一个比较踏实的人,如果一门语言仅仅是为了让我少写几行代码,我觉得这个语言对我意义不大。毕竟敲代码不是个烦心的事儿,是个乐事儿。我更倾向于灵活性和掌控性。

    至于两门语言谁抄谁的feature,这个争论起来没意义哈。我是先学Java的,后来学C#的时候几乎轻车熟路,我觉得还是C#参考Java的多一些吧,至少开始的时候应该是这样的。

    一门好的语言,不应该让程序员过度的依赖于IDE,不应该让程序员一叶障目不见泰山。应该诱导程序员深入这门语言的内部,让程序员更牢固的掌握这门语言。花花绿绿的外表,也只能看个新鲜而已。C#是啥时候发布的我还不是太清楚。。。不过应该没有比Java晚诞生多久,但是为什么开源项目多是选择Java而非C#?相信项目开发者自有自己的考虑吧。

    当然C#也有自己的优秀之处,当初玩了半年C#,做了个小项目。说实话,那个项目如果用Java做,可能工作量会更大,因为牵扯到很多data binding以及GUI(拖控件)的东西。这方便Java确实不在行。

    总之,在我用来和看来,Java语言不是一门完美的语言,这是肯定的。但是,Java语言是一门足够好的语言。

  43. 老赵
    admin
    链接

    老赵 2010-04-18 17:17:32

    @Popeye Zhong

    等文章吧,没视频……

  44. 老赵
    admin
    链接

    老赵 2010-04-18 17:27:08

    @deepnighttwo

    是啊,C#也没比Java晚多少啦,也就8年。C#开源项目少吗?我觉得很多啊,只是Java更多而已。别人用Java写开源项目多,是别人觉得Java平台好咯,谁说一定是Java语言设计好呀?

    其实我只是在说语言设计本身,您又扯到哪里去了呢?非要证明“总体”来说Java平台比较强……好吧,就算我同意您的看法,但是“语言设计本身”来说Java的确就是糟糕,你咋就非要偏到别处去呢?的确,不同人对于“优秀”的定义会不一样,但是我在讨论时也把自己的定义说清楚了,这不就可以了嘛。

    当然,最关键的地方我觉得还是您以为C#只是让程序员少写几行代码,其实上一篇文章中我已经说的很明白的,就是C#是改变编程思维,真正增加代码质量的语言。我其实想证明的东西(之一)也只是“Java语言从设计上就很麻烦,难以写出How to do的代码”,您同意这个观点,我也就达到目的了。我虽说希望所有人抛弃Java,但是您真觉得Java的缺点可以接受,那么您自然可以继续使用啦。

    总之,从您的说法和例子(比如拖控件)来看,您还是没理解我在讨论什么。唉,既然您已经看过幻灯片了还不清楚,我只能表示遗憾了……可能是因为从幻灯片里看,您可能的确会觉得C#只是少写几行代码吧,等我展开论述一下您就知道了。C#不光是少些代码,是真正思维上的改变,还有一些是Java完全做不到的。

    还有就是啊,C#,CLR都是ECMA标准。C#可以在每个平台上跑,因为有mono

  45. 链接

    Ivony 2010-04-18 17:30:39

    @deepnighttwo

    很少能看到来自Java阵营理性的声音。针对几个我不认同的问题,谈谈自己的见解。若有得罪,望海涵。

    首先选择一门优美的语言,绝对不是说,我们可以少写一些代码,用更少的代码去做更多的事情(这似乎与类库的关系更大)。这关乎到一个语言的表现力的问题,换言之事实上C#的优美之处绝不仅在于“好写”,而是在于“好看”。一个充斥着很多How to do的代码,是不会好看的。就比如说yield语法,如果你去看编译器展开后的结果,不费点脑细胞是弄不明白这里到底想干什么的。对于一个熟练的程序员来说,语法糖所带来的简洁的语法,只要习惯成自然,都不是什么问题。但一大堆How to do的代码,维护起来是毫无美感可言的。

    其次,我不否认您举的OSGi例子是.NET平台现在看起来最大的问题。但事实上C#和.NET可能远比你所想象的要开放,C#和CLI早已作为ECMA的标准。换言之事实上任何组织都可以编写兼容C#的编译器和兼容CLR的运行时。而Mono项目也已经得到第三方厂家的支持。其实就连IDE平台都是开放的,Borland之前就开发过C# Builder和Delphi.NET。但微软的确是过分的强大了,所有的.NET第三方开发组织都不得不面对一个事实就是微软随时可以为.NET Framework增加与他们花了很多人力物力开发出来的组件类似的东西。而就一般而言,还很好用。。。。。。不过我们也能看到微软现在也在很多的与社区合作,公开源代码,姿态在逐步的开放,例如为动态语言实现提供了DLR平台而不是强行推广自己的JScript。

  46. 老赵
    admin
    链接

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

    @Ivony

    不过说起yield,倒真不是个“好看”这方面的问题了。就好比coroutine,还有AsyncEnumerator,这的确是Java语言完全做不到的东西……我举的例子之一就是这个。

  47. 幸存者
    123.120.9.*
    链接

    幸存者 2010-04-18 18:24:36

    @deepnighttwo

    少写几行代码不重要吗?

    有些东西是质的区别,或许现在还不够明显。例如自行车和汽车就是质的区别,可是世界上第一台汽车大概比自行车还要慢得多。

  48. 链接

    xiaotie 2010-04-18 20:05:18

    换一个角度想sun海纳百川,没像ms这样干是sun太弱了。前几天找pdf renderer,竟然找到一个sun的开源项目,下载下来,超级垃圾,一个2页的英文pdf文件打开后看不见一个字 。。。

  49. fu
    77.203.13.*
    链接

    fu 2010-04-18 21:55:30

    scale有多少厂商支持? 语言不在于多有效率多么完美,关键还是得看有多少重量级的厂商支持。 java有oracle,有IBM,scale除了看见google参上一脚,还有谁?

    java本来就是应用于大型项目,java ee才是企业级引用。.net 用于中小型。语言无优劣,只有适用环境的不同。 java有ssh,大型项目构架才是关键。

  50. 老赵
    admin
    链接

    老赵 2010-04-18 23:57:46

    @fu

    您估计还是没看懂Scala是种什么样的语言,那么我说清楚点吧。Scala是种运行在JVM上的语言,可以直接使用Java类库,并可以编写Java类库或框架给Java语言使用。什么ssh,bbt,Java语言可用的都可以直接用于Scala。Orable,IBM支持Java虚拟机,JDK的发展,它们又不是在支持Java语言的发展。

    这就是我推Scala的原因,否则我就直接建议您使用C#了,呵呵。

  51. 链接

    mfjt55 2010-04-19 00:57:04

    难得这些英语我都还看的懂.看完了,支持一下.期待后续.

  52. 链接

    2010-04-19 01:11:26

    那天的演讲,不说其他的。感觉老赵分析问题比较透彻,还是那天的话,语言本身谁都没有错,主要看从什么角度去看了,事物都是具有两面性的,我不是佩服这个话题,学习的是老赵分析问题的能力。

  53. csnx
    123.97.150.*
    链接

    csnx 2010-04-19 01:29:16

    激情澎湃的ppt,势必将引起java与c#之间的腥风血雨

  54. Ivony
    124.193.150.*
    链接

    Ivony 2010-04-19 01:44:34

    其实,从汇编到C#,每一种程序设计语言的诞生一开始都是为了好看吧。如果你能在写程序的一开始把所有细节都考虑清楚,在大脑中构建整个系统,不需要回溯你的代码。怕是用什么语言都是一样的吧。当然世界上不存在这种程序员,也不存在不需要修改的软件,所以这是不切实际的。

    在没有yield的时代,我们会构建一个ArrayList然后返回。这对于大规模的集合或者无限集是不合适的,但总归我们能找到办法去解决。同样的,异步处理也不是非yield不可,想想我们在JavaScript和传统的Windows应用程序也有着很多的经验。局部变量容器+循环释放控制权。

    但随着这些特性的运用,人们开始在这些新的特性上创造出新的思想和理念。这就好比数学,没有乘法的概念,我们仍然可以用加法来模拟,但乘方、指数这些运算和理论,就无法或者很难在单纯的加减运算上发展出来了。

    如果只是为了解决问题,大体上所有的程序设计语言的能力都是差不多的,从汇编到C#。那我们为什么不用汇编语言去写代码呢?

  55. 老赵
    admin
    链接

    老赵 2010-04-19 01:53:07

    @Ivony

    嗯,异步处理自然是不是非yield不可。我的意思是,有了yield和没有yield,在易写易读性,可维护性,代码量方面的差距,比for + if和声明式代码的差距要大得多。所以yield还是个很重要的功能,并非“少写几行代码”这么简单的问题。

  56. GuangXiN
    123.120.18.*
    链接

    GuangXiN 2010-04-19 01:56:09

    发现大量实例没有出现在幻灯片中,估计老赵是用IDE演示的,看来还是得等文字资料出现。

  57. GuangXiN
    123.120.18.*
    链接

    GuangXiN 2010-04-19 01:59:17

    @Ivony

    在.Net平台上M$发言权的确太强大了,subsonic项目当年就是夹缝中生存,LinQ出来之后几乎是灭顶之灾。

    不过凡事都有两面性,正是因为M$的这种一言堂式的强大,才让.Net社区没有出现Java社区那样的严重差异化。事实上在开源社区做事情死亡风险都很高,.Net开源项目常常死于下一代.Net Framework自带功能,而Java平台的开源项目常常死于另一个更受欢迎的Java开源项目。

  58. deepnighttwo
    216.113.168.*
    链接

    deepnighttwo 2010-04-19 02:06:28

    @老赵, @Ivony

    据说mono在别的平台上跑的不咋地。具体不是很清楚,可能距离商用的标准还有点距离吧。如果C#能无缝跑在别的平台上,对别的平台开发来说也是一件好事儿~其实如果当时delphi把跨平台的东西做了,也许delphi现在就是另一番景象了。罢了罢了罢了。。。delphi这事儿不说也罢,delphi如果不挂,C#的爹还不知道谁来当呢。

    两位的意思我懂了一点,按照文中的意思。“C#不是让人少些了几行代码,而是少些了几行代码这个量变,带动了编程思想和程序设计的质变,也就是从how to do进化为what to do”。前段时间被异步编程折腾的不轻。两位大虾能不能给篇介绍yield的文章,我真想读读。

  59. abc
    58.214.113.*
    链接

    abc 2010-04-19 02:37:02

    好东西 希望老赵能多讲一下各种特性的典型应用。

  60. 链接

    陈轶 2010-04-19 02:39:43

    赞同CrazyCode的意见,这slide有点标题党的意思。

    我的最终目的不是为了“让Java程序员使用C#”,而是“让Java程序员使用Scala”。

    这个slide的标题虽然看起来很酷,但和文科生一样不靠谱。这标题就是治学不严谨。这个标题的目的也很明显,故意搞得很偏激,以激起争论。好比写个文章《为什么美国人民傻B中国人民优秀》或者倒过来,不管内容讲什么,这标题不找抽也难。

    既然要讲scala,至少在标题上有个scala。。。个人意见。。。

    既然要心平气和讨论技术,至少标题起得友善点。。。去和人家谈判,开口第一句就算You Fucking Stupid,不管后面什么优惠条件都会马上干起来。

  61. 老赵
    admin
    链接

    老赵 2010-04-19 02:44:58

    @陈轶

    Scala,只是我给Java的解决方案,我完全可以不提Scala,也照样是一次正经的演讲。难道以Scala内容的5%份额,非要在标题上出现,只是为了照顾Java兄弟们的感觉吗?

    我觉得标题一点不偏激,我丝毫不掩饰我对Java语言的厌恶,标题和内容都完全表达了我的看法,没有任何区别。这标题治学不严谨吗?只是不友善而已,但友善和严谨又有什么关系,我的内容有丝毫不严谨的地方吗?如果非要笑嘻嘻地客客气气地提意见才能被接受的话,这在我看来的确还是心胸狭窄的表现了。有谁是谁领导吗?对于问题狠狠批判有啥不可,非要搞那套表面的做什么……

  62. 老赵
    admin
    链接

    老赵 2010-04-19 02:47:03

    @deepnighttwo

    不要据说嘛,mono发展了很多年了,商用无数,官方站上就有很多案例。至于C#语言的优点,我会详细展开谈的,就等我的文章吧。:)

  63. 刀刀
    65.200.157.*
    链接

    刀刀 2010-04-19 02:50:55

    能不能把讲课中涉及的代码也打包发布出来好不?

  64. Wuvist
    220.255.7.*
    链接

    Wuvist 2010-04-19 03:00:15

  65. GreatGhoul
    124.114.234.*
    链接

    GreatGhoul 2010-04-19 03:08:21

    我感觉jython用着也挺亲切的,Java的确缺点太多。

  66. seek
    58.38.99.*
    链接

    seek 2010-04-19 03:29:13

    还有一点必须关注的是以后,以后risc处理器的架构(如arm)的移动应用会大行其道,楼主认为.net平台还有多少生存空间

  67. 链接

    陈轶 2010-04-19 03:30:38

    第一次听到scala这个名字,跑出看了一下:

    在想scala有什么用处。。。如果用成脚本语言的话,以Java的类库设计而言,完全不是Python之类的对手。。。如果是服务器或桌面应用,那么似乎Java也够了。。。所以Scala要成功,必须干掉Java。。。

    但一门语言取代另一种语言并不是易事。。。Scala运行在 JVM上,也就拥有了跨平台。。。它看起来是个未来的可能分支,一个是Java的更高版本,一个是Scala。。。但成败的关键在于它能不能成为一种潮流,也就是是不是有很多厂商看好它,支持它;或者有大牛到处推荐,众多程序员折服。很难说scala能不能成功。

    它对Java源码的不兼容性其实是劣势,基本上老项目不能用它。。。只有新项目才能考虑它。

    新的思想,新的语言总是一波一波的冲击。鹿死谁手,谁也说不准。Ruby还和Python打成一团呢。。。到最后并存的可能性远大于你死我活。

    至于是不是因为一点点特性在不同语言跳来跳去。。。这个,我不是老板,老板说用什么语言,我就用什么语言。。。你C#牛---没错;优秀---同意;好---的确;切换成C#---这个,老板您说了算,您一点头,我马上解散全体项目组,重新招人。。。

    昨天在家在GoogleAppEngine上用Python写东西,好用啊,聚合RSS只有10行代码。。。我马上想,Why Python Rocks while Java/C# Sucks。。。与其C#和Java大战,不如来学Python/Ruby吧。。。那个可以把代码消灭90%。

  68. sxbyl
    58.38.165.*
    链接

    sxbyl 2010-04-19 03:44:25

    题外话,GMail的Web Clips没法用这个博客的RSS Search Results for 'http://blog.zhaojie.me/' No feed was found at the URL you provided.

  69. xiaop
    218.24.162.*
    链接

    xiaop 2010-04-19 03:44:40

    没别的意思就是用手机看你文章的时候,由于分辨率的关系,send my comment 这个按钮会无限的缩小,以至于很难找到的程度。

    其实这本身也无所谓,用心找找还是能找到的,就是有点别扭罢了。

    btw:上次应该不是用的RSS,而是直接通过ucweb访问的,所以会有回复的问题!

  70. 老赵
    admin
    链接

    老赵 2010-04-19 03:58:38

    @陈轶

    第一次听到Scala就是您的不是啦,要关注Java平台的发展。Scala发展很好,如今JVM上最受关注的语言便是Groovy和Scala,都有大量项目和专属会议,现在就在开Scala Tech Days啊,大牛的推动更是不少了,呵呵。这方面现在连我都很关注,Java程序员反而不关心,这多讽刺啊。

    其实老项目也要写新代码,新代码就可以使用Scala。而且,用Scala写个jar包,给Java用也不是什么麻烦事儿。Python是挺好用的,如果您放弃Java转向Jython我也完全赞同。当然,我也支持您说说为什么Python Rocks,但我还是建议您先等我文章写完了,有个参照您可以下手。否则如果您对C#不太了解,写出来也就不专业了,呵呵。

  71. 老赵
    admin
    链接

    老赵 2010-04-19 04:01:18

    @seek: 还有一点必须关注的是以后,以后risc处理器的架构(如arm)的移动应用会大行其道,楼主认为.net平台还有多少生存空间。

    只要C#现在干的活在以后也需要,那么C#还是可以活的好好的啊,呵呵。

  72. fdrex
    58.242.222.*
    链接

    fdrex 2010-04-19 04:14:11

    好多slide看不了……

  73. 老赵
    admin
    链接

    老赵 2010-04-19 04:14:48

    @sxbyl: 题外话,GMail的Web Clips没法用这个博客的RSS Search Results for 'http://blog.zhaojie.me/' No feed was found at the URL you provided.

    为什么会这样呢?

  74. 风枫峰
    111.165.153.*
    链接

    风枫峰 2010-04-19 05:03:34

    录音文件下载下来,说文件已损坏啊! 谁有能往我邮箱发一份吗? email:hfcc8685@gmail.com 谢谢了

  75. 链接

    高歌 2010-04-19 05:10:42

    老赵的PPT够长啊,118页PPT加代码演示可以讲12个小时了

  76. 阿飞
    210.75.7.*
    链接

    阿飞 2010-04-19 05:51:20

    看老赵最近这几篇blog和相应的评论,感慨一下当大家沟通的东西都不在一个水平上的话,真是争论又多又没啥意思啊

  77. 麒麟.NET
    124.42.13.*
    链接

    麒麟.NET 2010-04-19 06:28:53

    老赵的声音跟WebCast不太一样啊,WebCast上很有磁性,现场的声音有点声嘶力竭。。。

  78. 老赵
    admin
    链接

    老赵 2010-04-19 06:34:11

    @麒麟.NET

    感冒,嗓音嘶哑,讲完这两个小时后第二天我就一个字都说不出了,现在还是说不了话。

  79. 链接

    高歌 2010-04-19 07:36:20

    @老赵

    喝水的时候泡点胖大海,有一定效果的

  80. 链接

    麒麟.NET 2010-04-19 07:49:06

    @老赵

    patpat

    btw:没有代码下载吗?

  81. 老赵
    admin
    链接

    老赵 2010-04-19 07:51:59

    @麒麟.NET

    代码等我写好文章吧,写文章时还会继续考量的。

  82. 链接

    麒麟.NET 2010-04-19 08:14:05

    @老赵

    我正在听录音,猜代码。。。

  83. deepnighttwo
    216.113.168.*
    链接

    deepnighttwo 2010-04-19 08:21:04

    @老赵

    求录音~~

    ps:听说此时此刻凤姐正在盛大呢,求真相~~

  84. 老赵
    admin
    链接

    老赵 2010-04-19 11:14:35

    @deepnighttwo

    录音下载链接在文章最后。

    凤姐的确在盛大,不过不在我的部门,我也没见到,呵呵。

  85. tmac
    124.79.175.*
    链接

    tmac 2010-04-19 12:41:08

    想起一个小细节:老赵开讲之前收起了一本书,可见之前还看着书呢,好用功啊~~~ 的确是俺们的楷模。

  86. deepnighttwo
    114.92.152.*
    链接

    deepnighttwo 2010-04-19 13:48:42

    @老赵

    -_-||| 今天路过碧波路的时候不抬头了……

  87. 链接

    cjc1021 2010-04-19 14:24:35

    好强大。学习+围观

  88. Qualle2008
    77.6.5.*
    链接

    Qualle2008 2010-04-19 14:50:22

    相比Scala,我更喜欢Groovy. Scala自称是融合动态语言优雅特性的静态强类型语言,可惜我觉得Scala一点也不优雅,反而很怪异,可能没习惯。

  89. 老赵
    admin
    链接

    老赵 2010-04-19 16:37:28

    @Qualle2008

    这我可以理解,Groovy的确是一门更容易被接受的语言。话说我最近要去采访Groovy的重要贡献者Paul King,也是Groovy in Action的作者,您有什么想问的问题吗?

  90. mcpssx
    59.175.192.*
    链接

    mcpssx 2010-04-20 03:52:55

    Groovy++未来会融入groovy的分支吗?

  91. mcpssx
    59.175.192.*
    链接

    mcpssx 2010-04-20 04:14:58

    微软的东西一贯以易用为目标,缺点就是实现复杂和动不动就推倒重来。

    被微软抛弃和接近抛弃的有 VB6 VFP COM、OLE WinForm MFC J++ J# managed c++ ASP

    被抛弃的数据访问框架就有 DAO RDO ADO OLEDB

    现在什么一会说lingq to sql,一会儿又说什么ADO Entity Framework,不知道在干什么。

    还有什么WCF,WF, C++/CLI,前途如何,都值得怀疑。

    而开源界和java界的java,gcc, php的知识一直是有延续性的。

    跟着微软走,前途颇值得怀疑。虽然他会给你几个“语法糖”,但是谁能架得住它动辄就推翻重来的代价。

  92. 老赵
    admin
    链接

    老赵 2010-04-20 06:15:06

    @mcpssx

    好像微软的技术没有延续性一样,这个问题都讨论过几十遍了,真是令人厌烦啊。很多时候都是微软没抛弃,你自己先嗷嗷地抛弃了,比如最近说到F#时,就有人说C#要被抛弃了——先去了解了解看几篇文章再猜行不?还都是搞技术的呢,太不专业了。

  93. mcpssx
    59.175.192.*
    链接

    mcpssx 2010-04-20 07:06:24

    不知道你们讨论厌烦得出的什么结果?

    难道是微软的延续性很好吗?

    技术的延续性不是说思想,而是说API等等一系列的东西,不能说.NET使用COM的思想,就说COM没有被抛弃。Object Link And Embed这玩意现在.net还能支持吗?

    光一个数据库连接方式,就先后有openClient,DAO,RDO,ADO,OleDB,ADO。net等跟中五花八门的方式,光一个ADO .net又不知道延伸出了LingQ to SQL, Ado Entity等多少种方式。

    赵先生能确信这玩意不会被抛弃吗?

    Borland就是这么“延续”下来完蛋的。

    F#,就有人说C#被抛弃了,那当然不对。不过F#再次表明了微软的风格

    1. 拿ocaml作为借鉴,然后又赛一堆自己的东西,语法不再兼容。
    2. F#,微软能否坚持下去支持,我颇表怀疑。

    j#当年就是这么走过来的,先从java做起,加一点自己的东西,叫j++,然后抛弃了j++的WFC类库,引入了J#. 最后j#完蛋了事。

    当然了,老赵的意思肯定是, F#这次不同了,因为它加入了函数式编程等各种新东西,所以这次微软一定不会抛弃它吧。

    是否如此,我深表怀疑。

  94. mcpssx
    59.175.192.*
    链接

    mcpssx 2010-04-20 07:16:51

    因为微软的技术很有延续性,所以紧跟微软的技术公司比如boland完蛋了。

    而不紧跟的GTK+,Qt似乎生命力更长一点

    一个php用mysql connect,mssql connect就能解决的问题,微软能衍生出七、八代的解决方法来,学习和抛弃浪费了不知道多少程序员的多少时间。

    请大家想想看,当年用PHP的程序员还是那套方法,而微软的已经升级到了ASP .net MVC了,但是微软在web市场上的占有率不是提升了,而是缩小了。

    C#的语法似乎有很多“语法糖”来简化你的开发,减少你的代码,但事实是web开发生产力还不如最开始的asp。

    微软的体系迫使你不是去研究业务和架构,而是去学习他不断变换的开发语言和体系。

  95. 老赵
    admin
    链接

    老赵 2010-04-20 08:09:16

    @mcpssx

    最重要的延续性难道不是思想么?思想的持久才是最有价值的。我倒觉得您遇到的问题正是不重视思想造成的。

    因为新东西有连续性,因此没有什么是会要求花太多东西去学习的,但问题还是每个东西您都了解个表面,觉得就OK了,于是表面一变自然你最痛苦。但是在我看来,这些东西的内在联系很紧密,表面的变化我可以很快掌握,而且它给我生产力带来很大提高。在您眼里,要么“用”要么就是“抛弃”,没有中间状态,就好比您不觉得技术方面是可以相互借鉴的,这在我看来实在就是思路及眼界的大问题了。

    微软的体系让人不去研究业务和架构吗?微软的技术就是希望让人把精力去研究业务和架构,而代码之类的就少写一点吧。包括写出What to do的代码一样,即使让人直接把想法表现出来,用Java写出的代码就是费力且难懂了。一个东西要不变实在太容易,但是现在保持10年前的生产力,这就是一种落后。

    F#从来就没说是要兼容OCaml,你说之前也了解一下F#做出了哪些改进,这点要求不高吧?至于您说的什么Web占有率降低,生产力不如asp,还是那句话,抛论点容易,但可以去找些论据吗?如果你能像我一样多写一点,我很乐意和您探讨。

  96. 程序员
    124.207.121.*
    链接

    程序员 2010-04-20 08:25:46

    老赵?C#是你开发的么?

  97. 老赵
    admin
    链接

    老赵 2010-04-20 08:29:28

    @程序员

    什么意思?我是用C#做开发的。

  98. 程序员
    124.207.121.*
    链接

    程序员 2010-04-20 08:45:15

    那为啥看你的一些文字,就感觉你像是开发C#的呢?

    搞不懂,像你这样的人怎么还停留在语言层面上的针锋相对呢?

    难道选择了C#的人都牛逼,选择了java的人都该死?或者以后就没活路了?你敢保证么?

    你不过是一个开发C#的人,你知道微软或者sun真正怎么考虑的么?你怎么知道以后会怎么滴怎么滴?

    不管你技术多牛逼,我觉得你人品有问题。

  99. mcpssx
    59.175.192.*
    链接

    mcpssx 2010-04-20 08:52:44

    @老赵

    最重要的延续性难道不是思想么?思想的持久才是最有价值的。我倒觉得您遇到的问题还是不重视思想。

    1. 当然不是了,你不是前面也说了吗,lisp早就有了这些思想了。
    2. 很多继承是强以名之。比如说.net继承了com的思想,其实是非常勉强的,.net基本是和jvm一个类型的,难道说jvm也继承了com的思想。
    3. 对程序员来说,思想固然重要,但是技术实现的继承性更重要。比如说c语言,今天叫fopen,隔几天变成了OpenFile,再后天变成了FileOpen,难道不是没事找事吗?

    因为新东西有连续性,因此没有什么是会要求花太多东西去学习的,但问题还是每个东西您都了解个表面,觉得就OK了,于是表面一变自然你最痛苦。但是在我看来,这些东西的内在联系很紧密,表面的变化我可以很快掌握,而且它给我生产力带来很大提高。在您眼里,要么“用”要么就是“抛弃”,没有中间状态,就好比您不觉得技术方面是可以相互借鉴的,这在我看来实在就是思路及眼界的大问题了。

    你很容易掌握跟历史继承一点关系没有。如果是语法变化而已,谁会不容易掌握了?10年后你的C语言代码还可以继续使用,10年后,你的微软代码就是重写。微软的问题就是动不动用革命的手段解决一个改良就可以解决的问题,微软的数据访问框架就是一个典型。导致了,使用微软产品的没有可持续性。而且没有任何证据表明,微软的引进提高了生产力。ASP.NET时代的web作品不要说比PHP了,就是比ASP时代都不如。

    微软的体系让人不去研究业务和架构吗?微软的技术就是希望让人把精力去研究业务和架构,而代码之类的就少写一点吧。包括写出What to do的代码一样,即使让人直接把想法表现出来,用Java写出的代码就是费力且难懂了。一个东西要不变实在太容易,但是现在保持10年前的生产力,这就是一种落后。

    微软的体系研究出了什么架构来了?现在互联网上任何大型可扩展的web架构都没有.net的影子。绝大部分都是用C,PHP出来的。

    F#从来就没说是要兼容OCaml,你说之前也了解一下F#做出了哪些改进,这点要求不高吧?至于您说的什么Web占有率降低,生产力不如asp,还是那句话,抛论点容易,但可以去找些论据吗?如果你能像我一样多写一点,我很乐意和您探讨。

    1. F#还没出名之前我就用过了,还有什么SML.NET. Ocaml本身就是小众语言,用于个人爱好还无所谓,在微软程序员界推F#更是必将失败。
    2. 现实就是明证。如果说asp时代还有动网论坛的话,现在还有什么?似乎动网论坛的开放商现在已经转向php了,而不是生产力更高的asp.net. 基本上dotnetnuke一般人不敢动,扩展和维护与php的cms完全不在一个层次上。生产力,绝对不是几个语法糖,少写几行代码就解决了。如果真是这样,还有大把可以自定义语法糖的语言更高效。
  100. 老赵
    admin
    链接

    老赵 2010-04-20 09:35:21

    @mcpssx

    关于思想方面,我只能说没听懂你拿LISP出来是想说明什么问题。LISP是有思想,思想有延续性的,这毋庸置疑,这不是最重要的么?但是友好的外表表现出来的。微软的技术就是底子没咋变,但是外表是越来越友好了,并且可以发扬更好的思想,这就是生产力的提高。

    新产品用新技术,COM代码现在不能跑了吗?为什么要重写?您动辄说没有任何证据表明微软引进提高了生产力,说ASP.NET还不如ASP,对于这种类似于“Google不如百度”的莫名其妙没有根据的说法,我真的不知道如何去应对。

    微软的技术就是可以让人的关注里放在业务和架构上,有多少架构需要和具体技术相关?php体现出架构来了吗?php流行不是因为这门技术本身有多好,而是有历史原因的,比如入门简单,quick and dirty等等。说技术的话,即便你喜欢动态语言,ruby,python哪个比php差了。但是比项目数量还不是php最多?前面有人说,根据使用人数多少来判断技术好坏本身就是不合理的做法。

    至于您对F#的评价,别的不多说,我现在的看法是,如果一个人没有感觉到F#在异步编程上的优势,这要么是没有用过(或者没用对?但这东西还能用错吗?),或者是睁着眼睛说瞎话。这方面例子我写过许多文章,是不是完全被你忽略了?

    实在不行您就等等吧,时间会告诉你结果如何的。我只怕到时候您还是会说一些类似于“Google不如百度”的莫名其妙没有根据的话。

  101. 老赵
    admin
    链接

    老赵 2010-04-20 09:43:32

    @程序员

    那为啥看你的一些文字,就感觉你像是开发C#的呢?

    因为我一直说C#好话吗?我只是实事求是而已,不会因为我做什么而为它说好话。我是热爱技术的,如果您真正热爱技术会理解我的。

    搞不懂,像你这样的人怎么还停留在语言层面上的针锋相对呢?

    我觉得,您现在要做的是改变一些想法和做法,例如改变“语言层面争锋相对是没有价值的”,还有“看文章要仔细”,嗯,我的看法都已经写过了。

    难道选择了C#的人都牛逼,选择了java的人都该死?或者以后就没活路了?你敢保证么?

    我可没这么说,您的理解很可怕,我只是反应一个侧面而已,您强行把它推而广之就是您不对了。就好比,我现在说“番茄比黄瓜营养好”,您就问我:难道吃番茄的人都长得高,吃黄瓜的就活不长?

    你不过是一个开发C#的人,你知道微软或者sun真正怎么考虑的么?你怎么知道以后会怎么滴怎么滴?

    我只是根据现状进行的判断,这也没有问题吧。至于Java以后成长了,我自然强烈欢迎。

    不管你技术多牛逼,我觉得你人品有问题。

    呵呵,唉。

  102. mcpssx
    59.175.192.*
    链接

    mcpssx 2010-04-20 10:04:10

    @老赵

    关于思想方面,我只能说没听懂你拿LISP出来是想说明什么问题。LISP是有思想,思想有延续性的,这毋庸置疑,这不是最重要的么?但是友好的外表表现出来的。微软的技术就是底子没咋变,但是外表是越来越友好了,并且可以发扬更好的思想,这就是生产力的提高。

    举个例子,比如其实用一个函数mysql_connect能解决的问题,用不着从DAO到ADO Entity来折腾提高生产力。广大微软程序员的生产力都浪费在这种跟着微软学习上去了。

    新产品用新技术,COM代码现在不能跑了吗?为什么要重写?您动辄说没有任何证据表明微软引进提高了生产力,说ASP.NET还不如ASP,对于这种类似于“Google不如百度”的莫名其妙没有根据的说法,我真的不知道如何去应对。

    提高了生产力自然在市场上会有反应的,为了加速开发,自然会有很多公司使用。你列举一下asp和asp.net时代的国内开发的blog,论坛产品的数量和质量就知道了。

    微软的技术就是可以让人的关注里放在业务和架构上,有多少架构需要和具体技术相关?php体现出架构来了吗?php流行不是因为这门技术本身有多好,而是有历史原因的,比如入门简单,quick and dirty等等。

    入门简单就是生产力嘛

    说技术的话,即便你喜欢动态语言,ruby,python哪个比php差了。但是比项目数量还不是php最多?前面有人说,根据使用人数多少来判断技术好坏本身就是不合理的做法。

    单从语法上来说确实可能是如此,问题是php专门针对web架构的,在有关函数和实现上都是有优势的。你看看javaeye使用ror上碰到的问题就知道了

    至于您对F#的评价,别的不多说,我现在的看法是,如果一个人没有感觉到F#在异步编程上的优势,这要么是没有用过(或者没用对?但这东西还能用错吗?),或者是睁着眼睛说瞎话。这方面例子我写过许多文章,是不是完全被你忽略了?

    有优势的语言多了,异步编程?几个程序员要用到这个?如果真有这种需求,不如用php多fork几个采集url。

    实在不行您就等等吧,时间会告诉你结果如何的。我只怕到时候您还是会说一些类似于“Google不如百度”的莫名其妙没有根据的话。

    我啥时候说过google不如百度了?

    1. google也没有使用这个生产力很高的。net吧,据说google限定了四种语言,好像还解释过为什么。语言并不是哪种语法糖好,就用哪种。有时候习惯和积累也是生产力。
    2. 时间也会告诉你结果的。其实过去已经告诉了我们结果了,不说以前了,现在大家应该知道,微软开发手机的windows phone的sdk全部推翻了以前的,WF 4.0又变了。

    微软的程序员恐怕爽呆了?光有思想继承是不够的啊。

  103. 老赵
    admin
    链接

    老赵 2010-04-20 10:15:54

    @mcpssx

    拜托您看一下发评论的帮助,不要总是用一些很可怕的样式,我都给您准备好那么直观的预览了,您难道不觉得看的很不舒服吗?我都帮您改了几遍了。

    其实这也是我们的理念不一样,您懒得学新东西(即便是标准的Markdown标记,呵呵),情愿一遍遍搞出丑陋的东西,认为这是很高的生产力,但事实上对我来说,看上去不直观,不妥当的格式,这就是生产力的低下的表现,因为影响他人阅读,无论是代码还是文字的阅读体验在我看来很重要。

    Windows Phone的SDK并没有推翻,只是给了开发人员更好的选择,开发工具和平台也完全是一脉相承的,都是.NET么。UI方面,Silverlight也相当于给了开发人员一种更好用的内容生成平台,微软在这里让开发人员可以普通PC程序开发到手机开发作出平稳的过渡,我觉得很不错。如果您是一个php开发人员呢?如果公司或产业重心转向手机开发时,您会怎么做呢?

    继续看了您对F#的评价,我越来越认为您是在信口开河,因为F#对于异步编程的优势的确不是其他语言能比拟的,更别说php和fork了,根本不是一类事情,您用这种方式来应对,这讨论还有什么意义呢?所以我也不打算和您多谈了。我只想和专业人士讨论问题,您的做法在我看来实在不够专业。

    嗯,您是没有说过“Google不如百度”,我这么说只是打个比方,因为这句话和您的许多说法一样属于“信口开河”。关于生产力您还是看看我的文章吧,不要臆断我的看法。我很客观的,不会声称语言是生产力唯一的组成部分。您一直在强调语法糖,其实还是没有看过我的文章的表现。这方面我全都谈过的。

    对了,您现在知道我为什么厌烦了吗?很简单:

    1. 信口开河,非黑即白
    2. 不看文章,主观臆断

    这让我反复不断地谈一些谈过的东西,或作一些本不需要的解释……

  104. 加浓炮
    221.220.167.*
    链接

    加浓炮 2010-04-20 12:55:25

    写的太棒了。 我非常喜欢Scala,但是对它的语法一直有些不爽,可能是我个人的爱好问题。不管怎么样,Scala将JVM的能力淋漓尽致的发挥了出来。

  105. 老赵
    admin
    链接

    老赵 2010-04-20 13:36:35

    @加浓炮

    是的,JVM很强大,其实也该有一门强大的语言与它般配了,呵呵。

  106. 躺着读书
    59.40.250.*
    链接

    躺着读书 2010-04-20 14:56:50

    我尝试过groovy 和 scala 和 javafx

    就提点我的意见:他们都有成为java的替代者的可能。但是……一个语言最重要的还是要有公司去推。以前的sun太穷了,根本出不起这个钱。

    groovy 和java的语法语言结合最好,但是问题一大堆。我说的不是语言的语法和设计上的,而是易用性上的。比如说IDE的支持,比如说获取modules的便利性。我用groovy的Eclipse插件来获取groovy的modules一个下午都没成功。我想用groovy去实现稍微复杂点的东西,就是两眼一黑。官方网站更是垃圾,我明明要下载一个modules它居然不告诉我怎么下,非要用他们的方式去联网更新。你只要给我jar包就行了,我自己去弄classpath还不行么?Grails确实不错,但是同样也是因为没有公司去推。文档缺乏,这个是最要命的。就一个springsource始终就是小打小闹,自己和自己玩。不过他的前景很不错,如果有大公司去推,我肯定会转向groovy。

    Scala我觉得不值一学。设计得虽然好,但是和Hashkell一样,有共同的毛病,学术化思想极其严重。几乎重写了java的所有语法,就这样的理想主义我想来就害怕。如果没有公司去推,这样的语言我一辈子我不会去学。我宁愿去多看看Hashkell的书。

    javafx,不成熟,再等3-5年还差不多。不过最近在Eclipse大会上,甲骨文说会大力推广javafx不知道是不是真的。如果甲骨文推哪个语言,其他的jvm平台的新语言一律否决。

    我个人比较推荐的还是比较成熟的脚本语言ruby或者python,不必提rails,就凭ruby能够调用windows的dll,同时能够调用java的jar就很值得一学了。有的时候网上已经有了大量现成的实现了,这个时候还要重复造轮子是最愚蠢的行为。我觉得我需要的只是一种粘合剂而已。而ruby确实很合适。

  107. 老赵
    admin
    链接

    老赵 2010-04-20 15:15:59

    @躺着读书

    呵呵,其实您这样的评论才是我最欢迎的,这些问题的确也是值得讨论的,有机会希望您也可以详谈。

  108. 无恙
    58.19.18.*
    链接

    无恙 2010-04-20 16:06:17

    不错,很好,受你的影响,准备关注一下Scala。

  109. mcpssx
    59.175.192.*
    链接

    mcpssx 2010-04-21 00:47:36

    @老赵

    我用过的语言,相信绝对比你多。基本上你能看到的语言,我都研究过,F#没出来的时候,我就用过ocaml了,你知不知道以前还有个ocaml.cn?还包括什么rebol, tcl,matlab, mathematica, gnu R, 我估计你一个都没看过。

    你什么时候明白为什么作为C语言完全超集的c++并不比C更好,你就能明白我的意思了。

    windows phone 7所谓的更好选择更是笑话,相信你没有看过新闻吧。windows phone 7的sdk跟以前的版本完全不是一回事。已经完全抛弃了原来的框架。

    你很推崇F#,F#的优先方式就是函数式的,可是你在对比C#比java的时候,第一个说的就是不够oo了,比如3.hashcode,我就不明白,为什么3.abs比abs(3)就是一个优点了?F#异步编程很方便,那就请你明确告诉我,你们盛大在哪里用了这个很方便的异步编程了?java,c#程序员在什么时候需要这样异步编程了?

    专业不专业,我看时间说了算吧。

    其实你第一步就应该是先说服盛大,你啥时候能让盛大从java换到C#?我记得盛大还有不少用delphi吧?

  110. 老赵
    admin
    链接

    老赵 2010-04-21 01:17:18

    @mcpssx

    我说过无数遍了,F#不是OCaml。你在F#出来之间用OCaml又能说明什么问题?就像Java和C#源于C++,你说你在Java出现之前就用过C++了……这能证明你熟悉Java还是熟悉C#?

    我为什么要说服盛大从Java换到C#?真的,你能不能看清楚我的文章再发表评论?我是要让Java程序员来用C#吗?但是我已经让来听我演讲的同事们了解C#远胜过Java,这就是我的目的,我的目的达到了。

    至于你说C#和Java程序员不需要异步编程,我根本不想评论,现在哪儿有不进行异步编程的地方,Java在不断追求NIO,Windows平台一直强调IOCP,哪个不是异步编程,呵呵。

    您的逻辑和态度都很可怕,我不想和您继续讨论下去了,我该说的也都说过了。

  111. 123
    125.33.195.*
    链接

    123 2010-04-21 01:22:35

    声音下载有错误..

  112. xiaoetmac
    222.66.14.*
    链接

    xiaoetmac 2010-04-21 01:37:35

    老赵不容易啊,干着费力不讨好的事情,还得接受各种讨伐,支持一下下~

  113. mcpssx
    59.175.192.*
    链接

    mcpssx 2010-04-21 01:43:46

    @老赵

    F#的语法和库是类似ocaml的,比如说List.map之类的。C#和c++差异大得多。

    java的nio和iocp是为了网络服务器实现的,说实话,盛大或者谁会用F#的这个方便的异步编程功能实现之?我深表怀疑。那还不如学学libevent,mina之类更靠谱。

    其实老赵你举得很多例子,在学术上有意义,在中国的实践中根本没有使用机会。如果以后,你能举出几个有实际意义的案例才能说服程序员群体。

  114. 老赵
    admin
    链接

    老赵 2010-04-21 01:49:00

    @老赵

    我当然知道F#是类似OCaml的,但是我一直强调它对于异步编程的支持,这和OCmal无关。mina是类库,F#是语言,不冲突的。例如,进行简单封装就可以用F#调用mina,这样代码既容易写又容易读,也稳定且易于维护……只可惜Java上还没有F#。

    至于您要的例子,我以后会举的啊。我现在其实就是在推广F#,您说的这些我都一定会做的,呵呵。

  115. Xenofex
    116.226.6.*
    链接

    Xenofex 2010-04-21 02:28:15

    我学了Scala之后觉得它是门非常棒的语言,它的几个关键特性都非常有用,最重要的是很好的将函数式引入JVM的世界。看完一些朋友说Scala语法很怪异之类的,我觉得Scala语法非常有特色。Scala作者Martin Odersky写的Programming in Scala这本书里详细解释了语法设计成这样的原因,看完之后我收获不小。即使我不用Scala去写卖钱的程序,这也是值得一读的一本书。

  116. roy_hu
    199.111.222.*
    链接

    roy_hu 2010-04-21 02:43:03

    @mcpssx

    客观的说,F#并不是对OCaml的简单抄袭。我对J#的历史不清楚,但我感觉J#的推出是微软为了挖Java的墙角,本身发展的就不好,好像和Sun公司的官司也有一定的影响,微软以前还有自己的JVM,好像官司以后就不再做了。F#的诞生不一样,她并不是为了抄袭别的什么语言,因为OCaml本身也不是大众化的,抄袭OCaml有什么意思?F#最初和Haskell一样,都是微软研究院的学术产品,只不过后来微软看到了函数式语言的前景才决定将其产品化的。F#针对OCaml已经做了很多语法上和特性上的改进,吸取了其它语言比如Haskell的特性,再加上其与.Net的紧密结合度以及IDE的支持度,我认为她已经是一门相当不错的语言了。

  117. roy_hu
    199.111.222.*
    链接

    roy_hu 2010-04-21 02:49:31

    @mcpssx

    ocaml.cn后来转到babelnova.net,再后来就一夜之间挂了,我现在也联系不上站长code17,你知道内幕么?

  118. mcpssx
    59.175.192.*
    链接

    mcpssx 2010-04-21 03:05:31

    @roy_hu

    1、ocaml.cn应该是站长懒得维护了。

    2、F#其实是有问题的。它虽然不是为了抄袭ocaml,但是毕竟语法类似。而ocaml之类的语法就是很怪异的,在unix程序员中都不流行,何况在微软程序员中?

    微软如果推出一个c系语法的函数式语言,还有点希望。我看推广F#恐怕是困难很大的。

    有个故事,javascript作者当年本来是直接推scheme做为mozila的扩展语言,被老板批评后就创造了javascript,不然恐怕现在javascript也不会这么流行。

  119. roy_hu
    199.111.222.*
    链接

    roy_hu 2010-04-21 03:20:04

    @mcpssx

    仁者见仁,智者见智吧。在我看来,ML/Haskell的独特魅力就在于它们的简洁优美的语法(Haskell比ML是更进一步),要是搞个C系的函数式语言,只怕两边不讨好。

  120. roy_hu
    199.111.222.*
    链接

    roy_hu 2010-04-21 03:23:14

    @mcpssx

    babelnova上面有不少好帖子,站长本人也挺渊博的,那些帖子都找不到了,有点可惜

  121. Snake
    120.37.2.*
    链接

    Snake 2010-04-21 03:26:46

    赵兄: 我把waynebaby的录音用牛顿3放大了下声音,并压缩一下门限,让您老的声音更清晰平稳了,这样听就不费劲,也不怕声音忽大忽小了.

    我把地址扔着上面来,希望对大家有用. http://cid-e80fec83fafc2075.skydrive.live.com/self.aspx/.Public/jeffz-why-java-suck-n-csharp-rocks.zip

  122. 123
    209.107.217.*
    链接

    123 2010-04-21 04:44:27

    @Snake

    为什么就是不能下呢,提示压缩文件错误..

  123. Snake
    120.37.2.*
    链接

    Snake 2010-04-21 05:57:06

    @123

    可以下载的啊.

  124. 链接

    alexliubo 2010-04-21 08:23:56

    录音不能下了。。 老大更新下啊。。。

  125. xLight
    59.108.84.*
    链接

    xLight 2010-04-22 06:58:12

    任何东西都是由寿命的

    在发展的过程中不经意的某些设定,也许几年以后就会导致无法适应新的环境。 但这个时候却已经不可能转身回去了。 慢慢的被其他适应新环境的东西排挤,等待着的只有消亡。

    呵呵,我都不知道我上面说的是什么。 其实我最想说的是:我讨厌JAVA的啰嗦。

  126. Mikeshi
    114.82.103.*
    链接

    Mikeshi 2010-04-22 08:26:01

    靠,边听韦恩卑鄙的录音再看PPT,完全有一种听AV影片的感受,特别想看看女主角亲自示范啊——怎么没有录像啊,下次有机会要去现场录影,然后放淘宝上卖……哇咔咔咔咔

  127. Snake
    120.42.196.*
    链接

    Snake 2010-04-23 12:57:16

    @Mikeshi 哇你太卑鄙了..哈哈!!

  128. 链接

    蛙蛙王子 2010-04-24 13:40:08

    看了下PPT,讲的内容很多,确实得学学c#语言的新特性,不是为了炫耀,而是确实有意义,能用的上。 不知道的话,得手工写很多代码去实现,甚至如果你不知道这些用法,会限制你的思维。

  129. www
    119.123.73.*
    链接

    www 2010-04-29 12:58:59

    java确实是在某些方面参考了c#的优点,但是你能说c#的发展过程中就没有参考过java的“缺点”麽?不正是基于此“缺点”改进过来的麽?如果不是这样的话那java就不会存在了,那应该是c#一开始就占据了先机的啊?一个净是落后充满缺点的事物发展了真么长时间,必然有他的道理。还有就是不喜欢有人在那对某些事物指指点点,牛逼的话你再给我写个语言出来啊?这种人也就是闲的蛋疼!!!就知道马后炮,乱摆!!难道用java的人都傻了吗?这么多不好还有那么多人用?

  130. liulixiang1988
    220.181.61.*
    链接

    liulixiang1988 2010-05-21 14:35:12

    能比较一下scala与jython吗?为何这里选择推荐scala呢?我是小菜鸟,还请多多指教

  131. 老赵
    admin
    链接

    老赵 2010-05-21 15:41:25

    @liulixiang1988

    会谈的。

  132. cooerson
    114.252.187.*
    链接

    cooerson 2010-07-11 05:34:46

    53页的代码是怎么弄出来的我想知道。。。

  133. Jiger
    76.118.106.*
    链接

    Jiger 2010-07-18 22:10:31

    老赵在谈语言的比较。说的其他的,其实我喜欢.net平台的另外一个主要原因是visual studio开发环境比java等的开发环境先进很多。

  134. Jiger
    76.118.106.*
    链接

    Jiger 2010-07-18 22:11:38

    对了老赵有没有比较IDE开发环境的演讲的想法。有点浪费时间是吧,随便说说。

  135. nobody
    123.114.202.*
    链接

    nobody 2010-11-10 16:45:02

    说到语法, Java现在不是C#的对手了, 毕竟C#是从Java脱胎了(这么说MS肯定嘴上不认, 但他心里虚着呢), C#几乎把Java凡是称的上好的全借鉴了去了, 而自从加入了Lambda和Linq, 尤其是前者, 更是如虎添翼了(没 用过Lambda的, 去看看再来说好不好)。 而C#的匿名方法的语法那也是相当彪悍, 匿名方法里可以使用 当前上下文中的局部变量,太强了!

    但说到缺点, .net 类库的设计要比C#语法方面明显多了, 我Java用的不多, 类库不太熟悉, 不好比较, 所以 只说.net 类库, 大家也知道MS对保护代码的知识产权那是相当有意识的, 而且是下意识的, 所以其类库在设计 时的中心思想了就没有“开放”这两个字, 大而全, 这是个优点? 但全永远是相对的, 当你发现.net framework 类库不够用时, 你大概要骂娘了, 他们(MS)没给你留太多的坑让你“插”, MS的字典里没有 O-C-P 的概念, MS对 sealed 关键字情有独钟(以至于写 MVC.net 的大牛们不得不定义了大堆的 xxxxBase 类来Wrap MS的原生类了)。

    说起IDE, 总有人好像很牛XX的让为IDE无关痛痒! IDE就是生产力! 语法不好用? 没关系!IDE帮你生成那些你不愿写的难堪的代码! 类库功能不够全? 没关系! 自己写点,网上扒点凑合凑合OK了! IDE太粗糙?God can NOT help you!(当然我不信God)没办法了

    别跟我说用 plain text editer 也可以写出操作系统来,我已经不信这样的豪言状语了。 而这一句早不知壮烈了 多少好东西了。 我个人都觉得免费的 linux 最终没拼过昂贵的 windows 也是输在了相似的情怀上。 没人愿意花 时间在机器才应该干的苦力活上。

  136. 飞飞大象
    59.148.218.*
    链接

    飞飞大象 2011-08-05 14:18:29

    赵大哥你好,看过你的文章,

  137. 飞飞大象
    59.148.218.*
    链接

    飞飞大象 2011-08-05 14:27:38

    赵大哥你好,看过你的文章,自己很惭愧,毕业到现在工作也3-4年了,一直从事.net的所谓开发工作,水平还停留在初级层次,没有太多体会。自己很迷茫,不自己自己方向在哪,技术这条路怎么走,怎么提升。现在有件事情想请教你。公司有个机会让我参加技术培训,但听闻你对北大青鸟这样的培训机构比较排斥,自己也不懂怎么选择,希望你能给点意见。感觉自己C#语法好些,除此之外就好像没了,想往更高层次发现,了解架构、分层、面向对象实际应用这些东西,其实自己也不知道方向在哪,恳请你能给些方向,推荐相关的培训机构学习。感激不尽。flyelephant@yahoo.cn

  138. guest
    218.19.130.*
    链接

    guest 2011-10-27 09:23:56

    老赵是从北大青鸟出来的 ?

发表回复

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

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

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

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

使用Live Messenger联系我