今天看到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).
 
(2)客户端,客户端主要分为Web客户端和Native客户端。
Web客户端就是所谓的前端开发, html5前几年被吵得很热,这几年有些降温,因为Web UI的用户体验和Native还是有挺大差异, 尤其是在移动手机上。做产品一定要提供最好的用户体验才能在市场中获胜, 所以除非Web的其他优势大大超越了用户体验的需求, 它才会被考虑使用。这也是淘宝前端用Web实现, 而QQ前端用Native C++搞的原因。
 
下面我们重点说Native客户端开发, 以前写过一篇《客户端架构设计的简单总结》,那时主要是搞Windows, 现在搞跨平台之后,发现各个平台的客户端基本上都是大同小异。我们会发现客户端的大部分技术都是跨平台的, 而且很多技术都是开源的。比如数据存储用SQLite, XMPP通讯用Gloox, Web交互用LibCurl, 数据打包用Protocol Buffer, socket通讯用boost asio。 我们会发现除了UI代码,客户端80%的代码都是可以用跨平台C++代码搞定(Windows, Mac, ios, android, Linux, BlackBerry)。 我们这里要做的就是把框架搭好,协议定好,层次分好,模块切割好,把UI和逻辑分离好。据我所知微软的Office除了UI部分,PC和移动版也是用这总方式实现的跨平台。
 
回到本文刚开始的问题, 初学者要不要学MFC? 个人觉得先要看自己定位的开发平台, 如果是搞Windows, 那也应该先从Windows API学起,根据工作需要决定要不要学MFC 。总之,无论学什么,先深入一个平台, 从C++编译器到CRT运行库, 再到操作系统, 从用户态API到内核和驱动,越深越好,然后再跳出这个平台,接触其平台,会发现各个平台基本都是大同小异。
 
http://www.cnblogs.com/weiym/p/4818088.html

客户端技术的一点思考(数据存储用SQLite, XMPP通讯用Gloox, Web交互用LibCurl, 数据打包用Protocol Buffer, socket通讯用boost asio)的更多相关文章

  1. Android数据存储:SQLite

    Android数据存储之SQLite SQLite:Android提供的一个标准的数据库,支持SQL语句.用来处理数据量较大的数据.△ SQLite特征:1.轻量性2.独立性3.隔离性4.跨平台性5. ...

  2. Android数据存储之SQLite数据库

    Android数据存储 之SQLite数据库简介 SQLite的相关知识,并结合Java实现对SQLite数据库的操作. SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎. ...

  3. 关于大型网站技术演进的思考(二十一)--网站静态化处理—web前端优化—下【终篇】(13)

    本篇继续web前端优化的讨论,开始我先讲个我所知道的一个故事,有家大型的企业顺应时代发展的潮流开始投身于互联网行业了,它们为此专门设立了一个事业部,不过该企业把这个事业部里的人事成本,系统运维成本特别 ...

  4. 【转】关于大型网站技术演进的思考(二十一)--网站静态化处理—web前端优化—下【终篇】(13)

    本篇继续web前端优化的讨论,开始我先讲个我所知道的一个故事,有家大型的企业顺应时代发展的潮流开始投身于互联网行业了,它们为此专门设立了一个事业部,不过该企业把这个事业部里的人事成本,系统运维成本特别 ...

  5. IOS数据存储之Sqlite数据库

    前言: 之前学习了数据存储的NSUserDefaults,归档和解档,沙盒文件存储,但是对于数据量比较大,需要频繁查询,删除,更新等操作的时候无论从效率上还是性能上,上述三种明显不能满足我们的日常开发 ...

  6. Base-Android快速开发框架(三)--数据存储之SQLite

    SQLite,是一款轻量级的关系型数据库,Android原生集成的一个数据库.具有轻量级.独立性.隔离性.安全性等特点.是Android做数据存储的必备知识之一. 在实际的项目中,我们常用于一些对象的 ...

  7. Android数据存储之Sqlite的介绍及使用

    前言: 本来没有打算整理有关Sqlite数据库文章的,最近一直在研究ContentProvider的使用,所有觉得还是先对Sqlite进行一个简单的回顾,也方便研究学习ContentProvider. ...

  8. Android 数据存储之 SQLite数据库存储

    ----------------------------------------SQLite数据库---------------------------------------------- SQLi ...

  9. Android数据存储之SQLite的操作

    Android作为一个应用在移动设备上的操作系统,自然也就少不了数据的存储.然而SQLite作为一个轻型的关系型数据库,基于其轻量.跨平台.多语言接口及安全性等诸多因数考虑,因而Android较大的数 ...

随机推荐

  1. MySQL 基础查询

    6月业绩榜 名次   伙伴 业绩 签单 面谈 每日目标 1 杜艳花 12367 2 0 查看目标 2 郑东杰 2345 1 0 查看目标 3 黄传龙 345 1 1 查看目标 4 測试 0 0 0 查 ...

  2. js进阶 9 js操作表单知识点总结

    js进阶 9 js操作表单知识点总结 一.总结 一句话总结:熟记较常用的知识点,对于一些不太常用的知识点可以在使用的时候查阅相关资料,在使用和练习中去记忆. 1.表单中学到的元素的两个对象集合石什么? ...

  3. C++ public、protected、private 继承方式的区别

    访问修饰符 public.protected.private,无论是修饰类内成员(变量.函数),还是修饰继承方式,本质上实现的都是可见性的控制. Difference between private, ...

  4. gen_server笔记

    http://www.ask3.cn/a/jingcaibowen/tech/Erlang/2013/0614/42043.html gen_server是erlang的OTP框架中最常用的“行为模式 ...

  5. 再续FPGA初心,京微齐力脱胎京微雅格重新起航(700万元天使轮,泰有基金领投,水木基金、臻云创投、泰科源跟投。数千万元Pre-A轮融资,领投方为海康基金)

    集微网消息,新的一年开启新的希望,新的空白承载新的梦想.这是年初一集微网给读者们拜年时写的寄语.在中国农历新年开年之际,半导体产业里也迎来了许多新的起点.例如长江存储在与苹果就采购前者的Nand闪存芯 ...

  6. redis举例调用两种方式方式

    在以下的代码演示样例中.将给出两种最为经常使用的Redis命令操作方式,既普通调用方式和基于管线的调用方式. 注:在阅读代码时请留意凝视.   1 #include <stdio.h>   ...

  7. 构建工具Gradle

    1.Summary   从Android团队开始宣布放弃Eclipse转投Android Studio时,构建工具Gradle进入了Android开发者的视野.而随着热修复.插件化.编译时注解的流行, ...

  8. C#性能优化:延迟初始化Lazy

    1. 概述 我们创建某一个对象需要很大的消耗,而这个对象在运行过程中又不一定用到,为了避免每次运行都创建该对象,这时候延迟初始化(也叫延迟实例化)就出场了. 延迟初始化出现于.NET 4.0,主要用于 ...

  9. 【35.39%】【hdu 3333】Turing Tree

    Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

  10. 再议指针---------函数回调(qsort函数原理)

    我们是否能写一个这种函数: 能够对不论什么类型数据排序 不论什么人在使用该函数不须要改动该函数代码(即:用户能够不必看到函数源 码,仅仅会调用即可) 思考: 用户须要排序的数据的类型千变万化,可能是i ...