Windows编程革命简史

Windows编程革命简史

源文:A Brief History of Windows Programming Revolutions (Ron Burk)

首先,是 Windows API 和 DLL Hell。(译注:DLL Hell——DLL灾难,就是微软的DLL升级时因为不同版本可能造成应用程序无法运行的灾难,首当其冲的是COM编程,相信大家都知道某些木马或是病毒更改了一些系统的DLL可以导致整个Windows不举,这就是DLL Hell) 于是,第一次革命是DDE——我们可以创建一个状态条在上面显示Microsoft的股票价格(译注:Dynamic Data Exchange,工作原理是: 甲方申请一块全局内存,然后把内存指针postmessage到乙方,乙方根据收到的指针访问那块全局内存)。

在那个时候,Microsoft 创建了 VERSIONINFO 资源来管理版本信息,当然,是用来消除DLL Hell。但是,另一个微软内部的小组发现了DDE的致命缺陷:这不是他们做的!

为了解决这个问题,他们创造了OLE(很像DDE,只是名字不一样),而且,我还记得在一次 Microsoft 大会上,某个微软的演讲者正式宣布—— Windows API 马上就会被 OLE API 所重写并取代,我还盲目地相信了这一说法。而且,所有的在图形界面的控件都会是OCX,那是OLE引入的接口,同样,其目的是为了消除DLL Hell。相信大家都记得,那个时候,我们是怎么地梦想着有一天,我们的应用程序(当然是非常大的程序)可以完全地被嵌入到Word文档中。

然而,在Microsoft的某处,Microsoft有些人开始信仰 C++,其确信MFC的出现并可以解决所有的一切问题,但是,因为历史原因,OLE并没有出局,其改了一个名字,叫COM,此时,我们立马意识到OLE(以前的DDE?)真正意味着什么——其用精心的版本管理系统来消除DLL Hell。与此同时,Microsoft的一个变节小组发现了一个MFC的致命缺陷:这不是他们做的!

当然,微软件的动作是很快的,他们立刻修正了问题——创造了ATL,有些像MFC,只是名字不同,他们想使用漂亮的ATL把那些晦涩难懂的COM的知识给隐藏住。这个动作刺激了COM团队(或是OLE团队?)改名为ActiveX,并发布了成千上万的新接口(甚至是很多版本化的接口,当然,主要目的是为了消除DLL Hell),当然,ActiveX可以让我们的程序可以从Web游览器上下载,并可以完美地和病毒一起嵌入浏览器中(哈,还不紧跟时代,感谢ATL吧)。此时,操作系统团队就像一个失宠的孩子一样,大声呼喊着“Cairo操作系统来了”引起大家注意,当然有一些怪异恶心的东西连他们自己也无法解释清楚,所以,别提发布了。为了声誉,操作系统团队的确引入了“系统文件保护”的理念,当然也是为了消除DLL Hell。

这个时候,Microsoft的某个团队发现了Java的致命缺陷:这不是他们做的!于是他们创造了一个叫J,或是Jole,或是ActiveJ的东西(对不起,我真的记不起叫什么了)来挽救Java(译者:应该是Visual J++)。看起来很像Java,只是名字不同罢了。这太让人兴奋了,但是Sun使用了一些相当古老的法律条款向Microsoft提起了法律诉讼,其在一年内限制了任何一个公司可以发布类似Java的产品。这明显是抑制微软复制别人产品的一次尝试,唯一不同的,其结果导致了微软流向国会议员裤兜的现金网络的建立(在这个网络可以得到时事新闻和价值$14.75的T恤衫)。还记得 J/Jole/ActiveJ 的项目经理用他的鞋桌在敲着桌子并信誓旦旦地坚持 Microsoft 将永远不会放弃他的产品。SB!所有的这些也就仅仅意味着一件事——没有人关心ActiveX团队(或者是COM?)。令人难以置信的是,微软把这些东东全部集成起来,成了COM+(难道不应该是ActiveX+?),还有MTS(我不知道为什么没有COM和Active或是X或是+的字眼,而直接叫MTS了——我为这个名词感到实实在在地震惊!)。他们总是那么NB地为那些流行词加上“+”号。在那段时间,还有人曾叫喊着“Windows DNA”以及“Windows Washboard”,但这两个东西最终在我搞清是什么玩意的之前就夭折了。

在这一点上,Microsoft已经很不安地窥视着Internet好几年了,他们终于意识到Internet上有一个致命缺陷:嗯,你应该知道这是什么(译注:Internet不是做他们做的!)。于是他们开始培养我们和.NET约会(.NET的发音很像“doughnut”圆环图,不过,这只是他们的唯一不同),这和Internet很相似,只不过.NET有更多的印刷品。其让我们清楚再清楚地了解一件事:.NET会消除DLL Hell。.NET包含了一个新的编程语言,叫C#(为了解决已经死翘翘的Active++ J++的缺陷)。.NET还包含一个虚拟机,所有的语言都运行在上面(这主要是为了解决依赖于Intel CPU的缺陷)。.NET还包含了一个单一的登录系统(这主要是为了解决“不把口令存放在Microsoft服务器上”的缺陷)。实际上,我们更容易做的是把.NET不包含的事给列出来。.NET绝对是一个划时代地Windows编程革命……当然,仅到明年。

(全文完)

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

好烂啊有点差凑合看看还不错很精彩 (55 人打了分,平均分: 4.13 )
Loading...

Windows编程革命简史》的相关评论

  1. 好烂的翻译。举一个例子,文中多次出现的“they didn’t write it!”意思是说某小组发现某某技术的致命缺陷是这个东西不是我们小组写(发明)的,讽刺软件界常见的NotInventedHere™症状。

    1. @HgG
      请注意,这篇文章的全文都是在说解决DLL Hell的,作者总是在说MS引入的最近的技术,并总是说别的小组(甚至一个背叛了MS小组)揭穿了MS的谎言,然后,因为没有干好,所以才要引入新的技术,但是还是没有干好,所以就这样了杯具了……不过,我很想看看你的翻译。

  2. ^_^ , 很有趣.
    作为一个曾经追随windows到.net 1.0的老程序员, 深有同感, 我会心的笑了.

    不过所幸的是, 我最近几年专项*nix和web了 :)

  3. @JFFO
    @明城
    源文的发布是在2009年12月,所以应该是今年。为什么是一年呢?文章的前面已经铺垫地很清楚了,为了解决DLL Hell,微软用不了几年就总是会用新的东西来取代之。

    1. 如果是这样的话,那么整个文章的逻辑应该是什么样的?望指教。就命这一句来做个例子吧——“another group within Microsoft discovered a fatal flaw in DDE: they didn’t write it! To solve that problem, they created OLE”

  4. 想起10年前看到这些名称时的困惑了,OLE,DDE,ActiveX,想想有这么多东西要学习啊。
    结果证明了跟着微软学编程就是浪费时间。

  5. 关于那个“they didn’t write it!” 我理解的是,另外一个小组发现了一个致命的问题:(这时候,通常情况下,就是要介绍说,发现的致命问题是什么的;但是)他们没有写下来。(所以我也不知道到底发现什么致命问题了)
    我觉得这种风格更像是讽刺ms。
    让我想起当初费玛大定理(不知道是不是这个定理)的证明,一哥们说推导出来了,可惜这个书的空白地方太小,写不下来,就没写;结果浪费了后人几百年的时间来重新证明。

    个人观点~~

  6. 起初,世上有Windows API和DLL Hell。然后有了DDE,史称第一次Windows编程革命——还记得怎么通过动态链接在状态栏上显示Microsoft股票的即时价格吗?
    差不多同时,Microsoft发明了VERSIONINFO资源,消灭了DLL Hell。但Microsoft内部的另一个开发小组发现了DDE的一大致命缺陷:这玩意儿不是我们组写的!
    为了解决这一重大缺陷,他们创造出OLE(除了跟DDE不一样,就跟DDE一样)。我依稀记得某位微软演讲人在微软大会上庄严宣布Windows API将很快被重写为OLE API,屏幕上所见的任何控件都将是一个OCX控件。OLE引入的若干接口消灭了DLL Hell。当初“置身于革命洪流”的激动之情,君犹记否?都曾经梦想将应用程序内嵌在一个(显然将变得相当庞大的)Word文档里头吧?
    不知道从哪里开始的,微软信了C++教。应运而生的MFC再次解决了我们的所有问题,托继承的福。不行,OLE才不会坐以待毙,它华丽变身成COM再次登场。突如其来之下,我们猛醒了,OLE(还是该叫DDE?)才是世间万物本来该有的样子——何况这次它还带了一个精巧绝伦的组件版本系统,完全消灭了DLL Hell。就在这普天同庆之时,微软内的一小撮叛乱分子发现了MFC的致命缺陷:它不是我们组写的!
    他们毫不犹豫地挺身而出,发明了ATL来解决这个重大缺陷。ATL,除了跟MFC不一样,就跟MFC一样,它打算将COM小组努力教会我们的那些销魂细节全部隐藏起来。COM小组(或者该叫OLE?)受了刺激,发奋图强,在给自己改名ActiveX之余,接连放出数百坨新接口(包括全新的版本管理接口,完全消灭了DLL Hell),同时震撼推出通过网络浏览器下载程序的惊喜功能,附赠众多病毒任凭用户挑选一并下载(哈,ATL小牙签们,这下你们没辙了吧!)。作为一路被忽视的小孩,操作系统小组开始哭闹着争取注意力,让大家注意“Cairo就要来了”,至今他们都没解释清楚Cairo到底是一坨什么玩意儿,更别提发售了。不过有一点必须夸他们,的确是操作系统小组率先提出了“系统文件保护”的先进理念,完全消灭了DLL Hell。
    与此同时,微软内的另一个小组发现了Java的一个致命缺陷:它不是我们发明的!作为补救措施,他们创造了J,也可能是叫Jole或者ActiveJ(老实说,名字我记不得了),它除了跟Java不一样,就跟Java一样。这是多么激动人心的一件事,可惜Sun援引大清律例《关于一家公司每年发布脑子进水产品次数的规定》把微软给告了。这完全是对微软创造除了跟其他产品不一样,就跟其他产品一样的产品的自由的赤裸裸的压迫,最终结果是造就了“微软向国会议员裤兜里塞钱网络(MSFSMTCN)”(加入本网络即可享受新闻邮件订阅及$14.75T恤优惠)。记不记得J/Jole/ActiveJ的项目经理一边拿鞋拍着桌子,一边信誓旦旦微软绝不会抛弃他手中的产品?傻了吧!还不是因为不够重视ActiveX(或者该叫COM?)小组。这群生命力无限的API制造机又带着COM+(不是应该叫ActiveX+才对吗?)和MTS杀回来了。(我完全想不明白为什么MTS的名字里面没有出现“Active”、“X”和“+”这几个字——他们这次天马行空的创意令我佩服得五体投地!)他们放话说将来还要给所有词都再加一个“+”呢。差不多同一时间,还有人嚷嚷了一阵子“Windows DNA”和“Windows搓衣板”,不过还没等我弄清楚那是什么就销声匿迹了。
    这个时候,微软已经冷眼旁观了Internet好些年,心里越来越不安。他们刚刚发现了Internet的一处致命缺陷:嗯,你懂的。所以就有了如今的.NET(除了不一样,发音就跟“doughnut”差不多),.NET就跟Internet差不多,除了公关稿多一点。我们要非常、非常强调一点事实:.NET将会消灭DLL Hell。.NET包含了一门叫做C#的全新编程语言(Active++J++语言因为有一处致命缺陷,已经不幸入土为安了)。.NET包含了一个虚拟运行时机器,所有语言都会在上面运行(因为他们发现运行在Intel CPU上有一处致命缺陷)。.NET包含了一个单一登录系统(因为他们发现你不把所有密码都保存在微软公司的服务器上会导致一个致命缺陷)。.NET包含的实在是太多了,反过来列举.NET没有的东西说不定还更容易呢。总之,.NET绝对会给Windows编程带来革命性的变化……直到下一次革命。

    1. 不错不错,翻译的还可以,有一些译得比我好,这点我承认,很嬉皮。就是自己的主观意识多了些,你加入了很多原文不曾有的表述。另外,有几处我觉得有些欠妥,比如:

      They didn’t write it! 变成了“这不是我们组写的”,直译是“他们没有写它!”。另外,这个也不合上下文的逻辑。

      “除了跟DDE不一样,就跟DDE一样”,这个翻译很绕口令啊,而且看不懂。原文是“which was like DDE, only different”,要是直译也应该是“它就像DDE,只是不同”,什么不同,应该就是名字不同。

      “项目经理一边拿鞋拍着桌子,一边信誓旦旦微软绝不会抛弃他手中的产品?傻了吧!还不是因为不够重视ActiveX(或者该叫COM?)小组”,“还不是因为不重视……”这句明显错了。

      “微软已经冷眼旁观了Internet好些年,心里越来越不安”,即然冷眼旁观,为何又会不安?窥视不挺好吗?

      “Cairo就要来了”,Get ready to Cairo。这个翻译也太搞笑了吧。Cairo是开罗啊。后面的就更错了。let alone这个短语意为“放任不管的”,而不是“更为说了”。这也译得太随心所欲了吧。

      还有很多译得不准的我就不列了,有人说过,翻译不存在好和坏,只有烂和更烂之分,的确如此。不过,说句实话,挑别人毛病的过程还是很有趣的。“你的翻译的确太烂了”。哈哈。

  7. @陈皓 我真是蛋疼,放着一堆工作,真的给你译了。
    “他们什么也没做!为了解决这个问题,他们创造了OLE”怎样都说不通吧?

  8. @HgG
    可能我表述不太清楚,不是说一定是要“写下来”
    write可以做“to express or communicate in writing; give a written account of”(http://dictionary.reference.com/browse/write)讲。
    这个bug没有书面的东西记录下来而已

    @tian
    也来翻译翻译~~

  9. 原翻译真是莫名其妙。
    关于they didn’t write it的意思,举个例子But another group within Microsoft discovered a fatal flaw in DDE: they didn’t write it!
    这里说了是another group,也就是并非搞DDE的小组。所以another group认为DDE的致命错误是DDE是别组写的,不是自己组写的。所以他们又另起炉灶重新发明轮子。
    博主估计完全没看懂通篇文章在说啥就翻出来了。hgg理解才是对的

  10. @陈皓
    不能理解“Not Invented Here”的思维吗 ?这个东西不好因为不是我做的,别人做的肯定比较烂,然后才有 一次又一次重新发明轮子的事情。

    “They didn’t write it!” they就是提出异议的another group,这点没有疑意吧?“我们”只是让句子通顺的技术处理。

    > “除了跟DDE不一样,就跟DDE一样”,这个翻译很绕口令啊,而且看不懂。
    就是要这个效果,你的译法把笑点丢了。

    >”这句明显错了”
    我不知道明显在那里,先放下。

    >窥视不挺好吗?
    个人喜好,不讨论。

    >Cairo是开罗啊。后面的就更错了。let alone这个短语意为“放任不管的”,而不是“更为说了”。这也译得太随心所欲了吧。
    Cairo是被取消的一个 操作系统项目,给你个链接http://en.wikipedia.org/wiki/Cairo_(operating_system)
    let alone用作conjunction的时候,我给你抄一段M-W吧 :to say nothing of ; not to mention ― used especially to emphasize the improbability of a contrasting

    “忠实于原文”可能只是理解不到位的借口呢。

    1. 的确是不辨不明,至少我之前不知道开罗操作系统,现在算是了解了。有些理解的确是没有理解好。关于“they didn’t write it!”中的they是“another group”,这个我没有疑意。因为全篇文章都是在说DLL Hell,根据上下文的逻辑,我个人认为因为DDE这个团队并没有解决好DLL Hell,所以才会有别的团队跳出用别的思路来做这个事(原文的小标题叫“Eliminating DLL-Hell”,我以为这是中心思想,而不是“重新发明轮子”,不然整篇文章就有逻辑问题了东拉西扯了)。我觉得可能更好的翻译是——“这不是他们做的”更接近原文,也许这是原作者的两层意思。其实,你我的理解都差不多,不过,你有你的喜好罢了。另,把“which was like DDE, only different”翻成“除了跟DDE不一样,就跟DDE一样”,译文实在很难理解。我相信原意就是“换汤不换不药”,所以,翻译成“名字不同”更容易理解一些。不管怎么样,这样的过程挺好的。

  11. 说着“你译得太烂啦”的人很多,像HgG这样真的自已从新译了一遍以作比较的人我倒是第一次看到。
    看能人之间争吵很长见识啊。
    可惜HgG没有留下其他信息(还是说已经是名人了我孤陋寡闻?),不然真想看看HgG平日写的文章,订阅一下博客什么的呢。

  12. 赞一个的翻译,挺好玩的一篇文

    俺相当讨厌windows编程,刚接触MFC时还没感觉,后来转到WEB开发之后就越发回不到MFC。抽象不够抽象、底层不够底层的。期待标准化与函数式编程盛行的将来。

  13. Eliminating DLL-Hell — again
    消除 DLL-Hell —— 永无止尽
    (译注:DLL-Hell指同一DLL存在不同版本的隐患,从而造成应用程序运行错误或崩溃,常见提示信息为“xxx无法找到动态接入点在xxx.dll上”等等)

    First, there was the Windows API and DLL Hell. Revolution # 1 was DDE — remember how hot links let us create status bars showing the current price of Microsoft stock?
    世上先有了Windows API和DLL Hell。随后,DDE带来了第一次革命——还记得我们是如何利用动态链接在状态栏上显示出微软股票的当前价格吗?

    About that time, Microsoft created the VERSIONINFO resource, which eliminated DLL Hell. But another group within Microsoft discovered a fatal flaw in DDE: they didn’t write it!
    在那个时候,微软发明了版本信息资源用以消除DLL Hell。但微软内另一个小组发现了DDE的致命缺陷:这玩意不是他们写出来的!
    (译注:最后一句话意思就是,别人写出来的DDE肯定不会有我们组自己开发的方案好,所谓程序员相轻的症结。这个症结造成了后述的重复造轮子的现状。)

    To solve that problem, they created OLE (which was like DDE, only different), and I fondly remember a Microsoft conference speaker proclaiming that the Windows API would soon be rewritten as an OLE API, and every control on the screen would be an OCX. OLE introduced interfaces, which eliminated DLL Hell. Remember “in situ” fever, and how we dreamed of the day that our applications would all be embedded in a (apparently very large) Word document?
    为了解决这个问题,他们发明了OLE(很像DDE,只有名字不同),并且我依稀记得一个微软发言人在大会上郑重宣布,Windows API即将被重写为OLE API,以及屏幕上的每一个控件都会是一个OCX。OLE引入了接口机制,从而消除了DLL Hell。还记得我们“当时”的狂热,还有梦想着能够将自己的应用程序(可能非常大)嵌入到一个Word文档中的未来吗?

    Somewhere in there, Microsoft got the C++ religion and MFC emerged and solved all our problems again, but with inheritance. Well, OLE wasn’t going to take that sitting down, so it re-emerged as COM, and suddenly we realized what OLE (or was it DDE?) was really meant to be all along — and it even included an elaborate component version system that eliminated DLL Hell. Meanwhile, a renegade group within Microsoft discovered a fatal flaw in MFC: they didn’t write it!
    不知不觉的,微软又加入了C++派,搞出了MFC,“再次”解决了我们遇到的问题,但又留了点尾巴。当然,OLE不会坐以待毙,所以它进化成了COM,于是我们突然间发现OLE(抑或是DDE?)才是解决一切的王道——它甚至包含了一个精妙的组件版本系统来消除 DLL-Hell。与此同时,微软内部一个叛逆的小组又发现了MFC的致命缺陷:这玩意不是他们写出来的!

    后面的懒得翻译了,基本上就是重复着之前的东西,只要里面关键的几句话搞懂了就可以了

  14. 很显然Java还是有dll hell(或者说是jar hell?)……
    很显然.net消除了dll hell……
    很显然.net已经有8年历史了……
    很显然我搞不懂为什么这篇2009年的文章觉得2002年诞生的.net也是到“next year”就挂掉的东西……

  15. 看到“Windows dna”会心的一笑,以前总是感叹“出生太晚”。
    这回也终于让我碰上一回了,worx的大部头《C#高级编程》开篇几张就讲了这玩意。

  16. 其实还有更好玩的,MS当初把宝都压到了“Xml WebService”上去了,说的神乎其神的。但经过这么几个版本下来,除了加了个1.2的soap实现外,并没看到有什么经天纬地的贡献出来。

  17. 确实,仔细看看原文,不论是直译还是意译,HgG的翻译表达的意思更接近原文。

  18. @ly
    是费马大定理。不过那个定理被猜想了N多年(未被证明的只能是猜想。后来有人用了数百页才搞定)
    不过感觉作者没有想过内涵这个。。仅个人感觉

    个人还是喜欢”这不是他们做的!”。
    翻译还是老实点好,最好不要带入自己添加的东西。即便搞笑文,内涵文,什么的,也不必出手把内涵写白了。

    另,@bell 同学

    bell :
    说着“你译得太烂啦”的人很多,像@HgG 这样真的自已从新译了一遍以作比较的人我倒是第一次看到。
    看能人之间争吵很长见识啊。
    可惜HgG没有留下其他信息(还是说已经是名人了我孤陋寡闻?),不然真想看看@HgG 平日写的文章,订阅一下博客什么的呢。

    的确。光说不做的只会让人笑,但真做出来了,的确让人佩服。
    不过个人感觉@HgG 先生写的有点过于追求花哨了吧。感觉这不是翻译,而是自由发挥的演讲了。。。。

  19. 个人觉得吧,@HgG的翻译实在很棒,原文本来就是一篇讽刺性的文章,如果直译就没什么意思了,还不如直接用Google translate呢,加入个人的感情色彩也没什么不对,因为不同的语言本身的感情色彩就是不相同的,直接翻译后感情色彩就丢失了,只要主题意思和原文符合就不错

  20. 我不懂英文
    所以
    如果我想请人翻译一篇外文的的话
    最基础的是译对内容(学术类的这样就够了)
    进阶要求就多一个就是原文的风格意境
    且最好能注明一些谚语、俚语等(就像英文的“化干戈为玉帛”这个如果直译就……)
    任何外文著作如果直译过来那也就不是著作了

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注