=======================
Choosing a University
---What do I need to learn in school?
===========
翻译一篇如何学习游戏开发的文章,作者Amit Patel,原文链接 http://www-cs-students.stanford.edu/~amitp/Articles/Universities.html
本人翻译的比较烂,基本上是 google translate一下,然后再改通顺,见笑了。
作者谈了谈 大学课程与我们的游戏开发工作有哪些联系,希望对在校学生有用。
学校里哪些令大家混混欲睡的课程,就是打通任督二脉的关键----练武不练功,到老一场空。
小弟记下了。T_T
http://blog.csdn.net/echozhy
===========
你真的想学习游戏编程,并想知道大学中提供哪些游戏程序设计的课程么?
我的忠告是去学“计算机科学”专业吧。不过,大学只提供一些学习如何编“电子表格”或“文字处理器”的课程,而并不是什么游戏编程课程。其实,游戏也是一类的程序,把编程学好了,那你就可以编游戏了。
学习新知识时要注意,因为它们也许在五年之后就过时了(比如,DirectX 9,Windows XP,PS2之类);要着重领会新知识的内在思想。你应该不希望当你刚刚学成离校时,就发现以前学的东西都已经过时了吧!
我觉得有一些计算机科学的课程与游戏开发关系很大:
编程介绍: 学编程不难,难的是把它学好。一门好课应教你如何处理和解决编程问题。给你一个问题,你首先必须找到计算模型,进行计算机科学领域的问题抽象。 (在数学中也是如此,你必须先把“字问题”抽象为象征性的方程式。)然后去解决计算机科学领域的问题,并将其转化为现实世界的解决方案。你需要知道你能使用的工具 - 如脚本,编程语言,调试器,库,编辑,数据结构,算法等等。
编程语言: 您有可能会学习C++。然而,许多顶尖大学刚开始并不教C++。他们先教一些很邪门的开发语言,诸如Scheme、Haskell之类的。为啥呢?这是因为这些奇怪的语言简单易学,他们教你如何真正的思考并解决问题,而不是把注意力放在编程语言的细节上。当你会解决问题时,使用哪一种编程语言对你来说都是手到擒来,此时,语言的细节并不那么重要了。当你学习使用不同编程语言时,你就会学到同一问题的不同语言实现,这样你就可以找出解决问题最合适的办法。一个更直接的用处是这些高级语言可以开发一个在游戏中能够有效使用的脚本语言。
数据结构和算法: 数据结构和算法是解决许多问题的关键。你会学习到数组,链表,二叉树,一般树,平衡树,哈希表,堆等。您也会学习操作这些数据结构的算法,如分区,深度优先遍历,tree rotation,合并序列和查找中位数。使用这些基本算法,你可以定义更有用的算法,诸如快速排序,归并,子查询和二分搜索等等。你也一定想知道哪些数据结构和算法最适合解决你的问题。此外,您将学习如何结合数据结构和算法,为特定问题创建对象,如栈,队列,优先级队列,集合,bags和maps。所有这些都是编写游戏时非常有用的。
编译器: 了解编译器技术将让您了解源代码是如何编译成汇编代码的。这对你写出高效的代码很有帮助。此外,如果你要编写一个脚本语言,那么,tokenizing、解析和代码生成也是非常有用的。垃圾收集技术不仅适用于内存管理有用,你也可以用它们来保存游戏数据。您也可以编译精灵,纹理,3d命令,渲染命令和其他数据。
操作系统: 一门好的操作系统课程可以让你弄清楚在软件与硬件如何交互。就像编译器课程一样,操作系统课程可以让你更好的了解如何编写高效代码。您将学习有关文件系统的组织,线程的使用,网络通讯等。
图形: 一门良好的图形课程教给你的是图形理论的基础理论而不仅仅是如何使用编程库。在这个3D硬件时代,咱们为什么还要学习图形学理论呢?如果你理解图形学理论,你就会明白有些东西能高效运行的原因。此外,你也可以自己实现一些某些算法(如BSP, oct-trees, object collision, camera angles),而不是依赖图形库。
计算机体系结构: 与操作系统课程一样,计算机体系结构课程能让你理解硬件是如何工作的,以及如何优化你的代码。特别是,你会学到 磁盘存储器、 内存、缓存、寄存器的关系,学到带宽与延迟的关系,以及有关CPU pipelining的知识。
人工智能: 尽管多玩家游戏的日益普及,人工智能仍然是大量游戏的一个重要内容。一门良好的人工智能课程向你介绍一大堆的技术问题(启发式搜索,规划,遗传算法,神经网络,贝叶斯网络,自然语言解析),这样,当设计游戏的人工智能时,你就会知道如何权衡和选择。
数据库: 数据库课程有助于了解如何存储共享数据、如何快速检索和处理并发问题,这些在多玩家游戏中尤为重要。一个好的数据库课程应该教给你这一切。
我觉得,我可以通过做一个优秀程序员成长为一个优秀的游戏程序员,我可以通过学习理解计算机科学中的方方面面而成为优秀的程序员。当你学习新的东西时,想想如何才能在游戏中使用,而且可以写一个游戏去验证它。
如果像我建议的那样不要学习特定的技术,那到底如何将能够使用它们呢?我建议不要上课专门去学习这些技术,而是多利用一下业余时间。充分利用大学课程去学习那写真正能够持续很长一段时间的理论知识;利用业余的项目时间去学习那些经常改变的技术。在高中和大学期间,我一直利用业余时间在做游戏方面的工作,而且从中受益匪浅。这样,我不仅能获取课堂上学习得知识也同样能获取课堂上学不到的东西。
不要把自己局限于计算机科学的范围内。可以学习一下数学(代数向量在3D游戏中非常有用,微积分让你可以更有效地处理连续运动,和其他类型的数学也很管用),写作/交流(当你需要给用户传达一些信息时,良好的沟通是必不可少的) ,戏剧(讲故事在游戏策划时简直太需要了),经济学(对战略游戏有帮助),物理(物体的运动和碰撞都是直接从物理学中引用的),以及其它有意思的事情。大学期间可以广泛的接触很多想法,而且你永远不知道未来哪些会对你有用。
你也可以顺便阅读这俩篇文章。
http://www.joelonsoftware.com/articles/CollegeAdvice.html
http://gamesfromwithin.com/so-you-want-to-be-a-game-programmer