1.语言

要成为一个合格的程序员,学习的东西将会很多很杂,但最开始一定要从编程语言开始学起,而学习编程语言最关键的莫过于选择一本好的入门教材,在此推荐《C++ Primer》。这本书内容丰富,对知识的讲解也不仅仅停留在表面。如果能有耐心看完本书,编程语言方面基本没有什么大问题了,以后的学习也有一个良好的基础。

2.GUI

C++方面的GUI库有很多种,比如WTL、MFC、QT、wxWidgets。这些GUI库各有各的特点,而我们只需要先了解一种就可以了, 只要深入了解了一种,再学习其他的就简单多了,很快就能够上手了。其中MFC虽然设计上有很多问题,但是作为入门GUI库还是非常不错的, 而且学习资料也多,碰到问题也好解决。

3.数据结构和算法

很多人都会忽视数据结构和算法方面的知识,尤其是一些编程语言的库做得非常好,几乎不需要自己去实现一些数据结构和算法,导致现在很多程序员不重视甚至忽略这方面的知识。然而,当我们进一步想让我们的程序跑的更快、内存占用更少的时候,这些知识就非常非常重要了。很多程序员都是刚开始的时候不太重视这些,但是工作几年后又回头来补习这些知识。

刚开始不需要太深入的学习,了解基本的数据结构和算法就行了。

推荐《数据结构(C语言版)》,在数据结构和算法的学习中,最好不要去关心面向对象方面的技巧,就用C语言来实现,这样能更关注于算法本身的内容。

4.数据库

学习了解数据库的基础知识,并且掌握一种数据库的使用,推荐使用mysql,而且最好不要用一些封装好的接口,而应该直接用mysql提供的数据库api,这样对数据库了解的会更深入。

5.并行

cpu主频已经不能够遵循摩尔定律了,现在cpu发展的趋势是多核心。无论是多线程,还是多进程,都是为了更好的利用cpu的性能,提供更好的用户体验。这就要求我们如果要写出高效的应用程序,必然要涉及到并行计算。多花些精力在并行计算上吧,一定会有丰富的回报。

6.网络编程

这里所指的网络编程是指socket编程。现在C++的应用很多都是在做服务器开发,如何开发一个高并发、大吞吐量、高稳定性的服务器就是我们要考虑的了。

7.设计模式

设计模式不是具体的技术,更多的是如何让代码更容易阅读、更好扩展、更容易使用。

8.库的使用

C++标准库仅仅提供了一些很基本的功能,所以我们经常会引入一些第三方库。最著名的恐怕就是被称为准标准库的boost库,它提供了我们编程中用 到的各方面的技术,文本处理、算法、网络、多线程、图像处理等等,几乎无所不包。其它也有一些专著于某一方面的库,比如ACE是网络通信方面 的,TinyXML是解析xml的,OGRE是图形渲染方面的。

9.操作系统的知识

程序员需要了解的操作系统知识和普通用户是不一样的,一个高手是需要深入了解操作系统的方方面面,而不是停留在使用层面。至于应该了解哪些知 识,windows上的去看《windows核心编程》,linux的去看《深入理解linux内核》,应该可以知道自己应该学什么了。

项目经验

以上的内容如果都精通了,也算是个比较厉害的程序员了。但是对程序员来说,项目经验更加重要。一个好的项目可以让你把各种技术进行综合运用,并且能学到一些新的知识。比如说做游戏的就需要学习图形方面的知识,做播放器的要学习编解码器方面的知识。

很多程序员会忽略项目的经验,而单纯的谈技术能力,这是错误的。其实这就是理论和实践的关系,技术就是理论知识,做项目就是实践,理论对实践有知道作用,实践能加深我们对理论的深入理解。

沟通能力

沟通能力是一个高级程序员要具备的软实力。

我这里想说的沟通能力并不是一般说的能说会道,夸夸其谈,说话天花乱坠。而是建立在技术基础之上的沟通能力。