C++学习心得和进阶路线总结

借用王国维老先生的话,C++学习也可以分为四个阶段

C++缺点之一,是相对许多语言复杂,而且难学难精。许多人说学习C语言只需一本K&R《C程序设计语言》即可,但C++书籍却是多不胜数。我是从C进入C++,皆是靠阅读自学。在此分享一点学习心得。个人认为,学习C++可分为4个层次:

  • 第一层次,C++基础:挑选一本入门书籍,如《C++ Primer》、《C++大学教程》、或Stroustrup撰写的经典《C++程序设计语言》或他力作《C++程序设计原理与实践》,而一般C++课程也止于此,另外《C++ 标准程序库》及《The C++ Standard Library Extensions》可供参考;
  • 第二层次,正确高效地使用C++:此层次开始必须自修,阅读过《(More)Effective C++》、《(More)Exceptional C++》、《Effective STL》及《C++编程规范》等,才适宜踏入专业C++开发之路;
  • 第三层次,深入了解C++:关于全局问题可读《深入探索C++对象模型》、《Imperfect C++》、《C++沉思录》、《STL源码剖析》,要挑战智商,可看关于模版及模版元编程的书籍如《C++ Templates》、《C++设计新思维》、《C++模版元编程》;
  • 第四层次,研究C++:阅读《C++语言的设计和演化》、《编程的本质》(含STL设计背后的数学根基)、C++标准文件《ISO/IEC 14882:2003》、C++标准委员会的提案书和报告书、关于C++的学术文献。

由于我主要是应用C++,大约只停留于第二、三个层次。然而,C++只是软件开发的一环而已,单凭语言并不能应付业务和工程上的问题。建议读者不要强求几年内“彻底学会C++的知识”,到达第二层左右便从工作实战中汲取经验,有兴趣才慢慢继续学习更高层次的知识。虽然学习C++有难度,但也是相当有趣且有满足感的。

如果大家认为的「精通」是指上述所指的第二层次,那么我估计一年全职时间也未足够「精通」。首先,阅读这些书籍本身也需要不少时间,而且对于一般人来说(指除了一些学习记忆能力超强的人),很可能需要阅读几遍才能记住一些细节。另外,阅读后必须要练习。除了入门的习题外,还需要做一些工程向的项目,才能了解各种语法、编程范式的使用方法及时机,理想地建议参与一些开源项目。然而,学习是需要不断思考并把结果沉淀,方法包括与朋友讨论、写博客、写知乎答案等,这些都需要时间。

柳猫建议不要把「精通C++」作为一个一年目标,应该要把学习语言作为一个持续的过程,同时要把语言运用在具体的应用场合中。

成长不易,学习尤甚,为了大家能够走下去,柳猫创建了一个C/C++学习群,七一零,五二零,三八一,进群需要邀请码(柳猫),这里已经有很多喜欢或者想要学习编程的朋友,强调一遍,这里只欢迎想要认真学习的小伙伴。

--------------------------------------------------------------------------------------------------

再讨论C++与游戏开发。

网上有不少答案讨论到有关C++是否游戏开发者所必须的技术。我认为,这并不是完全必须的,但许多游戏开发项目需要到C++。以下列举一些过往曾流行的游戏平台/类型:

  • PC单机游戏(Windows)
  • PC网络游戏(Windows、Linux)
  • 移动平台游戏(J2ME、Symbian、Palm……)
  • 家用游戏机游戏(PS1/2/3/4、XBox、Wii……)
  • 掌上游戏机游戏(GB、GBA、NDS、PSP……)
  • 网页游戏(HTML、Flash)
  • 智能移动设备游戏(iOS、Android)

我们会发现,除了J2ME和网页游戏外,大多数的平台都支持(或只支持)原生编程。而原生编程最常用的就是C/C++和汇编。

--------------------------------------------------------------------------------------------------

应否选择C++

哪些程序适宜使用C++?

C++并非万能丹,我按经验举出一些C++的适用时机。

  • C++适合构造程序中需求较稳定的部分,需求变化较大的部分可使用脚本语言;
  • 程序须尽量发挥硬件的最高性能,且性能瓶颈在于CPU和内存;
  • 程序须频繁地与操作系统或硬件沟通;
  • 程序必须使用C++框架/库,如大部分游戏引擎(如Unreal/Source)及中间件(如Havok/FMOD),虽然有些C++库提供其他语言的绑定,但通常原生的API性能最好、最新;
  • 项目中某个目标平台只提供C++编译器的支持。

按应用领域来说,C++适用于开发服务器软件、桌面应用、游戏、实时系统、高性能计算、嵌入式系统等。

--------------------------------------------------------------------------------------------------

很大程度上,游戏──或说游戏引擎,都是C++非常适合的应用时机。

一些人认为,游戏开发者使用现成的引擎,就不需要使用C++了。过往,业界有一个普遍常识,就是用C++开发游戏引擎,而游戏引擎提供脚本引擎供编写游戏逻辑代码。但这个观点被Unreal Engine 4的决策改变,UE4放弃了维护多年且被大量使用的UnrealScript脚本语言,而改用原生C++作为游戏逻辑编程的语言。此决策背后有多个原因,但这里只想举出这例子展示C++在游戏开发中的用途及潮流,具体原因分析就不详细展开了。

--------------------------------------------------------------------------------------------------

除了自行研发游戏引擎需要使用C++,我们可以看到,大部分游戏引擎都提供了其C++原代码(Unity算是例外),这让我们可以

  • 方便调试游戏
  • 深度剖析、优化游戏的性能
  • 为引擎扩展新功能
  • 修改现有引擎以适应项目所需

在专业的游戏开发中,这些都是很常见的工作任务。所以,即使并非自研引擎,并使用脚本语言开发游戏逻辑,也有很多机会需要使用C++。

--------------------------------------------------------------------------------------------------

最后,「还需学习什么」是一个很难简单回答的问题,因为游戏开发涉及的知识面很广。最后,柳猫忍不住放出自己的二维码,如果想要入门或者进一步学习C/C++,欢迎联系柳猫,可以提供一些小小的力所能及的帮助。

回答的问题,因为游戏开发涉及的知识面很广。最后,柳猫忍不住放出自己的二维码,如果想要入门或者进一步学习C/C++,欢迎联系柳猫,可以提供一些小小的力所能及的帮助。

C++学习心得和进阶路线总结相关推荐

  1. 算法工程师0——算法工程师学习进阶路线

    如果想进行python学习,下面是一条很详细的流程图,具体学习内容参考黑马的培训: http://www.itheima.com/ 不打广告,不打广告! 黑马的课程在b站和淘宝都可以找到,自学能力差请 ...

  2. MySQL学习进阶路线

    根据2019 数据库趋势报告显示,年度最受欢迎的数据库是 MySQL. 虽然市场占有率Oracle排名第一,MySQL和SQLServer并驾齐驱,但毫无疑问,MySQL正变得越来越流行. 随着MyS ...

  3. Nmap 进阶学习心得

    Nmap 进阶学习心得 作者:DragonBorn-Xavier 预计阅读时长:30min 文章目录 0x00 引 0x01. 指定扫描目标 0x02. Nmap运行流程 0x03. 默认的选项技术 ...

  4. 网安自学路线学习心得/学习规划

    趁着今天下班,我花了几个小时整理了下,非常不易,希望大家可以点赞收藏支持一波,谢谢. 我的经历: 我 19 年毕业,大学专业是物联网工程,我相信很多人在象牙塔里都很迷茫,到了大三大四才开始慢慢焦虑自己 ...

  5. openfoam学习心得——openfoam编程进阶

    openfoam学习心得--openfoam编程重新学 1.OpenFOAM编程入门:setRootCase都干了些啥? setRootCase都干了些啥 2.blockMesh > log.b ...

  6. Java软件测试工程师之学习进阶路线

    Java软件测试工程师进阶路线 1.资深软件测试工程师 一般情况下,软件测试工程师可以分为测试工程师.高级测试工程师和资深测试工程师3个等级. 想要达到资深软件测试工程师,需要了解很多知识,比如C语言 ...

  7. 前端和后端的英文_80后老阿姨转行做前端的学习心得,深情交流!

    一.Why choose front-end 2012.07毕业后,进了一家游戏公司做运营策划,写过营销方案.做过内容编辑.知道广告投放和换量,还得兼职产品经理画原型. 每天9.30-23.00以后, ...

  8. 80后老阿姨转行做前端的学习心得,深情交流!

    一.Why choose front-end 2012.07毕业后,进了一家游戏公司做运营策划,写过营销方案.做过内容编辑.知道广告投放和换量,还得兼职产品经理画原型. 每天9.30-23.00以后, ...

  9. 非科班Java学习心得

    写在前面 博主本硕就读专业都是机械工程,于去年年初开始自学Java,今年年初加入春招实习大军,有幸通过蚂蚁金服的面试,在5月底进入蚂蚁金服成为了一名实习生,8月底顺利通过转正考核,评级A.在学习Jav ...

最新文章

  1. Java File类总结和FileUtils类
  2. Ubuntu终止进程的方法(kill、pkill、killall)
  3. mysqldump工具,工作的本质是什么呢?(dump表的时候,是否会产生drop表的语句)
  4. anaconda能跑c语言哪,anaconda环境下实现SiamCAR
  5. Android 软键盘的全面解析,让你不再怕控件被遮盖
  6. linux 终端会话连接,如何在 Linux 中使用 Asciinema 进行录制和回放终端会话
  7. MySQL 优化 —— EXPLAIN 执行计划详解
  8. nodejs 嵌套消除和高并发
  9. Inflater与findViewById()区别
  10. javascript 未来新方法的介绍
  11. AdventNet 系列软件license
  12. 编写一个程序,将用户输入的由数字字符和非数字字符组成的字符串中的数字提取出来(例如:输入asd123,34fgh_566kkk789,则产生的数字分别是123、34、789)。
  13. 用最简单的方式理解和使用ActivityMQ(基础入门)
  14. libaio在mysql中的作用,ubuntu安裝mysql遇到的坑----解決Mysql報錯缺少libaio.so.1
  15. Python 代码练习
  16. Windows程序设计之WinAPI详解程序
  17. 批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
  18. 【一日一logo_day_36】fai
  19. H5页面制作功能真的很强大!
  20. 天津大学matlab软件许可,天津大学《MATLAB基础和应用》课程教学大纲.PDF

热门文章

  1. mac关闭和开启启动声
  2. Android工作日志
  3. 【视频演示】B站视频演示
  4. 做站群需要多少站点?
  5. 前端开发和后端开发的区别
  6. 一个从业(非正品)奢侈品十年从业者的经验和历程。
  7. Chrome浏览器 设置跨域访问
  8. TS中限制某种类型的传递
  9. 史上最全Python入门基础教程(非常详细)
  10. 市场调研—2021-2027全球与中国硬质托盘包装市场现状及未来发展趋势