Hello World
Spiga

挖坟鞭尸:当年Sun公司的白皮书《About Microsoft “Delegates”》

2011-11-08 17:07 by 老赵, 3861 visits
普通文艺二逼的Java

这是一桩当年的Sun公司与Java的旧事,还要追溯到C#还没出现,微软还在搞J++的时代。这篇著名的白皮书便是《About Microsoft “Delegates”》,其中列出了Sun眼中的Delegate,或者说Bound Method Reference这一更广泛概念的多个缺点:

  • 它为语言带来了复杂度。但实际上,这里更多的是“编译器”或是语言“实现者”需要应付的复杂度。对语言的“使用者”来说,尽管C#或Scala比Java语言要复杂不少,但是用起来却更为省事,大大减少了代码编写和理解的复杂度。
  • 它让语言变得不够“面向对象”。在我看来这种为了“面向对象”而“面向对象”可谓本末倒置,“面向对象”是“手段”而不是“目标”。事实上Java近年来的发展,例如静态引入MethodHandle,乃至社区不断诉求却一再延后的Lambda表达式,其实都在为了易用性而做出的妥协。
  • 它的表达能力不够。这点我始终不能理解,因为Bound Method Reference是运行时的概念,表达能力确是语言设计本身所影响的,一个运行时的概念为什么就没法用优美的语法形式表达出来?C# 2.0至3.0的飞跃,让它的表达能力早已远胜Java语言,而且这也与Delegate概念直接相关。
  • 它这不如适配器对象好用。Java语言的设计者们认为,用内部类/匿名类的语法来实现适配器对象虽然麻烦了一些,但也并没有带来什么问题。但是在使用者眼中,Java的语法噪音是出了名的多,直接影响Java语言的表达能力。如图,在C#中早就可以使用“文艺”的Scala方式来写程序,但如果想用相同的理念就只能变成十足的“二逼”了。

当然,白皮书还包含了更详细的讨论。最后,它信誓旦旦地写到:“Bound Method Reference并不是语言发展的正确道路”——至于现状如何就不多说了。我的感觉是:不谈Java语言设计者的水平如何,至少这篇白皮书的作者,在语言设计的能力或品味上几乎落后了Anders Hejlsberg十年。从我之前翻译过的一篇文章来看,Anders一直扮演着指引语言发展方向的作用,这也是为什么C#在这十年的发展能比Java要健康得多的主要原因之一。

这篇文章的信息量并不大。原本我是在写另一篇文章,这些文字只是顺便提起的话题,但是一说却又感觉刹不住车。为了避免偏离话题,于是就把它单独成篇了——您可且看且过,倒是下一篇文章会更有趣一些。

Creative Commons License

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

Add your comment

113 条回复

  1. cttet
    137.132.250.*
    链接

    cttet 2011-11-08 17:57:05

    等下一篇啊~~

  2. marvin
    221.223.42.*
    链接

    marvin 2011-11-08 23:10:46

    要是用过objtive-c,就知道delegate有多重要

    苹果实现了另一种面向对象

  3. Scott
    114.112.44.*
    链接

    Scott 2011-11-09 00:45:57

    期待老赵的下一篇文章!

  4. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-09 01:25:12

    尽管C#或Scala比Java语言要复杂不少,但是用起来却更为省事,大大减少了代码编写和理解的复杂度。

    恰恰相反,事实上,scala语言和C#的程序理解的复杂度是大大高于java的。

    lz举得例子经常都是hello,world之类对比例子,单纯从一个局部看,可能是比java简单,但是从一个项目和总体来看,难度大大增加,原因就是这些语言范式太多,如同C++,范式大大多于C,从局部实现一个函数来看,因为范式多C++比C代码少,但从总体来看,理解C++程序大大难于C。所以,我们可以看到,在开源界,绝大部分著名软件都是C写的,比如memcached,redis,并不是这些作者学不会C++。

    最近有一篇文章叫《Scala很难》,就是一个倡导Scala的人写出的。

    flatMap [B, That] (f: (A) ⇒ Traversable[B])(implicit bf: CanBuildFrom[List[A], B, That]) : That,是不是会让你有想逃的感觉?这是一个初学者每天都会用,一天用20次的方法,很恐怖吧。

    但如果你的团队的技术水平很一般,Scala 也许对你们公司来说并不是一个好的选项。Scala 的难度导致很陡的学习曲线,会遭到原有的程序员的反对,形成不了统一的风格。你需要一个强有力的 CTO 或架构师来强迫这种风格,而不是让他们自己从书中学习。

    同样的问题也存在在F#上,F#,scala就是clr和jvm上的C++,而C#有向他们迈进的趋势。

    Anders一直扮演着指引语言发展方向的作用,这也是为什么C#在这十年的发展能比Java要健康得多的主要原因之一。

    据我看,除了语法之外,发展大大不如java。delegate其实delphi中anders首先引入的,但是delphi的发展最重要的是vcl类库和ide。如果论语法,C++基本上所有都有。

    而c#在类库大大弱于java,java中有apache common类库,gujava类库,在C#中都没有与之能对等的类库。

    C#中大部分著名类库,都是java产品的翻版。

  5. Eric
    14.223.82.*
    链接

    Eric 2011-11-09 01:47:16

    楼上那位真的跟老赵卯上了,这是什么样的基情啊。

  6. 老赵
    admin
    链接

    老赵 2011-11-09 01:52:21

    @mcpssx

    真是神经病,所以你不懂语言设计计么,以为我就是关注语言特性的?Java还易于理解呢,Java易于理解的是每一行代码,但是十行语句放在一起就看不明白是什么意思了,所谓见木不见林,好好理解下什么叫做可读性吧。所以要我说,你一直号称十年经验,在编程本身理解水平上其实也就是个初学者的水平。

    这些都是我解释过无数遍的东西,你从来就看不到,只会不断重复一些老掉牙的说法。当然最简单的就是:微软XXX好有什么用,它的YYY,ZZZ都那么烂。某人为了保持客观说点问题,你就把它无限放大至罪无可恕,而和你意见不同的说法从来就当没有,你甚至不会看看原文评论里的讨论,你断章取义刻意曲解也不是一次两次了。

    你这是什么样的狭隘心态和变态思维啊。

    PS:我最近学到一句话很好玩,送给你。你要有本身就:

    1. 学我写点东西出来。
    2. 跟强势大佬辩论。
    3. 去知乎等地方发点讨论。

    每次我都这么提议你,从来不见你行动,只会在我这里胡说八道算什么本事,难道还不清楚我为什么鄙视你么?

  7. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-09 01:59:07

    @老赵

    我说的正是因为C#语言设计太多,导致不好理解啊。就跟C++一样,C++是C的超集,并不代表他比C大大减少了代码编写和理解的复杂度。

    java是一种工业语言,基本上高手低手写起来都差不多。而C#,scala这些完全风格天上地下,写一个老赵你理解很费劲的java很难,但写一个老赵你理解费劲的scala容易的多。

  8. 老赵
    admin
    链接

    老赵 2011-11-09 02:09:57

    @mcpssx

    实话跟你说吧,要写一个让我理解费劲的Java很容易,按照普通写法就是了。我跟你对于理解费劲的定义不一样,我对“理解简单”的要求是很高的,Java很难做到。不过你估计理解不了,因为你觉得Java代码已经很清晰了,无知儿童快乐多。

  9. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-09 02:11:02

    我举个例子,

    P >: Book, R <: AnyRef还有什么T <% Order[T],谁能告诉我,这是什么玩意?还有什么+t,-t,再加上一堆空白字符,比如说scalatest,

    x1 should be (y1)

    倒是够dsl了,可是,这之间到底是产生了哪些中间变量?是否进行了implict转换?比java更容易理解吗?

    而F#风格就更怪了,语法既有ocaml的,又有.net的,函数名有的是java式小写打头,又有.net的骆驼式大写开头风格,求链表长度有时候是ocaml来的List.length,有时候又是.net framework的a.Length, 真么看真么别扭。

  10. 老赵
    admin
    链接

    老赵 2011-11-09 02:23:14

    @mcpssx

    该说的我都说过了,看不明白(或者你根本没看)的我也不重复了。说你胡扯一点不为过,你让会Pascal或Basic的人看Java代码照样一堆疑惑,这些基本学习都不需要么?至于F#么,有大小写区分这可是优点,当然你不会关注也很正常,你就只会看一眼,觉得不顺心,就开骂了。

    缺少技术人员的风骨说的就是你这种。

  11. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-09 02:40:23

    @老赵

    至于F#么,有大小写区分这可是优点。

    老赵你这就不客观了,F#的问题是混用不同风格,比如C#函数名是第一个字母大写,而java函数名是第一个字母小写,而F#是第一个字母有的大写,有的小写,任何一本讲述代码风格的书,都指出,你可以选用一种,但是不要两种混用。

    你让会Pascal或Basic的人看Java代码照样一堆疑惑,这些基本学习都不需要么?

    java那段代码,我看学过delphi、c的没学过java的不可能看不懂。正如学过java的不可能看不懂C#的for (int i = 0; i < 10; i++)是什么逻辑。

  12. 老赵
    admin
    链接

    老赵 2011-11-09 03:26:12

    @mcpssx

    我对F#的说法不解释,你说的“任何一本讲述代码风格的书”我会不明白么?我都这么说了你都不去找一下想一下原因,你以为我会像你在这么简单的问题上胡说八道嘛?

    你说Scala难懂,就挑Scala在泛型上的增强来说明问题。你说Java肯定能看懂,就举for语句作为例子。果然是你一贯的客观作风啊。

  13. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-09 03:32:12

    @mcpssx

    我对F#的说法不解释,你说的“任何一本讲述代码风格的书”我会不明白么?我都这么说了你都不去找一下想一下原因,你以为我会像你在这么简单的问题上胡说八道嘛?

    原因不就是因为F#从ml来的嘛,反正它有两种风格,看的头昏。

    你说Scala难懂,就挑Scala在泛型上的增强来说明问题。你说Java肯定能看懂,就举for语句作为例子。你果然是客观啊。

    你上面的例子,不就是两个for语句嘛。就是java泛型也容易理解的多。

    再说个消息,据说微软Silverlight 5可能是最后一个版本

    Several of my customer and partner contacts have told me they have heard from their own Microsoft sources over the past couple of weeks that Silverlight 5 is the last version of Silverlight that Microsoft will release. They said they are unsure whether there will be any service packs for it, and they are also not clear on how long Silverlight 5 will be supported by Microsoft.

  14. 老赵
    admin
    链接

    老赵 2011-11-09 03:52:06

    @mcpssx

    滚一边去吧,莫名其妙,真怀疑你眼睛和脑子是怎么长的。那么长时间过去了,怎么能做到一点长进都没有,我都觉得丢脸。别跟我提Silverlight,估计你又只看了标题没看文章内容,跟你说实话,我真后悔到现在还没学Silverlight,反倒是你没学的人就在yy学了这个有多么浪费时间。

    如果你业界分析师的骨头又痒的话,请去StackOverflow,Reddit之类的地方吧,不要只会在我这个码农这里嚷嚷,还真把我这里当作垃圾场了么。

  15. 程序诗人
    192.193.132.*
    链接

    程序诗人 2011-11-09 03:59:20

    老赵又怒了,吵,吵个大西瓜

  16. boxlang
    112.80.181.*
    链接

    boxlang 2011-11-09 04:58:27

    2003年的时候,C# 1.0刚刚推出不久,其最重要的语法特性有4个:delegate、foreach、property、boxing/unboxing,我很喜欢这几个特性,我以为C#的设计者既追求完美同时也是务实的。

    delegate和property刚刚推出来的时候,国内国外都有很多Java程序员攻击这两个语法特性,我看过这篇文章,我还记得微软有人专门反驳了sun的说法,其中举了一个例子: 在C#中,如下的写法:

    class Form {
        Button button;
    
        void OnClick() { }
    
        void Initialize() {
            button.Clicked += new EventHandler(OnClick);
        }
    }
    

    明显要比Java的写法要简洁、直观(具体的原话及不清楚了),Java的代码就不写了,丑陋无比。

    8年之后,想不到又看到这篇文章,鞭尸鞭的痛快!

    To博主,不应该过去情绪化的去对待mcpssx,有些人无法认同你的观点,与其辩论是不会改变他的观点。

  17. 链接

    Gabriel Zhang 2011-11-09 05:52:41

    好长时间没看到老赵有更新,这两篇果然很精彩,等待下一篇。。。

  18. 老赵
    admin
    链接

    老赵 2011-11-09 05:56:12

    @boxlang

    我早就不打算说服@mcpssx或改变他的观点了,我只是十分鄙视他的做事风格,听风就是雨,断章取义,甚至对于一些客观事实不做了解就胡说八道。所以,我现在其实只会情绪化的对待他的观点,而不会跟他进行讨论。

  19. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-09 06:04:59

    java的写法应该是类似这样的,

    public class Applet1 extends Applet implements ActionListener {
        Button button;
    
        public void init() {
            button.addActionListener(this);
        }
    
        public void actionPerformed(ActionEvent e) {
    
        }
    }
    

    其实和C#的也差不多

  20. Eric
    14.223.82.*
    链接

    Eric 2011-11-09 06:13:05

    过了一个早上,果然基情不少,娃哈哈。

    如果是我的话,直接评论禁IP得了。就一个爱看不看的个人技术博客,没必要弄的那么费心。

    当然,同基就另当别论……

  21. Ben
    63.217.87.*
    链接

    Ben 2011-11-09 06:22:28

    请问老赵,有Scala的书推荐吗?谢谢

  22. Wendy
    124.193.215.*
    链接

    Wendy 2011-11-09 06:34:32

    看评论也同样很有趣,虽然我是门外汉。。。。但是,都是通宵不睡觉的么?赞精力。。。

  23. 老赵
    admin
    链接

    老赵 2011-11-09 06:38:57

    @mcpssx

    多漂亮的Hello World啊,其他我就不评论了。之前就写文章讨论过Java这种事件模型的缺点,都不必把它麻烦冗余的地方拎出来说。

    @Eric

    我是有原则的,说过绝对不封人不删评论就完全做到,绝对自由。其实这跟我对待技术问题的态度一样,封人删评论的往往是产业分析师,这也跟他们对待技术问题的态度一样。所以我跟他们还真是就是两种人呢。

    @Ben

    Scala的书其实并不算太多,就找最有名的两本就行了,比如《Programming in Scala》,是Martin Odersky写的。

  24. hellhell
    15.219.153.*
    链接

    hellhell 2011-11-09 06:50:35

    关键还是两个阵营间缺乏交流,我在给一群搞JAVA的人介绍MethodHandle时,我说这个玩意是C#里面的Delegate的复刻版,结果在场每个人都表示完全没有接触过C#。

  25. 老赵
    admin
    链接

    老赵 2011-11-09 09:00:49

    @hellhell

    缺乏交流问题也不大,需要的时候交流就是了,只要别不了解就开始说三道四,甚至不了解就认为自己了解了就行……

  26. 链接

    cwzyj157 2011-11-09 09:56:53

    看老赵的文章也应该有1年多了吧!总是没有回复过!或者在整个网络环境下都没有回复的习惯!看老赵的文章还有太多的地方不懂!以后多多向老赵请教!还希望多多指点!

  27. 链接

    cwzyj157 2011-11-09 09:58:32

    另外想问下子,这网站服务器挂哪 儿了?好像回复时间与北京时间不一样!

  28. 老赵
    admin
    链接

    老赵 2011-11-09 10:21:11

    @cwzyj157

    显然差了8小时嘛,一直懒得调。

  29. kw2009
    24.246.78.*
    链接

    kw2009 2011-11-09 12:30:11

    看了很久,忍不住说两句。

    觉得老赵很有些国外大牌 blogger 的潜质但是太中国特色地浪费时间在无意义的辩解上了。本来有希望成为 John Papa 之流的...

    要是你是为了增加点击率广告收入,另当别论,那是我 out 了...

    这种争辩适可而止,重要的是立论。

    花些时间在不同的话题也比在一个话题上和人来来回回争吵有意义 -- 而且有了口不择言的苗头。

    而且应该考虑把自己的文章翻成英语,看看国外同行的反映 -- 多半会得到些有意义的反馈。

    另:

    Silverlight 确实可能在 5 之后不再出下一版本了。但那又怎样。

    目前来看,连 WPF 本身在 Win 8 RT 里面也貌似成了二等公民,但那又怎样 -- 他们的精髓正是 Win8 RT 的重要组成部分。作为 RT 有了 app store 还要 click-once 和 SL 的 easy-to-deploy 么?

    与其和人争辩 SL vs HTML 5 孰优孰劣,不如分析各自的特点,和帮助只了解其中一方面的人同时了解另一方面。

  30. 老赵
    admin
    链接

    老赵 2011-11-09 12:43:28

    @kw2009

    多谢提醒,下次我尽量忍住不跟他纠缠啊——还有是已经自觉地口不择言了,不是苗头……

  31. boxlang
    112.80.181.*
    链接

    boxlang 2011-11-09 14:18:06

    老赵在评论JAVA系列的文章中,提出了一个我很赞同的观点:语言可以争论好坏。“语言不重要,重要的是算法和思想”,这种类似的说法在国内很有市场,实事求是的说,我以前也有这种想法。

    为什么这种说法会很容易被人接受?不敢代表别人,对于我来说,我想原因在于学习了几种编程范式高度类似的语言后,感觉世界上的编程语言不过如此。

    数据结构无非是数组、链表、结构体几种类型的组合,控制流无非是顺序、选择、循环,各种语言的差别仅仅在于关键字不同而已。在编程的学习中小有所成,暗暗滋生了些许自负骄傲的情绪。

    上研究生时,学校请了一个法国人开了一门scheme的选修课,正是抱着“语言不重要”的思想,让我和函数式编程语言擦肩而过。现在想想,当初的自大是盲目的,2008年之后,erlang在国内的异军突起,让我渐渐接触到了各种FP,慢慢的自己思想得到了转变。

    老赵介绍的C#中的await语言特性,就需要用到函数式编程语言的continuation概念,await这个应用让我真正的从心底里佩服当初发明continuation的人。我基本都看过老赵的帖子了。我觉得最能体现老赵水平的就是,他做的那个在javascript中模拟await的东西。从老赵的博客中学到不少东西,希望老赵能够继续奉献精品。

  32. boxlang
    112.80.181.*
    链接

    boxlang 2011-11-09 14:49:54

    @mcpssx

    老赵说你写的那段例子是hello world级别的,不知你是否服气?如果不服气,请你用Java实现如下功能的C#程序:

    class Form {
        Button button1;
        Button button2;
        shared data;
    
        void Handler1()
        {
            access shared data;
        }
    
        void Handler2()
        {
            access shared data;
        }
    
        void Initialize()
        {
            button1.Clicked += new EventHandler(Handler1);
            button2.Clicked += new EventHandler(Handler1);
        }
    }
    

    个人认为:

    1. C#使用delegate极大的提高了代码的可读性。
    2. Java的匿名类看起来很晕人,无端的多了两层缩进,绕了好大的弯。

    不知道你是否承认以上两点,附录中提供了JAVA的解法,不知是否能够更好的解法

    附录:使用匿名类解决的JAVA代码

    class Form {
        Button button1;
        Button button2;
        access shared data; 
    
        void Initialize()
        {
            button1.addListener(new MouseLisntern() {
                void handleEvent(Event event)
                {
                  access shared data;
                }
            });
    
            button2.addListener(new MouseLisntern() {
                void handleEvent(Event event)
                {
                  access shared data;
                }
            });
        }
    }
    

    附录:hello world级别的JAVA例子

    class Applet1 extends Applet implements ActionListener {
        Button button;
    
        public void init() 
        {
          button.addActionListener(this);
        }
    
        public void actionPerformed(ActionEvent e) 
        {
    
        }
    }
    
  33. 晓岩
    221.204.184.*
    链接

    晓岩 2011-11-09 14:54:03

    老赵,问一下啊 有没有现成的MVP框架用于asp.net 4的???类似wscf的,相对于MVC我比较钟情MVP

  34. kraft
    218.82.78.*
    链接

    kraft 2011-11-09 16:18:08

    哈,无端的浪费别人时间就是谋财害命,@mcpssx 还是歇歇吧,不要学孔乙己的做派

  35. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-10 00:30:00

    @boxlang

    个人认为:1. C#使用delegate极大的提高了代码的可读性。2. Java的匿名类看起来很晕人,无端的多了两层缩进,绕了好大的弯。 不知道你是否承认以上两点,附录中提供了JAVA的解法,不知是否能够更好的解法

    匿名类比delegate就是多一行而已,你感觉很晕,node.js的异步函数嵌套岂不更晕。这完全是个写法问题。

    MouseListenr button1mouse = new MouseListener() {
        void handleEvent(Event event)
        {
            access shared data;
        }
    }
    
    button1.addListener(button1mouse);
    

    老赵说你写的那段例子是hello world级别的,不知你是否服气?如果不服气,请你用Java实现如下功能的C#程序

    事实上非hello,world级别的你根本看不到以上代码,难道你经常用C#手写gui代码?经常去看vs生成的new EventLister(click)?事实上,你用netbeans设计器,自动生成的mouselistener这段你基本看不到。

    而且,事实上,用.net,java开发桌面软件的人很少,这点根本意义不大,老赵在盛大的项目麦库的客户端就是用delphi写的。

    从软件开发来看,其实语法特性并不是重要因素。tcl/tk更加简明,

    一句话,包括所有

    button .first -text first -disabledforeground red -command {puts “hello,world”}
    

    那你就因此选择tcl了?

  36. 老赵
    admin
    链接

    老赵 2011-11-10 02:52:33

    @mcpssx

    我看懂了,原来你有十年经验,但只有在些GUI程序时才用事件啊?你以为Node.js的人很喜欢嵌套?用JavaScript的人能够使用各种办法简化编程模型,最后基本都能做的很漂亮,这就是语言的威力。

    你那一句话TCK/TK不就是个DSL嘛,找个能力强点的语言就能随随便便搞出来。说真的,你越说越显得你对这方面理解还处在初级阶段。再加上你痛恨微软,无论事实如何,说到最后总能操起流氓逻辑“再好又怎么样,反正没人用”,所以永远谈不到一块儿去。

    所以我说你没技术风骨。估计我该锻炼看到你就当放屁的本事了,我发现我没本事对付流氓的。

  37. kw2009
    24.246.78.*
    链接

    kw2009 2011-11-10 03:07:17

    可能会有点跑题。

    关于编程语言的讨论很多。

    我觉得影响我最大的应该是 Anders Hejlsberg 那次 keynotes 的一句话:写 code 最好告诉计算机 what to do, 而不是 how to do it。

    听到这句话后,我经常 review 自己的 code 有没有很唠叨地告诉计算机 how to do it,还是简明扼要地表现出 what to do。

    那么评价一门语言,也许也可以从这方面出发,看看这门语言能否让你轻松地表达你的意图,而无须告诉他太多的实现细节(这个说法不很严谨,but u know wut i mean here)。显然这要有上下文,e.g., 你的意图是控制硬件还是 LOB 会决定该选哪种语言。

    比如同样写一个 LOB app, c# dev 会觉得 vb.net 简直是啰里啰唆,.Where(function(o) o.xxx) 简直匪夷所思;vb.net dev 看 c# 也非常难受。但对 compiler 来说,你用 vb 还是 c# 没有本质区别。

    从某种角度来说,这些语言好比各个族裔的家常菜。争论中餐好吃还是西餐好吃是没有意义的,如果能让你不饿,健康,就都是好的食品;而 taste,就因人而异了。你可以觉得中餐好吃,但也应该理解别人觉得西餐好吃,这和成长背景有关。如果朋友喜欢吃西餐,你会的话,就不妨做西餐给大家吃。同样写 code 也要考虑同组人员的水平和 taste,来决定用什么语言,如何写,refactoring 到什么地步 ---- 很多时候用了工具后 refactoring 的结果逻辑是一样的,但对 human (自己和 teammate) 的可读性是不同的。

    don't get me wrong - 我很欣赏老赵对 c# 和 java 的分析,而且希望看到更多更好的文章。只是觉得有时候语言的“简洁/优美”有一定的主观因素,受个人背景,团队水平,项目类型,等等等等影响,也许这也是为什么每次在这个话题上有那么争吵的原因吧。

  38. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-10 03:47:45

    我看懂了,原来你有十年经验,但只有在些GUI程序时才用事件啊?

    哦?你写了个C#事件驱动的服务器?

    你以为Node.js的人很喜欢嵌套?用JavaScript的人能够使用各种办法简化编程模型,最后基本都能做的很漂亮,这就是语言的威力。

    这么威力的语言在.net平台上还没有一个很好的实现,以至于要用ikvm去运行rhino。

    所以微软新的metro gui模型用js和C++就可以了,不需要依赖.net。

    你那一句话TCK/TK不就是个DSL嘛,找个能力强点的语言就能随随便便搞出来。说真的,你越说越显得你对这方面理解还处在初级阶段。

    那不重要,事实.net开发客户端还处在初级阶段,目前看远远不如java。盛大麦库是用delphi。

  39. 老赵
    admin
    链接

    老赵 2011-11-10 04:15:33

    @mcpssx

    我都把你那些东拉西扯流氓逻辑写得清清楚楚明明白白了,你还是头也不回地我行我素就当什么都没发生啊,真是太有意思了。

    刚看到一篇文章:辨别毒蘑菇,民间传说不可信,跟主题没关系,只是转载其中一句话,颇有戚戚然:

    这种凭空捏造的东西驳起来颇有“浑身都是空门,不知何从下手”的无力感。

    你说的几乎每句话都是问题,但一句句应对实在太浪费时间,所以就随你去吧,爱怎么说都行。还是你轻松,反正空话和猜测都是不需要验证的。

  40. 老赵
    admin
    链接

    老赵 2011-11-10 04:19:58

    @kw2009

    基本同意你的看法,所以我写文章都是尽可能摒弃主管的感觉,不用感觉去论证,而是举出充分的技术方面的实例,不用推测来证明问题,更不会用非技术的东西来讨论技术,否则就变著名产业分析师了。

    说不出子丑寅卯的感觉不叫技术判断,那叫爱情。

  41. kw2009
    24.246.78.*
    链接

    kw2009 2011-11-10 04:37:50

    @老赵

    赫赫,我也就是随便感慨一下 ---- 从 .net beta 1 写了 9 年 c# 换了个工作开始用 vb.net;对 SL/XAML/MVVM 比较了解后为了支持 tablet/mobile 开始重新学习 javascript / jquery... 很多时候完美的技术实现抵不过对商业和市场的妥协... 更得兼顾 teammate 的技术背景... 玩味语言对一般人是奢侈品...

  42. 老赵
    admin
    链接

    老赵 2011-11-10 05:04:01

    @kw2009

    我就喜欢搞纯粹的技术啊,不优雅不舒服斯基,也从来没觉得哪个技术浪费了我的时间,无论做事情找工作都很有帮助。

  43. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-10 09:23:04

    按理说麦库客户端要在多个平台运行,这个玩意就应该是.net的最好实例,根据老赵同志过去文章推崇的组合,应该是这样,windows客户端用.net windows版,android用monoandroid,iphone客户端用monotouch。根据老赵的说法,都非常成熟,开发效率和运行效率非常高,

    真正是可重用的至高境界了。

    不过看来麦库实现并非如此,windows上还用delphi,一个目前主流还停留在多年前的delphi7上的工具,其中缘由耐人寻味,看来delegate虽好,mono如何成熟,看来麦库并不买账。如果能公布一下项目组内部选型的考虑,应该对大家有所裨益。又或者盛大内部从来不讨论这些问题?

  44. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-10 09:41:25

    正如lz一开始指出的,j++的时代,又是一个微软不断变换技术的典型,估计lz没用过,我是用过的。

    其实j++要引入微软的界面特性,根本不用到处改语言。最好的例子就是IBM的SWT,用jni包装windows api就行了嘛。

    结果现在IBM的Eclipse的RCP大行其道,ibm的notes就是用swt技术构造的。

    相反,微软的.net除了delegate了一把,微软自己都没看到做一个能够与ibm的notes,symphoney相比的大型客户端软件。

    这就是微软的技术流的特点,狗熊掰玉米。

    最近,我看到最可笑的就是cnblogs一群人说silverlight完蛋了不要紧xaml是技术继承,这简直就是P话,就好像说xml存在能保护你java技术学习的积累一样。

  45. Eric
    113.69.134.*
    链接

    Eric 2011-11-10 11:21:33

    从Reader手贱点了进来,实在忍不住吐槽:

    原来Swing没有封装win32的api,是凭空捏造出另一个操作系统出来的;

    原来Eclipse流行时因为没有用上委托,而是用上了繁琐的内部类/匿名类;

    原来.net不流行是因为用上了委托而且没有封装win32;

    原来silverlight不流行是因为用上了.net;

    原来flash流行是因为人们几年前已经预知到未来silverlight会用上.net;

    原来面向普通用户的桌面软件很少用.net写,所以.net客户端处在初级阶段;

    原来面向普通用户的桌面软件也很少用java写,所以Java客户端如日中天;

    原来微软比苹果穷,是因为mcpssx大神把企业市场王牌应用之一Exchange魔术般变走了!!!!!

  46. 老赵
    admin
    链接

    老赵 2011-11-10 11:53:59

    @mcpssx

    一句话点评:少扯蛋少耍流氓会死吗?每句话都是槽点就让人无力吐槽了。你觉得cnblogs人的可笑,我还觉得你文章都没读明白,更何况什么都不做,就开始yy着为他们操心看上去更可笑。话说最近CCAV也在努力渲染欧洲金融危机呢,其实人家人民群众都过的好好的,AV也就是能糊弄糊弄不明真相的群众而已。

  47. mcpssx
    183.94.1.*
    链接

    mcpssx 2011-11-10 12:29:54

    @eric

    原来面向普通用户的桌面软件很少用.net写,所以.net客户端处在初级阶段; 原来面向普通用户的桌面软件也很少用java写,所以Java客户端如日中天; 原来微软比苹果穷,是因为mcpssx大神把企业市场王牌应用之一Exchange魔术般变走了!!!!!

    感叹号虽多,可是看来你根本就搞不清楚这几个产品。

    我说的是lotus notes,是客户端,ibm用eclipse rcp实现的,对应的是outlook。 exchange是服务器端,ibm对应exchange的是domino。

    对了,这么一说我又想起来了,永中office, thinkfree office都是用java实现的,

    wps office的界面使用delphi实现的,

    而.net实现的office一样也没有。

  48. Eric
    113.69.134.*
    链接

    Eric 2011-11-10 13:12:29

    @mcpssx

    大神呀,虽然我这种没有十年经验的码农只能蹲小公司,没真正看过Notes和Exchange到底长什么样子,但也知道人家卖的都是打包的解决方案啊!

    就算我错了,单论桌面客户端好了,这是你的原话:

    微软自己都没看到做一个能够与ibm的notes,symphoney相比的大型客户端软件。

    拜托看一下办公市场的王者是谁,企业应用部门贡献了多少利润给微软。

    再拜托一下Notes卖不卖的出去跟swt有个毛关系呢,Lotus没被IBM收购前就已经是协作市场的领头羊了。根据维基,IBM收购Lotus是在Notes发布的6年后,而Eclipse的推出是在收购Lotus的6年后。哦,那我按你的思维是不是可以推测出,微软的Exchange能后来居上(好吧,至少居平),正是因为采用了eclipse rcp,才让微软有机会???????

    这次我用很多问号了:)

    对了,我吐槽了很多呀,为什么不一一反驳呢。

    最后再次吐槽:原来码农转型产业分析师并不难……

  49. Eric
    113.69.134.*
    链接

    Eric 2011-11-10 13:14:59

    @mcpssx

    忘了说了,亲身跟你过招才能深深的体会到大神您的强大呀!!!!!

    这次我又用了很多感叹号了:)

  50. mcpssx
    183.94.1.*
    链接

    mcpssx 2011-11-10 13:38:17

    @Eric

    拜托看一下办公市场的王者是谁,企业应用部门贡献了多少利润给微软。

    那是另一个问题,微软office是用C写的,现在不知道是否使用了C++,但是显然不是MFC。微软不用MFC又推出了另一个问题,一贯推些自己不用的技术,所以他不断抛弃毫无负担

    再拜托一下Notes卖不卖的出去跟swt有个毛关系呢,Lotus没被IBM收购前就已经是协作市场的领头羊了。根据维基,IBM收购Lotus是在Notes发布的6年后,而Eclipse的推出是在收购Lotus的6年后。哦,那我按你的思维是不是可以推测出,微软的Exchange能后来居上(好吧,至少居平),正是因为采用了eclipse rcp,才让微软有机会???????

    第一,我说的是目前java写的客户端程序大于.net, 重要的是ibm确实在用java,而微软基本没用,所以微软不断的抛弃他的旧技术,比如说mfc啥的,假如office, msn是用mfc写的,微软就不会是这个态度。

    第二,微软成功那也恰好说明C++写客户端好,我的观点本来就很明确,客户端C++、delphi最好,我一开始就说了,比较java,.net写客户端delegate哪个方便,毫无意义,就写个hello,world看谁好,有意义吗?

    反正,老赵所在的盛大麦库用的是delphi

    对了,我吐槽了很多呀,为什么不一一反驳呢。

    因为你其他的吐槽从技术上讲很可笑。

    比如我说的是“其实j++要引入微软的界面特性,根本不用到处改语言。最好的例子就是IBM的SWT,用jni包装windows api就行了嘛。”

    你说“原来Swing没有封装win32的api,是凭空捏造出另一个操作系统出来的”。swing的界面是自己画的,所以跟微软风格不同,我说的是微软要保持微软的界面特性,完全可以用swt方式包装windows本地控件。

  51. kw2009
    68.179.35.*
    链接

    kw2009 2011-11-10 13:54:49

    @老赵: 我就喜欢搞纯粹的技术啊,不优雅不舒服斯基,也从来没觉得哪个技术浪费了我的时间,无论做事情找工作都很有帮助。

    That's why we envy you man... ;-)

  52. 老赵
    admin
    链接

    老赵 2011-11-10 15:36:12

    @mcpssx

    看你说别人可笑我都快笑出来了,原来百步还真可以笑五十步的啊。我就不吐你槽了,理由跟你的差不多,都不知道你哪来的信心猜来猜去的,难道是传说中十年经验所带来的优越感嘛。

  53. 冷冷
    118.186.201.*
    链接

    冷冷 2011-11-10 15:41:40

    @mcpssx

    您太极拳打的真好……

  54. Eric
    14.223.76.*
    链接

    Eric 2011-11-11 01:41:50

    @mcpssx

    微软office是用C写的,现在不知道是否使用了C++

    上帝都笑了,一行源码都看不见就敢说office是用c写的,这得需要什么样的大无畏精神啊。虽然是瞎猜,但这样的大型桌面软件瞎猜c++岂不是更靠谱,你说是不是呢,产业分析师?

    我说的是目前java写的客户端程序大于.net, 重要的是ibm确实在用java,而微软基本没用

    高手用一句话就能达到选择性失明的至高境界:1、用一个“重要的”但风马牛不相及的观点完美地无视了我的质疑,可怜我自认Notes那段写得多好呀,虚实结合,结果就这样被无视了。2、盯着微软不用N年前的MFC写Office,无视微软还在用10年前的.Net写产品。

    ……一贯推些自己不用的技术,所以他不断抛弃毫无负担……而微软基本没用,所以微软不断的抛弃他的旧技术,比如说mfc啥的,假如office, msn是用mfc写的,微软就不会是这个态度

    坊间说,微软自己喜欢用ATL,WTL就是微软工程师整理出来的。你有人家的实力一样可以用ATL或者纯win32。MFC历史包袱重得能压死人了,人家肯给你继续维护更新已经对得起党对得起国家。不过微软因为“一贯推些自己不用的技术”所以“不断的抛弃他的旧技术”确属事实,考虑到大神向来睁眼说瞎话的风格,例证我来帮你做好了:GDI和GDI+被抛弃了,因为微软从win95开始就用Google的skia;webform被抛弃了,因为微软用的是大神最喜欢的php(那些aspx结尾的网址只是掩人耳目),因此mvc也快被抛弃了;win8之后wpf也要被抛弃了,其实vs2010由wpf开发只是谣传,真正用的是win8的ui引擎Metro;Metro是微软唯一自己也在用的技术,但寿命也长不了,因为win8平板连盖茨自己都不用!

    微软成功那也恰好说明C++写客户端好

    佩服,刚才明明还在说大行其道的rcp技术造就了IBM的客户端甩开微软几条街,发现原来是自己分不清现实世界跟意淫世界后,观点变得比变色龙还快。不过按你的思维不是应该得出这样的结论吗:一堆Java的Office,都玩不过一个C++的Office,不玩委托的Java跟玩委托的.Net一样是一坨屎。咦,不是说c写的吗?

    客户端C++、delphi最好,比较java,.net写客户端delegate哪个方便,毫无意义,就写个hello,world看谁好,有意义吗

    反正,老赵所在的盛大麦库用的是delphi

    因为盛大是陈天桥开的,不是老赵开的。再说,客户端跟委托有个毛关系,麦库用什么语言开发跟委托有个毛关系,实际上委托跟你全部所说的都只有毛的关系。不过跟你这种逻辑帝说了也是白说。说点直白的吧,php5.3加入了匿名函数,c++11加入了lambda和泛型functor,Lua、js、ruby、python等函数一阶性的动态语言就不说了(不要以为我很牛逼会这么多语言,其实就是在网上粗略的看些资料,略懂皮毛就出来显摆罢了。是的,这不是你的专利)。这说明了什么?说明了大家都跟微软一样低水平,跟老赵一样无聊。

    比如我说的是“其实j++要引入微软的界面特性,根本不用到处改语言。最好的例子就是IBM的SWT,用jni包装windows api就行了嘛。”

    你说“原来Swing没有封装win32的api,是凭空捏造出另一个操作系统出来的;”

    swing的界面是自己画的,所以跟微软风格不同,我说的是微软要保持微软的界面特性,完全可以用swt方式包装windows本地控件。

    逻辑混乱的至高境界。这个真的吐槽无力了,真想把头撞墙。保持微软的界面特性 => jni包装windows api == swt方式包装windows本地控件,大神的跳跃式思维我等小辈一万年也追不上了。不过还好,原来天底下不是只有SWT一家封装原生API,我还以为Swing和.Net都不需调用原生API呢,那得多恐怖啊。我虽笨但比较好学,请问封装,啊不,“包装”原生API跟SWT方式封装,啊不,“包装”本地控件是如何划上等号的?请问SWT方式的封装,啊不,“包装”具体牛叉在那里?J++或者.Net的封装,啊不,“包装”跟SWT的“包装”什么不同?这个不同又如何导致RCP大行其道,.Net远远不如呢?

    ------------------无聊的分割线-------------------------

    什么都只懂点皮毛,然后意淫、意淫再意淫就真以为能“叮”一声的变成技术高手+产业分析师了。唉,我也堕落了,为了一个傻逼,写这臭长的垃圾污染人家的博客。给你一个建议,要是对一个二流大学毕业、非对口专业、只工作了两年的码农都玩不过,来来去去就“回避、扯开话题、偷换概念”这3个老套路,就别老想着跑到人家的博客要给博主洗脑了,洗洗睡吧。不服的话欢迎至信nzzds(at)hotmail.com交流,别担心,我不是微软粉丝,我真正的邮箱是Gmail的,这个hotmail的一直荒废,随便你怎么搞都没所谓,让你扯出100个话题我都一一回复,尤其欢迎一天轰炸100封垃圾色情邮件。反正别再污染人家的博客就行了,你不要脸我要。

  55. yiway
    121.63.35.*
    链接

    yiway 2011-11-11 02:26:55

    老赵好久没写文章了...啥时候能回到一天一篇的时代?

  56. 老赵
    admin
    链接

    老赵 2011-11-11 05:36:24

    @yiway

    现在我玩心大,所以没那么勤快了……

  57. mcpssx
    183.94.1.*
    链接

    mcpssx 2011-11-11 13:19:03

    @eric

    上帝都笑了,一行源码都看不见就敢说office是用c写的,这得需要什么样的大无畏精神啊。虽然是瞎猜,但这样的大型桌面软件瞎猜c++岂不是更靠谱,你说是不是呢,产业分析师?

    看来是你太年轻,微软office开发组的一位写过一本著名的书,大概叫《编程精粹-微软编写优质无错C程序的秘诀》,我建议你去看看就知道了。

    2、盯着微软不用N年前的MFC写Office,无视微软还在用10年前的.Net写产品。

    1. 微软mfc 1.0出来至少在1994年之前,应该还是16位的,不知道为什么当时不用?
    2. 微软用.net写了什么可以和notes规模相比的大型产品?

    坊间说,微软自己喜欢用ATL,WTL就是微软工程师整理出来的

    你又提醒了我,atl是微软又一次抛弃技术的例子

    1. atl是用来写com的,代替不了mfc
    2. com技术已经不发展了,atl自然也就没有意义了。
    3. atl里面又引入了一大堆集合类,string类,与mfc不兼容。为了实现arraylist,map,微软前前后后有七八种不同框架的写法。
    4. wtl是微软工程师个人作品,官方明确表示不支持

    你有人家的实力一样可以用ATL或者纯win32。

    我高度怀疑现在大部分.net程序员没有这样的实力,c++都搞不懂,而atl又是到处都是模板,还有微软独有的宏,比如说novirtualtable。恐怕看懂都有问题

    MFC历史包袱重得能压死人了,人家肯给你继续维护更新已经对得起党对得起国家。

    建议你去看看linux桌面,一般流行的你看到大概是的kde或则gnome,前者是用qt开发的,后者是用gtk+的,qt和gtk+都是与mfc同时代的框架,人家不但维护而且在不断发展。

    我又想起来了,koffice是用qt开发的,gnome office是用gtk+开发的,而mfc呢?微软用它开发了什么?

    至于说你说的什么java的疑问,据我看你是完全没用过j++,先搞清楚微软搞wfc是干什么的,再来理解我的话。

  58. Eric
    113.69.134.*
    链接

    Eric 2011-11-11 14:33:48

    @mcpssx

    你不会中文看不懂最后一段,还是脑残至连邮件也不会发?

  59. lovejjhao
    121.28.25.*
    链接

    lovejjhao 2011-11-12 04:32:45

    我想问下$await(Jscex.Async.sleep(4000));能不能用于jquery中的$.each中呀?我这边用着在火狐里报异常

  60. 无敌宇宙大将军
    61.187.98.*
    链接

    无敌宇宙大将军 2011-11-12 04:48:59

    老赵在微博和人辩论得不爽,跑到自己的一亩三分地上黑Java,真男人、真英雄也~

  61. haohaolee
    116.207.159.*
    链接

    haohaolee 2011-11-12 07:32:59

    看到现在乐死我了,真是无知者无畏。 吐槽无力啊,到处都是槽点

  62. 老赵
    admin
    链接

    老赵 2011-11-12 14:10:04

    @无敌宇宙大将军

    要搞清楚先后顺序,我开始黑Java的时候还没有新浪微博呢,说不定连Twitter都刚出来。

  63. 老赵
    admin
    链接

    老赵 2011-11-12 14:12:05

    @Eric

    你让他发邮件他还怎么秀,没看到他老喜欢说“说明你还太年轻”,“估计你没用过”,然后说一堆和问题无关的东西,或者转移话题东拉西扯之类的,你以为他真有那么愚蠢啊。其实就是为了秀老呗,从这方面来讲他的确很成功,但顺便也把其他东西秀出来了……

  64. 老赵
    admin
    链接

    老赵 2011-11-12 14:13:00

    @lovejjhao

    你是怎么用的啊?$await是用在async方法里的,不是直接用在普通的方法里的。

  65. Ricepig
    221.223.45.*
    链接

    Ricepig 2011-11-12 15:54:11

    楼上某位大神,我真是忍不住要吐槽一下了。。。

    AutoCAD最新版,Visual Studio 2010...两个都被选择性无视了...

    另外,自己公司发明的语言,并不是“一定”要用在自己“所有”的产品里阿。

    再另外,居然说java是最好的客户端。。。还把notes拿来说事了。。。最后还把GTK和QT拖进来了。

    这是在比谁知道的名词多谁就赢了吗?

  66. mathgl
    125.215.206.*
    链接

    mathgl 2011-11-12 16:08:43

    我发现此人的一个特点:

    只有和微软有关的帖子,他才会进来评论。老赵其他和技术稍微有些关系的帖子,例如jscex之类的,从没见过此人留言,不知道是不屑还是其他原因。

    此人没有任何blog。除了几年前je上有过发言记录外。

    一个人,有10+开发经验,数年如一日只坚持在这里的某些帖子留言,不知道是怎么样的一种精神,实在佩服得紧。

  67. 老赵
    admin
    链接

    老赵 2011-11-12 16:26:48

    @Ricepig

    我本来不想多吐槽,现在顺便说一句:Notes那真是客户端的典范啊,包括十八摸员工在内,就没见过有人说它好用的。产品设计我不多评论,有一点就是:每一步操作都是在UI线程同步地请求网络,导致我在家用很慢的VPN处理邮件时生不如死,每点一封邮件界面就要Hang,风火轮转啊转……

    估计如果那位大神是反Java的话,估计又变成“Java难用,处理不来异步”的理由了。即便有人说这个关键看怎么写,他也能扯到别出去,最终说“反正我知道Notes就是卡”。无论别人在谈什么话题,都可以用上流氓逻辑:“Java这方面好有什么意义”,总之“Notes就是卡”,然后就开始自说自话了。

    @mathgl

    我已经对他说过无数次,想要看看他在别处的讨论,或者写过的blog或者开源项目,或是让他到Reddit,StackOverflow甚至国内的“知乎”上去讨论,从来没有过。而且最有意思的居然是,上次说来我这里是为了“兼听则明”,哦西特……

  68. lovejjhao
    121.28.25.*
    链接

    lovejjhao 2011-11-12 17:19:51

    恩,明白了,我是async方法里又用了:

    $.each(data, function () {
        //这里用的$await
    })
    

    Jscex确实是个好东西,我太喜欢了。

  69. 老赵
    admin
    链接

    老赵 2011-11-12 17:36:11

    @lovejjhao

    有问题及时联系啊。

  70. 链接

    lovejjhao 2011-11-13 02:19:14

    恩呢,很羡慕你,我也很喜欢玩技术,魅力无穷,啥时候才能到你这境界呀~~

  71. mcpssx
    183.94.0.*
    链接

    mcpssx 2011-11-13 05:40:51

    @Ricepig: AutoCAD最新版,Visual Studio 2010...两个都被选择性无视了...

    恰好从autocad dos版我就做过二次开发,autocad最新版是用.net开发的?那是不可能的。autocad现在的objectarx体系明显可以看出是C++的。autocad只不过支持vsta开发而已,不过基于vsta二次开发的国内著名产品,我还没听说过,大都是lisp,c++和vba的。

    倒是autodesk的一个重量产品Maya改用Qt了,要知道autodesk可是微软重量合作伙伴。

    至于vs 2010,最多是部分界面用了WPF而已,人人都知道,编译器什么的都是C++的。

    @老赵: 我本来不想多吐槽,现在顺便说一句:Notes那真是客户端的典范啊,包括十八摸员工在内,就没见过有人说它好用的。产品设计我不多评论,有一点就是:每一步操作都是在UI线程同步地请求网络,导致我在家用很慢的VPN处理邮件时生不如死,每点一封邮件界面就要Hang,风火轮转啊转……

    我一开始就说了,java做客户端不如C++,delphi嘛,我只是说java在客户端的大型实践比.net强点,java差,.net更差。java,.net客户端都有一个问题,就是感觉响应慢(当然java现在比以前好点)。所以盛大用delphi开发麦库,这是明智之举。

    用户体验不可接受,再谈delegate还是什么内部类,都是多余的。

  72. 老赵
    admin
    链接

    老赵 2011-11-13 08:57:41

    @mcpssx

    看不懂就少说两句,我现在就是说Java的某个产品的用户体验差到死。而且这显然还是个非技术问题,别用你擅长的流氓手法断章取义。

    流氓逻辑少用一些,你要关注产品和用户体验请去别处,我都介绍给你了那么多地方了?真搞不明白,你既然其他任何地方都不去,而我这里为什么可以那么吸引你。是不是我这里用户体验做的太好了?想不想知道是用什么技术做的?

    还有以前我也说过,别跟我说产品和用户体验的,我谈技术的就关注技术方面的论证,技术的美妙本身对我来说就是价值,就是写程序时要爽快,别用你那产品经理市场分析员的调调跟我谈论技术。

    在此之前,我就不指出你那么多错漏百出的事实和逻辑了,这做法太技术范了。

  73. 为了梦想
    119.186.134.*
    链接

    为了梦想 2011-11-13 12:49:38

    老赵我不是搞技术的,但喜欢看技术文章,你不要与他争论,没意思。有争论的时间多写了两篇文章,让我们学习学习。如果你喜欢看文学书我推荐南怀瑾的书

  74. 老赵
    admin
    链接

    老赵 2011-11-13 14:58:37

    @为了梦想

    我比较喜欢看小说,科幻小说或侦探推理小说之类的……

  75. mcpssx
    183.94.0.*
    链接

    mcpssx 2011-11-13 15:24:56

    @老赵: 看不懂就少说两句,我现在就是说Java的某个产品的用户体验差到死。而且这显然还是个非技术问题。

    恰恰相反,java的客户端用户体验就是java本身的技术问题,你自己也说了,ibm的notes慢,可是C++真么不慢呢?ibm的工程师们招聘的应该水平不比你差到哪里去吧?真么就写不好java客户端而写得好C++的呢?这就是java本身gc等等带来的问题。

    还有以前我也说过,别跟我说产品和用户体验的,我谈技术的就关注技术方面的论证,技术的美妙本身对我来说就是价值,就是写程序时要爽快。

    你说的正是问题所在,你自己也说了,evernote用wpf是没有优化好,可是人家写c++的时候真么就没有考虑这么多问题就写得速度很快呢?

    .net的wpf只有在写hello,world的时候很爽快,真正写程序一点都不爽,就像你老赵到处强调.net要优化是人家没优化好,可人家写C++、delphi的时候从来不考虑这个一样运行很快。

    我就不信盛大麦库写delphi客户端的时候还专门做了多少优化,而.net写这玩意就不能不优化,否则根本没法用。

  76. 老赵
    admin
    链接

    老赵 2011-11-13 16:33:46

    @mcpssx

    C++和Delphi写起来多头大,你那些Hello World当然体现感觉不到它们多麻烦,自然不用考虑优化了。C#写起来很爽快,代码写的越多越爽快,你只写过Hello World自然没法知道,性能问题么需要优化的时候再优化。是的,我不用证明C++和Delphi写起来到底有多头大,用你的流氓逻辑的确轻松:不用证明就敢乱说话。

    你就扯吧,还“我就不信”什么的。我的原则是不清楚的东西就不表态,而你倒好,不清楚的东西却都敢说得信誓旦旦,就这范儿还是搞技术的?怪不得哪儿都不敢讨论,只会在我这里扯皮。Notes的问题完全就是实现方式上有严重的问题,C++,Delphi这么写照样是相同的问题,自己再去看下我的描述。还说GC呢,真是什么都敢扯啊。

    还是那句话,看不懂就少说两句。我不会每次都有闲工夫回应你,要看心情和篇幅。

  77. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-14 00:25:18

    《bolrand传奇》中jbuilder开发进程就明显证明,java比delphi慢并不是实现工程师的能力有问题,而是java技术的问题。

    ibm的工程师水平不比你低多少吧?真么实现notes就有严重问题呢?SWT就是ibm开发的,ibm自己都用不好,那谁用的好?

    Evernote难道不知道优化?实际是优化不出来只好用C++重写。

    飞信是由微软参加实施的,微软飞信项目组07年就超过100人,真么也优化不好?

    这是技术本身的问题,而不是优化的问题。

  78. 老赵
    admin
    链接

    老赵 2011-11-14 01:08:06

    @mcpssx

    第三次说了让你再去看清楚Notes是什么问题,没想到还是睁眼瞎,果然不搞微软技术的人逻辑就是差啊,说了半天还看不到。还《Borland传奇》呢,都不知道Java相比当年都已经发展优化到什么程度了,果然不搞微软技术的人就是落后啊──就算看上去nb哄哄,有十年多经验,就算能罗列出一大堆名词来,但也完全快被淘汰了,真悲哀。

    还有原来你那么厉害,原来EverNote和飞信都参与过开发,都知道是“实际上”是怎么回事啊,还微软飞信项目组呢。前者我不清楚,后者我亲自问一线开发人员下来,怎么就跟你说的不一样呢。或者你把名字告诉我吧,我去问下飞信的同学,说不定你真是飞信的架构师或是主程,那也好让人敬仰一把。

  79. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-14 02:17:14

    @老赵

    还《Borland传奇》呢,都不知道Java相比当年都已经发展优化到什么程度了

    再优化,java、.net客户端反应也比c++,delphi慢,这是技术本质决定的。这已经被广大开发人员所证实,在google上搜索".net 慢“和”C++,慢“,就可以看出两种反应。

    原来EverNote和飞信都参与过开发,都知道是“实际上”是怎么回事啊,还微软飞信项目组呢。前者我不清楚,后者我亲自问一线开发人员下来,怎么就跟你说的不一样呢

    前者,evernote转到4.0有公告,后者飞信,你问一线开发人员干什么?它就是慢,那是用户的反应。

    微软飞信项目组以前招人到处公告”作为飞信的开发合作方,微软飞信项目组目前已经拥有超过100人的研发“,他有这原因那原因,总之换成c++了!为什么要换成没有delegate连gc都没有的c++呢?难道是微软飞信项目组100多人优化微软.net技术能力都很差?

  80. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-14 02:25:50

    从”技术人员的风骨“来说就是要实事求是,swing以前慢那是公认的,否则也不会大家热捧swt了,《borland传奇》里面也说的很清楚。现在wpf慢,那也是公认的,去google查wpf 慢可以查出一大堆,而从来没有人抱怨c++开发客户端反应慢。wpf比winform慢,winform比vcl、mfc慢,这就是事实。

    evernote 3.5, qq概念版,飞信.net都是慢,谁用谁知道,非要说是人家不会优化,未免太傲视天下了。

  81. 老赵
    admin
    链接

    老赵 2011-11-14 03:44:50

    @mcpssx

    哈,你也懂技术人员风骨?你居然还好意思说实事求是,你哪来“事”,一看不懂别人说的话,二断章取义,三全靠推测。遇到问题居然还不问一线开发人员,不问你怎么知道为什么慢?用户观察到的只是结果,居然你还会说“不管这原因那原因”,还“总之就是”,你不求原因直接就下定结论,还好意思说技术人员风骨?我现在明白了,你其实只是普通用户,算不上开发人员。你只是十年用户经验的开发人员而已,这方面我已经二十多年了,谢谢。

    教你一下技术人员该怎么做:遇到慢了,跑下Profiler,看看哪里有问题,然后修改。就我还没有十年的经验来说,就算自己感觉没犯错,Profiling下来还是能找到一大堆需要要改进的地方。遇到问题不经过分析直接下结论甚至只靠猜的,不要在我面前号称技术人员。

    还有第四遍对你说:看清楚我的说法,不要说是swing还是awt的问题,别让我再说第五遍了,当然我已经说了四遍也不介意说第五遍。我没有傲视天下,我最多只是傲视您啊哥哥。其实我不想自大,但有人来我这里自小,我也就乐于接受了。

  82. haohaolee
    116.207.159.*
    链接

    haohaolee 2011-11-14 04:54:48

    对了,@老赵,about页面是不是要改一下了?

  83. 老赵
    admin
    链接

    老赵 2011-11-14 05:39:45

    @haohaolee

    懒了,会改的,呵呵。

  84. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-14 07:03:42

    @老赵: 遇到问题居然还不问一线开发人员,不问你怎么知道为什么慢?用户观察到的只是结果,居然你还会说“不管这原因那原因”,还“总之就是”,你不求原因直接就下定结论

    原因已经说过了嘛,微软.net开发客户端就是慢,这是尽人皆知的事实。vb6、mfc也是微软的,我真么不说vb6,mfc开发客户端会慢?

    教你一下技术人员该怎么做:遇到慢了,跑下Profiler,看看哪里有问题,然后修改。就我还没有十年的经验来说,就算自己感觉没犯错,Profiling下来还是能找到一大堆需要要改进的地方。遇到问题不经过分析直接下结论甚至只靠猜的,不要在我面前号称技术人员。

    1. 看来ibm的工程师们、微软飞信项目组、著名evernote开发组水平都太差,居然不会profiler。
    2. c++、delphi写客户端根本不操心这个,大部分时间根本不用profiler。天天profiler还说很爽?国内相当多的共享软件都是delphi写的,比如minpad2, alt-run都是个人作品,做了什么profile?

    这样,老赵你参考minipad2的文本处理,profile一个响应能达到minipad2的文本编辑就可以了。或者更简单一点,我就用c++builder拖一个Edit控件,什么优化profiler都不做,你用wpf优化一个简单文本编辑框对比看看。

  85. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-14 07:26:04

    对绝大部分客户端程序来说,做profile其实已经说明这个东西有问题了。

    绝大部分微软程序员是在做数据库界面应用程序,而不是密集计算。从界面上来说,人的反应相对机器其实是很慢的,如果你不是在写暴风影音,光线追踪,渲染几千个三角形等等,居然你需要profile才能让客户满意,那是很搞笑的一件事情。

    微软web程序员经常做页面profile吗?用C#写的客户端居然还不如javascript的页面反应,这已经说明问题所在了。用mfc、vb6、delphi写的客户端需要因为反应慢而profile的,百中无一。

  86. 老赵
    admin
    链接

    老赵 2011-11-14 08:20:53

    @mcpssx

    唉,你就继续扯吧,真是什么道理都说的上啊,还敢继续猜,太强大了。你怎么知道个人作品就不做Profiling了?MiniPad2没有关注性能做过优化?Profiling是用在密集计算上才有效果?果然是不做Profiling的人啊。不过你还真蒙对了一点,Notes这东西Profiling一下马上看出问题来,天晓得他们为什么不做——当然事实上不做我也看得出原因来,不像你一不用,二不看我的描述,猜的爽。

    还有,我应该要说第五遍了,但不重复了。我也不打算和你耗下去了,故意犯错的人果然是应付不了的,说了那么多你都当做看不见、装作看不懂。

  87. 老赵
    admin
    链接

    老赵 2011-11-14 09:59:46

    太tmd不爽了,好好的话题又被扯成流氓状……我觉得你以后不如直接说“微软的东西就是垃圾”,让人看着还觉得干脆,也不会浪费太多时间,非要套个技术人员的外衣反而是最恶心的……

  88. 为了梦想
    60.214.221.*
    链接

    为了梦想 2011-11-14 12:44:35

    太浪费我的时间了,明天还的选人大代表呢……

  89. woxf
    221.12.173.*
    链接

    woxf 2011-11-17 13:35:35

    这评论看的哥都烦了,翻来覆去都是重复那几个问题

  90. 某路人
    112.92.105.*
    链接

    某路人 2011-11-20 15:16:39

    强烈建议老赵不要回复mcpssx了,对完全无理取闹行为的持续回复,想不被误解成联合炒作都不行

  91. 老赵
    admin
    链接

    老赵 2011-11-21 12:47:48

    @某路人

    有病,我在我自己的博客上联合炒作?要炒作我早就到处宣扬别人来看或是到处转发了。我不打算回复他,也不会是因为你这个莫名其妙的理由。

  92. skandhas
    59.46.32.*
    链接

    skandhas 2011-11-22 06:56:41

    终于把文章和评论都可看完了。 呵呵,就像是看了一场精彩的相声,也很有收获 :>

  93. mcpssx
    183.94.1.*
    链接

    mcpssx 2011-11-22 15:06:31

    听说老赵是Infoq CN的编辑还是投稿人,推荐一篇InfoQ英文的新文章:Is Scala the new EJB 2?

    joda time library的、log4j等作者纷纷表示scala太复杂

    def ++ [B >: A, That] (that: TraversableOnce[B])(implicit bf: CanBuildFrom[List[A], B, That]) : That
    
  94. 老赵
    admin
    链接

    老赵 2011-11-23 11:02:41

    @mcpssx

    果然,说Scala好的文章那么多你都当作没看见,出现一点负面的声音就乐得屁巅屁巅,好像又得到真理了。我估计你连评论都没看,正文也就随便扫了几眼,连这些人分别在说什么都没搞清楚,还“纷纷表示Scala太复杂”,可笑,这种水平初中阅读理解绝对不及格啊。

    别担心,这篇文章肯定会翻译,我是InfoQ编辑,我们可不会像你一样选择性失明。

  95. 阿毅
    222.50.73.*
    链接

    阿毅 2011-11-23 12:17:28

    老赵还是太年轻了些,明摆着某些语言逻辑混乱惯于诡辩的人只是找你斗嘴皮子过瘾的。冷暴力直接无视就行,权当是到了山野,受蚊子臭虫滋扰。它们是最耐不住寂寞的,你忍忍不给它叮进去,它就飞去找别了咬了。

  96. 麦子
    58.41.19.*
    链接

    麦子 2011-11-27 02:03:37

    @mcpssx

    java代码丑陋是不可否认的!

  97. icracker
    218.19.163.*
    链接

    icracker 2011-11-30 06:28:01

    mcpssx把工资亮出来和老赵比比谁高就赢了 呵呵!

  98. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-12-05 03:20:31

    老赵翻译的那篇scala文章还没出来?后面的文章都出来了。

    infoq很多都是TW的人,TW不一定愿意翻译这些对scala,tdd啊有负面的文章

  99. 老赵
    admin
    链接

    老赵 2011-12-05 16:56:54

    @mcpssx

    什么时候变成我翻译的了?别急,被别人领了而已,已经在队列里我不好插手,有空帮你催下。

    你真会小人之心度君子之腹,以为人人都像你一样。InfoQ不见得TW多,你去看看现在翻译和写文章的都是哪些人再说吧。

  100. 代码民工
    124.228.17.*
    链接

    代码民工 2011-12-07 15:50:38

    老赵,在你的博客上看到好多文章都说Java语言很差,在你的影响下,很多人可能会从Java转向了C#,学Java的人可能变少了,但电信、银行的很多企业应用系统又不得不用Java做,这样Java程序员可能会供不应求,Java程序员的工资如果提高了,老赵你功不可没!作为一名以Java为主要编程语言的代码民工,我感谢你宣传Java语言很差,因为这可能提高我的工资~~

  101. 老赵
    admin
    链接

    老赵 2011-12-07 16:14:43

    @代码民工

    说是看了我的被我影响从Java转向C#都是没看明白文章的,还有我的文章哪有那么大影响力,居然能影响行业收入水平。

    而且你干嘛不说看了我的文章之后,电信银行很多企业系统因此转向C#了,反正跟你现在的说法一样无厘头。

  102. 代码民工
    124.228.17.*
    链接

    代码民工 2011-12-07 16:45:39

    @老赵

    企业系统用什么语言不是程序员说了算的,是领导说了算,你的文章目前还影响不了这个。

    不过你的一些言论倒是可以影响一部分不精通Java的Windows程序员,他们把你当作技术大牛。

    还有,你的博客里发表评论的时间不正确。。。

  103. 老赵
    admin
    链接

    老赵 2011-12-08 03:19:14

    @代码民工

    挺好的他们本来也找不到工作,影响不了Java程序员的工资。反而是.NET小白越多,越显得高手珍贵,工资见长啊,至少我的工资涨了不少呢。

  104. Mike Cao
    210.14.67.*
    链接

    Mike Cao 2011-12-10 03:42:16

    mcpssx的东西好飘渺啊, 作为P民程序员的我,我没从mcpssx的话里获得任何东西,但是从老赵那里得知vsts profiler和ants profiler,试验了两把,不错,挺喜欢的。

    至于delegate封装的好与坏,p民程序员的我觉得,好比衣服好看不好看,萝卜青菜各有所爱,只要满足功能即可。 现在哪个企业内部的嵌着业务的代码不是鸡巴绕的,绕法饶法就习惯了。

  105. 天空
    123.86.39.*
    链接

    天空 2011-12-11 17:59:31

    虽然 程序=数据结构+算法 但是用更好的语言编写的代码有助于高效、优雅、畅快的完成开发和维护任务,提高生产力和效率,减少脑细胞耗费在无谓的牺牲上。 如果说语言不重要,那么新产生的编程语言或新特性就毫无价值可言,正如C++优于C,C#优于java一样。在实际项目中,需要考虑的不只是语言这一单方面的因素,还有历史遗留、人事、技术依赖等各种原因制约着开发人员选择最终的平台。但肯定的是,新技术诞生的价值,必然是为了解决旧技术的弊端而出现的。

    另:鄙视mcpssx耍流氓。

  106. szq
    27.115.98.*
    链接

    szq 2011-12-15 08:55:18

    mcpssx十年工作经验,亮一下工资多少勒?

  107. test
    110.232.37.*
    链接

    test 2011-12-16 14:39:36

    先做人,再做技术人员,最后做程序员!

    话是好话。

    实际呢?

    mcpssx说的很好。 做客户端,.net和java都算是菜。

  108. chengzhi
    110.210.174.*
    链接

    chengzhi 2011-12-19 07:48:34

    一场鞭尸谋杀了老赵多少时间啊

  109. winter
    114.80.133.*
    链接

    winter 2011-12-29 13:43:38

    @mcpssx

    大侠的讨论方法果然是"浑身都是吐槽点,反而觉得无处下手"的感觉,为了证明一个观点就能丢出四五个木有论据的观点来,更要命的是里面有些逻辑还不对,都完全无法吐槽的说......

  110. whenJavametCsharp
    99.225.126.*
    链接

    whenJavametCsharp 2012-01-14 13:07:31

    @mcpssx,@zao

    我觉得你们都在瞎扯。

    首先,NOTES太次,比不过OUTLOOK,现在还有人用,只能证明NOTES曾经火过。 其次,一个产品是否成功,和用什么语言没有关系,主要的是是不是满足用户的需要。市场推广是否有力。

    最后,我说一下啊,我是从JAVA转.NET的,公平的说,我觉得JAVA很多东西都是放屁。脱裤子放屁。但是我喜欢JAVA因为有很多OPENSOURCE的东东。 而且JAVA里面精英很多的。 现在啊,因为工作需要,改用c#,老板要求用vb,被我等拼死顶住了。你说,叫一堆JAVA/c++程序员去搞VB?那简直是惨无人道。

    还有,WPF速度很快的,起码比WINFORM快很多。如果你做过大型的项目,比如说报税软件,里头无数个表单,输入框加无数业务逻辑。不用WPF,MVVM那简直就是一团意大利面条。

  111. whenJavametCsharp
    99.225.126.*
    链接

    whenJavametCsharp 2012-01-14 13:09:59

    再多说一句,三元里抗英斗争,我中华人民英勇吧。但能证明当年我们的村民武器比英军好么?

  112. 老赵
    admin
    链接

    老赵 2012-01-15 07:55:46

    @whenJavametCsharp

    这种道理我都说了无数遍了,没用的,照样抛出一堆没有理由的结论,这些结论还跟讨论的东西无关,都让人不知道该如何应对。

  113. 链接

    kidfruit 2012-01-21 07:05:52

    最近才来老赵的地盘,感觉写的很好,很有启发。希望老赵能继续给大家带来有意思的技术。

    PS:微软现在主打WindowsPhone7,不就是.net(silverlight)的么, 微软一直在大力发展.net,虽然中间会有些基于此的技术诞生或湮灭,但是.net这个根基可是一直向前在走,不像java发展迟缓,有点固步自封的感觉,这么多年才加了几个早就普遍了的特性。现在很多java项目因为java发展的早,历史遗留导致更换成本高,所以会一直使用,但是从语言使用趋势来看,java不断下降,.net可是不断在上升的。当年为了选择java和.net犹豫了很久,看了很多书,虽然当时java比.net用的更多,但之后考虑到发展情况,最终还是选了.net。现在看来觉得当年的选择没有错。

发表回复

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

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

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

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

使用Live Messenger联系我