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. 为什么3年的Java高级程序员薪水仅仅8k-10k,而一个Linux底层C语言程序员两年经验就敢要1...

    为什么80%的码农都做不了架构师?>>>    为什么3年的Java高级程序员薪水仅仅8k-10k,而一个Linux底层C语言程序员两年经验就敢要10k的薪水?   由于目前国内嵌入 ...

  2. 一个七年Java女程序员的年终总结,写给过去一年的自己

    简单先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴B2B事业部的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少), 推荐一个Java学习资料群 ...

  3. 一个即将30岁Android程序员的自诉,在内卷的大环境之下迷惘的大龄程序员该如何破局?

    步入社会 毕业 2015年7月我从一个90%以上的人都不知道的二本院校毕业(软件工程),凭借自学的Android技术,在北京找到了一份月薪7000的工作,在当时其实还算不错,毕竟我的学校起点比较差,跟 ...

  4. 一个5年Java女程序员的年终总结,写给过去一年的自己

    简单先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴B2B事业部的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少),其中成功的有4家,另外两家失 ...

  5. 一个工作了两三年程序员的学习计划

    本人已经工作两年多了,尴尬的是待过的两家公司都是外包,大部分外包公司技术性都很一般,这也是很多人看不起外包公司的一点.可是已经在外包 公司了怎么办,我也很绝望啊.....而且我做过的项目都是很老的项目 ...

  6. 高级 Java 程序员都在学什么?

    我曾在某乎的一条回答下看到这样一条评论: 确实,Netty 大家肯定都会,不会的绝对是初级或者XX 上面的说有失偏颇,学习技术没必要上升到人身攻击,更重要的是如何学会技术,面好的大厂,拿到高的薪资. ...

  7. 一个即将30岁Java程序员的自诉,在内卷的大环境之下迷惘的大龄程序员该如何破局?

    就是想写点什么 不知不觉自己即将步入30岁,到了很多人口中的中年,有时候一直在回想,这些年自己到底做了些什么,留下了些什么? 步入社会 毕业 2015年7月我从一个90%以上的人都不知道的二本院校毕业 ...

  8. 一个月薪1万的程序员给我上了震撼一课

    一个月薪1万的程序员给我上了震撼一课 作者: zc_218, 出处:赛迪网, 责任编辑: 李春禹, 2008-01-15 16:09 "做程序员,也要用科学的方法."他说.我一愣, ...

  9. 从普通进阶成优秀的测试/开发程序员,一路过关斩将

    目录:导读 前言 一.Python编程入门到精通 二.接口自动化项目实战 三.Web自动化项目实战 四.App自动化项目实战 五.一线大厂简历 六.测试开发DevOps体系 七.常用自动化测试工具 八 ...

最新文章

  1. 【PHP】微信官方代码Log调试输出类,面向对象设计模式!来看看,你会有收益!...
  2. Tree前序反序列化
  3. 单条MySQL最长_MySQL 单条记录长度最大65535
  4. 【ElasticSearch】Es 源码之 MonitorService 源码解读
  5. php eval 二进制,PHP eval函数使用介绍
  6. Catch That Cow POJ - 3278 [kuangbin带你飞]专题一 简单搜索
  7. qt 如何 指针 自动 释放内存_要是面试官再问你智能指针的问题,就拿这篇文章“盘他”!!!...
  8. Jquery取form表单中的所有参数
  9. 网红护眼色——豆沙绿
  10. 浙江大学计算机答辩模板,浙江大学 答辩通用模板
  11. MMA7455L笔记
  12. Materials - 角色分层材质规范
  13. yum的配置文件yum.conf详解
  14. Ubuntu下bazel卸载与安装
  15. MATLAB线性回归实例 平炉炼钢
  16. 精彩WAP之旅--上海热线WAP站
  17. 准入控制_Kubernetes动态准入控制示例
  18. ssd的smt_smt是什么,是做什么的,smt贴片是什么意思?何为SMT?
  19. Android 11整合Mopria联盟的代码贡献以实现增强的打印功能
  20. 最简单的JAVA解法-----无聊的逗

热门文章

  1. java线程三部分_java 多线程三
  2. oracle中取反_oracle正则表达式regexp_like的用法详解
  3. kafka学习_Kafka 学习笔记01
  4. python中os模块_Python的武器库11:os模块
  5. java resultset close_java代码ResultSet is closed
  6. linux摄像头内核驱动开发,怎么在Linux下开发摄像头驱动
  7. linux php 执行python,Linux(Ubuntu)下php使用exec调用python程序返回json数据
  8. mac连接手机 vm_使用mac ssh连接谷歌云vm实例
  9. 小白零基础学习Java开发入门教程奉上,希望对你有所帮助!
  10. pytorch 指定卡1_在pytorch中指定显卡