C++从诞生到今天,已经经历了将近30年。不可否认,它比其他语言更难学。而它的学习难度主要来自于它的复杂性。现在C++的使用比以前少了很多,java、C#、python等语言可以在很多方面替代C++。但也有很多其他语言无法替代的地方,主要是需要更高效运行的行业,比如游戏、高效服务器。现在学习java、C#等语言的人数远远高于C++。主要原因是C++的入门门槛太高。学了一段时间后,可能什么也做不了,导致信心受到打击而放弃。想把自己的经验分享给大家,希望能帮助新人少走弯路。这里不讨论具体的技术细节,只说应该学习什么。1.技术能力1.语言如果我们想成为一名程序员,我们会学到很多复杂的东西,但是我们必须从语言开始学习,而学习一门语言最重要的是选择一本好书。好吧,一点也写不好。在这里我强烈推荐《C++ Primer》,这本书很厚,内容也很丰富,对知识的讲解不只肤浅。如果能耐心看完这本书,语言上基本不会有什么大的问题,也能为以后的学习打下良好的基础。2、GUIC+??+的GUI库有很多种,如MFC、WTL、wxWidgets、QT等。这些GUI库中的每一个都有自己的特点。其实我们只需要先了解一种GUI库即可。只要深入了解一个GUI库,在需要的时候再去学习其他的就足够了。开始吧。MFC的设计虽然问题很多,但是作为入门还是不错的,而且学习资料也很多,解决问题也很容易。3.数据结构和算法很多人都忽略了数据结构和算法的知识,尤其是一些编程语言的库很好,几乎不需要自己去实现一些数据结构和算法,所以很多程序员都不会重视它甚至忽略这些知识。然而,当我们想让我们的程序运行得更快,占用更少的内存时,这个知识就非常非常重要了。很多程序员一开始并没有关注这些,但是工作几年后才来补充这些知识。一开始可能不需要学得太深,但是一定要知道基本的数据结构和算法。推荐《数据结构(C语言版)》,在学习数据结构和算法的时候,最好不要关心面向对象的技巧,直接用C语言去实现,这样可以更加关注算法本身的内容。4.数据库学习数据库的基础知识,掌握一种数据库的使用方法。推荐使用mysql,最好不要使用一些封装好的接口,直接使用mysql提供的数据库api,可能对数据库的理解会更深。5、并行CPU的主频不能再遵循摩尔定律,目前CPU的发展趋势是多核。不管是多线程还是多进程,都是为了更好的发挥CPU的性能,提供更好的用户体验。这就要求如果我们要写出高效的应用程序,就必须涉及到并行计算。把更多的精力花在并行计算上,就会有丰厚的回报。6.网络编程这里所说的网络编程是指socket编程。现在很多C++应用都在做服务器开发。如何开发一个高并发、高吞吐量、高稳定性的服务器是我们要考虑的。7、设计模式设计模式并不是一种具体的技术,更多的是关于如何让代码更易读,更好的扩展,更容易使用。8、库的使用C++标准库只提供了一些非常基础的功能,所以我们经常会引入一些第三方库。最著名的大概就是号称准标准库的boost库了,它提供了我们编程中用到的方方面面的技术,文本处理、算法、网络、多线程、图像处理等等,几乎无所不包。还有一些其他的库是专攻某一方面的,比如网络通信的ACE,解析xml的TinyXML,图形渲染的OGRE等。9.操作系统知识程序员需要了解的操作系统知识与普通用户不同。高手需要深入了解操作系统的方方面面,而不是停留在使用层面。至于你应该知道哪些知识,看看Windows上的?和Linux上的《深入理解linux内核》,应该就知道应该学什么了。2、如果你精通以上项目经历的内容,就可以算是一个比较牛逼的程序员了。但对于程序员来说,项目经验更重要。一个好的项目可以让你综合运用各种技术,学习一些新的知识。比如做游戏的需要学习图形的知识,做播放器的需要学习编解码的知识。很多程序员忽略了项目经验,只谈技术能力,这是不对的。其实这就是理论与实践的关系。技术是理论知识,做项目是实践。理论可以指导实践,实践可以加深我们对理论的理解。3、沟通能力沟通能力是一个高级程序员必须具备的软实力。这里要说的沟通技巧,一般不是说得很好,吹牛,炒作。它是基于技术的通信能力。
