很多人认为C++牛B,学好了可以无敌于天下,我只想说:别天真了,没有一种说法,学习好一种语言就就可以笑傲江湖了,如果这样,为什么大家都不跑来学习C++呢。C++只是一个复杂一点的语言,请大家别神话它。
学习C++,为什么有很多C++大牛,有各自不同的学习方式,这个人这么学,代码这么写,那个人那么学,代码那样写,到底谁的正确的?我告诉你:没有谁对谁错,因为他们的工作、学习、方向、环境造就了他们的学习方式。
很多刚出道的,慕名来学C++,但我想说一句,不要为了那么一点点兴趣,就跑来学C++,不然到头来只会浪费你的时间,还会让你痛苦,你若只专研了一知半解,你再回去用其它语言来写程序,你会发现,不太会写了,写的不畅快不顺手了。你原来建立在上层的一整套知识体系,被这个衔接上下层的C++语言打乱了,让你如鲠在喉,几个月都不舒服。
所以假如你想学C++,请拿出你的巨大的毅力和精力来学,不做好这种准备,不建议学习并精通C++。
这里只说C++,不涉及操作系统、计算机原理、网络通信、加密解密等其它计算机学科的知识,虽然他们是相辅相成的,但是我尽量不涉及这些知识。当你学完之后,你或许可以重新学一遍我上面所提的一些学科知识。当然,你不需要太过深入,把你大学里面的学会了理解了就可以了。
那么下面重点说说,如何学习C++了。
当然首先无外乎重要的一点,买一本或者从哪里搞一本C++语法方面的书,从头到尾看一遍,看的过程,多敲样例代码,书后习题一定要做,具体重点看那些了,我建议,看到类那里,把继承看完,全部弄懂基本就可以了。(一定要多敲代码,多动手,一定要弄懂指针,不懂的话后面学习让你如坠云里雾里,所以指针一定要直到弄懂为止)搞完之后,网上下载几份C++试卷,多得很,就不给出链接了,如果感觉轻松完成四五套试卷,那么下面可以进行下一步了。
学习完以后,你的C++基本功底差不多了,那么如何巩固和提高你的基本功了,这个时候,你要重点专研C++的多态,虚函数、虚基类等一些饶人令人容易忘记又容易搞混的东西,这些东西,你几个月不用,基本上就忘的差不多了。但是为什么搞懂还这么重要了,因为后来你需要学的时候,或者你看到其他需要这些基础知识的时候,你会比别人更容易来学习这些东西。
然后,你需要学习模板的知识,模板函数、模板类,为下一个阶段学习做准备。
学习完上面之后,这个时候,你要开始学习STL,这个可以算是进阶了。当然,学习STL之前,你必须要有一点点数据结构的知识,假设你大学考试数据结构考试不是抄的过了,你就可以开始学习STL了,你需要弄懂vector、queue、deque、priority-queue、list、stack、map、set、multiset、multimap等,需要了解迭代器、算法、容器的概念以及使用方法。学习到什么程度就可以了呢,这个不好说,得看各人,自己把握。
然后,学习数据结构吧,亲,用C++实现你大学数据结构课本上所有的知识点(栈、队列、树、图、查找排序算法等),当然,实现完之后,你需要将这些实现的代码记录下来,以备以后工作应聘等不时之需。
以上学完了,下一阶段该怎么学了,这个阶段很重要,是衔接理论与现实应用的衔接点,很多时候,C++如果不借助于其它方面的一些已经写好的库,一些很简单的任务C++都完成不了,比如说让你写一个windows的窗口应用程序,你用C++,就实现不了。因为C++的标准库,没有与GUI相关的东西,这个时候,我们需要借助于其他的一些库,比如,MFC,QT的库等,在这一个阶段,你需要学习如何使用IDE平台库或者系统平台的库,利用各种已经写好了现成的库,你只需要调用,就可以完成非常强大功能。这个时候,如果你挺聪明的,你或许可以用C++来写一些小游戏了,比如俄罗斯方块、贪食蛇等。
平台库我们用完了,但我们不局限于IDE或者系统函数库的调用与使用,我们要使用除此之外的其它第三方库,比如网络游戏那超级酷的3D效果,这个时候,比如opencv、PCL、opengl、directX等,具体怎么学,看你的工作学习所需了。
直到现在,我们一直从语言层面上来学习C++,这一次,我们要从俯瞰的角度来审视C++,我们要学习C++的开发模式,建议大家学习一下C++的开发方法,开发模式,二十几种的设计模式。
到了现在为止,你需要温故而知新,因为你前面很多细节都忘了。你可以报考一门中级软件工程师考试,用来让你的编程与所有学科的知识进行有效的糅合,系统化的学习计算机知识,让你对C++的理解和计算机的理解相辅相成,齐头并进。
学习完上面之后,C++我觉得你基本上算中上等水平了,可能很多的C++使用的人都停留在这个水平。不出意外,这个时候,你已经学会用C++走路了,以后的路,需要你自己走了,以后的进阶,你需要选择一个方向,比如通信、二维三维图像、3D大型网络游戏里面的某个重要的C++分支开发等(基本上是公司和你自己的定位来帮你选择方向),这个时候,需要的,大多是算法、算法优化、各种各样奇技淫巧的算法等,我们发现C++的学习方式,就是先广度后深度。
注:C++目前是没落的,我个人不太看好C++未来的发展,不会像很多人说的那样王者归来。或许会在不温不火中慢慢老去。底层,嵌入式,拼不过C,高层,拼不过java,C++的应用,目前主要集中在对C的封装来构建更加强大和复杂的应用程序(系统软件,比如网络软件、分布式的一些应用),图像处理行业、大型网游游戏行业,工业上面也有一些应用。但是,请注意,以上所说的,未来都将可能会被其他语言越来越丰富的库来替代。但是其他语言的简洁易用性,高效的编程,是C++无法比拟的。
所以,我说,C++,没落了,假如你是C++的爱好者,我建议为了以后的生存,你可以再学习java、jsp等。
谨以此文,献给那些热爱C++的人。