今天看到CSDN上这么一篇《 彻底放弃没落的MFC,对新人的忠告!》, 作为一个一直在Windows上搞客户端开发的C++程序员,几年前也有过类似的隐忧(参见 落伍的感觉), 现在却有一些不同的想法。

首先,个人职业发展是否成功, 技术只是其中一小块,尤其是在大公司, 更多的是依靠所谓的软实力。作为一个对技术有追求的工匠,我们下面重点说技术相关的。

现在回头看计算机行业的发展,我们看到不同的发展阶段:

1. PC时代,这个时代离我们并不遥远, 也有是2000年前后, 该时代最鲜明的特征是Windows操作系统,Office软件,Exchange邮件服务器等,还有Windows平台上的各种通讯娱乐工具以及行业软件等。这个时代大部分都是和Windows操作系统相关, 这个时代的开发工具也是百花齐放:VC, VB, Delphi, PB, 以及后来的C#, 本质上都是Windows API。

2。PC互联网时代, 这个时代和PC时代很大程度是重合的,因为互联网客户端浏览器的载体还是PC, 这个时代最显著的特征是Google, Baidu, Facebook,淘宝等的兴起, 网络搜索,网络社交, 网上购物成为时髦。这个时代说白一点就是怎么做好一个网站,开发工具包括后端和前端:ASP,JSP, Java, PHP,html, JS等, 本质上是http协议及html.

3. 移动互联网时代, 手机本来只是打电话和发短信用的, 苹果iPhone改变了这一切,开启了智能手机的新时代。现在我们通常说的移动开发主要是指iPhone和Android开发,以及少量的WinPhone和BlackBerry开发。移动互联相对于PC互联,有几点不同:首先移动时代能够让人充分利用空闲时间片,社交(微薄、微信)和游戏娱乐都很方便;另外移动手机有位置定位功能, 导致了O2O创业潮的兴起和成功(比如uber)。移动App的开发语言各异(Objective-C, Java, C++, C#)等都有, 本质上是一个客户端软件。

4。未来, 有人说是互联网+,有人说是万物互联(智能手环,智能路由,智能家电)...

从上面我们可以看到, 每个时代都有自己的特色,一个时代的兴起并不会完全取代另一个时代:PC还是我们的主要办公工具, 手机是我们随身的通讯和娱乐工具,谁都没法完全取代谁。

互联网时代的技术体系无非是分为服务端和客户端:

(1)服务端来说, 如网站后台,主要是如何高效从海量数据中的返回用户需要的数据, 也就是所谓的大数据技术(如Hadoop,spark);如果是IM后台,  常用开源的XMPP服务器(Openfire, Ejabberd); 另外游戏服务器,视频服务器很多技术其实都差不多, 主要都是提供Session连接和逻辑处理。

(2)客户端,客户端主要分为Web客户端和Native客户端。
Web客户端就是所谓的前端开发, html5前几年被吵得很热,这几年有些降温,因为Web UI的用户体验和Native还是有挺大差异, 尤其是在移动手机上。做产品一定要提供最好的用户体验才能在市场中获胜, 所以除非Web的其他优势大大超越了用户体验的需求, 它才会被考虑使用。这也是淘宝前端用Web实现, 而QQ前端用Native C++搞的原因,想想淘宝如果用C++搞个客户端会怎么样,页面三天两头变怎么吃的消。

下面我们重点说Native客户端开发, 以前写过一篇《客户端架构设计的简单总结》,那时主要是搞Windows, 现在搞跨平台之后,发现各个平台的客户端基本上都是大同小异。我们会发现客户端的大部分技术都是跨平台的, 而且很多技术都是开源的。比如数据存储用SQLite, XMPP通讯用Gloox, Web交互用LibCurl, 数据打包用Protocol Buffer, socket通讯用boost asio,另外大部分都是逻辑代码和专业技术(如H.264)。 我们会发现除了UI代码,客户端80%的代码都是可以用跨平台C++代码搞定(Windows, Mac, ios, android, Linux, BlackBerry)。 我们这里要做的就是把框架搭好,协议定好,层次分好,模块切割好,把UI和逻辑分离好。据我所知微软的Office除了UI部分,PC和移动版也是用这总方式实现的跨平台。

回到本文刚开始的问题, 初学者要不要学MFC? 个人觉得先要看自己定位的开发平台, 如果是搞Windows, 那也应该先从Windows API学起,根据工作需要决定要不要学MFC 。总之,无论学什么,先深入一个平台, 从C++编译器到CRT运行库, 再到操作系统, 从用户态API到内核和驱动,越深越好,然后再跳出这个平台,接触其平台,会发现各个平台基本都是大同小异。
posted on 2015-09-18 00:49 Richard Wei 阅读(3958) 评论(10)  编辑 收藏 引用 所属分类: 行业动态

FeedBack:
# re: 客户端技术的一点思考[未登录]
2015-09-18 07:15 | 春秋十二月
我经历了win桌面-->linux服务端-->linux驱动内核的阶段,在做win桌面应用的时候,又经历了win32 API-->mfc-->com/atl/wtl。现在觉得编程,真是一种艺术,只要你愿意,完全可以干到40、50岁。技术深入的好处是对计算机系统会有深刻的理解(如进程管理、文件系统、网络通信等),而知其所以然,那么做应用时,对设计与优化有莫大的帮助。  回复  更多评论
  
# re: 客户端技术的一点思考
2015-09-18 21:24 | Richard Wei
@春秋十二月
是的,计算机技术的变化可以说很快,也可以说很慢。快的方面来说,各种新语言新技术新平台层出不穷,好像三天两头在变;慢的方面来说,数据结构和算法,语言范型,网络协议,冯诺依曼体系结构等几十年来都很稳定,练好内功才能以静制动。  回复  更多评论
  
# re: 客户端技术的一点思考
2015-09-21 10:15 | 苏州街居士
如果只是做工具,用用MFC也无妨  回复  更多评论
  
# re: 客户端技术的一点思考
2015-09-24 10:58 | lbfamous
做工具用WinForm ,QT 吧,MFC这东西现在最大的用处要么是兼容旧的项目,要么就是提供一些编程的营养了。  回复  更多评论
  
# re: 客户端技术的一点思考
2015-10-13 10:36 | mmocake
MFC还不错,用的凑合  回复  更多评论
  
# re: 客户端技术的一点思考
2015-10-16 11:29 | liquanhai
楼主写的真好,受教了!  回复  更多评论
  
# re: 客户端技术的一点思考
2015-12-10 19:07 | 谢应彪
你好,想和你讨论一下duilib自动化的事情,方便留个联系方式吗?  回复  更多评论
  
# re: 客户端技术的一点思考
2015-12-11 14:17 | Richard Wei
@谢应彪
要点我在这篇文章里都说了 http://www.cppblog.com/weiym/archive/2014/11/15/208885.html

我们的Windows Client就是基于开源的DUILib的, 有兴趣可以试用下 zoom.us  回复  更多评论
  
# re: 客户端技术的一点思考
2015-12-11 15:28 | 游戏狗…
我是菜鸟,主要是弄自动化相关的测试工作,能麻烦你给一个demo吗?到处都找了资料,就您这里最全了,谢谢最@Richard Wei
  回复  更多评论
  
# re: 客户端技术的一点思考
2015-12-11 15:35 | Richard Wei
@游戏狗…
这个需要DUILib库的开发为每个控件实现IAccessible接口,自动测试再通过这个接口查询和操作控件, 思路就那样,手头现成的Demo也我没有.  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理