中国开发网: 论坛: 程序员情感CBD: 贴子 146104
haitao
2
回复人: sunhui(MFC.NET) ( ) 信誉:97 2005-3-10 8:06:29 得分: 0

一时心血来潮,就发了这个帖子,很难说是有心,还是无意。几天前我在新浪网上看应氏杯围棋决赛,我觉得该赢了吧,作为一个围棋迷,我们等了十几年,等到了属于国人的应氏杯。记得7、8年前在还在大学工作的时候,有一次,一位同事兴致冲冲的走道我面前对我说:“嗨,昨天马XX赢了李昌镐!”,当时我在系办公室正在看报纸,那位仁兄见我头都没抬,非常不满的抢下报纸,对我吼道:“喂!马XX赢了李昌镐!!你听到没有!!!”,我对他说:“你大惊小怪个啥?!马XX输了李昌镐多少盘,你知道吗?”,马XX几乎一直在输给李昌镐,人们已经不奇怪了,偶尔赢一次,国人就把他捧得北都找不到了,李昌镐弱冠17的时候就傲视这个世界了,可至今面孔不变,几天前的农心杯,中日联军5个人,被他打个落花流水,李昌镐是公认的世界第一,以至于有的高手知道下一个对手如果是他,就会去订回程机票。这次应氏杯,国人竟然感谢崔哲瀚,何也?因为这个弱冠19的小子,挡住了他的大哥李昌镐才使得应氏杯有了悬念。当国人媒体在说韩国仅李昌镐一人厉害的时候,不知道是出何居心还是自欺欺人,李昌镐年方30,不知道要力压中、日多少年!面对这个名字,真有点麻木了,这个太极虎!软件界又来了我们一向不齿的印度虎,2001年我们的软件出口额仅是印度的四十分之一,我们震惊了,怎么可能呢?这个四十分之一水分很大,很可能更可怜!当时我在大连参加一个关于“大连软件出口国内第一”的官方会议,那位大人在会上说:“据说,我们大连软件出口国内排名第一,市有关领导希望今天的会议给出这个第一的数字依据,希望你们把数据报上来,去年的数据也可申报,注意,我们要的只是数据,你们仔细体会,我们根据数据,有奖励,机会难得呀!”……。某一天,几个朋友在我家看央视的对话节目,对话一方为国内的软件大鳄们(用友、阿尔派等公司的老总们),另一方为印度软件的一个代表团。当问及中、印软件差距的时候,我们的刘老总(代表阿尔派)不以为然的说,据他的看法,我们已经快赶上(印度)了,……,言下之意颇有印度的水平不过如此的感觉,印度方的话我至今记忆犹新:“是否赶上,国际市场说的算!在中国看来,印度程序员的个性不足,技术也不怎么样,其实是个错觉,印度软件首先注重个性,许多重要的美国商品化软件都是在印度本土开发的……”,我们的舆论总是将印度程序员的水平描述的平庸至极,可是差距日渐拉开,……,围棋、足球(不好意思谈,谈不出口!)、软件,我们被近邻严酷的封锁了,乐坏了记者们、给媒体带来了生机……
日本江户时代的围棋,如果一个人要想世袭一个称号(例如:本因坊),他必须战胜所有的师兄弟,然后,住进师父家的内室,你知道以后的事情吗?以后,这个棋手,就得为师父一家做饭、带孩子、搞卫生……,其余的门人则一心一意的下棋,这样的人、方式,造就了一代一代的本因坊,他们的棋谱大多数都流芳至今,这就是早期日本围棋的悟道模式。软件总共有多少语句?我最早接触的计算机软件教材是一本英文版的(影印的D版),不同于我们,那本书的作者构造了“X-语言”,他们不讲什么C、Pascal、Basic,一旦缺了什么机制,就给“X-语言”添加些成分。什么C、Pascal、Basic,你感觉差不多,但现在却分出了等级!我们驾驭语言的能力弱得很,可是我们在语言的细微之处却很讲究,不知道对不对,许多程序员也许是出于虚荣而用C++,事实上,地球人到知道,做数据库,Delphi、VB远比C++胜任,铺天盖地的C++的书,写的东西几乎雷同,因为,有用的或者作者不写、或者作者不懂。有时我在想,如果国内没有内需,会怎样?也许软件内需的存在,造就了中国软件的特色,我认为国内业界并没有充分利用中国软件内需的存在,也许中国软件内需的存在是软件落后的硬伤。
我记得一部电影《神辫》,那个英雄的大辫子被洋人炸掉了,最终他成了神枪手,战胜洋人用大刀、秘籍是不行的,用洋的东西战胜洋的技术才是正道。我觉得,一个好的程序员必须了解软件的历史,学习历史,你知道你为什么弱,别人是如何强大的。我们正在另一个战场上抗美(可笑的是我们却要赶超印度!),无论Microsoft、Borland如何争斗,无论他们谁统治谁,他们不影响美国的强大,朋友们,学习Microsoft,开发出让国人感到牛的软件!
这个帖子出乎本人的意料,愿意与大家共勉,希望这个帖子常在,与大家敞开心扉的交流!


回复人: sunhui(MFC.NET) ( ) 信誉:97 2005-3-10 15:41:05 得分: 0

看了许多网友的回帖,感到压力很大,不知道该谈技术,还是谈感想。每天看到中关村大街人来人往的匆忙,真是别有一番滋味,再我眼中,中关村大街似乎是双层的,总有以前的影子,早期中关村的痕迹若隐若现,总能看到已经消失很久的颐宾楼……。进入CSDN论坛,感觉到这里是个多彩的世界,各种各样的问题,比资金、没完没了的讲故事有趣得多,真希望找回过去,做一个快乐的程序员……

回复人: nlstone(天外流星) ( ) 信誉:90 2005-3-10 16:15:47 得分: 0

吸引各位道友最终走上程序员这条道路的,不是资金(我常跟别人说,如果想挣钱,不要做程序员,做生意去,那才是唯一的致富之道),而是用优美代码创造出来的世界.
程序的本质是在模拟现实世界,创造自己的世界,这种创造的快乐是我们激情的来源。
这几年虽然有了网络,但由于多种原因中国的程序员眼界还是太过陕窄。我们对网络的使用,多还停留在QQ/BBS/EMAIL的入门阶段。
十分盼望一些像楼主这样有经验的选手跳出来讲一些真切的现代软件业背后的技术/人物/故事
讲讲熟知的ms/ibm/sun/id/C/C++/java/...和不太熟知的bea/gp/aop/perl/phython/ruby/executalble uml/信息安全的挑战/复杂计算的面对的问题/并行计算的本质与实践/中大型机的应用...
世界软件开发的领域太广,百花齐放,而中国程序员的软件天空,又太小太小。。。



回复人: sunhui(MFC.NET) ( ) 信誉:97 2005-3-11 8:22:53 得分: 0

FireFox与Microsoft
FireFox在一片赞扬、欢呼声中激情登场了,也许人们真的期待已久,平静的水面终于被扔进一块石头。我是IE的最早期的用户了,1996年首次Microsoft的TED(技术教育大会),IE4还没有发布时候,我们有机会目睹了内部版本的IE4(当时内部名称是:纳什维尔,英文名称忘记了),那真是一次令人激动的预览,当时IE3与Navigator 3激战正酣。当你第一次看到想象中的“Active Desktop”,如果你没有身临其境,你不会激动。IE4本质上是一个Shell,其SDK是免费的,Navigator是基于Mozilla的浏览器,虽然是开源的,由于要照顾更大的共性(与操作系统无关),因此Mozilla不能充分的利用Windows的优势,Mozilla不能为广大的程序员带来所谓开发人员的“快感”,顶尖程序员可以驾驭Mozilla,以实现技术深度带来的乐趣,最早的Navigator同时提供17个版本(注意:不是17种自然语言,而是17种操作系统),从数学角度分析,Mozilla就像一组公理,你可以以此为基础开发不同操作系统上的浏览器,Navigator就是基于Mozilla的一个漂亮的结果,你能欣赏到代码结构的优美,然而失去的却是功能强大的个性(要知道,Windows用户在数量上远大于其他操作系统用户的总和)。普通用户不可能读懂Mozilla的代码,即使懂了也不能很好的运用,这也许是Mozilla(以及大多数开源代码)失败的致命原因之一。IE内核聪明的抓住了开发者,你想想:对数以万计的中、初级开发者而言,容易驾驭是首选的选择,也是明智的。我读过Mozilla,但我不会在开发过程中为一个具体的项目应用它。只要是浏览器,就不可能绝对的安全,无论是Mozilla,还是IE。当我了解到FireFox是基于Mozilla的一个新的浏览器,我基本上对其失去了信心,我有一个奇怪的观点:FireFox的推出,最大的受益者绝对是Microsoft,即使Microsoft失去20%的份额,但是会导致Microsoft强化IE,Microsoft正不知道如何促使IE进化的时候,FireFox的出现无疑为Microsoft提供了机会,物种进化的原则就是竞争,FireFox就是促进IE进一步强大的催化剂。FireFox的扩展机制的确十分灵活,如果对手不是Microsoft,就很难掀起波澜,而且当高级的开发者逐渐了解FireFox的时候,FireFox的漏洞就会渐渐暴露,试想想,如果某种Linux取代了Windows,那么,它的漏洞也会与Windows一样多,因为那个时候,会有与研究Windows漏洞一样多的人去研究对应得Linux的漏洞!从个人的角度上看,Microsoft也许有点“冤”,因为窥视Microsoft弱点的人实在太多了。从理论上看,计算机安全性是个永远的话题,就像任何社会都需要警察一样,没有了小偷、贼、犯罪,警察也就消失了,你想想,文明是什么?野蛮能消失吗?野蛮消失了,文明也就不存在了,高度文明就是更不存在了。人类克服了癌症,下一个疾病会比癌症更致命,但这并不意味着不必克服了癌症,进步真是一种挑战……
IE的技术构思肯定是个卓越的构思,IE可扩展的机制,会给Windows开发者带来许许多多的益处。我正在计划一片文章,介绍如何将你的对象模型与MSHTML库实现对接,这样,在HTML文件中可以将你的指令系统与HTML对象模型融合在一起。



回复人: sunhui(MFC.NET) ( ) 信誉:97 2005-3-11 10:51:22 得分: 0

话说“Hook”
在CSDN上时常看到关于“hook”,的问题,令我想起另一个话题,那就是游戏“外挂”。Hook提供一种改变一个Windows窗口消息处理的一种手段,通常的开发根本用不到,因此,谈不上“常用”,早期的Windows,由于不能很好的支持远东(当然包含汉字)地区的文字,因此出现了许多外挂的软件补充Windows的不足,中文之星是一个典型的、令国人自豪的软件,监控软件也许要运用hook技术,此外,很难想象什么软件会用到hook。有人问我,能不能改变一个进程的数据处理行为,我曾经告诉他:能,也不能!感觉告诉我,hook绝大多数场合下是一种“不礼貌”的行为。曾有一段时间,我的服务器,经常有人悄悄地近来,给我增加许多超级用户,肆意修改我的管理权限,我找到托管商,解决了这个问题,那时,我也买了几本服务器监听、安全方面的书,看了几天,我就放弃了,为什么?担心学坏(正、邪仅在一念之差),其实,每个服务器都很脆弱,对有经验的系统程序员而言,安全性与道德准则是联系在一起的,软件技术上走邪路很容易,有时我会想,如果我去设计病毒或者当黑客,会怎样?基础数学出身的我,数论、组合学、密码理论统统不是问题,Windows虚拟驱动程序开发,也不是问题!为什么那么多的人关心hook?国人的正道软件寥寥无几,可破解术却出神入化,可惜,可惜!hook是一种底层的编成机制,能理解好hook的人,完全具备掌握一流技术的底蕴,真希望回头……



回复人: ruxming(要把 MSDN 吃了) ( ) 信誉:100 2005-3-11 14:13:41 得分: 0


IE 的确是对开发者友好,其实正式因为msdn对开发者友好,
VS的IDE对开发者体贴 才使越来越多人吸引到Windows的开发。
就像Mac的封闭就是个失败例子。

BTW,MS 真的是 Borland的大股东?


回复人: jiangsheng(蒋晟.MSMVP2004Jan) ( ) 信誉:262 2005-3-11 16:53:36 得分: 0

微软的一些雇员对于COM2.0好像有多种理解,我个人就在MSDN BLOG上和微软研究院的网页上看见过两种COM2.0,怀疑分别指目前的.Net和COM+。不知道原贴那位仁兄从哪里得到的消息……

回复人: elssann(睡睡裤) ( ) 信誉:36 2005-3-11 17:11:53 得分: 0

生平最讨厌的就是用着WINDOWS开着IE在论坛上发帖子骂MS的人。
好像这都成了一种时尚。

强烈赞同楼主。

回复人: fohoo(飞狐) ( ) 信誉:98 2005-3-11 17:42:07 得分: 0

.Net是COM3.0??这一点我不赞同,.Net更多的是学JAVA,而不是COM2.0的升级版

我是用VC的,近来学了JAVA,有一点很深的体会,就是.class

c/c++编译后的代码是obj,而java是.class,java的创新之处在于,.class的加载是动态的,并含有真正的元数据(类信息),元数据很重要,数据类型的动态内存分配全靠它了。。。

VC不是可以用New动态内存分配吗?

C++的New是不完美的,因为C++的类不是真正的类,编译了后,就不在了,是编译层面的类,不是运行时的类,所以C++的类没有包括类所需内存大小的信息(这个太重要了),C++不能动态加载类,因为它的类不含分配内存的信息,.class做到了,实际上COM也做到了,但它不是根本的解决方案,它只是一个C++的补丁,在语言层面上搞定才是正道,所以才会出现.Net,有了真正的类信息,通过ClassLoader,可以实现动态加载,安全检查(Java类的private才是真正的private)..






回复人: sunhui(MFC.NET) ( ) 信誉:97 2005-3-11 17:47:35 得分: 0

To jiangsheng(蒋晟.MSMVP2004Jan) :
看到您的信誉值,可以判断出您是个高人,关于“.NET”的内部Code Name是COM 3的说法来自于Microsoft的Don Box,这个名字很权威,他在专著《Essential .NET》中明确了这个说法。
由于工作的原因,本人曾接触一些MSDN范围之外的资料,记得2001年有位Microsoft的人曾问过我:“What dou you thing about .NET?”,我感觉很不舒服,一个北京人满口洋腔!我回答说:“Microsoft的东西有个惯例,3.0版后再谈这个问题吧!”,此君笑曰:“你真了解微软。”,.NET 2.0值得期待,可怕的.NET 3.0会不会击溃Java,我们拭目以待……

回复人: sunhui(MFC.NET) ( ) 信誉:97 2005-3-11 18:05:15 得分: 0

to fohoo(飞狐):
其实.Net是不是COM3.0,对我们完全不重要,说到底,这些东西都是美国佬的,记得在大学教数学时,许多学生问我,为什么在大学学堂里几乎学不到中国的数学,为什么那么多的英文符号、希腊符号?我回答:“本来我们可以用‘撇’、‘捺’等替代那些A、B、C,也有机会不用希腊字母,在我们祖先强大的年代,我们搞封疆,不去殖民,因此西方的思维、符号就统治了现代的知识体系……”,COM学Java也好,JavaBean学COM也罢,我们没必要比较这些,Sun向Microsoft妥协也好,Microsoft向Sun让步也罢,都是美国的事,鄙人以为,学好、掌握这些强大自己才是正道,有一天我们强大了,评判这些不迟!


to fohoo(飞狐):
谢谢您的回复!顺便说一下,Visual C++通过对RTTI(运行时类信息)的支持实现了对C++类的动态加载、创建。

回复人: yinzhaohui(努力) ( ) 信誉:99 2005-3-11 18:48:15 得分: 0

想强大不是一天两天的事,也不是一两个天才出现就可以的事,最主要是要使整个体系健康良性的发展,还有就是中国很多东西都是拿来,并没有自已的核心技术很难生存,而MS最主要的优执再于大部分人都使用它以经有了很多概念集成,还有就是当一个公司大了就会看起来家一个社会或是一个小的国家,一个软件的好坏不在于它一套能卖多少钱,而在于使用它的用户数量,当它有了很大的用户量时它就是一个好的软件了,不管是COM还是JAVA还是其它,只要能满足我们开发的需求而且在这个开发组中大多数人都使用它我们就用它。而使用COM就证明在家MS妥协,而使用JAVA用于WINDOWS下开发我们也在为MS妥协,只要我们的用户说我的目标操作系统是WINDOWS我们又有什么选择了,我们的用户在为MS妥协.我们的最终用户都是WINDOWS的使用者这就是它的生命力

回复人: yinzhaohui(努力) ( ) 信誉:99 2005-3-11 18:56:09 得分: 0

还有就是没有必要为一个2.0和3.0这样认真,大家不是在说思想吗,MS说是多少就是多少2.0和3.0都表明是COM的提升,就是有一个COM不在了,那还是会有它思想上的影子,就家 sunhui(MFC.NET) 前辈的数学例子一样

回复人: fohoo(飞狐) ( ) 信誉:98 2005-3-11 19:10:25 得分: 0

to sunhui(MFC.NET):
C++是不支持的,MFC的RUNTIME_CLASS动态创建也不是一个真正的动态加载

CRuntimeClass* pRuntimeClass = RUNTIME_CLASS( CMyClass ); //因为这个,需要CMyClass的头文件,也就是说需要编译器介入来分析CMyClass的头文件才能生成CRuntimeClass结构,从而创建CMyClass,但是运行时哪来的头文件和编译器呢?? 
CObject* pObject = pRuntimeClass->CreateObject();
ASSERT( pObject->IsKindOf( RUNTIME_CLASS( CMyClass ) ) );


回复人: fohoo(飞狐) ( ) 信誉:98 2005-3-11 19:19:15 得分: 0

而COM可以,使用ActiveX Control test Container装入一个注册类,你可以执行它的类方法

回复人: yinzhaohui(努力) ( ) 信誉:99 2005-3-11 19:37:36 得分: 0

fohoo(飞狐) ,使用运行时动态类型检查是有代价,使用运行时动态建立也是有代价的,在JAVA中不管你需不需要这都会有它的存在,而MFC中增加了对它的支持,使用了一些宏,使一个类增加保存它动态检查和动态建立的信息,和对应的方法来完成,而本来C++对RTTI也有支持如typeid等,代支持不足还有就是COM是通过接口实现IDispatch来支持接口方法检查的,可以都过它得到ITypeInfo接口来获取对应COM对象所具有的接口方法名,参数等信息的

回复人: sunhui(MFC.NET) ( ) 信誉:97 2005-3-11 19:39:56 得分: 0

to fohoo(飞狐):
事实上,MFC支持真正的动态加载,我会在CSDN发一篇文章介绍这方面的内容,只需一个CRuntimeClass的指针,对应的类完全可以存在于另外一个库中,不需要头文件。

回复人: dzq138(钟添) ( ) 信誉:100 2005-3-11 19:40:40 得分: 0

楼主真的强呀.
楼主下一帖写写自传,人生经历,我想同样会很精采.大伙也喜欢的
来MSDN四年第一次见到这么精采原创.
第一次不是因为找资料而对一帖多次关注.

回复人: sunhui(MFC.NET) ( ) 信誉:97 2005-3-11 19:43:43 得分: 0

谢谢dzq138(钟添),只要有时间,我一定尽力!

回复人: noauh(student) ( ) 信誉:100 2005-3-11 19:50:03 得分: 0

楼主的帖子确实不错,不过楼主的"FireFox的推出,最大的受益者绝对是Microsoft"这句话不赞同.

因为有竞争才有动力,如果没有一个对手与你一同比拼,你也就会渐渐地失去了动力.

现在我觉得是努力的时候了,这点也要多谢楼主.^_^

回复人: fohoo(飞狐) ( ) 信誉:98 2005-3-11 19:50:55 得分: 0

to sunhui(MFC.NET):
事实上,MFC支持真正的动态加载,我会在CSDN发一篇文章介绍这方面的内容,只需一个CRuntimeClass的指针,对应的类完全可以存在于另外一个库中,不需要头文件。
------------------------------------------------------------------------------
虽然没见过,但我相信MFC能这样做,期待你的分享。。

我想可能就是个.class的雏形 :)

回复人: gentlelotus(朗月) ( ) 信誉:105 2005-3-11 20:10:29 得分: 0

感谢搂主无私的精辟讲解。
MS是一个技术、财力和商业智慧的组合体,从技术上我佩服MS(谈不上敬意),但是从一个国人的视点则多少有些敌意的感觉。学习MS是必要的,不过正像空客在波音面前崛起一样,真正的超越只能是依靠自己的东西,如果企图用着Windows操作系统来超越MS,那我无语。个人觉得印度也不过是一个比较强大的寄生虫而已(当然,我承认其具有一定的独立能力,然而它没有独立),任何一个其他国家或者地区都可以取代印度的地位(这里不讨论其代价),而如果希望取代MS的地位,恐怕很困难。我想中国的软件需要在坚定的做自己的东西的同时采众家之长,而不是在别人的东西上修修补补或者做个包装。只有从最根本的层次拥有自己的绝对产权,才能在最高的层次一决雌雄。[在众高手前班门弄斧实在惭愧,只是不吐不快。另:希望楼主能够在后续中给一些指导我们后来者的良言,感激不尽]

回复人: color99(木头人) ( ) 信誉:100 2005-3-11 20:11:19 得分: 0

楼主写得非常精彩,感觉受益非浅。

回复人: waterczh(中文) ( ) 信誉:100 2005-3-11 20:38:07 得分: 0

写的非常精彩,也非常长
学习

回复人: flier_lu(小海) ( ) 信誉:100 2005-3-11 20:39:44 得分: 0

.NET 1.0包括1.1都只是个半成品,2.0才算是基本达到了预期的目标。而现在MS的薄弱环节远不是.NET 2.0/3.0,而是缺乏一个完整的企业级应用体系与第三方社区支持,这方面 java 已经走的很远了。而且 .NET 1.1/2.0 之后,Sun 也开始警醒了,Java 5.0 就是回应,Java 6.0 更是关注到很多 MS 现在根本不够格关注的东西。因此虽然我是 Win 背景程序员,但3-5年内不看好.NET正面“击溃”Java,能赶上就不错了。:S

回复人: iamchinason(轩辕子) ( ) 信誉:100 2005-3-11 20:40:34 得分: 0

感言于楼主对中国软件业的看法 对微软及其软件的评价
我觉得中国软件业的出路 要有CPU 有自己的系统软件研发能力 目前我们没有一个响当当的CPU 没有一个让我们为之而倍感自豪的编译器 没有一个像样的数据库 没有一个我们自己的操作系统 在应用系统方面也没有什么值得大加赞赏的力作 希望中国软件业多出几位系统软件领域的开拓者 踏出中国软件业的发展之路
有技术 有思想 也要有行动 去实现自己的梦想 也同时实现了国人的梦想

回复人: Sunmast(速马.上海) ( ) 信誉:100 2005-3-11 20:53:46 得分: 0

绝对的好贴
这让我想起了看《IT大败局》时的情形
楼主的帖子简直有过之而无不及

回复人: iamchinason(轩辕子) ( ) 信誉:100 2005-3-11 20:54:10 得分: 0

在研究 使用别人的 技术 工具的时候 想一想我们为什么不能开发出来呢
对别人的东西观注的太多就会忽视自己的东西 使自己的创造力下降
对自己的东西关注的太多就会使用自己的视野变窄 落后于时代的步伐
在学习别人东西为自己的经济基础寻找的保证过后 也让我们踏上创造之路

回复人: gy984(java.NET) ( ) 信誉:100 2005-3-11 20:56:46 得分: 0

技术很深,看的挺多,可以看出来,其实重要不是技术,而是上面产品的战略.微软的产品不是一个产品,而是一个整体,从以前到现在PC和XBOX的关系,微软就是这样,不会让自己做的东西白了.

回复人: Sunmast(速马.上海) ( ) 信誉:100 2005-3-11 21:00:44 得分: 0

看到这个回复:
----------------------
浏览器的最大的任务是看网页,是根据w3c标准显示html、xml、解释css、xlst、执行script。
定稿多年的w3c标准不去遵守,我相信ms不会是无意忘掉了。

技术再好,为了保持自己的领先地位而使出各种下三滥手段去挤垮可能威胁到自己未来的技术和对手,实在令人无法尊敬。
----------------------

我认为IE对CSS2.0的支持是最好的,虽然没有做到全部都支持。你可以去看苏昱CSS手册的兼容性列表
XML/XSLT方面,IE6是第一个完全支持所有W3C规范的,我曾经尝试过纯XML网站,体会颇深。当时我是看w3schools的在线教程学习,里面也有兼容性列表

IE显示非标准网页的能力,正体现了“拥抱之再扩展之”的策略,从HTML到XML,到WebService,均如此。当这种能力慢慢成为事实标准后,误会自然随之而来


回复人: xenter(小菜) ( ) 信誉:99 2005-3-11 22:57:53 得分: 0

To:fohoo(飞狐)

MFC在运行时,可以动态创建CMyClass,不需要头文件,这点毋庸置疑,《深入浅出MFC》中关于动态创建那一章有详细论述。
我认为COM也没有实现对象的动态创建,只是现实了二进制层面上的接口,并不包含普通意义上的CMyClass类的信息,如果不是通过接口的话,你不可能操作CMyClass的方法。

以上纯属个人见解。

回复人: sunhui(MFC.NET) ( ) 信誉:97 2005-3-11 23:36:55 得分: 0

十分感谢CSDN网友的热情,这份珍贵的热情真使我不知所措,我想说这份珍贵的热情就是软件的希望,感谢你们对这个帖子的支持……
本贴中的观点属于一家之言,荒谬之处还望不吝赐教。

回复人: brucegong(飞行猪) ( ) 信誉:100 2005-3-12 11:59:21 得分: 0






楼主这十几年来资料没少看啊

真正的微软平台开发高手也







回复人: sloriver(二月) ( ) 信誉:100 2005-3-12 14:13:27 得分: 0

学习中...

回复人: hushuangyan74() ( ) 信誉:105 2005-3-12 14:16:48 得分: 0

支持!

回复人: yuyangxuhao(耗子) ( ) 信誉:100 2005-3-12 14:32:14 得分: 0

谢谢搂主,我想和我一样从搂主的文章中得到有益的帮助的人很多。
希望帖子常在,祝搂主开心!

回复人: chetian2000(狼) ( ) 信誉:100 2005-3-12 14:49:52 得分: 0

强。
我不是什么高手,我只是借助某种语言混饭吃的人。
不过,我觉得XX民族没有核心凝聚力,二战后日本,德国能有今天的成就,就是一个很大的成功。而我们还整天在讨论打不打台海之战。如果打起来,又会像是将XX跟毛XX的战争。
我只能尽力过好我一个普通人的日子。





回复人: wenxy1(周末了,极速飙车) ( ) 信誉:100 2005-3-12 21:19:31 得分: 0

IT业,中国有个案例类似Micfosoft 与 Borland.
华为技术与思科相比,说不定10年后,华为强过思科!

中国的软件业还是比较软件的原因有多个:
1,计算机是起源于美国。
2,新中国成立时间是上个世纪中,经济家底差。
3,人文思想与中庸之道的制约。


回复人: XCY81(Tiger.Net) ( ) 信誉:100 2005-3-13 2:31:06 得分: 0

没有太详细地读楼主的文章,但想楼主一定会同意以下观点的:
MFC框架的定型有许多年了,
基于当年的硬件软件环境,
框架中做了很多的折衷,
在使用MFC的时候有很多蹩脚的细节需要关注,
而且,
工业界新的思想、共识都不能自然地结合运用,
后来更多的框架在此基础上作了很多深入的思考,权衡,
事件机制、对象结构、API定义更清晰明了,
所以,目前如果太关注MFC的话,实在是得不偿失,不可不察之。



回复人: sunhui(MFC.NET) ( ) 信誉:97 2005-3-13 10:12:11 得分: 0

MFC的批判
记得梁羽生先生笔下有一位正邪兼修的高手,名曰“乔北溟”(好像是这个名字),一次此人与大侠张丹枫在一个庙中相遇,乔北溟随手操起香案上的香炉,张丹枫问他:“你的家伙称手吗?” ,乔北溟笑答:“以吾辈之见识,还在意手中之物是否为剑?”,张丹枫一愣,心中暗念,此人果然不同凡响……
说起MFC,许多人都会撇撇嘴,高手们会对其提出许多尖锐的批评,例如,刻板的Document-View机制,繁复的框架结构,怪异的COM实现以及令人莫名其妙的宏,等等。MFC的大而全,不仅捆住了MFC开发组的手脚,也为全面掌握MFC的愿望设置了障碍。高手们批评之余,可能忽略了一个基本的事实,这个事实就是,你的批评来自于你对MFC的深入理解,当许多人指出MFC的种种弱点时,他们或许不愿意承认:他们的技高一筹、见识超人一等是MFC带来的,不止一次有人与我谈及:“MFC的COM实现,实在差劲,看看ATL(不容否认,ATL至今仍然是开发COM的最佳C++类库),你就会感觉MFC的臃肿……”,我们中的许多人潜意识里不知不觉的在作一件事:“当我们借助一部梯子登上一层楼的时候,我们会评价这个梯子是如何如何之糟糕。”1999年,我的一个项目中需要一个描述引擎,VBS(Visual Basic Script),是个免费的语言引擎,但功能局限极大,我联系了美国的Summit公司,他们很快寄来了Microsoft的Visual Basic for Application SDK 6.0,当时我的团队可谓很强,其中的几位研究生C++修养很好,拿到VBA SDK时,他们对我说:“应当没问题,我们很快就会搞定VBA SDK”,可是几天过去了,连个例子都没出来,原来,虽然VBA SDK提供了MFC扩展类库(基于模版机制的MFC/ATL合成类库),可实现得极其别扭,我接手后的当天晚上,VBA 的IDE就集成到系统中,第二天可编程对象顺利出现在VBA 的IDE中,其余人觉得很奇怪,一看代码,原来我绕过Microsoft的例子,完全是另外的实现途径,那个时候,我感觉到,Microsoft这个家伙真的可恶,本来清晰的集成途径,却人为的让你绕来绕去增加技术难度,过后想想,也可以理解,不这样,第三方的Summit何以作技术支持?我经常想,如果没有商业利益,许多技术应当十分简洁、高效,这一点,Microsoft以及其他大公司都十分明白,如果一切都是最佳的实现模式,可能就另外一种局面了,复变函数论中有一个著名的定理:“复平面上处处解析的函数一定是常值函数。”, 学生们很难理解,当时我说,如果把一个省几十个县的最好学生组成一个班会怎样?结果是一定有一个较差的学生(除非这个班只有一个学生!),这是个无法抗拒的定则,你想想,用天下最好的20个菜形成的酒席是什么味道?那一定是最差的!
Microsoft的MFC是值得你学习和使用的,如果你讨厌这个东西或者你认为这是个邪恶的东西,你学学乔北溟,实现正邪归一……


\
回复人: jilu0002(子月寒轮) ( ) 信誉:100 2005-3-13 10:37:34 得分: 0

以前我做程序员,是满足于个人:运行->失败->修改->再运行->再失败->...->成功的过程中的紧张期待以及成功后的喜悦。看了楼主的文章后,我想我要重新考虑编程的目的。中国的软件太需要千千万万的谦虚且普通的程序员默默地贡献自己的青春。我听说印度成千上万的软件员都只有高中学历,他们做软件就跟流水线做鞋子没什么两样,他们只是做着自己本分的事。其实国内的程序员把我们自己看得太高了。好像程序员就有什么了不起似的。好像做了程序员就很了不起似的。把microsoft都不放在眼里了。其实我们都很普通。我觉得我们大家做程序就应该保持一个平常的心,为我们中国软件真正贡献自己的力量。

回复人: ChiliHot(红辣椒) ( ) 信誉:100 2005-3-13 10:45:53 得分: 0

有一点我们不得不承认,目前的环境,如果深入的去学习某种编程语言是会出人命的。

比如吧!

来自农村的学生,计算机基础本来就很差,人家城里的计算机爱好者都会用已有的计算机技术赚钱了,他还什么都不会,甚至连计算机也没有看见过。来到大学,一个想基础扎实的学生是不会放弃基础科目的学习的。大学毕业,VC等不会或不熟练可想而知,这都不会你工什么作?

而大学毕业后生活还不能自立的农村学生无异于自找死路。

所以我觉得年青人学.Net什么的还是一条更好的出路。至于强国强民恐怕只能在其次。有国才有家,但国也是由家组成的。


回复人: yinzhaohui(努力) ( ) 信誉:99 2005-3-13 13:54:42 得分: 0

Microsoft的例子,完全是另外的实现途径,那个时候,我感觉到,Microsoft这个家伙真的可恶,本来清晰的集成途径,却人为的让你绕来绕去增加技术难度,过后想想,也可以理解,不这样,第三方的Summit何以作技术支持?

我并不是很同意这个关点,Microsoft在实现很多例子程序的时候都有很的技巧,但是Microsoft使用这些技巧不是为了解决特定问题就是为了增加效率,不管是MFC,ATL还是其它的,实现方法太简单意为时它的展扩能力很差,一般都是为专用的应用设计的,并且很多东西不能调整,就是Microsoft不增加技术难度,第三方的Summit也会有技术支持的,因为问题不时不在,不外不在常常简单实现的东西问题会更多,因为你总是想使用它来作其它的东西而使用简单的实现方法又作不到


回复人: XueBoy163(菜刀之恋) ( ) 信誉:73 2005-3-13 15:24:35 得分: 0

很多人骂MFC我不以为然,我用过DOC\VIEW,它对我程序的扩展性和易维护做了很好的帮助.用过C#,如果数据量效大的话还要自已实现数据和图示的分离,而没有Framework上的支持,实现起来十分笨拙.
个人觉得.net不是和JAVA干的,这其实是Lunix,UNIX和Windows在服务器上争强的一个工具而已,JAVA和.net 的一些技术相似只是为了适应网络的需要而已,楼主说.net的CLR实际上是COM对象,这个有点悬不过我用C#觉得和VB的感觉很像,不知是不是巧合?(VB很大的用处就是用来把许多C++写的COM组装成一个软件.)
我是个学生,接触.net只有两件,MCF五年,真正有点了解.net 也是近几个月的事,没有楼主的见识也很正常.做为一个C++的爱好者,对于点.NET的方便有很大的诱惑力的,但是对于没有封装的特性的使用,比起纯SDK还要难


回复人: Featured((【我握着爱情的门票静静排队……】)) ( ) 信誉:100 2005-3-13 18:02:44 得分: 0

楼主的文字我觉得有一种理智的力量。
有力度,也有深度。

而且对MS的一些技术内幕了解还真不少。
比如:
Microsoft Office中几乎每个程序都是可二次开发的,这一点得益于Microsoft Office内置的二次开发机制,一个是基于COM机制的VBA模型,另一个是基于.NET框架的托管模型……



回复人: BrianLeungX() ( ) 信誉:100 2005-3-13 22:34:44 得分: 0

又逛了逛博客堂,看见 蒋晟.Net 的一些评论,如 不同的是除了跨语言的合作能力之外,.Net还有源代码级别的控制,例如跨语言的类继承,虽然这对于软件开发并无多少改善。

我觉得通用语言运行时的改善在于:使得跨语言集成成为可能,这个进步是巨大的.想想在不同的编程框架下,Type的不一致导致的很多琐碎的技术问题,极大组织了软件复用的进步,大量的开发成果和资源无法形成“巨人肩膀”,所以通用语言,通用类库,通用类型,避免重复,更快进步。

即编辑即用的解释机制确实极佳,这是软件开发技术发展的。


回复人: wg88888(温柔一刀) ( ) 信誉:100 2005-3-14 8:18:01 得分: 0

我的感觉,学习Vc++,让我们都失去了我们应该发展的东西,当Microsoft推出新版本的时候,我们就必须去学习新的函数、使用等,同时丢去我们本来已经发展的东西。
我前年跟一位软件的老前辈谈到软件开发时,他对我说的是DOS下他们就实现了现在Win下的图形化界面,软件运行速度也很快,同时计算机的配置也比较低,出现问题后也可以找到问题所在;但是放弃自己的图形化界面后,使用Microsoft的东西,开发快乐,但出现问题确不知道是自己的问题还是Microsoft的问题,因此相对来说维护成本高了,同时Microsoft也不断推出新的版本,导致一些老的程序员需要不断耗费新的时间去消化Microsoft的新的东西,而新的程序员又对公司的产品不了解,从而绝大部分公司都只是做了一些表皮的东西,技术根本没有深入,当国外的公司进入国内时,也就轻松被搞掉。
以上仅是个人意见,仅供参考。

回复人: chetian2000(狼) ( ) 信誉:100 2005-3-14 8:45:09 得分: 0

其实做软件根本就不用追逐语言,把两三门语言学能了,精了,就享用无穷了。如果追逐语言的话,只会让我们疲惫不堪。我(现在在电子产品制造业)接触了以色列的几个工程师,他们用的语言也不是很多,VB,VC,都是一些比较常用的,但他们却能做出为妙妙桥的东西出来。真的只能有让人佩服的份。所以,我现在也不学什么最新的语言了,我只想用好VC,VB ,Delphi,有机会学学单片机,就算了。java,..net,
让他见鬼去吧。

回复人: jiangsheng(蒋晟.MSMVP2004Jan) ( ) 信誉:262 2005-3-14 8:47:25 得分: 0

跨语言集成其实COM已经做到了。问题在于,维护这种多语言模块要求对于多种语言都很熟悉——而用懂得多种语言的程序员来维护的话,成本是个问题。


回复人: sunhui(MFC.NET) ( ) 信誉:97 2005-3-14 8:56:23 得分: 0

许多朋友十分感兴趣.NET与COM之间到底是怎样的关系,关于这一点向大家推荐Microsoft公司的Don Box的专著《Essential .NET》(有中译本)。
事实上,一个通常意义下的.NET对象都是一个Object类的派生类,可以通过如下的代码得到Object和IDispatch接口对象之间的关系:
Object* CTestApp::GetManagedObj(IDispatch* m_pComObjDisp)
{
CComQIPtr<IDispatch, &IID_IDispatch> m_pDisp(m_pComObjDisp);
if(m_pDisp) //判断m_pComObjDisp是一个有效的IDispatch指针。
{
Object* pObj = NULL;
pObj = reinterpret_cast<Object*>(System::Runtime::InteropServices::Marshal::GetObjectForIUnknown(m_pComObjDisp));
return pObj;
}
return NULL;
}
上述代码表明:一个IDispatch对象总可以找到一个Object对象与之对应,同样,可以通过如下调用从一个Object得到对应的IDispatch对象指针:
System::Runtime::InteropServices::Marshal::GetIDispatchForObject(SomeObjectPtr)
可以看出,IDispatch(COM对象的基类)与.NET对象存在一一对应关系,事实上Object是对IDispatch的托管封装。



回复人: ilovevc(ilovevc) ( ) 信誉:100 2005-3-14 10:08:59 得分: 0

个人看法。
从技术的角度来看,NET与COM除了都是ms发明的,以及可能的内部代号,其他几乎没有什么关系。com是基于二进制函数指针的布局,也就是v-table,多用c++的虚函数来实现。无虚拟机技术,无gc,无统一的基类。

net基于虚拟机,跟java类似,很多基本的东西和java一样。例如C#也使用c++风格的关键字,不过这个可以说是表像。本质的例如强制单根继承,不支持实现多重继承,虚拟机,gc,所有object对象只能建立在堆上,无指针等等。
当然c#作为后来者,在语法上有些地方比java还是要完善一些。但是感觉远远不够,无法达到另一个高度。

至于mfc,我指vc6带的那个版本,多年来没有大的进化,没有使用很多c++的特性,基本上当一个带class的c来写,而且很多设计都不合理,例如高耦合。知道一个CWnd有多少个字节吗?64。知道CSocket不能被跨线程使用吗? 知道如果需要分割窗口,那么你就必须使用doc-view吗?

当然如果作实际工程,那么还是很不错的,至少bug少,而且ms也不发展它了,也就意味着稳定了。如果初学者,有空还不如看看wtl + stl的组合, 比mfc轻,也清楚多了。

com的最大强项在单机上多语言的整合,例如用vc开发一个control,然后pb,vb,delphi等等都可以轻易的使用。com+为了配合vb, 在线程模型上有本质缺陷,初学者如果非要看,在看的时候应该将所有关于apartment的部分统统掠过,基本上如果做server component,com+并不合适。至少它不是原本就专门用来做后台的,因此很多概念不完善。最好是看一篇,明白就明白,不明白也就算了.放心, 没有什么拉下的.








回复人: sunhui(MFC.NET) ( ) 信誉:97 2005-3-14 10:21:16 得分: 0

有感于“鸡兔同笼”
小女初到北京时,对北京的教育颇为不适,铺天盖地的数学奥赛培训班向她压过来,孩子真是辛苦。她四年级时,就的对初等数论的基本内容进行强迫性的熟悉,还好,经过一段时间的努力,掌握了“鸡兔同笼”、“韩信点兵”等中国经典,马马虎虎的能证明费马小定理,有一天,她问我:“爸爸,大学数学什么样?还有‘鸡兔同笼’吗?”,我说,有,我特意找了本老外写的《Basic Algebra》,找到其中的“中国剩余定理”,小孩子接着问道:“这本书中还有中国人的数学内容吗?”,我在习题中给她找到华罗庚老先生的“反同构定理”,小孩子又接着问:“还有吗?”,我感到很没面子,因为真的找不到了……
曾经的一个梦,就是当一个数学家!为此,研究生时期买了大量的数学书,当时我们系的资料室是联合国教科文组织的藏书室,可以说,里面就是一个装满武功秘籍的宝库。有一天我们打扫资料室的一个仓库,仓库里全是鼓鼓囊囊的麻袋包,上面落满灰尘,手触摸一下,能粘出几毫米厚的灰尘,可以想象有几年没有打扫了。同学无意中揭开一个麻袋,我们惊呆了,里面是美国60年代各大学的数学杂志,每个杂志的名字都是响当当的,那真叫浩如烟海!当时我们就想,我们的论文能发表到其中吗?如果侥幸发了几篇,可想而知,我们就可以当博导了,这些比国内所谓核心期刊有分量得多的杂志,就像CSDN上的帖子一样,很快就会被淹没了,也许很久都不会有人参考、访问……,有一天,我也当了老师,面临着种种考核,于是,我们就成了论文机器,不论是否有价值,只要是核心的,你就高人一等。那个时候,我经常想起那些麻袋里的文献……
我们整体水平的落后,导致整体的浮躁,数量上上去了,质量却下来了。若干年后,也许我成熟了,我们这些曾经站在大学讲坛上的人,没什么好的东西讲(谈不上 ‘教’)给年轻的学生,记得当年我校的计算中心计划招个培训班,几天过去,仅有7人报名,第8人来时,前7人就退了3人,主任感到奇怪,问学生,学生不语,其中原委并不复杂。我发此帖并没有精心策划,的确如某些网友所言是随感而发,“鸡兔同笼”、“勾股定理”已经有了历史地位,如果仅仅够用,我们住草房子一样保暖,为何建大厦呢?为什么放弃传统的长袍、马褂而去穿西装革履?病毒软件大战几乎是自杀性的内战,没有撼动国外产品的分毫,我们许多人喜欢对自己人说三道四,是不是很少想一致对外?人家卖我们打折的产品,条件是附加一份“忏悔书”,而执行者却是我们国人,为什么?因为我们的东西匮乏!当年别人用钢铁武器掠夺了我们的财富,他们强大了,地痞无赖换上了绅士面孔,讲起了法律,当你用D版时,人家文明的指责你,你的人力、财力、物力统统为人所用,取之于你用之于你,而我们却依然陶醉在“鸡兔同笼”、“勾股定理”的历史成就之中,我们喜欢争论“勾股定理”谁发现得更早,π是谁最先精确计算的,就像谈论C++谁的水平更高一样。以上言论纯属胡说八道,偏颇之处绝非本人之意愿……
我的blog:http://szhaitao.blog.hexun.com & http://www.hoolee.com/user/haitao
--以上均为泛泛之谈--
不尽牛人滚滚来,无边硬伤纷纷现 人在江湖(出来的),哪能不挨刀(总归是要的)
网络对话,歧义纷生;你以为明白了对方的话,其实呢?

您所在的IP暂时不能使用低版本的QQ,请到:http://im.qq.com/下载安装最新版的QQ,感谢您对QQ的支持和使用

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录