怎样学好C++ ----高手的话

用一年时间如何能掌握 C++ ?修改

有一定 C 语言基础,日后想从事游戏开发等工作,给自己一年时间,能在此期间精通 C++ 吗?

Milo Yip游戏程序员、《游戏引擎架构》译者

张麦克什么乘风者 等人赞同

本人大约从20多年前开始学习及使用C++,但仍未达到我认为「精通」的阶段,甚至对于C++11的各种新特性也未掌握。然而因为我是在读书时自学C++的,也是游戏程序员(原问题中提到题主想从事游戏开发),觉得也许能提供一点意见供网友参考。

首先引一下2010年8月号《程序员》刊登的拙文《C++强大背后》最后一段:

C++学习建议

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

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

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

如引文末段所指出,我建议不要把「精通C++」作为一个一年目标,应该要把学习语言作为一个持续的过程,同时要把语言运用在具体的应用场合中。

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

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

  1. PC单机游戏(Windows)
  2. PC网络游戏(Windows、Linux)
  3. 移动平台游戏(J2ME、Symbian、Palm……)
  4. 家用游戏机游戏(PS1/2/3/4、XBox、Wii……)
  5. 掌上游戏机游戏(GB、GBA、NDS、PSP……)
  6. 网页游戏(HTML、Flash)
  7. 智能移动设备游戏(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算是例外),这让我们可以

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

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

最后,「还需学习什么」是一个很难简单回答的问题,因为游戏开发涉及的知识面很广。建议可参考本人译作。

时间: 2024-08-08 22:06:13

怎样学好C++ ----高手的话的相关文章

怎样学好PHP编程

php入门是比任何语言都简单,很好学,一般一周两周就可以写简单留言本了.学好php每一条件勤在先,打代码,拼命打代码,买本书,把里面的代码从头打到尾,再回来不懂的再打,运行,再不理解上网上问别人,csdn高手多,回答问题慢,专问有深层次的,phpchina中手多,人多,什么问题都可以问,回答的速度非常快.一句话"百码敲百遍,其义自见",代码打得越多,运行得越多,慢慢地会对程序理解得越深.想速成吗?每天看书打代码不低于10个钟,这样坚持两个月后你就可以应付工作了.这一般人都受不了,做不到

浅析如何学好C语言

今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所有的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的1和0进行编码的:是他们发现了我们可以利用一个预先编写好的程序控制机器,并使之完成我们期望它完成的动作.建议大家在心里默念三遍他们的名字,以示仰慕.当然,如果让你们带着现在的知识回到他们的那个时代,那么就没有什么图灵奖了.C语言程序设计是我们的专业基础课,但是C语言本身却是一个非常强大的工具,它是到

你好,C++(2)1.3 C++世界版图1.4 如何学好C++

1.3  C++世界版图 C++语言的发展过程,不仅是一个特性不断增加.内容不断丰富的过程,更是一个在应用领域中不断攻城略地的过程.在其30余年的发展过程中,C++在多个应用领域都得到了广泛的应用和发展.无论是在最初的UNIX/Linux操作系统上,还是在Windows操作系统上,甚至是在最近兴起的嵌入式系统上,C++都占有不可取代的一席之地,如图1-3所示. 图1-2 C++世界三分天下 1.3.1  Windows系统下的C++开发 自从盖茨在1985年用C/C++完成了Windows 1.

Java之美[从菜鸟到高手演变]之设计模式

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

转: 罗辑思维:怎么样成为一个高手 文字版

感谢各位来到<罗辑思维>捧场 上一期节目我们隆重地给大家推荐了一个 付费的订阅产品 在我们罗辑思维开发的 得到APP里面 这个产品叫 精英日课 那主持它的是万维刚老师 因为我长期是他的读者和粉丝 所以我心知肚明 他出手开发的这个知识服务产品 品质有多高 所以我在美国专门跑了一趟 敦请他为我们的用户开发这个产品 所以上一期节目其实就是这个产品的广告 相信你也听出来了 特别不好意思 本期节目仍然是这个产品的广告 你看本期节目的题目 叫怎样才能成为一个高手 说实话 这期节目的策划案早就成型了 但是它

如何学好PHP(看到别人的写得还不错)

一些共性问题,大致是: 1.       应该怎样学习PHP,学习的顺序是怎样的? 2.       PHP学好后,可以做什么事情? 3.       听得懂课,但是一旦自己独立写程序,就没有思路? 4.       学习PHP需要怎样的基础,算法重要吗? 首先,大家要达成一个共识,就是学习任何一门编程技术都需要我们付出心血,都要讲求循序渐进,由浅入深.对 每一个知识点要搞透,然后通过案例来加深认识,最后还需要把学习到的各个知识点实际运用到项目中去,才能融会贯通,最后才能到达能自如的驾驭项目的水

如何学好计算机科学?

推荐:看文中描述应该出自一个本科生之手,但对计算机科学的认识的深度和广度都令人佩服,推荐给大家看看能引起一些思考.本文作者 & 来源不详,欢迎大家补充. 计算机科学与技术这一门科学深深的吸引着我们这些同学们,上计算机系已经有近三年了,自己也做了一些思考,我一直认为计算机科学与技术这门专业,在本科阶段是不可能切分成计算机科学和计算机技术的,因为计算机科学需要相当多的实践,而实践需要技术:每一个人(包括非计算机专业),掌握简单的计算机技术都很容易(包括程序设计),但计算机专业的优势就在于,我们掌握许

怎样学好C语言,一个成功人士的心得!

今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了全部的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的1和0进行编码的:是他们发现了我们能够利用一个预先编写好的程序控制机器,并使之完毕我们期望它完毕的动作.建议大家在心里默念三遍他们的名字,以示敬仰.当然,假设让你们带着如今的知识回到他们的那个时代,那么就没有什么图灵奖了.C语言程序设计是我们的专业基础课,可是C语言本身却是一个非常强大的工具,它是到

看顶级高手如何编程--从带程序员新手想到的

当了几年的程序员了,虽然写码的时间多点,但手上也管理过.带过一部分程序员.一直都在想一个问题,什么是程序员,程序员应该做好那些事情,什么样的程序员是有素质的程序员?什么样的程序员算是负责的程序员呢? 工作当中我发现有不少员工是为了工作而工作,怎么回事呢?他们只是把我分配的工作分毫不差的完成,但从不问为什么?有些程序员是喜欢随便改变需求,自己感觉不错就得改,改了还不做报告,最后上交项目时才发现和需求不一样?于是傻了. 我根据自己的经验把程序员分为以下几种 1.单纯没有脑子的:这种员工是最气人的一种