C++的巅峰如何到达

C++这门语言从诞生到今天已经经历了将近30个年头。不可否认,它的学习难度都比其它语言较高。而它的学习难度,主要来自于它的复杂性。

现在C++的使用范围比以前已经少了很多,java、C#、python等语言在很多方面已经可以代替 C++。

但是也有很多地方是其他语言完全无法替代的,主要集中在需要运行效率比较高的行业,比如游戏、高效的服务器

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

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

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

1

技术能力

1.1语言

我们要成为一个程序员,学的东西会很多很杂,但是最开始一定要从语言开始学习,而学习语言最关键的莫过于选好一本书,学校的教材就算了,根本没有写得好的。

在此隆重推荐《C++ Primer plus》,这本书很厚,内容也很丰富,对知识的讲解不仅仅停留在表面。如果这本书能有耐心看完,语言方面基本就没有什么大问题了,对以后的学习也打下了一个很好的基础。

1.2GUI

C++方面的GUI库有很多种,比如MFC、WTL、wxWidgets、QT。这些GUI库都各有自己的特点,其实我们只要先了解一种就可以了。

只要深入了解了一种GUI库,需要的时候再学习其他的就够了,本质上都差不多,很快就可以上手了。MFC虽然设计上有很多问题,但是作为入门还是不错的, 而且学习资料很多,碰到问题也好解决。

1.3数据结构和算法

很多人都忽视了数据结构和算法方面的知识,尤其是一些编程语言的库做得非常好,几乎不需要自己去实现一些数据结构和算法,导致现在很多程序员不重视甚至忽略这方面的知识。

但是,当我们想让我们的程序跑的更快、内存占用更少的时候,这些知识就非常非常重要了。很多程序员都是刚开始的时候不重视这些,但是工作几年后又来补习这些知识。

最开始可能不需要学习的太深入,但是基本的数据结构和算法一定要知道。

推荐《数据结构(C语言版)》,在数据结构和算法的学习中,最好不要去关心面向对象方面的技巧,就用C语言来实现,这样能更关注于算法本身的内容。

1.4数据库

学习数据库的基础知识,并且掌握一种数据库使用,推荐使用mysql,而且最好不要用一些封装好的接口,而应该直接用mysql提供的数据库api,可能对数据库了解的会更深入。

1.5并行

cpu主频已经不能遵循摩尔定律了,现在cpu发展的趋势是多核心。无论是多线程,还是多进程,都是为了更好的利用cpu的性能,提供更好的用户体验。

这就要求我们如果要写出高效的应用程序,必然要涉及到并行计算。多花些精力在并行计算上吧,一定会有丰富的回报。

1.6网络编程

这里所指的网络编程是指socket编程。现在C++的应用很多都是在做服务器开发,如何开发一个高并发、大吞吐量、高稳定性的服务器就是我们要考虑的了。

1.7设计模式

设计模式不是具体的技术,更多的是如何让代码更容易阅读、更好扩展、更容易使用。

1.8库的使用

C++标准库仅仅提供了一些很基本的功能,所以我们经常会引入一些第三方库。最著名的恐怕就是被称为准标准库的boost库,它提供了我们编程中用到的各方面的技术,文本处理、算法、网络、多线程、图像处理等等,几乎无所不包。

其它也有一些专著于某一方面的库,比如ACE是网络通信方面的,TinyXML是解析xml的,OGRE是图形渲染方面的。

1.9操作系统的知识

程序员需要了解的操作系统知识和普通用户是不一样的,一个高手是需要深入了解操作系统的方方面面,而不是停留在使用层面。

至于应该了解哪些知 识,windows上的去看《windows核心编程》,linux的去看《深入理解linux内核》,应该可以知道自己应该学什么了。

2

项目经验

以上的内容如果都精通了,也算是个比较厉害的程序员了。但是对程序员来说,项目经验更加重要。一个好的项目可以让你把各种技术进行综合运用,并且能学到一些新的知识。

比如说做游戏的就需要学习图形方面的知识,做播放器的要学习编解码器方面的知识。

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

3

沟通能力

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

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

原文发布于微信公众号 - 老九学堂(xuetang9)

原文发表时间:2017-04-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android 研究

PMI-ACP 敏捷项目管理——模拟试题3

1、一名经验丰富的团队成员没有参与每日站会,导致他们落后于审查活动。敏捷管理专业人士应该怎么做 A 要求管理层解决 B 提醒团队成员基本规则 C 通知产品...

3011
来自专栏企鹅号快讯

量子计算开启云计算通往新世界的大门

随着数据的海量增长,机器处理数据所需的时间也越来越多。增强现实、虚拟现实、人工智能、机器人、实时分析和机器学习算法都需要云计算提供无限快速且无限计算能力和无穷大...

2725
来自专栏BestSDK

量子计算,将开启云计算通往新世界的大门

到2025年,云中对传统计算功能的需求将会非常大,以至于云计算无法满足这些计算需求。量子计算的到来有望彻底改变云计算,量子计算提供的是大规模并行处理,原子级存储...

2774
来自专栏SDNLAB

有了Barefoot Tofino芯片,还要什么负载均衡器

Barefoot Networks在上周的SDN/NFV世界大会上展示了Tofino可编程交换芯片,Barefoot公司表示,完全可编程芯片的功耗与固定功能芯片...

3715
来自专栏程序员互动联盟

为啥有些人编程一学就会?

很多人初学者对现在很多的技术大牛觉得羡慕不已,会的编程语言太多了,对于编程语言说起来如数家珍。会这么多的语言,是不是天才或者有什么特异功能,入门时候一门语言都要...

3298
来自专栏速成应用小程序开发平台

微信小程序开发应该注意规划这些问题才有利于创业者对症下药

微信小程序是一款无需下载、无需安装、即用即走的小应用,实现了用户“触手可及”的愿望,并且操作十分简单,解救了千万群众的手机内存,很多开发者也看到了这“用完即走”...

1242
来自专栏Android 研究

PMI-ACP 敏捷项目管理9——识别干系人

识别干系人并分析和记录他们的相关信息,可以帮助敏捷项目经理建立对各个干系人或者干系人群体的适度关注。在项目或者阶段的早期,识别干系人,并分析他们的利益层次、个人...

1592
来自专栏SDNLAB

量子计算开启云计算通往新世界的大门

随着数据的海量增长,机器处理数据所需的时间也越来越多。增强现实、虚拟现实、人工智能、机器人、实时分析和机器学习算法都需要云计算提供无限快速且无限计算能力和无穷大...

3869
来自专栏Forrest随想录

InfoQ访谈:为什么说运维的未来必然是 AIOps?

Gartner 在 2016 年时便提出了 AIOps 的概念,并预测到 2020 年,AIOps 的采用率将会达到 50%。如果 AIOps 真是未来运维技术...

1122
来自专栏人工智能快报

拉斯维加斯利用人工智能技术打造智慧城市

世界著名的赌城拉斯维加斯正在利用机器学习等人工智能技术来实现城市IT系统的运营,进而打造全美领先的智慧城市。

832

扫码关注云+社区