如何成為一個游戲人工智能開發者
原文地址:http://www.ai-blog.net/archives/000150.html
作者: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 開發是非常值得嘗試的,如果你能夠找到合適的公司和合適的項目的話。
祝您好運!
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/lanphaday/archive/2008/07/10/2635783.aspx