| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx

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

15
程序员 Python Java C/C++ Go 34190 次浏览

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

  二、项目经验

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

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

  三、沟通能力

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

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

来自: CSDN

48个答案

0

buy icard accountWow, excellent post. I'd like to draft like this too - taking time and real hard work to make a great article. This post has encouraged me to write some posts that I am going to write soon. buy icard account

0

I have read all the comments and suggestions posted by the visitors for this article are very fine,We will wait for your next article so only.Thanks! coins.ph

0

I found so many interesting stuff in your blog especially its discussion. From the tons of comments on your articles, I guess I am not the only one having all the enjoyment here! keep up the good work... voyancemargot.com

0

I am continually hunting on the web down articles that can help me. There is clearly a great deal to think about this. I think you made some great focuses in Features too. Continue working, extraordinary job ! matka satta

0

Darknetweedstore.com is the fastest and convenient way in which one can order and receive weed without any interceptions to USA, uk, Poland, Ireland , France martian rocks weed

0

This is my first time i visit here. I found so many interesting stuff in your blog especially its discussion. From the tons of comments on your articles, I guess I am not the only one having all the enjoyment here keep up the good work credit card processing agent programs

0

Interesting topic for a blog. I have been searching the Internet for fun and came upon your website. Fabulous post. Thanks a ton for sharing your knowledge! It is great to see that some people still put in an effort into managing their websites. I'll be sure to check back again real soon. selling POS systems

0

I havent any word to appreciate this post.....Really i am impressed from this post....the person who create this post it was a great human..thanks for shared this with us. best credit card processing companies to work for

0

I havent any word to appreciate this post.....Really i am impressed from this post....the person who create this post it was a great human..thanks for shared this with us. rent a car beograd

0

Most of the time I don’t make comments on websites, but I'd like to say that this article really forced me to do so. Really nice post! prediksi taiwan

0

I have bookmarked your blog, the articles are way better than other similar blogs.. thanks for a great blog! link building

0

Thanks for taking the time to discuss this, I feel strongly that love and read more on this topic. If possible, such as gain knowledge, would you mind updating your blog with additional information? It is very useful for me. 안전놀이터

0

I recently came across your blog and have been reading along. I thought I would leave my first comment. I don’t know what to say except that I have enjoyed reading. Europa-Road gépszállítás

0

Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic. If possible, as you gain expertise, would you mind updating your blog with more information? It is extremely helpful for me. Discover Alternatives

0

If you are looking for more information about flat rate locksmith Las Vegas check that right away. 먹튀검증

0

When you use a genuine service, you will be able to provide instructions, share materials and choose the formatting style. 토토

0

Friend, this web site might be fabolous, i just like it. slotxoth

0

What a sensational blog! This blog is too much amazing in all aspects. Especially, it looks awesome and the content available on it is utmost qualitative. relx電子煙

0

Only strive to mention one's content can be as incredible. This clarity with your post is superb! Thanks a lot, hundreds of along with you should go on the pleasurable get the job done. 메이저사이트

0

Thank you for helping people get the information they need. Great stuff as usual. Keep up the great work!!! 먹튀검증

1 2 3