Hello World
Spiga

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

2011-11-09 01:07 by 老赵, 6819 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

120 条回复

  1. cttet
    137.132.250.*
    链接

    cttet 2011-11-09 01:57:05

    等下一篇啊~~

  2. marvin
    221.223.42.*
    链接

    marvin 2011-11-09 07:10:46

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

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

  3. Scott
    114.112.44.*
    链接

    Scott 2011-11-09 08:45:57

    期待老赵的下一篇文章!

  4. boxlang
    112.80.181.*
    链接

    boxlang 2011-11-09 12: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,有些人无法认同你的观点,与其辩论是不会改变他的观点。

  5. 链接

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

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

  6. 老赵
    admin
    链接

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

    @boxlang

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

  7. mcpssx
    59.175.192.*
    链接

    mcpssx 2011-11-09 14:04:59

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

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

    其实和C#的也差不多

  8. Ben
    63.217.87.*
    链接

    Ben 2011-11-09 14:22:28

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

  9. Wendy
    124.193.215.*
    链接

    Wendy 2011-11-09 14:34:32

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

  10. 老赵
    admin
    链接

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

    @mcpssx

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

    @Eric

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

    @Ben

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

  11. hellhell
    15.219.153.*
    链接

    hellhell 2011-11-09 14:50:35

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

  12. 老赵
    admin
    链接

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

    @hellhell

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

  13. 链接

    cwzyj157 2011-11-09 17:56:53

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

  14. 链接

    cwzyj157 2011-11-09 17:58:32

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

  15. 老赵
    admin
    链接

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

    @cwzyj157

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

  16. kw2009
    24.246.78.*
    链接

    kw2009 2011-11-09 20: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 孰优孰劣,不如分析各自的特点,和帮助只了解其中一方面的人同时了解另一方面。

  17. 老赵
    admin
    链接

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

    @kw2009

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

  18. boxlang
    112.80.181.*
    链接

    boxlang 2011-11-09 22:18:06

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

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

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

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

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

  19. boxlang
    112.80.181.*
    链接

    boxlang 2011-11-09 22: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) 
        {
    
        }
    }
    
  20. 晓岩
    221.204.184.*
    链接

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

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

  21. kraft
    218.82.78.*
    链接

    kraft 2011-11-10 00:18:08

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

  22. kw2009
    24.246.78.*
    链接

    kw2009 2011-11-10 11: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 的分析,而且希望看到更多更好的文章。只是觉得有时候语言的“简洁/优美”有一定的主观因素,受个人背景,团队水平,项目类型,等等等等影响,也许这也是为什么每次在这个话题上有那么争吵的原因吧。

  23. 老赵
    admin
    链接

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

    @kw2009

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

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

  24. kw2009
    24.246.78.*
    链接

    kw2009 2011-11-10 12:37:50

    @老赵

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

  25. 老赵
    admin
    链接

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

    @kw2009

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

  26. kw2009
    68.179.35.*
    链接

    kw2009 2011-11-10 21:54:49

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

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

  27. yiway
    121.63.35.*
    链接

    yiway 2011-11-11 10:26:55

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

  28. 老赵
    admin
    链接

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

    @yiway

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

  29. lovejjhao
    121.28.25.*
    链接

    lovejjhao 2011-11-12 12:32:45

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

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

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

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

  31. 老赵
    admin
    链接

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

    @无敌宇宙大将军

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

  32. 老赵
    admin
    链接

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

    @lovejjhao

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

  33. mathgl
    125.215.206.*
    链接

    mathgl 2011-11-13 00:08:43

    我发现此人的一个特点:

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

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

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

  34. 老赵
    admin
    链接

    老赵 2011-11-13 00:26:48

    @Ricepig

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

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

    @mathgl

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

  35. lovejjhao
    121.28.25.*
    链接

    lovejjhao 2011-11-13 01:19:51

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

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

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

  36. 老赵
    admin
    链接

    老赵 2011-11-13 01:36:11

    @lovejjhao

    有问题及时联系啊。

  37. 链接

    lovejjhao 2011-11-13 10:19:14

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

  38. 为了梦想
    119.186.134.*
    链接

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

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

  39. 老赵
    admin
    链接

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

    @为了梦想

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

  40. haohaolee
    116.207.159.*
    链接

    haohaolee 2011-11-14 12:54:48

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

  41. 老赵
    admin
    链接

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

    @haohaolee

    懒了,会改的,呵呵。

  42. 阿毅
    222.50.73.*
    链接

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

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

  43. 代码民工
    124.228.17.*
    链接

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

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

  44. 老赵
    admin
    链接

    老赵 2011-12-08 00:14:43

    @代码民工

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

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

  45. 代码民工
    124.228.17.*
    链接

    代码民工 2011-12-08 00:45:39

    @老赵

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

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

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

  46. 老赵
    admin
    链接

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

    @代码民工

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

  47. 天空
    123.86.39.*
    链接

    天空 2011-12-12 01:59:31

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

    另:鄙视mcpssx耍流氓。

  48. winter
    114.80.133.*
    链接

    winter 2011-12-29 21:43:38

    @mcpssx

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

  49. whenJavametCsharp
    99.225.126.*
    链接

    whenJavametCsharp 2012-01-14 21:07:31

    @mcpssx,@zao

    我觉得你们都在瞎扯。

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

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

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

  50. whenJavametCsharp
    99.225.126.*
    链接

    whenJavametCsharp 2012-01-14 21:09:59

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

  51. 老赵
    admin
    链接

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

    @whenJavametCsharp

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

  52. 链接

    kidfruit 2012-01-21 15:05:52

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

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

  53. isaac
    221.221.23.*
    链接

    isaac 2012-05-02 22:08:14

    算起来离开微软那口深井已经有10多年了,用Google的Trends看了java与C#二者的发展趋势,也只能嘿嘿了。微软这个PC时代的恐龙能渡过软件业的冰河期吗?

  54. 老赵
    admin
    链接

    老赵 2012-05-02 22:23:37

    @isaac

    Java的没落趋势好明显啊,还有好像搞Java的Sun已经没能度过冰河期还是什么期的呢。

  55. isaac
    62.220.135.*
    链接

    isaac 2012-05-02 23:50:57

    Java是IBM捧起来的,就如Linux一样,,当IBM决定支持Linux时,基于Unix的厂商日子都不好过,所以sun的被收购不能说明Java就不行了。比如,2月24日,Eclipse的SR2发布时,8天的下载量是100万,而过去下载量达到100万要30天(详见ian skerrett的博客,抱歉也许需要梯子),ian skerrett认为安卓手机的开发,极大的刺激了Eclipse的使用,证据之一就是大量的下载地址来自三星,而安卓主要用的是Java开发应用。此外,从美国空军每年都在为其基地招聘Java程序员看,Java的前途是有保障的。当然Java在中小企业的应用是下降的,但这主要是由于LAMP的兴起导致的.

  56. 老赵
    admin
    链接

    老赵 2012-05-03 11:23:45

    @isaac

    放心,我只是看您想用Google Trend来说明问题所以调侃一下,你说C#前途不够好,所以微软快死了,那我就说Java前途再好,但Sun已经死了。别当真,我在陪您扯谈着玩呢。

    我可不会诋毁Java开发没有前途,我这人是码农,很死板地只相信实际的东西,也只会吐槽点实际的东西,例如Java语言是多么糟糕,但不会涉及JVM等优秀的地方。各种前途啊未来啊就由你们神通广大的分析师来yy吧,想怎么说都行的。

  57. isaac
    221.221.29.*
    链接

    isaac 2012-05-03 23:26:07

    在indeed上,对Java程序员的需求是78,011,对C#程序员的需求是33,820;而中国对Java程序员的需求是41,039,C#是19,477。至于Java既然能战胜smalltalk,自然有它出众的地方, Joshua Bloch对此谈到了一些. 记得在05年, Richard Monson-Haefel退出JCP前一个月,与他交流时,他认为“Java不会消失,未来的20年、30年或者40年,它将是整个IT业的一部分。”

  58. 老赵
    admin
    链接

    老赵 2012-05-04 10:04:02

    @isaac

    别跟我谈这些有的没的,用点脑子。我从来没说Java没有其历史意义,或者Java要消亡了,我只是说它语言糟糕,之前我说的话您听不懂?您再不用逻辑说话,我就不搭理您了啊,分析师才这样,我最讨厌分析师了,有本事来点干货。

  59. lilrain
    74.125.158.*
    链接

    lilrain 2012-05-04 23:25:03

    非专业爱好者,从文章和评论中学到了很多,但还有很多不明白的. 想问一下老赵,现在的学术或业界有没有一套可行的语言评价体系?技术上的,不是商业上的。 你个人比较看重语言的哪方面的特性(可写、可读、性能代价、其他),为什么?如果耽误了你的时间,就不要回复了,谢谢。

  60. 老赵
    admin
    链接

    老赵 2012-05-05 12:11:05

    @lilrain

    有啊,谈语言的书基本都会讲,例如《程序设计语言──实践之路》,里面就谈了安全性啊,可读性,可写性啊,可移植性啊等等很多特点。

    我看重更多是语义表达方面以及扩展性灵活性方面。

已自动隐藏某些不合适的评论内容(主题无关,争吵谩骂,装疯卖傻等等),如需阅读,请准备好眼药水并点此登陆后查看(如登陆后仍无法浏览请留言告知)。

发表回复

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

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

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

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

使用Live Messenger联系我