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

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

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

  我想把我自己的经验分享给大家,希望帮助新人少走些弯路。

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

 

  一、技术能力

  1. 语言

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

  2. GUI(图形用户界面应用程序框架)

  C++方面的 GUI 库有很多种,比如 MFC(微软基础类)、WTL(据说基于ATL,不受微软官方支持)、wxWidgets(LGPL,跨平台)、QT(GPL,跨平台)。这些 GUI 库都各有自己的特点,其实我们只要先了解一种就可以了,只要深入了解了一种 GUI 库,需要的时候再学习其他的就够了,本质上都差不多,很快就可以上手了。MFC 虽然设计上有很多问题,但是作为入门还是不错的,而且学习资料很多,碰到问题也好解决。

  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 内核》,应该可以知道自己应该学什么了。

  二、项目经验

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

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

  三、沟通能力

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

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

劲草点评:

 

        此文章是我从网络里转来的。原作者也说选择一本好书确实可以事半功倍,还列举了方方面面,这些也确实是一个C++高级程序员必须具备的,但似乎正文主体内容偏离的文章标题。而且,从我个人的C++成长经历来看,原作者的第一点中关于C++语言的掌握,我是不敢苟同的。难道原作者看的第一本C++入门书就是《C++primer》?从他本人的介绍来看,显然不是这样。我不知道原作者有没有仔细读过《C++primer》一书,这本书确实是非常不错的书。可惜,它虽然叫Primer,但是读者的对象,可不是针对Primer,至少对于只接触过C语言、但从没有接触过任何面向对象语言的读者而言,是这样子的。看看《C++primer》的章节排版次序,根本就不是一个由简入难、循序渐进的过程。也就是《C++primer》并不太适合中国初学者的思维方式,不适合用于入门。某种程度上,《C++primer》更像一本语言参考手册,适合于已经有一定C++入门基础的人员进一步提高,或用于参考手册时常查询。

        那么那本书到底更适合中国的C++初学者?这就要谈谈C++的历史。C++源于C语言,第一版C++编译器,就是把C++代码转换成了类似C代码的中间代码,再用C语言编译器生成了最后的可执行文件。虽然没有C语言基础也可以学会C++,但是有C语言基础的,学C++会更快。我们知道国内的C语言教程,大家都首推谭老的《C语言程序设计》吧,这本书已经到第四版了,我十几年前那时上大学时是第一版。谭老在这本书里深入浅出地讲述了C语言的基本知识,很适合入门,深受广大C语言爱好者的入门。但是对于C++教程,谭老显然不再那么出名。我也看过很多垃圾C++书,走了很多弯路。后来发现了谭老的《C++语言程序设计》一书,此书虽然远没有《C语言程序设计》出名和畅销,但依然是保持了由简入难、循序渐进的思路,感觉很适合中国人的思维方式,可以用来入门。至于其他C++入门书,虽然可能还有更好的,但我没有时间和精力再去比较,觉得谭老的《C++语言程序设计》已经足够好了。

      总之一句话就是,不管选哪个书用于C++入门,《C++Primer》是不适合中国的初学者入门的,他是美国人的初学者Primer。

      最后,我推荐一下C++的入门必备吧(无需C语言基础),欢迎拍砖:

1。谭老的《C++语言程序设计》,先讲了一部分C语言基础知识,再过渡到C++。

          [若是大家实在不喜欢中国人编写的书,那么可以选用《C++Primer Plus》或利普曼的《Essential C++》,据说不错,但我没有仔细读过]

2。利普曼的《C++Primer》

3。《C++编程思想》和C++之父的力作《程序设计语言(特别版)》

        读了这几本书后,读者的C++水平才能算是合格,但是编程风格可能还是很不规范。因此,要成为高手,需要继续

5。《华为编程规范》、林锐博士的《高质量C++编程指南》,还有《Google C++ 编程规范》、

6。《C++编程规范--101条规则、准则与最佳实践》

7。《Effecitve C++》、《More Effective C++》、

8。《Exceptional C++》、《More Exceptional C++》

        这时,你如果还有丰富的项目开发经验,你将已经是合格的高手了。但还不是大师,需要继续

9。利普曼的《深度探索C++物件模型》

        成为了编程大师后,你还不是设计大师,还需要

10。《设计模式》 

        至此,你已经历练了C++的四个进阶,终于练就成了真正的C++大师。呵呵,YY一下。

        在成为大师的路上,优秀的C++书籍当然远远不止这些。但是我们的精力毕竟有限,程序员靠的是青春饭,大家可以再穿插看些其他优秀的C++书籍。而且,真正的大师,不能将目光仅仅停留在编程层面,一定要高瞻远瞩,逐步迈向软件设计、系统分析的金字塔塔顶。

       我的这个短评仅仅是抛砖引玉,对原作者的补充和完善,希望大家继续补充、拍砖。             

                                                                                      2012年3月9日 20:16:47                                                               

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值