Programming 版 (精华区)
VC不是梦想,C++需要自由的心
作者:myan
关于对于VC/MFC/ATL的评论问题,其实我很早就想写一篇文章来阐述自己的观
点,不过又觉得这种容易引发论战的文章实际上是在空耗大家的时间, 不如做点实
际工作. 但是现在中国程序员群体的思想走向已经到了一种非常危险的一边倒的地
步,上几期电脑报上登出了几名14岁的小孩子, 刚刚学会写几个程序, 就把VC列为
自己的梦想. 我去年找工作的时候,连续被几个公司问会不会VC,得到我的答复之
后,他们怎么也不能相信一个学了四年C,两年多C++,还利用“空闲”时间学习了
Java、Perl的人,一个敢于在“专长”一栏里写上“掌握C++”的人,居然只是对
VC“略有了解”,我从他们的表情中看出一种不屑:“你还敢说自己懂C++?你还
有时间去学别的东西?连VC都不会,水平能高到哪去?”我并没有费力去向他们
解释VC外面的世界更精彩,因为之前我在提到STL这个词汇的时候,已经留心他们
目光,那是一种冷漠、茫然和无动于衷。一切都已经十分清楚,解释是徒劳的,
他们根本不知道VC外面还有C++。
当然不劳大家担心,我最终还是找到了一份满意的工作。但是这种经历对我的
触动是很大的,因为我已经深深地感觉到,当我们中国的程序员好不容易能够有机
会以一双开放的眼睛面向整个世界的时候,我们的思想又被迅速地封闭了起来。一
个叫微软的巨人用一只巨大的圆规在我们的思想里画了一个大圈圈,并且对我们说:
“天就是这么高,地就是么大,你们享受吧!”伊甸园的生活是快味的,但是,
当我们所有人都被牢牢地限制在一个范围之内,听命于一个上帝的清规戒律时,我
看不到我们自己的未来还有什么希望,我甚至看不到我们自己存在的意义。
不自由,勿宁死!
我们的能力当然是有限的,在相当长的一段时间里我们所能到达的疆界还是会
远远地小于先驱者开拓的界域。但是我确信,就在现在,我们的能力至少可以突破
微软给我们划定的天地。微软是好的,她很体贴,很出色。但是不论是微软也好,
巨软也好,在我们程序员的心中,没有凯撒。我们可以把你当朋友,但是你别想做
我们的主子!我们一定要走出去,虽然我们知道极限是存在的,很长时间里我们是
不可能超过前人的,但是我们一定要出去。我们可以因为累死而在探索的道路上而
止步,但决不能在人为设定的篱笆前畏缩不前。
C++是我最钟爱的语言,我愿意投入一辈子的时间在她的身上。VC也是一个好
东西,在Windows下我最喜欢的C++编译器。MFC/ATL也都是好东西,如果将来需要,
我也会认真地学习它们。但是,我心中的天地比这要宽广的多,标准C++所定义的
语言性能集和标准库,是更加绚丽的风景线;STL所带来的通用编程时代的曙光,
更令我心驰神往;设计模式的精美与一致,面向模式编程范式的初现端倪,面向对
象软件工程的成熟与巨大希望,TAO/ACE的庞大与精致,我们中国人自己的C**语言
的动人心魄,...,让我目不暇接的珍宝太多太多。虽然我所能接触到的东西只是一
小部分,虽然在这个过程中我更加深刻地发现自己的水平是多么的不值一提,但是
我已经可以大声宣称:外面的世界很精彩!
我知道我们都还是生活在现实世界中的,精神上的快乐不足以填饱辘辘饥肠。
但是我们现在是在说C++啊!想想你为什么不用更简单、更好挣钱的VB、Java、
Delphi,偏偏要把已经够难学的VC当成自己心中的理想呢?不就是因为VC能够代给
你自由、自信和自豪吗?如果你意识到VC同样是道更大的篱笆墙,你为什么不愿意
冲出去,获取更大的自由、自信和自豪呢?
B.Stroustrup说:“我想大家学习C++,应该是为了解决哪些开创性的问题,
而不是一次次地重复解决哪些已经有了成熟的框架和现成的解决方案的问题。”
C++是开拓者的语言,是思想者的语言,是“高手”层次之上的语言。或许在实用
性、简单性方面,现在和将来都会有许多语言不断地超越它。但是,我认为在相当
长的一段时间里,在构造和表达软件工程思想和创造性软件的开发领域,不会有什
么语言能超过它。或者说,精通了C++语言及其思想的程序员,在思想深度和对新
技术的领悟能力上上是远远超越其他语言使用者的,我们或许应该称这种人为程序
员中的思想者。正因为如此,我认为被限制在VC的圈圈里,不是一个C++程序员能
够容忍的。
我觉得,作为一名真正的C++程序员和自由的思想者,更应该有有一颗仁慈的
心。不要整天纠缠与C++和JAVA谁好谁次的争论,不要一听说某软件使用VB做的就
鄙夷起来,更不要拒绝学习其他的语言。C++难学、难用,距离应用层面比较远,
这些问题我们应该坦率地承认,可能的话做出一些努力来改变这些情况。应该积
极鼓励把其他语言与C++混合使用,让C++成为它们背后坚实的支撑。我不是公司的
老板,但是我觉得,如果我的企业能拥有这种水平的程序员,我会为自己的企业而
骄傲,也会给他最高的薪水。
附:
我个人认为MFC实现上的缺陷:
MFC是在89年代末,90年代初定型的,当时C++还十分不完善。在当时来讲,MFC是
相当先进的。但是从那以后,C++发生了(可以说是)革命性的巨大变化,与新的
C++相比,MFC的体系结构和实现机制显得比较落后,很多优秀的C++特性都没有被
合理地应用,反而自己另起炉灶搞了一摊。而且VC这种语言也越来越不象C++了,
完全为微软自己的应用而量身定制,甚至不惜违反标准。(不过在编译技术尤其是
优化技术上的确还是无人能及)
MFC由几个缺点让我比较不满:
1. 大量使用稀奇古怪宏, 搞的代码不象个样子. 真佩服有些人那么耐心地去分析
它们.
2. 消息映射的实现机制十分笨拙. 不用继承我可以理解, 但是为什么不用委托,
而要用表驱动? 还是那句话, 搞的代码不像个样子.
3. 对于底层SDK的封装太薄, 面向对象的感觉不足.(当然也有他的好处, 不过这毕
竟是C++!)
4. 自己另起炉灶搞了RTTI, SEH, CString, CObjXXX(Container)这些东西, 实现
的又不太好, 早几年还可以理解, 现在则完全落伍.
5. 很多场合本来是标准库可以一展身手的地方, MFC完全没用上.
6. 为了迎合MFC, 编译器的很多地方都违反标准.
7. Doc/View体系的局限性, 想突破很难.
话说回来, MFC还是一套出色的工具. 但是现在它事实上已经成为了对中国C++程序
员的一个威胁, 它把太多的精力和资源吸引到支路上面, 而对于主干道上真正的好
东西视而不见. 矫枉必须过正, 所以我不惜得罪一大批人, 写了上面的文章. 正如
开篇所说, 我一向认为无休止的争论是空谈误国, 该说的话已经说了, 大家可以批
评讨论,但我大概是不会再回到这个话题上来了.
对该文的评论
hdqqq (2001-3-2 14:15:40)
mmns说的也有道理,其实程序员要讨论的不是什么自由不自由的问题,而是要用我
们的工作去解决问题。
hdqqq (2001-3-2 14:00:04)
C++语言体现的事oop的编程思想,vc/mfc只不过是其中的一种实现工具及其相应的
类库。作为一个程序员应该做的是精通各种计算机知识,掌握多种工具,将计算机
技术应用于更多的场合。这种将开发工具当作程序员全部的内容,我认为欠妥。每
种开发工具都有自己的优缺点,程序员要做的是通过使用对其中有用的学习,无用
的丢弃。数据结构、网络知识等也是一个程序员应该掌握的。我对文章中把所有的
程序员都归结为一类只知道用vc的观点不敢苟同。当然在mfc确实尤其缺点,但是
不能有缺点就一棒打死。
有缺点可以改,就像文章中说的,窗口类,CString的问题,也许改动其它大的类
比较困难,但是我们自己为何就不能编一个自己的"string"类呢?总之,光有编程
思想,死守着几种编程工具,喊几声新的概念,而没有实实在在的编程,以及与其
他知识的融合运用,任何语言都是空洞的。
micrack (2001-2-28 2:49:21)
KAO,菜鸟晕菜了
qqq (2001-2-27 23:52:27)
精力有限
lmfpe (2001-2-26 18:44:21)
学习使用mfc的心态应该是平静而快乐的,mmns讲的很有道理。
lmfpe (2001-2-26 18:40:57)
也不应该的批评微软,毕竟如今一个优秀的软件是在很多技术结合才能开发出来
的,而许多优秀的技术也正因为与其它技术的综合使用才能得到发展的(如java
asp)而这样的融合也不是随便谁都能做到的,微软是这方面的老手(如iexplore),
相信只要以后还会有更优秀的东东出现,做为一名技术人员,在努力学习技术的同
时决不能迷信技术。
lmfpe (2001-2-26 18:18:59)
不能总批评微软
mmns (2001-2-26 17:10:53)
外面的世界是很精彩,裡面的世界也很精彩,我看這篇文章說明不了問題。
學習VC++的目的並不是要溟滅我們自由的天性。而是為了學習windows的
運行機制。為了探討WINDOWS核心,和保護模式下編程的奧祕。畢竟對這些東東的
了解,VC++的學習是一條好路。
MFC產生的較早。難免其中有一些現在看來不太合適。但是記得我學mfc時。
我覺的心裡很服氣。對於其中的那些宏的使用,我很嘆服設計的巧妙。並無煩
躁之感。當時MFC已經是盡量利用了C++的特性了。學習com 時,我覺得他是確
實是好東東,就象是下棋時看到了一步好棋。(雖然我還不知道他在別的平台下
有什麼用)
我喜歡LINUX也喜歡WINDOWS,但我不喜歡MICROSOFT霸道的經營方式。但這並
不代表WINDOWS是壞東西,LINUX要熬到"民用"的時候還要走很遠的路(他固然安全
性好,但光有這個還遠遠不夠)。
我想作為一個程序員應該是以解決困難為樂。現在滿足這個條件的程序員
太少了。敢闖敢衝是我們這一代人的優勢,不能靜下心來思考,不能克除心中
的一絲煩躁是我們這一代人的致命弱點。
誰也沒有壓制我們的天性。上帝給了我們飛的能力,幹嘛要選擇在地上爬,
還埋怨路不好呢?。
fwdever (2001-2-26 17:07:11)
不知各位用C++开发的用的是什么开发工具?
babysloth (2001-2-26 16:19:27)
我当然有您这样的感觉,VC的编译器是我最不屑的。
但是不能否认MFC的作用,即使最新的C++标准支持RTTI,
所能获取的信息也是极为有限的,远不如MFC自己的宏。
怎么办?Boland就扩展C++语法,搞得不伦不类。这难道
又好吗?
STL是重要的,可惜叫大家用STL是不现实的,甚至可以说用了会后悔的。
为什么?STL的版本不统一!!!VC,BC,GCC的各不一样,并且STL有各种
类,很难想象这样编出来的程序在各种类之间交换数据的时候不会死机!!
看到MFC为什么有MFC20.DLL,MFC30.DLL,MFC40.DLL,MFC42.DLL……吗?
就是类库带来的恐怖结果。STL类库在各种编译器的差异,决定了它不能大量
使用!!至少是在WIN平台上。而且特别是在STL里大量使用的bool类型,
字节数不定,VC++有时候(4.2以前)是4,有些是1,BC是4,会出大问题。
C++最大的弱点就是不统一,标准不详尽。虽然这曾是它发展的一个优势,现在
却成了最大的软肋。
classfactory (2001-2-26 14:19:25)
让国内这些程序员超越MFC、VC的框架,就跟说服农民用机器人耕地似的。其
实在世界范围内也是这样的。
另外,我认为你的总体思想是对的,但你的一些观点却报露出你对MFC、VC并
不精通,看法有失公平。
bigsail (2001-2-26 13:58:51)
我想微软放弃MFC也将是很快的事,毕竟它太旧了。
liuxd (2001-2-26 13:53:05)
非常同意。我甚至认为,如果只用VC,你甚至没有机会C++接触的精髓,因为把能
包装的都包装起来了,留给你的只是一些枝枝蔓蔓的杂碎和细节。
BTW,我还特别讨厌VC的代码风格,包括希奇古怪的宏。。
5982 (2001-2-26 13:29:01)
在下也有同感,在城市呆久了,就想回归到森林中......
codingcoding (2001-2-26 13:22:23)
同意。vc是c++的一种。但是c++绝对不是vc
rypan (2001-2-26 12:38:08)
当C++有一套与JAVA可以相媲美的跨平台的类库时,就是C++浴火重生之日。在这之
前我还是要用JAVA。
ed9er (2001-2-26 12:32:48)
很有深度哦~~
C++太注重对C的兼容以及效率了,它是很强大,但绝不优美,不值得我投一辈子时
间,在我目前对STL的理解,绝大部分都可以通过单根继承和对象句柄化来实现,
特别是各种对操作符的限制和定义,用单根继承比STL目前的这种做法好多了,最
让我反感的就是iostream的实现,天哪~~不谈了
thought worth thinking
tangtao (2001-2-26 11:30:46)
说的有理!
MFC毕竟是10年前的老东西了,被微软修修补补发展到今天确实也不容易了,毕竟
它这样做保护了无数公司在这上面的投资。微软做产品更擅长对产品进行革新而不
是革命。
cker (2001-2-25 23:14:49)
编译器与语言本身之间的关系,正如行动与思想间的关系。
掌握VC自然是好事,但永远不要迷失于别人的规范、API、类库。要学好语言本身
,
或许还得培养自己的道德和修养。
因为您还需要有自己的思想,没有思想您只不过是万千个代码的奴隶中的一个!
早日醒来吧,东方的巨龙!
CKER的呐喊
vcbear (2001-2-25 14:46:56)
这是我近来看到的最有共鸣的文章。
VC是甚么,VC是一个编译器,集中体现了微软技术的C++封装和解释,说实在的
,做的还挺漂亮,就象在山路上最好的越野车。
但是这绝对不是全部的。就象上面那个比逾,微软给了我们一条山路,走不走,
如何走,我们有选择的权力,我们的目标,只是计算机科学这个山峰。所以
VC并不是全部,值的学的太多了。
我的水平还不值一提,甚至连VC这个越野车都没有开好。对于详细的东西,我
不是很有感觉也认为没有争论的必要。我还是要学习学习去了。
--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 天外飞仙]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.870毫秒