如何成为一个C++高级程序员
发布时间:2025-05-24 04:38:12 发布人:远客网络
一、如何成为一个C++高级程序员
C++这门语言从诞生到今天已经经历了将近30个年头。不可否认,它的学习难度都比其它语言较高。而它的学习难度,主要来自于它的复杂性。现在C++的使用范围比以前已经少了很多,java、C#、python等语言在很多方面已经可以代替C++。但是也有很多地方是其他语言完全无法替代的,主要集中在需要运行效率比较高的行业,比如游戏、高效的服务器。现在学习java、C#等语言的人数远远高于C++,主要是C++的入门门槛太高,可能学习了一段时间后还做不了什么东西,导致信心大受打击,进而放弃。我想把我自己的经验分享给大家,希望帮助新人少走些弯路。在此我们不讨论具体的技术细节,只说我们应该学习什么东西。一、技术能力1.语言我们要成为一个程序员,学的东西会很多很杂,但是最开始一定要从语言开始学习,而学习语言最关键的莫过于选好一本书,学校的教材就算了,根本没有写得好的。在此隆重推荐《C++ Primer》,这本书很厚,内容也很丰富,对知识的讲解不仅仅停留在表面。如果这本书能有耐心看完,语言方面基本就没有什么大问题了,对以后的学习也打下了一个很好的基础。2.GUI C++方面的GUI库有很多种,比如MFC、WTL、wxWidgets、QT。这些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++,以成为程序员
1、每个人的情况不一样,我下面的描述可能并不适合每一个看到这篇文章的人。
2、如果你的基础很差,建议不要一开始就学C++语言,从C开始学起,对程序有个初步的认识,循序渐进。C语言的书嘛,先买一本 300页以内的,把书中的每一个例子都通过键盘敲打进去到 Visual studio里面去,然后单步执行,逐行调试去看各个变量的值。或者自行添加一些printf语句去输出变量的值。这样当你看完一本书后,你就有编写小程序的感觉了。
3、记住,千万不要偷懒,不敲进去,自以为聪明,能看懂,或者直接从光盘复制。偷懒的代价是会花费更多的时间学习,最后还没有学会,给自己的自信心造成巨大打击,再也不想学程序了。
4、C语言看完一本书后,下来你就可以买一本C++的书看了。 C++的书也是一样,必须300页以内的那种,不要一来就想学《C++ Primer中文版》这样的好书,因为太厚了,怕你没有信心能够看完,即使你很有信心,花费一年的时间才看完,不值得。这种经典的厚的好书,适合作为资料查阅,不适合挨个细节都看。
5、还是要提醒各位,一定要把书中的例子挨个敲打到电脑里面,单步执行。一定不要从光盘复制,一定要单步执行。
6、经过两本书的磨练,估计你对C/C++肯定有比较深入的了解了,下来应该可以进入实战了。
7、学会了C/C++语言本身,可能还没有什么成就感,毕竟都是控制台的程序,老是输出一串字符串,整天面对各黑框框,成就感估计不是那么爽。要是能搞个带UI界面的程序就爽了。
8、下来就看个人的志向了,如果走微软路线,那你下来学MFC好了,如果要走开源路线,那开源跨平台的界面库多得是。
9、通用的并且简单的就是 wxWidget了,官方网站为 www.wxwidgets.org/。你下载后看具体的例子,把里面的例子程序敲到你的 visual studio里面,去调试,看运行的结果,你也可以试着去修改例子,添加按钮,响应按钮事件等。
10、走到这一步,恭喜你,可以照葫芦画瓢的搞个小应用程序了,还带界面。
11、语言搞懂了,UI程序也会了,下来该学学网络咯,现在那个程序不需要联网啊,懂网络对你理解很多程序非常有帮助。但是网络应用程序从哪里入手呢?
12、我来告诉你,从《UNIX网络编程》这本书入手吧,这本书可以教会你网络套接字的底层原理,把上面的例子好好学习,自己动手写一个回应服务器。写一个服务器端,在写一个客户端。服务器端请务必学会 select这个简单的多路复用模型,这样你才能慢慢的深入里面 poll, epoll,IOCP之类的模型。
13、所有的程序,基本都会用到文件的读写操作,windows系统有自己的文件操作API,比如CreateFile, DeleteFile等,请新手不要学windows的文件操作API,新手请学标准C语言的文件操作函数,简单易学还跨平台。就那么几个函数,三下五除二你也就学会了, fopen, fclose, fread, fwrite, fseek, ftell就这么几个而已。
14、作为一个C/C++程序员,从学习程序的头一天开始,就要和内存的分配释放作斗争。你必须理解内存与指针的关系。怎么样才能理解呢,请大家去看《高质量C/C++编程》里面自带的几个经典例子吧。把那几个例子搞得清清楚楚,基本能够理解其中的原理了。
15、学程序非特别是C/C++程序,非3年之功可以出山,三年对一个C/C++程序来说是一个从量变到质变的过程,三年的项目实战经验,可以让你接触到一个完整的应用程序所需要具备的骨架。但是这个阶段你写的代码,可能充满BUG,会宕机,运行效率很差,自己回头看看一年前写的代码,可能自己都感觉恶心,看不下去。没有关系,这种感觉是每一个进步青年都会有的。要提高自己的代码水平,还是要像高手学习。你可能要问,公司同事的水平一般,水平好的人家也不愿意给我讲。没有关系,开源的代码就是你像高手学习的最佳途径,开源代码是高手留下的练功秘诀,你看了后你会突然感觉茅塞顿开,感觉自己的水平差人家太远了。我为何要推荐apache的源码呢?
16、apache的源码是高手中的高手写的,执行效率和程序架构堪称一绝。里面的很多思想是所有程序都通用的,搞懂了,很多模块你也可以直接拿来使用。apache对内存池的使用,对线程池的使用,对模块结构的封装,非常具有实际意义。要是你能把apache的源码吃个透彻,每一个细节都搞明白了为何人家要这么实现,我可以给你说,“恭喜你,你离传说中的高手已经不远了。”
17、我上面说的基本都是修炼C的,要修炼C++,还得再花3年功夫,才有可能练成C++高手。C++太博大精深了,其中最复杂的莫过于泛型编程思想,不要以为能写个模板类就认为泛型编程不过如此而已。仔细看看STL源码, Boost源码,你就知道泛型编程有多么的博大精深了。修炼C++,可以从用C++封装的MFC, wxWidget入手,看高手如何通过C++语言,封装这样庞大的UI库,里面应用了很多的C++机制,最典型的就是多态机制,还有很多的设计模式应用可以研究。
18、设计模式是程序设计的灵魂,是通用方法,当你面对一个大型项目的时候,如何设计一个有弹性的系统,是所有系统分析员应该掌握的技能。在设计模式的研究上,要结合实际的项目进行。
三、c++程序员工资
1、据调查,初中级C/C++软件开发工程师的年薪为5万-15万元,高级软件工程师则高达15万-30万元。市场最紧缺的C/C++技术总监或项目总监年薪更高。C/C++软件工程师的年薪与JAVA软件工程师和.NET软件工程师的年薪相比一般平均要高于2-3万。据专家预测,C/C++软件工程师是未来几年最热门和最受欢迎的职业之一。
2、看你问的问题,应该是对c++很感兴趣,其实你可以自学c++。关于如何学习c++,我刚才看到一篇很不错的文章,是一个专科生介绍自己如何自学c++,并找到c++的工作,里面介绍了他的学习方法和学习过程,希望对你有帮助。
3、先做个自我介绍,我07年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了。09年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学了。
4、退学后我也迷茫,大专都没有毕业,我真的不知道我能干什么,我在纠结着我能做什么。所以辍学后我一段时间,我想去找工作,因为我比较沉默寡言,不是很会说话,我不适合去应聘做业务。我想应聘做技术的,可是处处碰壁。
5、一次偶然的机会,我才听到c++这个行业。那天我去新华书店,在计算机分类那边想找本书学习。后来有个女孩子走过来,问我是不是读计算机的,有没有兴趣学习c++,然后给我介绍了一下c++现在的火热情况,告诉我学c++多么的有前景,给我了一份传单,c++培训的广告。听了她的介绍,我心里痒痒的,确实我很想去学会一门自己的技术,靠自己的双手吃饭。
6、回家后,我就上网查了下c++,确实是当今比较热门的行业,也是比较好找工作的,工资也是相对比较高。我就下决心想学c++了。于是我去找c++培训的相关信息,说真的,我也很迷茫,我不知道培训是否真的能像他们宣传的那样好,所以我就想了解一段时间再做打算。
7、后来,我在百度知道看到一篇让我很鼓舞的文章是一个c++高手介绍没有基础的朋友怎么自学入门学c++,文章写的很好,包含了如何学习,该怎么学习。他提到一个方法就是看视频,因为看书实在太枯燥和费解的,很多我们也看不懂。这点我真的很认同,我自己看书往往看不了几页。
8、我在想,为什么别人都能自学成才,我也可以的!我要相信自己,所以我就想自学,如果实在学不会我再去培训。
9、主意一定,我就去搜索c++的视频,虽然零星找到一些c++的视频,但是都不系统,我是想找一个能够告诉我该怎么学的视频,一套从入门到精通的视频,一个比较完整的资料,最好能有老师教,不懂可以请教的。
10、后来我又找到一份很好的视频,是在IT学习联盟推出的一份视频《零基础c++就业班》(喜欢《零基础c++就业班》的可以复制 sina.lt/ceFM粘贴浏览器地址栏按回车键即打开)。里面的教程还不错,很完整。
11、下面介绍下我的学习流程,希望对和我一样完全没有基础的朋友有所帮助。
12、收到他们寄过来的光盘后,我就开始学习了,由于我没有什么基础,我就从最简单的C语言视频教程学起,话说简单,其实我还是很多不懂的,只要重复多看几遍,就能看懂。C语言我差不多学了一个礼拜,接下来我就学了c++和数据结构算法,差不多也就三个礼拜。我每天都在不停的写一些简单的代码,这样一月后我基本掌握了c++的全部基础。
13、接下来开始学习c++高级课程,老师幽默风趣而又轻松的课堂教课,使我发现原来学习c++并不是一件很难的事情。之前我把c++基础学得还不错,到了到了c++高级部分,我觉不又不是很难,可能老师太牛了,他能把复杂的问题讲的比较通俗易懂,有些难点的地方我还是连续看了五六次,把他弄懂。每天下午6点下班后,吃了饭,马上跑回家。看视频,买了几本笔记本。当时,为了编程还花几百元了台二手的台式电脑,配置一般,但编程是足够的。一边看视频,一边记笔记,把重点都记下来,还一边跟着老师敲代码,为了能尽早学会c++。每天都坚持学5-6个小时。经常学到晚上一点多才睡觉。星期六,日不用上班,每天7点多起床,学到晚上11,12点。那段时间特别辛苦,特别累。在学习c++的三个多月里,除了吃饭睡觉工作,剩余的时间都在学习,因为我知道自己的计算机基础不是很好,也没有学过什么计算机,相对于那些科班的人来说我要比他们付出更多的努力。我只能咬紧牙关,坚持下去,我不能放弃,我要完成我的梦想,我要让我的家人过上好日子。终于三个多月后我把c++教程里的内容和项目都学完了,在学项目的过程中我发现项目特别重要,他能把你学过的知识全部联系起来,能更好的理解你所学的知识。还有学习过程中,动手很重要,要经常跟着老师动手敲,动手吧,跟着做,一行一行的跟着敲,再试着加一些自己的功能,按照自己的思路敲一些代码,收获远比干听大的多。如果遇到暂时对于一些思路不能理解的,动手写,先写代码,慢慢你就会懂了。
14、于是我就到51job疯狂的投简历,因为我学历的问题,专科没有毕业,说真的,大公司没有人会要我,所以我投的都是民营的小公司,我希望自己的努力有所回报。没有想过几天过后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比较严格,需要有一年的项目经验,所以我没有被选中。
15、后来陆续面试了几家公司,终于功夫不负有心人。我终于面试上的,是在闵行的一家民营的企业,公司规模比较小,我的职务是c++开发程序员,但我也比较满足,开的工资是3500一个月,虽然我知道在上海3500只能过温饱的生活,但是我想我足够了。我至少不用每天都要靠父母养,我自己也能养活自己的。我想只要我继续努力,我工资一定会翻倍的。
16、把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有必要自卑,我们不比别人笨,只要我们肯努力,我们一样会成功。