新手如何找到程式師工作,並成為優秀遊戲程式師?
儘管在一款遊戲的製作過程中需要很多領域的合作,但在之前的傳統理解中,遊戲開發者往往指的是在角落裡寫代碼的書呆子式程式師。 這不僅是對遊戲研發的錯誤展示,也是對程式師工作的誤解。 程式設計是一個創意領域,既需要技術知識,也需要與其他學科進行大量的人際交流,以確定整個系統和機制、修復bug、創建規則,並用代碼寫出一個遊戲世界。
小醜魚(Chucklefish)公司CTO Rodrigo Braz Monteiro總結說,”程式師的工作室理解一個問題,並且在一系列限制的情況下找到問題的解決方案,然後將這套解決方案建模為一系列精心設計的抽象概念。 ”
Rodrigo Braz Monteiro是小丑魚工作室《Wargroove》主程式
Monteiro在遊戲業從事程式師工作已經有16年了,並且自從2016開始在《Wargroove》開發商的排名持續提升。 最近,外媒GamesIndustry對他和另外三名程式師進行了採訪,以尋求如何才能勝任程式師這一職位的答案。
以下是GameLook編譯GamesIndustry的完整內容:
拿到遊戲程式師Offer需要什麼學歷?
程式設計是一個需要硬技術的領域,意味著對於能夠承擔費用且願意接受這種方式的人來說,傳統的教育經歷可能是有説明的。
當了10年程式師、如今是Creative Assembly專案技術總監的Duygu Cakmak說,”我擁有計算機科學和工程學士學位和人工智慧碩士學位。 我認為我受到的教育和自己所做的事情一致,我建議願意走常規教育路線的人走同樣的道路。 ”
育碧多倫多工作室玩法程式師Nikhil Ramburrun則建議,如果上學可行,最好是拿到計算機科學或者工程學學位。
他解釋說,「這樣如果你在(遊戲業)做到半路的時候想要從事別的行業,就有了更多機會。 我的專業是電子工程,所以我的學位並不聚焦於程式設計,但我學了一些課程,在我看來,很多程式設計的東西都是自學的。 ”
Jaden Palmer-Leandre自從2018年計算機科學專業畢業之後,就一直在Sports Interactive擔任玩法程式師,他也認為學位説明自己拿到了首份工作,但卻並不認為正式的教育經歷是成為程式師至關重要的因素。
Sports Interactive研發的《足球經理2022》
他說,”提升你技能和學習最好的方法就是開始程式設計。 與此同時,你會慢慢形成一個出色的產品資歷,比任何學位都能展示你的才能。 如果你可以展示自己的知識範圍能達到專業畢業生的水平,那麼也可以有很好的機會。 ”
Monteiro就是自學程式設計比較好的案例,他曾在相鄰領域學習,但最初在11歲的時候就通過(1994年的遊戲研發應用)Kilk & Play寫代碼,隨後在13歲開始慢慢學習C和C++。
他說,「因為我不認為你能真正在巴西成為遊戲開發者,我最終在大學選擇了工程學,先是機電一體化,隨後學了計算機工程,對計算機科學和數學(尤其幾何與線性代數)有很強的理解是必要的,我非常不同意反對觀點。 但如果你有足夠的興趣也可以自學,實際上,我幾乎所有的計算機科學知識都是自學的。 ”
“不同的方法可能對不同的人更有説明,但要記住的是,始終都需要最小量的自學,因為在整個職業生涯中,你會不斷遇到新的問題。 對於更適合自己學習的人來說,自學可能是更好的選擇。 當然,大學還會帶來其他的説明,比如可以找到導致、潛在員工以及志同道合的人,但這並不是唯一的道路。 在招聘程序師的時候,我不認為學歷是必要的,因為他們的工作才是更重要的衡量因素。 ”
Cakmak還強調,在傳統教育之外還有很多的學習方式。
她說,「參加會議最終給我的職業生涯帶來了真正的價值,我參加了 Nucl.ai 大會,在那裡遇到了Creative Assembly團隊。 我並不認為正式的教育經歷是成功的程式設計職業生涯必備的,不管你是否有傳統教育經歷,好奇心和自學以及持續自我提升的動力,才是成功最好的方式。 ”
“尤其是在這個領域,考慮到它始終在變化,如果一個人選擇自學的道路,那就需要不斷認清知識差距和需要提升的領域,並且對這些領域進行系統化和自動化的學習。”
從事遊戲程式設計工作需要什麼經驗?
找到第一份遊戲程式師工作,與其說是看經驗,不如說是看資歷,已經有的資歷或者學歷都可以證明你的能力。
Palmer-Leandre說,”通過初級職位可以有機會成為遊戲程式師,這些職位通常不需要有經驗,但通常需要學士學位或者優秀的項目資歷。 如果沒有經驗,就必須有些證據能證明你對這個問題有熱情和知識,在鍛煉技能的時候打造一些遊戲或者比較小的程式,然後展示出來,這些可以精準傳達你的情緒。 ”
育碧的《孤島驚魂6》
Ramburrun說,你可以通過做遊戲研發項目學到很多東西,然後將它們公佈出來,”甚至比學生時代更多。 你會學到策劃、寫代碼,最重要的是測試你的遊戲。 我是一個更實際的人,所以我在做項目的時候學到的東西比上學的時候更多。 ”
“至於進入遊戲行業,有遊戲新研發項目經驗絕對會幫你脫穎而出。 一些公司有專門給畢業生做的專案,比如育碧多倫多Next,主要幫助他們在沒有經驗的情況下入行,所以我會關注這些,你也可以在程式設計馬拉松去的影響力,比如Hack the North以及game jam活動。 ”
Monteiro指出,最近幾年來,開始遊戲程式設計越來越簡單,主要得益於Unity、UE、GameMaker等工具的説明。 他說,「大量的通用遊戲引擎可以讓你不需要對系統程式設計有深刻理解就能開始做遊戲,在我看來,進入遊戲程式設計領域最好的方式就是下載其中一款引擎,觀看一些教程視頻,然後嘗試一些簡單的遊戲。 ”
“成為一個高級遊戲程式師需要的知識非常具有拓展性,而且需要數年的聯繫、閱讀和重新搜索,但對於有抽象概念和熱愛做事情的人們來說,第一步已經可行,這是一個非常有趣的旅程。”
在被問到招聘程式師最想看到的品質時,Ramburrun表示,比程式設計經驗更重要的是,你是否能承認自己不知道、並願意問問題。
“做遊戲是一項團隊工作,能夠融入團隊非常重要。 我寧願招一些程式設計技能沒那麼強、但願意放下自我、與團隊一起學習的人,而不是在C++領域非常精通、卻難以相處的人。 ”
成為程式師需要什麼品質和技能?
當招聘新程式師的時候,Monteiro表示他更看重以下幾個問題:
這個人看起來是否能夠與整個團隊有效溝通? 這些可以是個人或者專業專案,其範圍取決於該職位需要的資歷。
他們在程式設計中最主要的興趣是什麼? 他們是否樂於解決難題,還是只願意從互聯網搜索答案?
這些問題可以分為一些關鍵的領域:
1)技術能力
Ramburrun說,「一個優秀的程式師是個懶漢,不管聽起來多麼酷,如果技術已經存在,就沒有必要重複造輪子。 ”
這要求對多個程序語言有所涉獵,不管是C++、Java、C#還是其他語言,這些都是要通過在學校或者自學的。 最終,你要學的語言取決於你想做什麼職位。
要知道,你還需要在工作崗位學很多東西。
Cakmak在談到Creative Assembly需求的時候說,”從技術層面,我們首先需要的是熟練運用C++,因為我們研發遊戲都是用內部的C++遊戲引擎。 理解遊戲研發流程的端對端運作方式以及遊戲是怎麼研發的,這些也很重要,當然也包括對遊戲研發的熱情。 ”
2)解決問題的能力
對於一個優秀的程式師來說,興趣與解決問題的能力也是必要的。
Palmer-Leandre說,”除了選擇的語言知識外,優秀的問題解決技巧也是必備的,因為總有很多問題需要解決,而且很多都是比較抽象的問題。 當你遇到難以debug的代碼,耐心可以帶來很大的説明。 ”
Cakmak表示,擅長解決問題還需要有好奇心,以及自我提高的動力。 “我們始終在尋找擁有高度解決問題能力的人,這並不意味著他們必須解決每一個問題,但更多的是對於一個特定麻煩可以提出對的問題,並基於要求給出解決建議。”
她說,「不斷解決問題有時候令人沮喪,而一個樂觀、願意接受挑戰的態度很重要。 值得注意的是,每個難題可能都有很多種解決方案,而且總是沒有完美的方案,需要某種程度的妥協。 有經驗的程式師可以高效率地從不同角度看到問題,並因此衡量軟體終極需求必須做出的妥協與折衷方案。 ”
如已經提到的那樣,問題解決還包括搞定抽象問題,所以這是你需要適應的。
“程序員必須能做複雜抽象推理,這是解決謎題的時候同樣需要的能力,找到一個數學題的解決方法、或者在複雜環境下做決策。 程式師必須在他們自己的領域對知識有著無盡的渴望,因為在接下來的職業生涯中,他們需要每天學會新技能。 對於只想要學一項技能的人來說,程式設計並不是一份好工作。 ”
3)溝通與團隊合作能力
有一個技能幾乎是遊戲行業每一份工作都需要的,那就是團隊協作能力,這一點再強調都不為過:做遊戲不是單槍匹馬。
Palmer-Leandre說,”聽起來可能很老套,但溝通和團隊協作對於成為優秀的程式師很重要,如果你能夠清晰的解釋自己的想法,並能夠用其他隊員適應的方式工作,那絕對可以帶來成功的職業生涯。 ”
Ramburrun補充道,這意味著優秀的溝通和人際交往技巧非常重要。 “在遊戲業工作,你會發現要和很多人說話,遠不止你的隊友。 他們會有不同的背景、個人以及職業經驗,成為友好、善良和善解人意的人可以幫你走的更遠。 把你的自我關在門外,是開始與人溝通非常好的方式。 ”
在多學科團隊工作,意味著能夠向非技術人員解釋技術概念是必要的,Cakmak說,”包括接受影響我們的商業或者技術方法,最優秀的程式師不是與世隔絕的,在理想情況下,最有效的解決方案和技術方式是通過合作實現的,比如可以是高級程式師分享經驗、以及初級團隊成員建議替代方案出現的新想法。 指導別人和接受指導,在每個階段都是通往成功的重要途徑,這通常可以帶來大量的回報和動機。 ”
Creative Assembly的《全面戰爭傳奇:特洛伊》
對遊戲程式設計常見的誤解是什麼?
對於程式師,人們有一些根深蒂固的傳統看法。 這些誤解對程式設計領域是有害的,通常會對有想法的新手帶來負面影響。 或者,恰恰相反,它可能讓一些不合適的人對程式設計產生興趣。
其中一個誤解就和我們剛提到的團隊協作有關。
Monteiro說,「人們通常認為程式師是自閉和不願意交流的,當你解決複雜問題的時候當然會有些注意力集中的時刻,但一個不能與其他團隊成員溝通的程式師最終永遠不會是一個好的程式師。 ”
Palmer-Leandre表示,對程式師最常見的誤解是”你會像《駭客軍團》電影裡那樣寫代碼。 ”
他解釋說,「有時候你認為自己會始終在敲代碼,並且在開始之前就擁有完全足夠的知識去做。 你會發現需要很多年才能做到完全熟練,即便這時候,還有新東西要學,這就是程式設計的魅力。 你可能會在職業生涯中經常訪問StackOverflow和很多網站,而且需要提醒的是,會學到大量不同的概念。 ”
對於Ramburrun來說,對程式師最常見的誤解與硬技術有關,比如你需要很擅長數學才能成為優秀的程式師。
他說,”這種觀念是有一些道理的。 實際上,你在這份工作要學到很多事情,每個職位都有特別的技能要求,你需要進一步拓展。 不知道一些東西沒什麼,不要害怕承認。 真正重要的是你是否願意學習和不斷提高,另外成為一個好溝通的人可以幫你走更遠。 ”
最後,Cakmak談到了一個核心問題:「對於程式設計一個最大誤解就是,它不需要創意。 這是不真實的,解決問題有很多方式,創意是找到對的方案最關鍵的部分,設計系統和功能的考量本身就是一種藝術。 ”
小醜魚即將推出的遊戲《Witchbrook》
遊戲程式師的職業成長機會是什麼?
在成為小醜魚CTO之外,Monteiro仍然是一名程式師,目前主要負責該公司即將到來的學校模擬遊戲《Witchbrook》。
他指出,「大多數的程式師熱愛創作,並且不願意在職業生涯的後期進入管理崗位。 通常的情況下會成為高級或者首席程式師,很多程式師很樂於在這個崗位直到最後,或者他們可以參與管理崗位並且成為主程式、技術總監或CTO。 ”
“因為程式設計是非常有用的技能,很多程式師在完全不相關的領域用他們的程式設計技巧取得大量成功,這個’秘密武器’可以給他們在任何新職業帶來説明。”
就像Ramburrun所說的那樣,”你可以追求不一樣的職業生涯,但總體來說,作為程式師最終會有兩個選擇:管理人或者管理技術。 如果你不確定自己是否願意管理別人,可以要求管理培訓,看是否適合自己。 另一方面,如果你更喜歡技術和程式設計,那麼成為高級程式師就是獲得更多經驗之後的選擇。 ”
“但你的職業生涯也不一定那麼線性化,你不需要執著於一條道。 它可以是由熱情和興趣推動的,這可能會讓你轉向不同的崗位和工作種類。 ”
管理人或管理技術,在Creative Assembly被稱為領導或者專家路線。 後者可以帶你進入中級開發者、高級最終首席開發者,前則讓你在達到總監職位之後成為團隊領導。
《全面戰爭:戰錘3》
給新遊戲程式師的建議和資源
1)不要過早專攻某個領域
當Cakmak開始想在遊戲業工作的時候,她真正想做的是人工智慧,這也是她本科計算機科學畢業之後又拿到AI碩士學位的原因。 雖然並不後悔這麼做,但她坦白稱,如果可以重來,或許她會做不同的選擇。
“從外表來看,我是一個資深的AI程式師,非常聚焦於我的專長領域。 如果可以重來,我很確定會涉及遊戲研發的更多方面,盡可能多的拓寬我的視野。 每個領域都有不同的問題要解決和獨特的挑戰,這同樣可以給你帶來不同的角度去理解,還有在多個領域各種不同的解決方案和問題解決理念。 這會拓展一個人的視野、提高不同技術的切換能力,創造更有效、更好的解決方案。 ”
2)特立獨行
在遊戲行業開始的時候,很容易感到不知所措。 盡量不要與其他人攀比,也不要害怕提出問題。
Palmer-Leandre說,”我當程式師前幾年的體驗很好而且不會改變任何事,但如果可以重來,我不會把自己的目標定那麼高、把自己和別人對比。 每個人都有自己的旅程和工作,與其他人對比是最沒效率的事情,也不會帶來什麼好處。 ”
Ramburrun補充說,”我絕對會問更多問題,我習慣自己做事情,但很快意識到遊戲研發是一台大型機器,提問不僅很重要,也可以確保你有對的工具去學習經驗。 ”
3)現在就開始寫代碼
最常見的建議就是立即寫代碼、做專案。
Monteiro說,「現在開始,沒錯,就現在! 很多人想在『某一天』嘗試程式設計,但沒有什麼時間比現在更合適,不要等到『你上大學后』,現在就可以開始嘗試。 ”
Palmer-Leandre補充說,”去寫代碼吧,找到一個你想解決的問題然後做一些東西來解決它。 如果想成為遊戲程式師,下載一個遊戲引擎並通過新手教程和資料學習輸入和輸出。 有很多程式設計語言、引擎和框架,終究會有一個適合你的技巧和需求。 ”
Cakmak表示,在理論之外開始實踐很重要。 “做個人專案,打造小遊戲和遊戲系統,有一些時間去練習。 程式設計理論當然重要,但成為優秀程式師最重要的是,需要成年累月的練習與堅持。 ”
“找到你所感興趣的問題,然後嘗試用多種方法解決它。 與其他人溝通並且了解已經有的方案,最終的目標是學無止境。 ”
Ramburrun還建議不要把自己局限於某個語言或者引擎。 “做小專案然後公開發佈,你會從事很多事情,這會讓你在加入工作室之後與策劃、製作人以及測試員有共同語言。 如果有機會,我非常推薦你找到遊戲入行的指路人。 ”
給新手推薦的資源
書籍:
Andy Hunt和Dave Thomas編寫的《The Pragmatic Programmer》
Nicolai M. Josuttis的《C++ 17- The Complete Guide》
Scott Meyers的《Effective Modern C++》
Hyrum Wright、Titus Winters與Tom Manshreck合著的《Software Engineering at Google: Lessons Learned from Programming Over Time》
在線資源
HackerRank:用於準備面試和刷新技能
W3Schools:適合新手學習一門程式設計語言
Udemy:有很好的程式設計課,尤其是遊戲程式設計
Stack Overflow:遇到問題的時候找解決方案
Shafik Yaghmour的文章:Where to Get Started Learing C++ and What Resources to Use