1、可以考虑先学习C。

大多数时候,我们学习语言的目的,不是为了成为一个语言专家,而是希望成为一个解决问题的专家。做一个有用的程序员,做一个赚钱的程序员。我们的价值,将体现在客户价值上,而不是语言写得好不好看。

C++是C的一个面向对象的解释,C++为C扩充了大规模工程应用,复杂的系统结构的组织和掌控方法,但是,我认为,C++骨子里还是C的。

毕竟,解决具体问题,每个函数内部,都是用C的方式写程序,还是面向过程的。

因此,想要学习好C++,我的建议,先学习C,先学解决问题的能力,再讨论解决大问题的能力。就是先学习怎么走路,再学习怎么跑步。

2、学习C的过程中,一定要理解结构化编程思维。

为什么呢,我前面有文章说过,软件语言的发展过程,就是一个数据私有化的过程,大型工程应用,强调高内聚,低耦合,模块化设计,保持代码最大的灵活性和安全性。

这是现代工程化开发的核心和灵魂。

因此,利用C这门语言入门,借此理解结构化开发思维,可以说是个很方便的路子。因为C的函数,本来就是为重用做准备的。同时,全局变量和cpp内部私有变量的差别,其使用原则,这些都能学到很多结构化开发思维。

3、开始学习C++。

C++不难学的,很多人觉得C++难学,其实是因为它在C之外,又提供了很多的概念,尤其是对象,很难以理解。

不过我经过这么多年,把这个问题反而看淡了,我认为面向对象相对面向过程,仅仅是结构化程序设计的一个具体体现,是编译器提供手段,强迫程序员必须遵循数据私有化的一个实例,C++和C的关系,最核心的莫过于此。

现在我们回到C再看看,如果我们把一个全局变量,写到一个cpp里面,并且在对应的h文件中不声明,它是不是就只有这个模块可以使用?它是不是就是私有变量,以这个理解,类能明白了吗?

4、学习C++的深入技巧。

C++在类的基础上,经过这么多年的发展,其实提供了很多深入的概念,看起来很复杂,其实我看也很简单。比如模板,我的理解就是“类的类”,大家说是不是?

既然模板理解了,STL,ATL这些,静态模板库,动态模板库,还难理解吗?就是一大堆类的类,可以借此实现很多应用中需要的类,不需要程序员再自己写而已。

ok,STL都理解了,泛型开发还难吗?所谓泛型开发,其实就是我做一个模板,来定义一套算法规则,但是呢,我希望这个算法规则,能进一步抽象,对核心数据类型不要限死,我把各种数据套进去,都可以用,这样,仅算法这部分,我不需要重写了。你想想是不是这个道理?

学到这里,C++和C,其实已经差不多了。再学语言,就是求全责备,过于钻牛角尖了。

5、学习应用开发。

前面说了,学习语言,目的不是让别人认为自己是专家,是为了写程序赚钱。因此,语言学完,要学习应用开发。

什么叫应用开发呢,我会一门语言,但是,客户不懂,客户说的很直接,在Windows下给我写个程序,我要什么什么功能。为啥Windows呢?因为我习惯。

OK,很多时候,应用开发要尊重客户习惯,一般说来,语言这个东东,还是要结合具体平台的开发,才能开发出有意义的应用程序卖钱。那么,一般说来,客户端是Windows系统,服务器是Linux,这些都是行业习惯,嵌入式不好说,各种平台都有,Palm,S60,Linux,WinCE,等等。要根据自己的目标客户来定。

当我们选定目标平台后,有一个问题,选什么语言,很多时候,学生和商用程序员差别就在这里,学生一般没得选,自己会啥就用啥呗,企业里的程序员不会,要先评估需求,看哪个语言更合适,不会的语言,要去学。

ok,假定我们选了C和C++,那么,我们需要选择开发平台,Windows下不用说了,VC,这是最好用的,Linux下呢,gcc,其他的也差不多。

假如我们开发VC,并且使用C++,这个时候,才需要考虑学习MFC了,因为这是微软的标准类库,至少Windows平台下,它最权威,你看见没有,我们从学习开始,走了多少步,才走到MFC?是不是MFC不是学习C++上来就必须学的?

6、学习MFC。

学习MFC,很多人一上来就开始看其体系架构,看得一头雾水,那个模块关系依赖图,我到现在都看不懂。

呵呵,其实不是啦,和学语言一样,我们学MFC的目的,也不是希望成为MFC的专家,而是要利用MFC开发Windows应用程序,为我们赚钱。看见没?MFC是手段,不是目的,目的是开发Windows程序。

其实Windows下,有一套很标准的C接口,叫Win32API,这个才是Windows的标准编程核心,因此,学习MFC,真实的目的是理解Windows程序开发,建议可以先学习Win32API,看来我们又回到C了哈,呵呵。刚开始学C有用吧?

7、Win32API。

其实Win32APi不难学的,因为虽然它很大,有很多接口,但不是必须的,我们真正做个简单的Windows应用,其实用不到这么多的。做个简单的Dialog,然后实现个功能,你遇到的接口函数,其实绝大多数,就是以后常用的了。把常用的记熟练,就ok了。

关键是,这个时候要通过WinMain方式,去理解Windows的事件机制,这是核心,其实说起来简单得要死。就是以前你的程序,由于没有系统支撑,很多事必须自己做,比如检查鼠标和键盘输入,你需要写个死循环,自己不断去看,而Windows说,这些事你不要做了,我来做比你好。你没事就玩去吧,我把和你相关的消息放到一个队列里,就是你的事件队列,你自己没事去找找看,有没有新消息来,有就做事,没事就玩好了。很简单是不?

当然,Windows是多任务操作系统,有时候,我们的逻辑需要并发一些功能,比如说,我在等鼠标键盘消息的时候,需要再看看打印机准备好了没有,这里就需要理解并行计算了,这和语言无关,和操作系统无关,这是另外一个话题,这里不多说了,你可以自己找找线程开发的相关资料看。

看见没,为了学习好Windows编程,其实我们不仅仅需要学习语言,还要学习操作系统,并行计算原理,内存原理,可能有时候还需要学习网络通信,等很多知识,所以说,单凭学习语言,是成不了商用程序员的,一个合格的程序员,需要理解的东西,太多了,要广为学习。

当我们把Win32API,以及基本的窗口化程序设计理解了,就可以回到MFC继续学习了。是不是有点递归返回的意思?呵呵。

8、回到MFC。

原来学MFC很难的,因为其封装了太多细节,很难理解透彻。不过还好,我们有侯老师的深入浅出MFC,去找本来看看,如何从Win32API的纯C编程,改变为MFC的C++方式,看这个最快,基本上前6章看完,已经会了,这里我就不多说了。

9、COM。

COM、COM、COM,我最头疼的COM,呵呵。

COM就是一种远程过程调用,即你请求的代码是在另外一个进程中运行的,通过某种通信协议来回传递参数和结果。仅此而已。DCOM进了一步,服务者可以在另外一台计算机上。在公司开发中,大家可能各做一块,如果要合作,Windows下建议多使用COM。(我个人喜欢socket通信哈)

简单说,COM提供了一种机制,可以跨进程通信,甚至跨机器通信。不过,为了传递各种类型的参数,COM可谓是无所不用其极,它发明了智能指针,可以指向任何类型的数据,同时,为了实现智能指针,它使用了大量的C++泛型设计,看见没,C++的基本功就起作用了,还用到了ATL。

学习COM,要注意一个接口的概念。由于开发者是不同的人,调用程序和服务程序,可能不是同一种语言,OK,不能简单提供一个C或C++的.h文件来解答接口,因此,COM提供了标准接口,使用者在程序内部,以查询方式获得可用接口,进而以接口ID调用。很累人的。

学会了COM,就可以多理解一点ActiveX了,那么再学习一点dll(动态链接库)的知识,我们就已经可以写OCX控件了。一般说来,OCX控件是个很好的设计,哪都能用,一个软件的模块,最理想是开发成这个样子,比exe灵活。

转载于:https://www.cnblogs.com/tham/p/6827432.html

C、C++ 学习经历相关推荐

  1. 我在51cto微职位学软考——宝妈一次性通过高项的学习经历

    先做个自我介绍,我是2015年6月本科毕业,之后在一家国企的软件部门上班,两年半的时间我经历了结婚.怀孕的过程,公司比较照顾平时就让我做做测试什么的,2018年1月我晋升为一个宝妈,歇了6个月的产假, ...

  2. 怎么学python-结合学习经历,谈一谈如何学习Python

    结合自己的学习经历,谈一谈如何学习Python吧. 入门阶段 Python其实语言本身已经很接近自然语言了,所以入门其实并不麻烦.如果你是从未接触过编程的萌新,给你推荐一门Udacity CS101, ...

  3. 阿里P6Java工程师的学习经历自述,希望新人少走弯路

    我个人觉得学习JAVA必须的具备的几个条件: 第一:目标,坚持下去的一颗心,因为学习JAVA不容易,而且现在转行的也多,工资高,最后能拿高薪的都是刚开始没日没夜的熬过来的,所以坚持非常重要,而为什么学 ...

  4. 怎么自学python-结合学习经历,谈一谈如何学习Python

    结合自己的学习经历,谈一谈如何学习Python吧. 入门阶段 Python其实语言本身已经很接近自然语言了,所以入门其实并不麻烦.如果你是从未接触过编程的萌新,给你推荐一门Udacity CS101, ...

  5. 考过HCIP入职心仪公司,分享华为认证学习经历及心得

    我成功考过了HCIP,并通过HCIP技术拿下了3家心仪公司. 学习经历 考过或者了解过HCIP的朋友都知道,考试内容大多数是概念类的问题.因为我工作的缘故没有太多时间自学,所以我报了个线上培训班,这个 ...

  6. Direct3D11学习经历分享

    今天突然看到CSDN博客不显示网易相册的图片了,大家如果敢兴趣的话到我的网易博客阅读哈.地址: http://politician2012.blog.163.com/blog/static/20784 ...

  7. 谈谈我的信息安全学习经历

    你连世界都没有观过,哪来的世界观.--<后会无期> 本人学习信息安全也有一年多了,总想写点什么记录这一段的求学生涯.趁着准备暑期实习,索性便总结出来,也能凑成一篇文章.都是些浅薄的只言片语 ...

  8. 拳王虚拟项目公社:拳王的个人IP打造之路,助你百度霸屏,与个人成长学习经历分享

    大家好,我是**|拳王虚拟项目公社|的社长拳王**,无干货不分享,无价值不输出 拳王上一篇文章写了:你最重要的事情是什么? 我们来回顾一下核心重点. 1.视频号是什么? 2.视频号有什么作用? 3.如 ...

  9. 阿德莱德大学语言班成绩为C,2020年阿德莱德大学语言班学习经历分享

    阿德雷德大学语言班学习经历分享介绍: 大家好,我是来自阿德雷德大学语言中心的学生,现在正在阿德雷德大学就读本科课程.下面我给大家详细讲解下阿德雷德大学语言班的情况: 阿德雷德大学的语言课程由阿德雷德大 ...

  10. 一个拿到人人网和淘宝网offer的大四学生的Android学习经历

    一个拿到人人网和淘宝网offer的大四学生的Android学习经历 本来早就应该整理好的,但是最近一直杂事比较多,现在在家,我家不能上网,在亲戚家用网,总算整理好了.我也着急啊.因为过几天就要去实习了 ...

最新文章

  1. 基于python的压测工具_Python Locust性能测试简介及框架实践
  2. robots.txt网站爬虫文件设置
  3. 分布式发布订阅消息系统Kafka单实例测试
  4. 编写数据访问代码测试–单元测试是浪费
  5. 布式事务实践 解决数据一致性 Spring事务机制
  6. 企业级微服务框架 NutzBoot 2.3.0.v20190220 发布
  7. 网络工程师之子网划分
  8. springdata elasticsearch aggregation 操作
  9. 文献搜索方法(转载)
  10. sipp命令 各参数含义
  11. day09、1 - 简单渗透测试流程
  12. IEEE 802.15.4的信道接入机制一基础、信标和非信标帧网络
  13. 测试人员应看重「业务测试能力」
  14. vim 替换文本指令
  15. 最活跃的FPGA论坛
  16. 新手想开一个传奇该如何操作?开一个传奇必须掌握哪些知识要点
  17. HTML之淘宝界面案例
  18. 洗牌——114514
  19. 离散数学及其应用基本结构知识总结
  20. 诸葛越:云平台为创业者提供了更多机会

热门文章

  1. 李洋疯狂C语言之编程实现统计某年某月份的天数
  2. 【许晓笛】 EOS 智能合约案例解析(2)
  3. 《开源思索集》一Source Code + X
  4. 服务器上装filezilla server后,本地的ftp客户端连接不上去
  5. javascript console 函数详解 js开发调试的利器 浏览:3201|更新:2014-05-30 09:27
  6. SNMP4J的一点缺陷
  7. python数组的乘法_在Python中乘法非常大的2D数组
  8. 云电脑是什么_云电脑和我们现在平时用的电脑有什么区别?
  9. 可编程led灯带原理_SCPSD-250-04-27派克真空压力传感器故障和工作原理
  10. 手机处理器排行榜2019_手机处理器AI性能排行榜出炉,高通骁龙第一,华为排在第十名...