如何学习C和C++才不茫然,才不是乱学?程序员
一、能够考虑先学习C.算法
大多数时候,咱们学习语言的目的,不是为了成为一个语言专家,而是但愿成为一个解决问题的专家。作一个有用的程序员,作一个赚钱的程序员。咱们的价值,将体如今客户价值上,而不是语言写得好很差看。编程
C++是C的一个面向对象的解释,C++为C扩充了大规模工程应用,复杂的系统结构的组织和掌控方法,可是,我认为,C++骨子里仍是C的。毕竟,解决具体问题,每一个函数内部,都是用C的方式写程序,仍是面向过程的。安全
所以,想要学习好C++,个人建议,先学习C,先学解决问题的能力,再讨论解决大问题的能力。就是先学习怎么走路,再学习怎么跑步。服务器
二、学习C的过程当中,必定要理解结构化编程思惟。网络
为何呢?软件语言的发展过程,就是一个数据私有化的过程,大型工程应用,强调高内聚,低耦合,模块化设计,保持代码最大的灵活性和安全性。架构
这是现代工程化开发的核心和灵魂。并发
所以,利用C这门语言入门,借此理解结构化开发思惟,能够说是个很方便的路子。由于C的函数,原本就是为重用作准备的。同时,全局变量和cpp内部私有变量的差异,其使用原则,这些都能学到不少结构化开发思惟。编程语言
三、开始学习C++模块化
C++不难学的,不少人以为C++难学,实际上是由于它在C以外,又提供了不少的概念,尤为是对象,很难以理解。
不过我通过这么多年,把这个问题反而看淡了,我认为面向对象相对面向过程,仅仅是结构化程序设计的一个具体体现,是编译器提供手段,强迫程序员必须遵循数据私有化的一个实例,C++和C的关系,最核心的莫过于此。
如今咱们回到C再看看,若是咱们把一个全局变量,写到一个cpp里面,而且在对应的h文件中不声明,它是否是就只有这个模块可使用?它是否是就是私有变量,以这个理解,类能明白了吗?
四、学习C++的深刻技巧
C++在类的基础上,通过这么多年的发展,其实提供了不少深刻的概念,看起来很复杂,其实我看也很简单。好比模板,个人理解就是“类的类”,你们说是否是?
既然模板理解了,STL,ATL这些,静态模板库,动态模板库,还难理解吗?就是一大堆类的类,能够借此实现不少应用中须要的类,不须要程序员再本身写而已。
ok,STL都理解了,泛型开发还难吗?所谓泛型开发,其实就是我作一个模板,来定义一套算法规则,可是呢,我但愿这个算法规则,能进一步抽象,对核心数据类型不要限死,我把各类数据套进去,均可以用,这样,仅算法这部分,我不须要重写了。你想一想是否是这个道理?
学到这里,C++和C,其实已经差很少了。再学语言,就是求全责备,过于钻牛角尖了。
五、学习应用开发
前面说了,学习语言,目的不是让别人认为本身是专家,是为了写程序赚钱。所以,语言学完,要学习应用开发。
什么叫应用开发呢,我会一门语言,可是,客户不懂,客户说的很直接,在Windows下给我写个程序,我要什么什么功能。为啥Windows呢?由于我习惯。
OK,不少时候,应用开发要尊重客户习惯,通常说来,语言这个东东,仍是要结合具体平台的开发,才能开发出有意义的应用程序卖钱。那么,通常说来,客户端是Windows系统,服务器是Linux,这些都是行业习惯,嵌入式很差说,各类平台都有,Palm,S60,Linux,WinCE,等等。要根据本身的目标客户来定。
当咱们选定目标平台后,有一个问题,选什么语言,不少时候,学生和商用程序员差异就在这里,学生通常没得选,本身会啥就用啥呗,企业里的程序员不会,要先评估需求,看哪一个语言更合适,不会的语言,要去学。
ok,假定咱们选了C和C++,那么,咱们须要选择开发平台,Windows下不用说了,VC,这是最好用的,Linux下呢,gcc,其余的也差很少。
假如咱们开发VC,而且使用C++,这个时候,才须要考虑学习MFC了,由于这是微软的标准类库,至少Windows平台下,它最权威,你看见没有,咱们从学习开始,走了多少步,才走到MFC?是否是MFC不是学习C++上来就必须学的?
六、学习MFC
学习MFC,不少人一上来就开始看其体系架构,看得一头雾水,那个模块关系依赖图,我到如今都看不懂。
呵呵,其实不是啦,和学语言同样,咱们学MFC的目的,也不是但愿成为MFC的专家,而是要利用MFC开发Windows应用程序,为咱们赚钱。看见没?MFC是手段,不是目的,目的是开发Windows程序。
其实Windows下,有一套很标准的C接口,叫Win32API,这个才是Windows的标准编程核心,所以,学习MFC,真实的目的是理解Windows程序开发,建议能够先学习Win32API,看来咱们又回到C了哈,呵呵。刚开始学C有用吧?
七、Win32API
其实Win32APi不难学的,由于虽然它很大,有不少接口,但不是必须的,咱们真正作个简单的Windows应用,其实用不到这么多的。作个简单的Dialog,而后实现个功能,你遇到的接口函数,其实绝大多数,就是之后经常使用的了。把经常使用的记熟练,就ok了。
关键是,这个时候要经过WinMain方式,去理解Windows的事件机制,这是核心,其实提及来简单得要死。就是之前你的程序,因为没有系统支撑,不少事必须本身作,好比检查鼠标和键盘输入,你须要写个死循环,本身不断去看,而Windows说,这些事你不要作了,我来作比你好。你没事就玩去吧,我把和你相关的消息放到一个队列里,就是你的事件队列,你本身没事去找找看,有没有新消息来,有就作事,没事就玩好了。很简单是不?
固然,Windows是多任务操做系统,有时候,咱们的逻辑须要并发一些功能,好比说,我在等鼠标键盘消息的时候,须要再看看打印机准备好了没有,这里就须要理解并行计算了,这和语言无关,和操做系统无关,这是另一个话题,这里很少说了,你能够本身找找线程开发的相关资料看。
看见没,为了学习好Windows编程,其实咱们不只仅须要学习语言,还要学习操做系统,并行计算原理,内存原理,可能有时候还须要学习网络通讯,等不少知识,因此说,单凭学习语言,是成不了商用程序员的,一个合格的程序员,须要理解的东西,太多了,要广为学习。
当咱们把Win32API,以及基本的窗口化程序设计理解了,就能够回到MFC继续学习了。是否是有点递归返回的意思?呵呵。
八、回到MFC
原来学MFC很难的,由于其封装了太多细节,很难理解透彻。不过还好,咱们有侯老师的深刻浅出MFC,去找原本看看,如何从Win32API的纯C编程,改变为MFC的C++方式,看这个最快,基本上前6章看完,已经会了,这里我就很少说了。
九、COM
COM、COM、COM,我最头疼的COM,呵呵。
COM就是一种远程过程调用,即你请求的代码是在另一个进程中运行的,经过某种通讯协议来回传递参数和结果。仅此而已。DCOM进了一步,服务者能够在另一台计算机上。在公司开发中,你们可能各作一块,若是要合做,Windows下建议多使用COM。
简单说,COM提供了一种机制,能够跨进程通讯,甚至跨机器通讯。不过,为了传递各类类型的参数,COM可谓是无所不用其极,它发明了智能指针,能够指向任何类型的数据,同时,为了实现智能指针,它使用了大量的C++泛型设计,看见没,C++的基本功就起做用了,还用到了ATL。
学习COM,要注意一个接口的概念。因为开发者是不一样的人,调用程序和服务程序,可能不是同一种语言,OK,不能简单提供一个C或C++的。h文件来解答接口,所以,COM提供了标准接口,使用者在程序内部,以查询方式得到可用接口,进而以接口ID调用很累人的。学会了COM,就能够多理解一点AcTIveX了,那么再学习一点dll(动态连接库)的知识,咱们就已经能够写OCX控件了。通常说来,OCX控件是个很好的设计,哪都能用,一个软件的模块,最理想是开发成这个样子,比exe灵活。
最后,若是你也想成为程序员,想要快速掌握编程,赶忙加入学习企鹅圈子!
里面有资深专业软件开发工程师,在线解答你的全部疑惑~编程语言入门“so easy”
编程学习书籍:
编程学习视频: