李笑来激起千层浪,赵姐夫力拒众强敌- 老赵点滴- 追求编程之美- 博客园
2010-02-03 00:49 by Jeffrey Zhao, 3949 visits, , ,

昨天晚上,()老师的无心之语却引起了推特上一次前后长达1个多小时的讨论——当时他似乎只是随手发了一句“Apple告诉我们的铁律是:表面功夫一定要做足”便不见了踪影,但是这句话立即引起了众果粉的共鸣。此后,我()的一句评论又引起了众人对微软开发平台的批判之声。在这次讨论中,几乎只有我孤军奋战为.NET平台进行辩解。因此事后有人给出一副对联为此次争论作出总结:

上联:李笑来激起千层浪

下联:赵姐夫力拒众强敌

横批:全民扯谈

自然,无论是我还是其他人,在参与讨论的时候都抱有明显的个人倾向性。不过与常见的吵架不同,虽然大家观点向左,但是并没有任何谩骂的成份,同时也没有假惺惺的客套话。可以说所有人从头到底都保持着就事论事,据理力争。因此从旁观者的角度来看,这次讨论并非只是意气之争,其中还是包含了比较丰富的内容。

参与讨论的(@virushuo)和(@tinyfool)都是老程序员,他们在上世纪末也都是微软平台的开发人员,但是因为难以忍受微软在那时候“毫无克制”的技术更迭(如VC => COM => .NET),最终一前一后都转投了*nix平台。我昨天谈到,我之一是想了解苹果机的妙处究竟在哪里,而他们两位便是让我产生这一想法的重要因素。而我,由于入行较晚,虽然“从理论上”说也经历过这一历史阶段(如VB,Delphi,以及Java开发环境混战的那一时期),但是在真正全身心投入微软平台时已经是.NET时代了,因此对于霍郝两位的观点并没有切身体会,而我坚持的观点便是:.NET平台发布至今并没有“革命性”的改变,而目前也可以看出微软已经在.NET平台上投入了未来5年甚至10年的心力,因此如今.NET程序员并不用担心遭遇当年的悲剧。

从这次讨论中可以了解到一些老程序员对(当年)微软开发平台的一些典型看法,这些看法放到现在究竟正确与否我认为并不重要,重要的是我们能够从中总结出哪些信息,这些信息又可以如何对我们将来的发展产生借鉴意义。因此,我详细地总结了这次讨论的完整内容——不过毕竟是人肉整理,不排除遗漏少量条目的可能。因此,我建议您可以上一下推特,follow一些人,这样下次再出现有价值的讨论也不会遗漏了。

由于讨论内容较多,我还是把它们放在下面的链接中了。其中,缩进代表了“回复”关系,但是由于推特的谈话性质,条目的上下位置并不表示发表时间的先后。

97 条回复

  1.  2010-02-03 01:03
    嫖悍的小老虎抢到杀花...

    劫匪哥,还没睡啊.
  2.  2010-02-03 01:23
    我是一只小老虎 喵!
    先把你给劫了
  3.  2010-02-03 01:56
    看了{zh1}的那个google doc才看到了内容。。博客园都成了你的铺垫了。

    搞得我想发表些意见都有点怪。

    按照讨论里面的思路,我也算是个幸运儿了,05年正式接触编程,系统化学习。之前都是自己小打小闹,学些qbasic、汇编之类的,由于没有积累,所以就算现在不用了也影响不大。

    不过,如果微软明天突然说,2012年,windows8将不再支持.net框架,微软将全力推出他具有战略性的 .sns 语言,估计我现在也会崩溃了。

    如果要把现在手头的类库移植到java,估计80%是没问题的,毕竟从开始积累的一刻我就压根没有想过使用第三方或者.net的高级功能(比如亲爱的linq / lambda之类的)。

    但是移植orm部分、还有其他一些细节会很麻烦。所以现在我也开始把自己的业务架构构造在一个中间语言——XML!至少XML不会说微软淘汰就淘汰。
  4.  2010-02-03 02:05
    说着说着。。突然也觉得为什么BEA之类的公司会主推基于xml的业务流、比如bpel / bpmn 了。

    估计bea之类的也觉得自己的东西压在java上也不保险。
  5.  2010-02-03 02:24
    > @jeffz_cn: 所以微软的客户端做得不够好。之前微软提出在客户端搞一个Client Profile,这样只需要下载独立的几个程序级就行了,不过这一点也闷掉了,现在放到了.NET 4中。为此,我觉得mono很不错——因为它就是个绿色的.NET环境啊!

    话说3.5 Client Profile是存在的嘛,



    只不过client profile的offline installer居然也有快300M,这真是情何以堪……

    最近正好收集了这么一组数据:
    JDK 1.1.8 8.36MB
    JDK 1.2.2 19.4MB
    JDK 1.3.1 31.8MB
    JDK 1.4.2 49.4MB
    JDK 1.5.0 53.1MB
    JDK 1.6.0 76.3MB

    要是拿.NET FX的体积增长速度来比的话那就更有趣了……
  6.  2010-02-03 02:28
    今天骂了m$一下午 我愣是搞不懂为啥有个目录删除不掉 啥权限都有 却告诉我权限不够 可能是因为那个程序目录是我将Administrator改名之前安装的 {zh1}还是跑到安全模式下才删除掉的 *nix下就没这些问题 一些知识点 虽说{dy}次接触有些困难 但接触了之后 几乎可以通杀一切。
    还有现在用微软的一些东西心中感觉别扭,就拿sl来说,这个东西的未来很难说,不是怀疑ms在技术上的一些问题,主要怀疑万一这东西发展起来,威胁到windows之后,微软是不是会干些恶心人的事情,万一它发展不起来,又不知会是怎么样了。下一步要开发个产品,现在主要是技术选型,到底选flash还是silverlight?选flash,安装率高,放在web上也可,放到桌面,air即可跨平台。选silverlight,就担心上面那些问题。用了一段时间as3,开发效率也挺高的,运行效率也不比.Net低。
    再说另一个技术选型。Google App Engine 还是 Windows Azure。申请完 Google App Engine 到上传个 hello world demo,很快就搞定了。申请Azure,在几个页面之间跳来跳去,把我都跳晕了,结果是,搞了几小时,我还没把hello world搞出来。考虑到GAE有免费的限额,网速也快,{zh0}还是决定选择GAE。
    晚上又骂了M$一次。live msger不想让它开机启动,不知他咋搞的,动不动还是自己跑出来了,烦都烦死了。

    感觉M$现在越来越僵硬。
  7.  2010-02-03 02:32
    貌似那些说被微软qj的人, 其实准确的说,是被COM以及它衍生出的一些东西给qj了……


    微软搞出COM这么恶心的东西, 确实有他错的地方。

    本来C++就不适合做binary兼容的事情。 C++对其特性的规定太少。 在源代码级复用是很好的, 要在二进制级复用…… 那就只能产生COM这样恶心的代码……

    要想二进制复用, 要么就用C —— 没太多特性可用,大部分功能都是由自己控制。
    要么就更进一步, 搞出CLR这样的东西, 由CLR来保证特性是二进制兼容的。

    个人觉得微软推出CLR是一种正确的思路, 而COM是这个正确思路前的失败的尝试。


    话又说回来…… 微软走错了, 该骂; 而盲从那部分同学…… 难道就一点错都没有? 微软就真拿刀架到你脖子上qj你了么? 其实你自己也原意不是……
    搞不懂那种说VC浪费了他6、7年的同学, 6、7年耗费到哪去了……
    花个3、4年, 把基本功学扎实; 那不还想用啥, 就用啥……
  8.  2010-02-03 02:43
    OwnWaterloo
    微软走的,从奸商的角度来说,没有错。像sun那样把自己搞挂了,才是大错。
  9.  2010-02-03 03:00
    xiaotie
    无奸不商嘛…… 商人总是从自己的利益出发的……

    虽说.net 有将开发人员绑定在特定平台上的嫌疑……
    但在这个特定平台上, .net还是支持相当多语言相互交互的吧, 而没有用一些其他平台上都不存在的古怪语言……
    而且, 还有mono这样的项目……

    windows mobile、 或者android, 都不用开发个什么东西还要先付100刀吧……

    反感某公司以及其粉丝那自命不凡的清高的态度, 以及仅仅为了体现自己与众不同而做出一些xx举动。

    一个iphone居然可以让一门语言的使用排名直线上升, 使用该语言的同学, 在赞美的同时, 请思考 : 这究竟是不是正常现象, 会不会发生COM一样的悲剧?
    到底是这些商业公司的商业行为将自己推向了"技术换代太快跟不上", 还是自己没看清这些技术的前景, 太相信那包药了……
  10.  2010-02-03 03:14
    OwnWaterloo
    这个关乎产业链的问题。mono虽能跑,但跑不了wpf。我最近在琢磨air代替wpf的可能性——毕竟跨平台是一个很好的嘘头,且mac 的用户舍得花钱。iphone是把一个产业链带动起来了,Object C 用户才多起来。前些天和一个程序员聊天,中间谈了我的观点:技术分为产品技术和通用技术。COM这种,属于产品技术。产品技术过时是正常的。选择产品技术,好处是可以搭产品的快车,坏处就是缺乏控制力。他是要自己开发CMS,我说开发CMS本身这属于通用技术,而选择一个或两个CMS熟悉它再进行二次开发,这属于产品技术。对于他这种技术不咋样资本又不雄厚的情况来说,应该投资产品技术而不是通用技术。
  11.  2010-02-03 03:25
    xiaotie
    嗯, "产品技术"和"通用技术", 好词。

    搜到以前一篇文章:《由C#风潮想起的-给初学编程者的忠告》


    抛开文章里面谈的具体的东西(他的个人经历, 他推荐的语言、课程、书籍), 这些可能不是对每个人都适用的。
    但他的文章(好像已经出现很久了)我认为直到现在应该都算是对每个人(至少是在校学生而言)具有价值: 就是你点出的"要区分产品技术和通用技术"。 而且, 不要浮躁, 既然是在校, 就安安心心踏踏实实的研究那些更基本更稳定的通用技术。


    而公司怎么选择…… 我就不清楚了…… 我也才毕业……


    只是看到推特上那些留言, 觉得那些抱怨被微软qj的人, 部分印证了文章的观点。
    从个人而不是公司的角度, 希望后后辈(嗯, 我是后辈……)能吸取点经验…… 不要让悲剧重演……

  12.  2010-02-03 03:33
    看了原文,感觉这是要鼓励一下不同背景差异下的非不和谐争论?
  13.  2010-02-03 03:36
    OwnWaterloo
    不从技术人员角度思考就行了。技术虽然变化快,但搞业务的那些变化更快,客户领导换了,什么的,又得重头再来…… 我们可以做的是去适应变化。Object C 无非就是一层壳嘛。
    还有就是游击战·运动战和阵地战的选择问题。像我这种soho技术员,最喜爱的就是游击战。IPhone活了,而Object C掌握的人又不多,从技术角度想——TMD,你苹果搞什么玩意啊。从业务角度想——市场大、竞争者少,肥啊!
    前一阶段介入Flash开发,进去后发现,竞争真tmd少,只会一点东西,就可以拿1W+的报酬。进一步发现,这东东还可以开发客户端软件,性能还不错。
    再一个,“与众不同”是个很好的卖点啊,从技术角度可能鄙视这个,但,人追求的是什么?衣食无忧之后不就追求那些吗?
    mac 的粉丝为什么会有点自命不凡?俺有一点点体会——ipod刚上市那阵,俺搞了一个戴着上街。即使是俺这种比吴孟达还猥琐的男人,走在街上,也得到了不低的回头率。“与众不同”说起来轻松,做起来很难很难的,这几乎是竞争的{zg}境界。
  14.  2010-02-03 03:40
    xiaotie
    xiaotie:
    不从技术人员角度思考就行了。
    ...
    从业务角度想——市场大、竞争者少,肥啊!
    ...
    前一阶段介入Flash开发,进去后发现,竞争真tmd少,只会一点东西,就可以拿1W+的报酬。进一步发现,这东东还可以开发客户端软件,性能还不错。
    ...
    再一个,“与众不同”是个很好的卖点啊,从技术角度可能鄙视这个,但,人追求的是什么?衣食无忧之后不就追求那些吗?


    学习了!
    离校后, 心态得换换~_~
  15.  2010-02-03 03:41
    OwnWaterloo
    孙子上有句话:“以正合,以奇胜”。对一般的程序员来说,通用技术属于正,产品技术属于奇。我个人在以前重视通用技术,但现在,我觉得产品技术更值得投资——前提是,掌握基本的通用技术。在掌握基本的通用技术之后,对产品技术的投入产出比对通用技术的投入产出要高,甚至高得多——这个结论的前提是“对一般的程序员”。
  16.  2010-02-03 03:48
    xiaotie
    前辈能否指点一下,web开发领域(呃, web开发到底有几个领域…………)有哪些通用技术值得学习的?

    也请老赵不吝赐教哦~

    没事偷着学……
  17.  2010-02-03 03:59
    OwnWaterloo
    不擅长web开发 ... 汗 ... 目前主要做client, ria, server。 做web的多了,反而做这些的少了。

    照我的理解,web 通用技术无非就是 html, http, css, js 那些,然后就是在这之上的抽象了,这些抽象,《设计模式》和《企业应用架构模式》这两本书都总结得七七八八了。
  18.  2010-02-03 04:08
    xiaotie
    谢谢~~~
  19.  2010-02-03 05:06
    4点多还有没睡的,真是强悍!! 老大 上次问你的问题貌似还没收到你回复,还想再问问。
    问题描述:如何用C#动态生成解决方案和项目?
    我想做个工具来动态生成解决方案和项目,并把这些项目添加到这个解决方案中,主要是配置一些项目的属性,如程序集信息、输出目录、引用项等等,他们让我直接拼xml文件,感觉这个不太高级,我看了看资料发现.NET类库中好像是提供这个类的,好像有个Solution2接口,不过不太会用,还请老大指点一二,谢谢啦 ↖(^ω^)↗
  20.  2010-02-03 07:28
    加吧加吧,我也加入水果,.NET和水果两条船,呵呵
  21.  2010-02-03 08:16
    呵呵,纯技术的公司很难活长的,微软走的路不一定对,但是他生存下来,只有生存下来才有机会做得更好.
  22.  2010-02-03 08:22
    劫匪这个名字比姐夫要好听!
    也更具赵劼的彪悍特性!
  23.  2010-02-03 08:36
    实在不知道VC6和VC10有什么本质区别啊。。除了VC10更标准,并且多支持一些C++1x的特性而已。
  24.  2010-02-03 08:38
    当时有幸欣赏到了讨论的过程,也让我了解了很多老程序员的经历和想法。

    不过看时间,应该是前天晚上,而不是昨天晚上吧。
  25.  2010-02-03 08:43
    不过我坚信老赵说的一句话:“技术是相通的,这句话不假。所以我其实一直觉得就算微软倒了我也不怕,我很快去搞Java,Ruby,Python,Unix。”
    我认为如果不能这样的话,那就不算是程序员,只是一个纯粹的代码工人。
  26.  2010-02-03 08:44
    老赵你太有闲了……
  27.  2010-02-03 08:44
    OwnWaterloo:

    本来C++就不适合做binary兼容的事情。 C++对其特性的规定太少。 在源代码级复用是很好的, 要在二进制级复用…… 那就只能产生COM这样恶心的代码……

    要想二进制复用, 要么就用C —— 没太多特性可用,大部分功能都是由自己控制。
    要么就更进一步, 搞出CLR这样的东西, 由CLR来保证特性是二进制兼容的。

    个人觉得微软推出CLR是一种正确的思路, 而COM是这个正确思路前的失败的尝试。




    看到这么牛的评论马上就去翻您的blog,结果发现您的blog一片空白,大牛能否写点东西指点一下虾米阿
  28.  2010-02-03 08:48
    > @virushuo: 我当年挺关心的,似乎也没见谁不操心这个。至少我就挺操心的。VC6废了,我之前7,8年都浪费了。
    要想把MFC这么臃肿怪异的东东搞明白确实要花费许多精力,只能同情ing……
  29.  2010-02-03 09:13
    C是通用语言,好好学学,C#是吃饭家伙,也得深入学,其它的用到在学,这两门语言学好了,别的学起来应该能触类旁通。
  30. [楼主]  2010-02-03 09:18
    辰:如果要把现在手头的类库移植到java,估计80%是没问题的,毕竟从开始积累的一刻我就压根没有想过使用第三方或者.net的高级功能(比如亲爱的linq / lambda之类的)。

    Java语言和Java平台是两码事情,别用Java语言,估计你麻烦不了。

    引用辰:但是移植orm部分、还有其他一些细节会很麻烦。所以现在我也开始把自己的业务架构构造在一个中间语言——XML!至少XML不会说微软淘汰就淘汰。

    你这个其实和XML没有关系,XML又不是C#这种语言的东西,你其实也只是用一种通用的纯文本格式进行交换而已,呵呵。
    从你的角度出发,这里的关键不是XML死不死,而是纯文本一定死不了,至于纯文本里你写些什么自然不受任何人影响了。
  31.  2010-02-03 09:19
    好像MFC好像也没被抛弃,COM也没抛弃,.net开发人员用着.net
    vc用户依然还是MFC.
    两者没有影响,只是微软平台不同应用而已.
    为何很多人用了.net退回了MFC,为何像qq,淘宝,msn等客户端不用.net.
    然后大家看到vs2010了吧,是不是感觉性能不好.既然采用新技术就会有风险,但这种进步的思想是可取的.技术的进步是不止步的,一切事物都是从复杂到简单.这是很正常的事,只是人累死了...
  32. [楼主]  2010-02-03 09:19
    RednaxelaFX
    毕竟.NET的程序集,不同的版本是不一样的,所以在依赖关系上处理的会很容易,JDK这方面就要混乱一些了。
  33. [楼主]  2010-02-03 09:24
    xiaotie:
    再说另一个技术选型。Google App Engine 还是 Windows Azure。申请完 Google App Engine 到上传个 hello world demo,很快就搞定了。申请Azure,在几个页面之间跳来跳去,把我都跳晕了,结果是,搞了几小时,我还没把hello world搞出来。考虑到GAE有免费的限额,网速也快,{zh0}还是决定选择GAE。

    GAE是程序员友好的,*nix也是程序员友好的,因此它们在程序员眼中很友好。
    在我看来,Windows是企业友好的,什么东西{zh0}通过向导等等来完成。微软卖的产品有共性,就是用起来不费脑子。
    打个比方,互联网行业一直在用的memcached,其实对程序员来说配一个很容易。但是微软搞一个AppFabric,就是可以连机器一起卖,一连,然后直接用,什么复制、Failover云云,全部一套搞定。
    于是企业欢喜,卖的出去。你让企业用memcache……许多老大们是不愿意的……
  34. [楼主]  2010-02-03 09:28
    xiaotie:
    这个关乎产业链的问题。mono虽能跑,但跑不了wpf。

    话说,其实我不清楚mono如果把精力放在UI库上是否值得,我认为mono应该搞好的是运行时,以及基础类库,编译器等等。UI是放在下一步的,因为似乎本来.NET在UI上的投入也不多。要说起来,WCF更值得投入,呵呵。
  35. [楼主]  2010-02-03 09:31
    OwnWaterloo:
    @xiaotie
    前辈能否指点一下,web开发领域(呃, web开发到底有几个领域…………)有哪些通用技术值得学习的?

    也请老赵不吝赐教哦~

    没事偷着学……

    我觉得传统Web开发,无论是什么平台,都不会学歪的。
  36. [楼主]  2010-02-03 09:38
    温景良(Jason):呵呵,纯技术的公司很难活长的,微软走的路不一定对,但是他生存下来,只有生存下来才有机会做得更好.

    看Borlandxx,只为Borland犯的各种错误惋惜。
    当年dBase,JBuilder,InteBuilder都是xx,慢慢都废掉了。
  37. [楼主]  2010-02-03 09:39
    birdshome:看了原文,感觉这是要鼓励一下不同背景差异下的非不和谐争论?

    这是一定要的。
  38.  2010-02-03 09:42
    Jeffrey Zhao:
    @RednaxelaFX
    毕竟.NET的程序集,不同的版本是不一样的,所以在依赖关系上处理的会很容易,JDK这方面就要混乱一些了。

    不过那不是体积增大的理由。毕竟3.5里只有1份2.0 runtime,而不是说把1.0和1.1也包含了进来……
  39.  2010-02-03 09:43
    什么技术和平台不能一概而论,要看你用来开发哪方面的东西了
    各种技术和平台都有其适用场景

    作为技术人员,自然有其偏好,但我想不应该局限在微软一棵树上。
    所以争吵毫无意义
  40.  2010-02-03 09:50


    我觉得 .net是那些玩win32和 com到深层的人为了改善当时怨声载道的状况,欢天喜地的作品,而且真正服务到了很多用到深处的人。

    那种平台更迭的抱怨仍然是没有底气在新的平台写hello world的人发出的。

  41.  2010-02-03 09:51
    OwnWaterloo:
    话又说回来…… 微软走错了, 该骂; 而盲从那部分同学…… 难道就一点错都没有? 微软就真拿刀架到你脖子上qj你了么? 其实你自己也原意不是……
    搞不懂那种说VC浪费了他6、7年的同学, 6、7年耗费到哪去了……
    花个3、4年, 把基本功学扎实; 那不还想用啥, 就用啥……

    说滴太好了
  42.  2010-02-03 09:51
    老实说我真的不懂。

    记得是N久以前看的MFC的书,侯捷翻译的《深入浅出MFC》,里面介绍的Document/View模型就好像是昨天的事情一样,到今天还在用。所以我真的不懂那些学MFC的到底学啥去了?怎么就像是被工业革命了一样。

    更别说今天搞数据库的不知道有几个知道几十年前的关系模型。
  43.  2010-02-03 09:52
    Jeffrey Zhao:
    引用xiaotie:
    这个关乎产业链的问题。mono虽能跑,但跑不了wpf。

    话说,其实我不清楚mono如果把精力放在UI库上是否值得,我认为mono应该搞好的是运行时,以及基础类库,编译器等等。UI是放在下一步的,因为似乎本来.NET在UI上的投入也不多。要说起来,WCF更值得投入,呵呵。

    我认为mono UI{dy}步 moonlight 比WPF务实多了
  44.  2010-02-03 09:54
    Jeffrey Zhao:
    引用xiaotie:
    再说另一个技术选型。Google App Engine 还是 Windows Azure。申请完 Google App Engine 到上传个 hello world demo,很快就搞定了。申请Azure,在几个页面之间跳来跳去,把我都跳晕了,结果是,搞了几小时,我还没把hello world搞出来。考虑到GAE有免费的限额,网速也快,{zh0}还是决定选择GAE。

    GAE是程序员友好的,*nix也是程序员友好的,因此它们在程序员眼中很友好。
    在我看来,Windows是企业友好的,什么东西{zh0}通过向导等等来完成。微软卖的产品有共性,就是用起来不费脑子。
    打个比方,互联网行业一直在用的memcached,其实对程序员来说配一个很容易。但是微软搞一个AppFabric,就是可以连机器一起卖,一连,然后直接用,什么复制、Failover云云,全部一套搞定。
    于是企业欢喜,卖的出去。你让企业用memcache……许多老大们是不愿意的……



    看与什么比较,如果拿微软与W3C这种NC组织比,我觉得微软显然是程序员友好的。

    其实微软在开发工具方面一直做的不错。每个产品都有其针对性,微软卖给企业的产品当然是企业友好的。
  45.  2010-02-03 09:57
    Ivony...:
    老实说我真的不懂。

    记得是N久以前看的MFC的书,侯捷翻译的《深入浅出MFC》,里面介绍的Document/View模型就好像是昨天的事情一样,到今天还在用。所以我真的不懂那些学MFC的到底学啥去了?怎么就像是被工业革命了一样。

    更别说今天搞数据库的不知道有几个知道几十年前的关系模型。

    那本侯捷先生是作者啦,不是译者…… >_<|||

    话说我也想起一些年代事。很小就有了自己的电脑,系统是DOS,老爸千叮万嘱说关机前要先park然后halt然后按电源键关机。
    想想现在直接用鼠标点个“关机”就完事了,易用性真是提高了不少orz ...
  46.  2010-02-03 10:12
    话说这些人我都follow了,但是,twitter却上不去了……
  47.  2010-02-03 10:17
    有些时候觉得.Net的确更新得太快了,但是我觉得至少他在不断完善,在进步~,这点还是让人欣慰的。
  48. [楼主]  2010-02-03 10:27
    RednaxelaFX:
    引用Jeffrey Zhao:
    @RednaxelaFX
    毕竟.NET的程序集,不同的版本是不一样的,所以在依赖关系上处理的会很容易,JDK这方面就要混乱一些了。

    不过那不是体积增大的理由。毕竟3.5里只有1份2.0 runtime,而不是说把1.0和1.1也包含了进来……

    还是dll太多了,其实用到的没几个,所以绿色版,绿色版……
  49.  2010-02-03 10:32
    老赵,那个doc我看了。还有你那副对联也不错,有时候大家一起扯扯淡也是不错的。
  50.  2010-02-03 10:38
    .NET FX安装包变成这么大都是.NET 3.0害的。。。
  51. [楼主]  2010-02-03 10:56
    装配脑袋:.NET FX安装包变成这么大都是.NET 3.0害的。。。

    其实依赖它们的应该不多吧,所以Client Profile希望可以小些。
  52.  2010-02-03 11:09
    RednaxelaFX:
    引用Ivony...:
    老实说我真的不懂。

    记得是N久以前看的MFC的书,侯捷翻译的《深入浅出MFC》,里面介绍的Document/View模型就好像是昨天的事情一样,到今天还在用。所以我真的不懂那些学MFC的到底学啥去了?怎么就像是被工业革命了一样。

    更别说今天搞数据库的不知道有几个知道几十年前的关系模型。

    那本侯捷先生是作者啦,不是译者…… >_<|||

    话说我也想起一些年代事。很小就有了自己的电脑,系统是DOS,老爸千叮万嘱说关机前要先park然后halt然后按电源键关机。
    想想现在直接用鼠标点个“关机”就完事了,易用性真是提高了不少orz ...



    按一下电源按钮就可以了(Windows会接到关机指令),连关机都不必点。。。。Wintel联盟还是为人类做出了不朽的贡献的。。。。
  53.  2010-02-03 11:21
    其实,他们xx没有意识到学习和使用技术也是有风险的,技术是会淘汰的,当风险来临后,他们只是不能接受这个风险造成的损失,而去指责那个技术,那个技术是没有过错的啊。

  54.  2010-02-03 11:28
    OwnWaterloo
    不要胡言乱语。讨厌你们这种不负责任的随意评论。从你的结论来看你根本就不懂COM,还评论什么。
  55.  2010-02-03 11:36
    Clingingboy
    两种语言(平台)的追求宗旨不一样。.NET 的设计本身就不是为那种高效的windows程序而设计的。 .NET的假设就是硬件资源不是限制和问题。所以和VS这个软件的发展一样,把资源往死了用。
  56.  2010-02-03 11:45
    我看到@tinyfool和@jeffz_cn关于"强奸"的那段比喻,终于忍不住笑了.
  57.  2010-02-03 11:56
    其实现在这种多平台争战的时间段,反而让我有一种百花齐放的感觉!正是因为这些平台大佬们在每个领域不断地进行交涉才使得现在的开发技术飞速的挺进!先不管说哪个平台造成了多少的伤亡(开发公司),就看现在开发同样复杂程度的系统,不管是在性能和开发效率上都已经天上地下了!
  58.  2010-02-03 11:57
    windows门槛低,*nix门槛高……这还是比较普遍的共识吧。
    有人说学微软技术主要就是学工具的使用,这是现象,不是原因。究其原因,还是微软做平台和其他厂商有不一样的哲学,微软力求把东西做的简单化、自动化,这是人家的哲学,但是把这个当微软的不是,那就是我们自己的不是了。更不应该让自己被牵着鼻子走,我06年年底开始接触.NET,从2.0到4.0,我从来没觉得微软变化太快过,学习微软技术不是只学API怎么用,工具怎么用的,同样是技术,换个API,换个工具,就能叫全丢光了、全废掉了吗?所以我还是想趁着年轻多读书,毕竟基础的东西,什么时候都不会丢。API永远都只是API,工具也永远都只是工具而已;但基础却远不止是基础,还是一种理论层面能指导工作和学习的东西。学习微软的东西就是轻视基础了吗?我认为这是一种误区。.NET社区的高人,不也都是视野很开阔的吗?
  59. [楼主]  2010-02-03 12:00
    hoodlum1980:
    @OwnWaterloo
    不要胡言乱语。讨厌你们这种不负责任的随意评论。从你的结论来看你根本就不懂COM,还评论什么。

    说这样的话没有意义的,要给出你的看法,以及支持你看法的理由。
  60. [楼主]  2010-02-03 12:01
    hoodlum1980:
    @Clingingboy
    两种语言(平台)的追求宗旨不一样。.NET 的设计本身就不是为那种高效的windows程序而设计的。 .NET的假设就是硬件资源不是限制和问题。所以和VS这个软件的发展一样,把资源往死了用。

    .NET从来没有说过自己不是为了高效程序而设计的,它还是在不断优化,不断生成native code等等,如果它们还不为了高效,你让那些其他一些语言/平台情何以堪……
  61.  2010-02-03 12:27
    我蛇年的,当年也啃过《Inside OLE2》,{jd1}痴迷。OLE/COM是Windows的基石,15年来一直没变。Office到2007,Object Model还是COM(2010应该也是),DirectX,ADSI等等,上层也许被托管代码化了,下层还是COM。其实CLR就建立在COM上。VS 2005 SDK,虽然被托管代码化了,但“风味”还很COM。在VS中建立一个Office项目,Word或Excel什么的会嵌入到VS中,底层技术——OLE。flash player,Silverlight能跑在IE中,依靠的是ActiveX,OLE/COM/ActiveX其实是一个东西——90年代的ms的市场人员太时尚了。被淘汰的有MFC,DCOM/COM+,托管代码的remoting,Winform...总的来说,有变有不变。那群说被ms qj的人,一看就是老菜鸟,分不清哪些是ms的宣传,哪些是实打实的技术
  62.  2010-02-03 13:03
    群英会嘛
  63.  2010-02-03 13:42
    hoodlum1980:
    @Clingingboy
    两种语言(平台)的追求宗旨不一样。.NET 的设计本身就不是为那种高效的windows程序而设计的。 .NET的假设就是硬件资源不是限制和问题。所以和VS这个软件的发展一样,把资源往死了用。

    这个论调
    vb6的时候有人bs vb6用过
    .net出来马上扣给.net了
    1.1时代也许说得通啊 可是已经5 6年过去耶
  64.  2010-02-03 13:44
    zzfff:我蛇年的,当年也啃过《Inside OLE2》,{jd1}痴迷。OLE/COM是Windows的基石,15年来一直没变。Office到2007,Object Model还是COM(2010应该也是),DirectX,ADSI等等,上层也许被托管代码化了,下层还是COM。其实CLR就建立在COM上。VS 2005 SDK,虽然被托管代码化了,但“风味”还很COM。在VS中建立一个Office项目,Word或Excel什么的会嵌入到VS中,底层技术——OLE。flash player,Silverlight能跑在IE中,依靠的是ActiveX,OLE/COM/ActiveX其实是一个东西——90年代的ms的市场人员太时尚了。被淘汰的有MFC,DCOM/COM+,托管代码的remoting,Winform...总的来说,有变有不变。那群说被ms qj的人,一看就是老菜鸟,分不清哪些是ms的宣传,哪些是实打实的技术

    顶,我实在没敢说老菜鸟这个词。
    小吐槽:
    .net和com本来就没有不兼容,com/ole只是一个二进制接口规范嘛,.net各种方式包装实现起来都是很完备的
    MFC,DCOM/COM+也不算淘汰啦,在.net 库低下跑的还是这些东东啦。
  65.  2010-02-03 13:48
    其实我想问大大们都是用什么xx工具上twitter的....求........
  66.  2010-02-03 13:49
    rad:其实我想问大大们都是用什么xx工具上twitter的....求........

    懒得上 专门看老赵八卦转播的飘过
  67.  2010-02-03 14:07
    又详细的看了一遍。。。。

    我不知道我算不算老程序员啊,反正写程序七八年了,要算上小时候玩BASIC,那历史就久远了。。。。。


    从C、C++、PHP、C#这么一路走来。语言都换了N次,就更别说平台了。要说操作系统内核,微软的确是没有*nix阵容稳定,但事实上自从NT后,到现在和可预见的将来,操作系统的内核都不会有太多改变了。要说API,我是不明白.NET到底改变了什么?如果说Vista不支持原来的WIN32的API了,那还情有可原,但那样估计微软已经被口水埋掉了,显然绝大多数的应用程序将无法运行。。。。直到我今天装的{zx1}的Windows 7,他的Windows\System32目录下还一大堆MFC的DLL。所以我不知道那些所谓的老程序员到底被强奸了什么?

    如果说是UI,如果说是原来的那些所谓的技巧在新的技术面前变得一文不值,那我非常乐意他们投身开源界,在那里没有微软这样的财团雇一堆程序员抢他们的饭碗。

    要说被QJ,现在的.NET程序员哪个不是天天在被QJ呢?ADO.NET才出来多久?现在就有了Entity Framework。WinForm眼看就要被WPF取代,你今天才研究LINQ,昨天老赵就在写F#了,你怎么不被技术QJ呢?水果取消的项目比MS多多了,水果玩的跳票也不见得比MS少多少。无非是找个借口掩饰自己腿脚不灵便罢了。。。

    据说以前的马拉松比赛,总有些人能从小街小巷、疏于防范的地方找到小路抄到别人前面,然后沾沾自喜。但这个比赛终归还是要看谁跑得快的。

    我记得.NET刚出来的时候,原来的COM程序员泾渭分明的分为两派,一部分人赌咒骂娘说被微软QJ,另一部分人说盼星星盼月亮终于有了xx的COM。其实每次技术的跃迁都是这样,技术的发展道路不是微软的员工决定的,而是那些聪明的、拥抱变化的程序员所决定的。

    事实上现在不也有WinForm程序员骂娘么?好吧我搞Web的确有点站着说话不腰疼。但是ASP.NET 2.0与1.1几乎全部代码都重写了,我Reflector的几万行代码一下成了历史,但我还是很喜欢ASP.NET 2.0甚至不惜在VS 2005还是beta的时候就重写自己的类库。

    反倒是,我现在觉得.NET 4.0改的太少了,闲着没事干。
  68.  2010-02-03 14:12
    Ivony...
    "ADO.NET才出来多久?现在就有了Entity Framework。"
    这个例子不合适啊,被束之高阁的只有Dataset而已 其他的还都辛勤的在EF下面努力呢~~~

    你的意思我是xx赞同的,一部分人的"被做爱" 往往是另一部分人的"不被做爱"造成的

    土地改革叫苦的都是地主富农 但是劳动人民站起来了
  69.  2010-02-03 14:14
    韦恩卑鄙 alias:v-zhewg:
    @Ivony...
    "ADO.NET才出来多久?现在就有了Entity Framework。"
    这个例子不合适啊,被束之高阁的只有Dataset而已 其他的还都辛勤的在EF下面努力呢~~~



    但是以前要DataTable、DataAdaptor啊,现在只需要关心Entity就可以了。。。。。

    API不一样的是天翻地覆么?
  70.  2010-02-03 14:16
    Ivony...:
    引用韦恩卑鄙 alias:v-zhewg:
    @Ivony...
    "ADO.NET才出来多久?现在就有了Entity Framework。"
    这个例子不合适啊,被束之高阁的只有Dataset而已 其他的还都辛勤的在EF下面努力呢~~~



    但是以前要DataTable、DataAdaptor啊,现在只需要关心Entity就可以了。。。。。

    API不一样的是天翻地覆么?

    所以才有Entity DataReader啊, 其实还是扩大了的东西 没谁扔下谁啊
    ADO。net更好更强大啦~~~
  71.  2010-02-03 15:18
    至于是否被qj,这算yin者见yin的问题。很老土的话:{wy}不变的是变化。不拥抱变化,没积极的心态,{zh0}别在业界混,很痛苦。(上面说DCOM/COM+,remoting,winform被淘汰也许有点煽情,现实很残酷:比如你想做.net下的桌面应用,你仅熟悉winform,但又想产品在未来10年内保值,你不得不学WPF。同理,可以把“COM+/ES/remoting”换成“WCF”)
  72.  2010-02-03 15:27
    声明:本人所说的话都是来源于网络,请勿跨省!也请不要删,也请不要对号坐!
    引用SB年年有,今年特别多!
  73. [楼主]  2010-02-03 15:31
    Ivony...
    即使变,提高生产力是实打实的。
    其实我不知道mac的情况如何,所以我不好发表意见。
    但是我了解Java的一些情况,没发现它和.NET有什么区别,但也没见Java程序员感觉被qj了吧……

    对了,你了解mac的情况吗?水果的折腾情况有哪些,能具体说说吗?
  74.  2010-02-03 16:07
    Jeffrey Zhao:
    @Ivony...
    即使变,提高生产力是实打实的。
    其实我不知道mac的情况如何,所以我不好发表意见。
    但是我了解Java的一些情况,没发现它和.NET有什么区别,但也没见Java程序员感觉被qj了吧……

    对了,你了解mac的情况吗?水果的折腾情况有哪些,能具体说说吗?

    所以非常期待老赵的mac和mono体验后的文章
  75.  2010-02-03 16:08
    Jeffrey Zhao:
    @Ivony...
    即使变,提高生产力是实打实的。
    其实我不知道mac的情况如何,所以我不好发表意见。
    但是我了解Java的一些情况,没发现它和.NET有什么区别,但也没见Java程序员感觉被qj了吧……

    对了,你了解mac的情况吗?水果的折腾情况有哪些,能具体说说吗?



    我不太了解水果的情况,但我想从众所周知的情况来说,水果都不是一个很好的借口。。。。

    这个公司曾经因为内讧自己把自己玩死,尽管不是{dy}个把创始人踢出去的公司,但是又把他找回来是{dy}个。这个公司近几年来业务从电脑切换到MP3播放器、机顶盒、手机、电纸书。。。。
    我不知道如果微软这样玩会被说成什么,令人发指的LJ?

    相较而言,微软同学操作系统一个产品做了几十年,Office也是,面向企业和后来的操作系统虽然使用了新的WinNT核心,但事实上也并非是颠覆式的改动。某水果公司连CPU的架构都可以换,微软这又算得了什么呢?

    从历史的观点看来,将来被水果QJ的可能性{jd1}远大于被微软QJ。毕竟微软的头头已经全身而退去度假了,水果的头头最近身体不太好。




    水果公司xx的忽悠人事件123:

    发布手机,公司从苹果电脑更名为苹果公司。

    使用Intel架构CPU。

    使用Mac OS X。
  76.  2010-02-03 16:22
    韦恩卑鄙 alias:v-zhewg:
    @Ivony...
    "ADO.NET才出来多久?现在就有了Entity Framework。"
    这个例子不合适啊,被束之高阁的只有Dataset而已 其他的还都辛勤的在EF下面努力呢~~~

    你的意思我是xx赞同的,一部分人的"被做爱" 往往是另一部分人的"不被做爱"造成的

    土地改革叫苦的都是地主富农 但是劳动人民站起来了


    劳动人民站起来了,又向后走了两步,坐下来了
  77.  2010-02-03 16:47
    我觉得看问题一定要深入本质。比如,winform的本质是什么?——USER32.DLL/GDI32.DLL的托管代码封装。USER32.DLL/GDI32.DLL以及它们的16位老兄,少说也有17、8年了吧。不管raw win32 programming,MFC,WTL,还是winform,本质是一样的,命令式GUI:在WM_PAINT中指示画这样,画那样。WPF属于呈现式GUI:申明object tree,WPF包办其呈现,如同浏览器呈现HTML tree。呈现式GUI对命令式GUI是革命的,天啊,从85年windows 1.0到05年的WPF,20年啊20年,ms才革命令式GUI的命,msxx是不思进取嘛!:)
    (对GUI研究不深,随口说的,请高手指正)
  78.  2010-02-03 16:47
    不知道为什么每一次遇到技术更迭的时候我都会很爽,又有新东西可以学了。
  79.  2010-02-03 16:48
    老实说,Joel Spolsky那篇《微软如何输掉API之战》还是有些道理的。
    微软现在的做法是当它认为现在的机制解决不了问题或者很难解决问题时,就会引入一套新的机制并试图以新的机制解决问题,不过很多时候这样只会让问题变得更加复杂。
    并且微软解决问题的方式让微软的技术体系背着沉重的包袱,win32 api为了兼容win16 api已经显得比posix笨重,再往后的com和.net则更甚。
    其实看看C# 4就知道了,C#只发展到第4个版本就已经显出老态(当然,很多语言标准十几二十年才发展两三个版本,而且改动非常小),或者说C#已经开始老化,老化的特点就是不得不为了平衡新特性和向后兼容而加入丑陋的设计,例如C# 4.0的协变/逆变中那个xx的菱形歧义,还有命名参数在父子类中的不同行为。我想,大部分无法自我扩展而只能通过加入语法或语义元素来引入新特性的语言都存在老化的问题。
  80.  2010-02-03 16:56
    话虽这么说,但学习是有成本的。不过我觉得学习成本只占总成本的很小一部分——大头是问题域本身的成本。比如,你从龙书、Programming language pragmatics等书中活了出来,炼成一身盖世武功,至于用lex&yacc或ANTLR或Oslo中的M语言做剑,以及学用这些剑,不是小菜一碟么?!
  81.  2010-02-03 16:59
    韦恩卑鄙 alias:v-zhewg

    似乎涉及到了政治了。这个比喻不好,毕竟真实情况可能和你说的正好相反。所以还是不用zz打比喻。
  82.  2010-02-03 17:00
    还能上Twitter啊,幸福啊。
  83.  2010-02-03 17:09
    看完google的内容
    心里蹦出几个字:可怜的老赵

    其实有时候觉得,英雄总是孤单的。
    在Tech Ed 2009上,看着老赵一个人坐在问答区,孤单的背影。

    我只是个菜鸟,学.net也是xx不明白jave写个从控制台输入需要用到stream(好久不看了,说错了别鄙视哈),而c#只需一个Console.ReadLine()。

    我算是微软的铁杆
    但是论战上我帮不了老赵,我是菜鸟
    但是,从我看来
    支持一个公司,跟爱一个人一样
    没有理由的。
    如果你发现你爱一个人有了很多理由
    那么就是你不爱他(她)的时候了。

    技术都是相通,
    无论.net,java,c++。
    我们学的一种思路,而不是语言。
    但是任何一种的封闭
    都会葬送自己的。
    在我看来
    微软的优势就是让你很容易的入门。

    好比找老婆,
    别的技术,好比那种你喜欢,但是你要付出很多才能得到的女人
    而微软,很容易答应做你的女朋友
    当然,想结婚,也得付出心血

    与其费半天劲去追一个女人
    我更愿意去找个答应做你女朋友的人
    两个人慢慢去创造爱情,创造幸福。

    我喜欢微软,但是我也在研究google app engine,
    也在看Apple SDK

    不要把自己封闭在一个平台上。

    所以说,请大家也不要难为老赵了。
    学到本领
    找到老婆
    就好了。

    也许你的老婆不如别人的好
    但是,你爱她,她爱你,就好了。




  84.  2010-02-03 17:27
    幸存者:
    老实说,Joel Spolsky那篇《微软如何输掉API之战》还是有些道理的。
    微软现在的做法是当它认为现在的机制解决不了问题或者很难解决问题时,就会引入一套新的机制并试图以新的机制解决问题,不过很多时候这样只会让问题变得更加复杂。
    并且微软解决问题的方式让微软的技术体系背着沉重的包袱,win32 api为了兼容win16 api已经显得比posix笨重,再往后的com和.net则更甚。
    其实看看C# 4就知道了,C#只发展到第4个版本就已经显出老态(当然,很多语言标准十几二十年才发展两三个版本,而且改动非常小),或者说C#已经开始老化,老化的特点就是不得不为了平衡新特性和向后兼容而加入丑陋的设计,例如C# 4.0的协变/逆变中那个xx的菱形歧义,还有命名参数在父子类中的不同行为。我想,大部分无法自我扩展而只能通过加入语法或语义元素来引入新特性的语言都存在老化的问题。



    菱形歧义是啥?
  85.  2010-02-03 17:31
    “C#只发展到第4个版本就已经显出老态”——天啊,我等C# 5.0都要等得发狂了,因为Anders同学许诺compiler as a service!
  86.  2010-02-03 17:48
    Ivony...
    菱形奇异的这个词让我想到了C++的多重继承,难道指的是
    IEnumerable<Derived> -> IEnumerable<Base> -> IEnumerable<IAnimal>

    IEnumerable<Derived> -> IEnumerable<IDog> -> IEnumerable<IAnimal>
  87.  2010-02-03 18:01
    class Base { }
    class DerivedA : Base { }
    class DerivedB : Base { }
    
    interface IFoo<out T> {
        void Bar();
    }
    
    class MyClass : IFoo<DerivedA>, IFoo<DerivedB> {
        void IFoo<DerivedA>.Bar() {
            Console.WriteLine("DerivedA");
        }
        void IFoo<DerivedB>.Bar() {
            Console.WriteLine("DerivedB");
        }
    }
    
    class Program {
        static void Main(string[] args) {
            IFoo<Base> x = new MyClass();
            x.Bar();
        }
    }
    
    

    猜猜会输出什么?当然,代码是我随手写的,可能会有错。
  88.  2010-02-03 18:08
    会输出结果!人人都知道
  89.  2010-02-03 18:10
    关于C#4中协变/逆变的歧义问题,可以去看看,不过要翻*墙。
    那个博客之前有一系列文章都是讲这个的,有时间的话我推荐都可以看看。
  90.  2010-02-03 18:16
    Steven Chen
    随便瞎说的, 勿怪~
  91.  2010-02-03 18:22
    韦恩卑鄙 alias:v-zhewg
    韦恩卑鄙 alias:v-zhewg:
    .net和com本来就没有不兼容,com/ole只是一个二进制接口规范嘛,.net各种方式包装实现起来都是很完备的
    MFC,DCOM/COM+也不算淘汰啦,在.net 库低下跑的还是这些东东啦


    虽然思路差不多, 但就像你说的:

    引用韦恩卑鄙 alias:v-zhewg:
    我觉得 .net是那些玩win32和 com到深层的人为了改善当时怨声载道的状况,欢天喜地的作品,而且真正服务到了很多用到深处的人。


    .net的出现, 真的是大快人心。 极大的提高了生产力(从商业角度说), 以及代码的美感(从技术角度说)。
  92.  2010-02-03 18:23
    hoodlum1980:
    @OwnWaterloo
    不要胡言乱语。讨厌你们这种不负责任的随意评论。从你的结论来看你根本就不懂COM,还评论什么。


    分享下你的高见?
  93.  2010-02-03 18:27
    编译所有程序还在用2.0的路过。
    毕竟给公司做事,还是要考虑用户的系统环境的说。
    如果win7普及了,或许会转向3.5,但是除了wcf以外,也不觉得有什么特别需要引入的东西。
    单就.net来说,这10年间,除了1.1到2.0时,泛型的增加和命名空间结构的一些改变以外,改进一直不都是挺平滑的么?
    何况就算linux,虽然市面上的发行版都是kernel 2.6,但是还不是分debian和freeBSD等很多派系么?有的时候想找到能直接在自己机器上跑得安装包也很麻烦。
  94.  2010-02-03 18:28
    幸存者:
    关于C#4中协变/逆变的歧义问题,可以去看看,不过要翻*墙。
    那个博客之前有一系列文章都是讲这个的,有时间的话我推荐都可以看看。

    匹配{dy}个符合的接口 倒还可以理解啊
  95.  2010-02-03 18:36
    <out>是4.0新增的关键字吧?类似于List<int>和List<object>的转化问题那种。
  96.  2010-02-03 18:38
    韦恩卑鄙 alias:v-zhewg
    反正我是觉得靠顺序来匹配接口实在太不直观了,像有两个以上可匹配的重载方法时编译器就直接报错了,不会按顺序来匹配。
    不过,这个问题恐怕也很难有更好或者更合理的解决方案。
  97.  2010-02-03 18:44
    幸存者:
    @韦恩卑鄙 alias:v-zhewg
    反正我是觉得靠顺序来匹配接口实在太不直观了,像有两个以上可匹配的重载方法时编译器就直接报错了,不会按顺序来匹配。
    不过,这个问题恐怕也很难有更好或者更合理的解决方案。

    我是觉得实现接口的时候要注意一些就可以了
    搞不好这个还能“不是Bug是feature呢” 当成职责链用 哈哈哈


郑重声明:资讯 【李笑来激起千层浪,赵姐夫力拒众强敌- 老赵点滴- 追求编程之美- 博客园】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——