如何成为一个游戏人工智能开发者
作者:Paul Tozour June 11, 2008
译者:赖勇浩(
http://blog.csdn.net/lanphaday) July 10, 2008
业界一直需要杰出的 AI 开发者,我想我可以在这里分享一些关于学习业界所需技术的看法,以帮助大家更好地进入游戏 AI 开发者的角色。
其实几个月前我就已经写了这一篇文章,但直到 Dave Mark 在 aigamedev.com 发表了这篇文章(
http://aigamedev.com/discussion/industry-knowledge),我才决心发表出来。
首要的是,着眼于开发技能,在尝试专精之前先博览游戏开发领域所有的技能。
先博而后专
游戏工作室通常并不会把初级程序员任命为AI工程师。我们需要对游戏源码的方方面面都非常了解的工程师,这意味着他有多年游戏开发经验,而且能够随时插入到任一特定领域 “救火”。新进员工常常被要求帮助一个接近交货日期的项目,通常是填补空缺,做一些简单可控的或者团队中没有人能抽出时间(兴趣)来做的事。
你可以对你的面试官说明你对游戏 AI 工程非常有兴趣,而且打算以它为长期目标;但你要做好进入业界的前几年都与特定领域无缘的打算。
记住成为一个通才很重要,一个 AI 开发者需要坚实的游戏开发基础技能。对现代游戏引擎的各个组件都相当了解,因为从一个实际项目中获得的经验无可替代。
所以最为首要的就是学习你成为一个杰出工程师所需要的技能,对于大多数开发者来说,它包括:
u 精通 C++ 与 STL。
u 能够编写健壮的、可读的代码。
u 精通算法与数据结构。
u 精通面向对象理论。
u 务实的态度,愿意采用“自底向上”的方式解决问题。
u 了解代码测试和防御式编程(例如:利用C++语言特征去最小化出现缺陷的可能性和强制编译器与连接器在出现问题的时候“大叫一声“)。
u 愿意使用剖分器驱动的性能优化:在尝试动手优化之前先找出真正需要优化的地方,在使用奇技淫巧和手写汇编之前先使用算法优化。
u 精通如何高效使用内存资源
u 广泛理解现代游戏引擎架构
u 有坚实的3D 数学基础(对游戏中需要用到的部分而言)
u 良好的团队交流和合作精神
EDIT:这里强烈推荐一系列我书架上的通用工程技术书籍,包括《Effective C++》、《More Effective C++》、《C++ Coding Standards》、《Code Complete》、《The C++ Programming Language》、《3D Math Primer for Graphics and Game Development》等。(译注:这些书都有中文版。)
编写一个示例程序
想给公司留下一个深刻的印象?一个简单有效的方法是用 C++ 编写一个示例程序(是的,你可能使用 Java 或者 C#,但业界趋向于在游戏里排它地使用 C++,Java 和 C# 只在做工具的时候用到)。你的程序不必在图形上看起来很炫,但需要能够表现出你是如何做的和如何想的。不要使用你在学校的团队项目,你单独完成他,才能获得所有好评。
尤为重要的是你最好能够提供源代码,这样你可以给面试官一个 demo 和创建它的示例代码。努力让你的代码稳定、可读,尽可能地没有 bug,并且做好回答关于“当你编写代码的时候为什么作出这样的选择”的问题的准备。
坚持
当你打好了作为开发人员的基础,完成了一个很好的示例程序后,尽可能地与更多地公司接洽。然后努力地做独立编程测试,无论你在业界已经多久,这都能够增进你的技能。
当遇到很难的面试题时,尽量打起精神来尝试解决问题,但也不要不敢向面试官寻求帮助,面试也是在测试你如何处理压力,以及解决问题的决心,以及当你的思维原地打转或者毫无头绪时是否善于沟通。
务实
最后,如果你与面试官谈起 AI,切记要务实。你要意识到学术环境中的“人工智能”与我们口中的“游戏 AI”的不同,也要意识到业界宣扬的游戏 AI 并没有达到他们所承诺的那种高度。
当你和面试官谈起神经网络或者其它机器学习技术的时候,他们可能会有点排斥感,因此你应当能够准确地描述它们与游戏 AI 的关系(苛刻点说,可以认为仍然有一些开发者认为任何 AI 都是多余的)。
面试官非常善于认清一个人是不是鼻眼朝天的自大者,因此你必须尽力地展现你务实的一面。
弄清关于游戏 AI 的挑战很重要,也要清楚地认识到它适用于哪些方面。可以参考一下我不久前的一篇文章(
http://www.ai-blog.net/archives/000145.html),里面列出了一系列 AI 开发者常常会遇到的问题。
从事 AI 开发是非常值得尝试的,如果你能够找到合适的公司和合适的项目的话。
祝您好运!