如何成为一个优秀的高级C++程序员

C++这门语言从诞生到今天已经经历了将近 30 个年头。不能否认,它的学习难度都比其它语言较高。而它的学习难度,主要来自于它的复杂性。如今 C++ 的使用范围比之前已经少了不少,java、C#、python 等语言在不少方面已经能够代替 C++。可是也有不少地方是其余语言彻底没法替代的,主要集中在须要运行效率比较高的行业,好比游戏、高效的服务器。java

  如今学习 java、C#等语言的人数远远高于C++,主要是 C++ 的入门门槛过高,可能学习了一段时间后还作不了什么东西,致使信心大受打击,进而放弃。python

  我想把我本身的经验分享给你们,但愿帮助新人少走些弯路。mysql

  在此咱们不讨论具体的技术细节,只说咱们应该学习什么东西。linux

  1、技术能力程序员

  1. 语言算法

  咱们要成为一个程序员,学的东西会不少很杂,可是最开始必定要从语言开始学习,而学习语言最关键的莫过于选好一本书,学校的教材就算了,根本没有写得好的。在此隆重推荐《C++ Primer》,这本书很厚,内容也很丰富,对知识的讲解不只仅停留在表面。若是这本书能有耐心看完,语言方面基本就没有什么大问题了,对之后的学习也打下了一个很好的基础。sql

  2. GUI数据库

  C++方面的 GUI 库有不少种,好比 MFC、WTL、wxWidgets、QT。这些 GUI 库都各有本身的特色,其实咱们只要先了解一种就能够了, 只要深刻了解了一种 GUI 库,须要的时候再学习其余的就够了,本质上都差很少,很快就能够上手了。MFC 虽然设计上有不少问题,可是做为入门仍是不错的, 并且学习资料不少,碰到问题也好解决。编程

  3. 数据结构和算法windows

  不少人都忽视了数据结构和算法方面的知识,尤为是一些编程语言的库作得很是好,几乎不须要本身去实现一些数据结构和算法,致使如今不少程序员不重视甚至忽略这方面的知识。可是,当咱们想让咱们的程序跑的更快、内存占用更少的时候,这些知识就很是很是重要了。不少程序员都是刚开始的时候不重视这些,可是工做几年后又来补习这些知识。

  最开始可能不须要学习的太深刻,可是基本的数据结构和算法必定要知道。

  推荐《数据结构(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 内核》,应该能够知道本身应该学什么了。

  2、项目经验

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

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

  3、沟通能力

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

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

相关文章
相关标签/搜索