关于对于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++程序员的一个威胁, 它把太多的精力和资源吸引到支路上面, 而对于主干道上真正的好东西视而不见. 矫枉必须过正, 所以我不惜得罪一大批人, 写了上面的文章. 正如开篇所
说, 我一向认为无休止的争论是空谈误国, 该说的话已经说了, 大家可以批评讨论,
但我大概是不会再回到这个话题上来了.
分享到:
相关推荐
Visual c++ 6.0(单独的C++编译器),VC----7.0(微软第一次把VC嵌入到Visual Studio .net),VC2003----VC7.1,VC2005----VC8.0,VC2008----9.0,因为.net框架是基于项目的,所以C++程序在VC2005里面只能进行编译,...
VC008通用C++VC试题库系统的设计与开发毕业设计全套VC008通用C++VC试题库系统的设计与开发毕业设计全套VC008通用C++VC试题库系统的设计与开发毕业设计全套VC008通用C++VC试题库系统的设计与开发毕业设计全套VC008...
Microsoft Visual C++ 6.0 SP6 (VC6SP6)是微软推出的针对程序员的集成开发环境(IDE),它是Microsoft Visual Studio 6.0的最后一个服务包版本。VC6SP6更新包提供了一系列的改进和修复,尤其是针对在调试过程中出现...
VC_(C++)经典游戏教程+范例+源码!一起玩游戏。
**VC 2015 C++ 安装包详解** 微软的Visual C++(简称VC++)是一款用于开发Windows应用程序的集成开发环境,其2015版本是开发者们广泛使用的工具之一。这个"vc2015c++安装包"包含了运行许多基于C++的应用程序所需的...
phpstudy集成安装环境所需 运行库 vc8-vc17(32+64位)下载集合 注意:该产品并非易语言的VC编译器,该软件为主要给一些软件如phpstudy等提供的运行环境, 产品从微软官网下载,请放心使用。 安装使用说明: php5.3、...
3. 学习VC6++后,用户需要了解更现代的C++标准(如C++11, C++14, C++17等)以及更新的开发工具,如Visual Studio 2019等。 总的来说,"汉化 VC6++精简版 VC VC++ C++" 是一个适合初学者和对中文界面有需求的开发者...
[005]VC(Visual C++)串口通讯编程教程.zip上位机开发VC串口学习资料源码下载[005]VC(Visual C++)串口通讯编程教程.zip上位机开发VC串口学习资料源码下载[005]VC(Visual C++)串口通讯编程教程.zip上位机开发VC...
**VC16(2019)vcredist C++** vcredist 是 Microsoft Visual C++ Redistributable 的简称,它是微软为开发者提供的一种运行时库,用于支持使用 Visual C++ 编译器编译的应用程序运行。在2019年版本中,即 VC16,它...
**VC11 C++ 编译器** Visual Studio Ultimate 2012 是微软公司推出的一款集成开发环境(IDE),其中包含的VC11 C++编译器是针对C++编程语言的重要工具。这个编译器是Visual C++ 11版本的一部分,支持C++11标准,该...
总的来说,通过VC编写游戏手柄操纵杆程序涉及了硬件交互、事件处理、多线程编程等多个方面,开发者需要具备扎实的C++基础和深入的Windows系统知识。了解并掌握这些知识点,将有助于你构建出更加出色的游戏控制体验。
【标题】"VC.zip" 涉及的是C++编程领域的一个特定话题,即使用Visual C++(简称VC)作为开发环境,进行C++小应用的开发。这通常指的是利用Microsoft Visual Studio中的C++编译器和相关工具,创建小型的、具有特定...
《VC 万年历 C++超强万年历 记事本》是一款基于C++编程语言开发的实用软件,集成了日历与记事本的功能,为用户提供了一个高效、直观的日程管理工具。这款软件的核心特点是其强大的日历系统,不仅能够显示当前日期,...
VCRuntimes C++ 2010 X86_X64 VC Runtime 文件是微软Visual Studio 2010中的一个重要组件,它包含了运行时库,这些库支持使用Microsoft Visual C++编译器开发的应用程序在Windows操作系统上执行。本文将深入探讨这个...
visual c++ vc 截获 关机消息
《VC6.0 MSDN帮助文档 CHM版》是一个针对微软Visual C++ 6.0集成开发环境...尽管VC6.0已经较为老旧,但它的帮助文档对于理解C++的基础和深入概念依然具有很高的价值,尤其对于初学者和需要维护旧代码的开发者来说。
在IT行业中,Visual C++是一种强大的开发环境,用于创建Windows应用程序和系统级组件。它集成了Microsoft Office套件,特别是Word,以实现自动化任务和数据处理。本项目着重于使用Visual C++编程来生成复杂的Word...
然而,需要注意的是,过多的VC运行库可能会占用系统资源,因此,只安装真正需要的版本是明智的选择。同时,保持系统更新,确保安装最新版本的VC运行库,以获得最佳的兼容性和性能。如果遇到无法运行的程序,检查并...
《VC、C/c++小词典编程助手》是一款专为编程初学者设计的实用工具,它集成了一系列的库函数查询功能,旨在简化编程过程中的学习和查找资料的环节。这款小词典尤其针对使用Visual C++ (VC) 和C/C++语言的开发者,提供...
【C++五子棋VC6】是一个基于C++编程语言,使用VC6(Visual C++ 6.0)开发环境的简单五子棋游戏。它采用DSO(DOS Screen Output)界面,而不是常见的MFC(Microsoft Foundation Classes)库,这使得程序在DOS环境下...