当前位置:C++技术网 > 资讯 > 自述内心深处的感想:6 MFC是否有学习的价值

自述内心深处的感想:6 MFC是否有学习的价值

更新时间:2016-04-09 15:35:46浏览次数:1+次

    在文章《自述内心深处的感想:Windows是否还有前途,是否需要深入学习Windows》中,我已经分析清楚了我对于Windows学习的态度,而且也定下心,继续朝着自己的目标努力,给了自己一个清晰的路线。对于操作系统的选择,给了明确的答案,那就是继续学习自己熟悉的操作系统。我熟悉的就是Windows,所以继续学习对我长远的发展是有好处的。所以,就坚定学习Windows。
    操作系统定下来之后,同时一直都是用C++开发,所以如果做Windows应用开发,现在最好的就是MFC了。因为MFC很全面,所以学习来很复杂。这也是很多开始学习MFC人的感受。特别是一些人连基本的C++和Windows编程都不熟,甚至很多基本就不会Windows编程就开始学习MFC,能不难吗!这无疑给MFC的学习雪上加霜。
    前面说了Windows的市场问题,让很多Windows程序员纠结。再说到MFC,又是让Windows上C++开发的程序员心碎。选择Windows,再选择C++,要面临太多太多的考验了。C++本身的学习就很难了。这个可以看看《C++程序员学习发展方向分析和指导(C++入门学习指导建议必看)》。加上MFC的庞大,学习难度可想而之后。很多人看到这么复杂的MFC,都直接放弃了。
    在早些年,MFC的强势地位,市场占有率很高,也导致Windows上的C++程序员都只能学习MFC,而且市场不错,所以,即使难学,还是硬着头皮上。然而现如今,出现了QT的跨平台、微软自己打力发展.Net,大力推广WPF,也让MFC更加落寞。
    随着DirectUI技术的广泛使用,在duilib免费开源库的使用,在Windows界面开发又燃起了一股热潮。相比MFC,MFC做界面要各种自绘,技术很复杂,而且很麻烦,而DirectUI却和做网页一样的布局界面,这样界面“噌”的一下变得华丽起来。自然一股追逐漂亮界面的浪潮把MFC淹没了。同时微软自家都不给力,不给MFC升级,去搞WPF,去推.NET,不是说不应该,至少也应该给MFC一点支持吧。系统不断升级,.NET不断升级,MFC基本没有变化。着实让做MFC的程序员心里泼了一盆冷水。
    不过我们来分析分析,MFC是否真没有前途,是不是不用学了。如果你看到这里,觉得不用学MFC就心花怒放了,那你不就学了。遵从内心的感觉走就好,既然你排斥MFC,不喜欢MFC,又何必学呢!我也不想主观臆断,我只想根据自己所知,和内心的想法,找到一个客观可行的方案,学MFC也好不学也好,反正不会停止学习。就算不学MFC,你也总要学一个开发库呀。每一个开发库也不是那么容易学习的。如果是想找借口不学习,也就不用做程序员了。没有学习的激情,还是程序员吗?
    只是,我想分析清楚,如何对待MFC,如何来学习MFC。而不是放弃学习MFC,更不是放弃学习。MFC我学过,但是也不够深入。MFC的精髓在于文档视图,而我却没有把这个整明白,所以说,对于MFC,我实际只是略懂皮毛而已,只是平时用的多,所以知道基本的使用。
    在MFC现在市场不景气的时候,你会使用MFC并没有什么优势。所以,如果只是会使用MFC,和不会MFC没有什么差别。这个和探讨Windows是否有前途有点像了。
    虽然MFC使用的不多了,但不代表MFC就没有用了。现在很多开发还是需要MFC的,比如工业开发和一些行业,对于UI要求不太高的应用场景,使用MFC做一下基本界面还是不错的。同时如果只是在Windows上开发,MFC自然效率还是很好的。MFC不用考虑所谓的跨平台,所以生成代码都是针对Windows的,所以程序在Windows上运行的效率还是很好的。
    现在界面库选择比较多了,如果没必要强硬用MFC去比较。要知道MFC流行的时候,那些界面库还不存在呢。MFC是一个完整的应用程序框架,涉及到方方面面,而不只是界面。如果你只是做界面,要追求很漂亮的界面,可以采用其他界面库,如果还要做界面以外的很多东西,界面库是无法满足的。MFC还是提供了很好的支持的。
    我也简单了解了下QT和duilib,发现他们的代码设计,很多地方都参考了MFC。别说MFC没有用,很多新库,不过就是将MFC的精华设计抽离出来,然后包装下,做一个某一方面的小型库,然后免费开源,就可以得到疯狂的拥戴。在中国,免费开源的优秀的库基本都可以引爆市场,然后各种工作都会要求会。因为免费开源,商业可以使用,不需要什么成本,而商业的库,则需要支付使用费。Linux系统、安卓系统为什么在中国如此流行,还不就是免费开源,省钱呀。中国的特点,喜欢免费。而且现在的商业风气都是不停的圈钱,创业者圈投资人的钱,公司圈用户的钱,为了在不同行业抢市场,提出跨界创新概念,不就是想名正言顺的抢市场吗?抢市场不还是抢地盘圈钱嘛。360为了抢市场打出免费,现在的免费基本都成了流氓,因为免费了企业不好赚钱,所以各种形式的绑架打架。然后一个企业打入一个领域,免费,绝对是打破行业的杀手锏,这还被叫做跨界创新。就说乐视,为了自己的利益,宣称自己的彩电硬件免费,而绑定会员账号,为内容付费。这不是让彩电行业很难看,这也就是跨界创新的效果。百度的创新,腾讯的创新,360的创新,都是跨界的。哪里有一点利益,赶紧抢。听说浏览器可以抢入口,全都来抢着做浏览器,听说搜狗输入法可以拦截百度流量,比浏览器入口更强,大家都来做输入法。听说移动操作系统更是可以在平台级别上抢流量,大家都来做移动系统,什么阿里云系统、百度云系统、腾讯云系统,一大堆都来了。这都是“跨界创新”的成果。大一点的企业的跨界创新可以让小企业直接挂掉。好高大上的说法。听说小米还去投资做自行车,这也是跨界创新呀。
    而提到的微创新,不就是给山寨抄袭一个高大上的说法嘛。先抄来,然后在修改修改,就是自己的,跟自己的业务一挂钩,就是创新了。不知情的人总被忽悠的一愣一愣的,怎么都跟不上潮流了。像腾讯这样的大企业,总不能在XXX大会上说,我是抄别人的成果吧,说个微创新多好听。这是给那些大公司一个漂亮的说法。
    再举一个例子,国家发展物联网,大家一窝蜂的做智能家居什么的,但是又有几个做的很好了。还是那些长期在耕耘的企业做的最好。商业圈的浮躁,把市场搞得不成样了。所以开发需求市场也被这些搅动。净土真的不多了。大家都在圈钱,很多创业的人表现更是明显。创业就是圈钱去的,即使一个项目做的不错了,最后拿不到投资人的钱,就放弃了。创业本是追逐梦想的行为,但是却成为圈钱的把戏。这种风潮只会让更多人陷入浮躁的氛围中。
    在开发上,都是追求快速开发,这也是商业氛围造成的。以至于很多开发者都去追逐快,再快,而不是深耕技术。只要一个人将一个优秀的库包装成一个新的不错的开源免费的库,就会引起一阵躁动。然后躁动过后,就过去了。浮躁的风总是这么来无影去无踪的。做商业的人浮躁,搞得做技术的人也无比浮躁,而这些技术人浮躁的不知道自己在做什么,还经常嘲讽技术人。自己技术不行,还经常用金钱来压制比自己技术好的人,似乎自己总是很厉害的。
    就是操作系统,也是叫嚣的厉害,拿到了钱,也没见着什么东西出来。大家都是捞钱去的,认真做事的有几个人呀。没有利益,有几个人能够沉下心做技术呢?我也经常被各种诱惑,在职之后,暂时就只想不断的提高技术水平,然而却有人跟你说,兄弟,做这个比做程序员有前途多了。兄弟,你看,XXX做那个一年几百万,都有车了有房了。说的人多了,你就开始犹豫了。如果你不能在内心给自己一个明确的目标,很快就被同化了。要么利益攻心,做违法犯罪的事情,要么直接转行了。
    你说,在这么一个大众创业,大众浮躁的年代,如何坚持?我只能尽我所能,先不断的矫正自己的内心,不能浮躁,找到明确的目标,然后尽可能感染更多技术人,感染更多程序员,能够脚踏实地的研究技术,做好技术。
    MFC的学习就是一个很大的挑战,在了解了当时风靡一时的duilib后,发现基本都参考了MFC的消息响应思想,至于其他的没有细究。QT也是很多和MFC相似的地方。如果说你要做跨平台界面,选择QT就好了。如果不跨平台,用MFC挺不错呀。而且Windows的C++工作,也都要求熟悉MFC,这个可以在招聘信息中看到要求。
    MFC确实很庞大,现在市场需求也确实不如以前了,但是现在有需要,你就有学习的理由。更好的理由是,MFC的各种思想,学到了,学其他同类的库,基本也都可以帮你快速理解了。因为MFC很全面,所以,你可以学习的东西很多。但是切不可以停留于MFC的使用,一定要学习MFC框架的设计思想和实现过程。这又是要深入学习的东西。所以,说到这里,技术没有过不过时的,就看你怎么学习,怎么用。你用的好,将一个核心的东西抽出来,写一个免费开源库,说不定下一个引爆的人是你哦。
    做VC++开发的程序员,会用到MFC,既然用到,那就好好学,深入学,领悟MFC的精髓。不管学什么,都不要停留于基本使用,即使有些库能够使用就具备一些优势了,但是学的人多了,你也不过会很快就失去优势了。再要深入学,各种库也都差不多,都是解决同样的问题,能差到哪去呢?
    MFC和C++一样,很全面,是学习的一个障碍,但是如果克服了,你可以利用这一东西,学到很多很多东西,而不需要这个库学一下,那个库学一下,然后将各种技术拼凑在一起。而MFC融合各种技术与一体,在整体上又能够达到统一,所以,对于应用开发,一个MFC就够你用,够你学习了。
    至于具体的开发使用,如果用到其他的库,那就再学一下其他的了。如果你MFC深入学习的很好了,其他的库的使用,也不是大事了。如果你要做一个漂亮的界面,你就用一下其他界面库嘛,界面只是MFC的一部分,其他界面库是无法替代MFC的。我在MFC中可以同时做COM、网络、做界面、做多线程、做数据库、做XXX,如果你选择其他的,不一定支持这么完整哦。而且对于MFC有大量的书籍资料。
    我也没有深入学习MFC,等有时间了,一定要深入学习学习。有些人一提到MFC就很鄙视的样子,然后提到一个提取MFC的一部分成为的一个开源库,感觉很自豪的样子。好可笑哦。
    技术无界限,技术无止境,技术更不会过时,技术更没有优劣。所以MFC的学习还是有很大的价值的,你学好了,不一定要用在开发中。你可以将学到的思想用到开发中。当然能够用就用了,不能用的时候,比如人家明确要求只能用QT做,那就不要勉强咯。MFC的模式,一样可以用在QT中,思想这个东西是普遍适用的。
    不管是初学者,还是有MFC基础,还是会QT的人,都可以学习MFC。我们学习技术,一定要以技术为导向,而不是利益为导向,否则直接转C#、wpf做界面。