平山尚:為逃避生物進入編程領域的日本遊戲開發高手

本文為圖靈社區對《我的第一本編程書》《遊戲編程權威指南》作者平山尚的訪談,訪談時間:2016年8月


平山尚:為逃避生物進入編程領域的日本遊戲開發高手


【訪談嘉賓】

平山尚

1977年生於北海道,曾在京都大學研究生院工學研究科進行分子生物學的研究,2002進入世嘉株式會社,參與了《電腦戰機》(PS2)、《超級網球大獎賽3》(AC、PS3)、SEGA CARD-GEN MLB(AC)、《超級網球大獎賽4》(PS3、360、Wii、VITA)的開發。他編寫的《遊戲編程權威指南》獲得2009年CEDEC最佳著作獎,並被指定為SEGA公司新人培訓教材。

【特約記者】

張沈宇

《我的第一本編程書》譯者,畢業於九州大學。大學期間主攻人機交互設計。現居日本東京,從事以自然語言處理為主的人工智能相關技術的研究與開發工作。

平山尚:為逃避生物進入編程領域的日本遊戲開發高手


訪談文字版

大家好。本期圖靈訪談我們有幸請來了《我的第一本編程書》的作者平山尚老師。平山尚老師畢業於京都大學,研究生期間主攻生物學。2002年進入世嘉公司後參與了“電腦戰機”“超級網球大獎賽”等遊戲的開發工作。他的處女作《遊戲編程權威指南》在日本廣受好評,被世嘉公司選為新人培訓教材。他新近出版的《我的第一本編程書》同樣大獲成功,至今已重印數次。

記者:平山老師,感謝您百忙之中接受採訪。

平山尚:不用客氣。

記者:平山老師的履歷中寫到,研究生期間主攻的是生物學專業。那麼為什麼會選擇進入遊戲行業呢?

平山尚:其實是為了逃避生物。我並不擅長生物學的實驗。生物實驗即花費時間,順序又難懂,我有時甚至不理解一些實驗步驟的做法。因為耗時過長,我又心急,所以實驗做的很差。生物學中需要記憶的內容很多,搞不清理由也要死記硬背下去。而且我的英語不好,不善於閱讀論文,更別說是讓我寫了。同時英語交流也不在行,總之不敢再沿著生物學的道路走下去了。於是試著面試了遊戲公司和IBM這樣的企業,正好通過了世嘉的面試,所以就進入遊戲業工作了。

記者:原來這樣。那麼進入公司前有多少編程經驗呢?

平山尚:進入公司前為了處理研究用的數據,或多或少使用過C++和Visual Basic。但在這之前,我已經先拿到了入職許可。從參加面試到拿到入職許可這段時間,我幾乎完全沒有寫過代碼。僅能用Perl寫個留言板的水平,卻讓我拿到了入職許可。

記者:那麼剛進入公司時一定受了不少苦吧?

平山尚:不可思議的是,開始編程後自然而然就學會了。所以(對於其他人)可能沒有太大的參考價值吧。不過,雖說開始編程後自然而然就學會了,但我用在編程上的時間絕對不算短。新人培訓結束後會,員工會被分配到各個小組中。從那之後,我每天10點到公司一直呆到深夜1點,每天寫15個小時的程序。中午也幾乎不怎麼休息,可以說15個小時都用來編程了。雖然週日休息,但週六也會上班。每週六天,每天寫15個小時程序的話,我想自然也就能學會編程了吧。

記者:在學習編程的過程中,會用到算法、數據結構以及相關的數學知識。您怎麼看待它們的重要性以及與編程的關係。特別是我經常看到“在工作中很少用到算法的知識,為什麼面試中還要考呢?”這樣的意見。您對這種觀點有何看法?

平山尚:這個問題很難回答。因為在工作中是否要用到算法是因人而異的。需要使用的人當然存在,我就是其中一員。像矢量、矩陣、四元數、排序、檢索,等等,我每天都會用到。所以要是問我“為什麼明明不用,卻要學習?”的話,我會回答“不不,要用到的啊”。如果負責“在遊戲中人物怎樣移動比較有趣”“這個道具的出現概率應該是多少”這些內容的話,肯定用不到算法吧。

所以,不能一概而論。有一點需要補充的是,這種基礎知識有助於鍛鍊大腦。我們在中小學學到的很多內容都是用來鍛鍊大腦的,只有一部分能拿來即用。算法大概也屬於這一類吧。

記者:無論是在中國還是日本,讓小孩去上鋼琴班、算數班等情況均不罕見,您覺得編程教育應該從何時開始呢?此外,怎麼樣才能讓初學者對編程產生興趣呢?

平山尚:我沒有教過對編程不感興趣的人,小時候也沒學過編程,所以這個問題不好回答。不過,我覺得沒必要過早開始。可以試著把計算機和程序的書籍放到孩子身邊。如果他們自己會去看的話,那會是個很好的契機,我想那個孩子一定會進步得很快。但如果沒有這樣的機會,卻硬要在課堂上教中小學生編程,我想結果不會很好。首先老師就很難教好吧。在我看來,會編程的人一般來說都會去從事編程的工作,而老師們大多不會編程。

記者:平山老師可否談談編寫本書的緣由?

平山尚:最直接的契機就是在九州大學授課的經歷。本來是別人請我的前輩去講,但因為他比較忙,所以前輩就讓我去了。可是那裡的學生大多屬於藝術系,對編程並不在行。如此一來,我考慮先做一個半成品,讓他們感受一下製作遊戲的樂趣即可。就像是做菜時只需要把菜切好入鍋,就能做出美味料理的半成品,有點類似於Unity的做法。但是這種方法用的人太多,沒有什麼新意,還不如不使用任何編程語言,讓學生在只有點的狀態下製作出遊戲來。嘗試之後發現效果還不錯。

記者:因此您選擇在書中介紹程序員的思考方法,而非實際的解決方案,對嗎?

平山尚:實際的解決方案多種多樣。不但製作的東西種類多樣,而且遊戲程序員與其他行業的程序員也完全不同。同時,語言、開發環境、機器均千差萬別。10年前的遊戲和現在的遊戲也不一樣吧。10年前根本想象不出智能手機上的遊戲是什麼樣子。所以記憶一些庫的用法意義並不是很大。“無論是怎樣的開發環境和程序語言,我都能應付得了”--這樣的狀態才是最好的。為了達到這種“任何情況下我都能編出程序”的狀態,我認為需要學會在沒有任何道具的情境下編寫程序。如果能學會在“只能繪製點”的情況下寫出俄羅斯方塊一般的遊戲,那麼在任何情況下都不會陷入窘境吧?

記者:是的,那可否談談讀者應該如何閱讀本書呢?

平山尚:按照我編寫本書時的想法,依照順序一邊閱讀,一邊自己編寫代碼並加以確認是最有效的。不過若是別人讓我來閱讀本書,我肯定不會這麼做。編程教科書中,是不是都有許多練習題?我從沒做過。學校裡的教科書亦然。無論是化學、數學還是生物,我都覺得太麻煩。所以我會選擇一直讀下去而不進行練習。像我這樣的人肯定不少,這樣的讀者直接讀下去就好了。等讀完後發現了應該練習一下的部分,再去編寫代碼,重新確認也是完全可行的。

記者:除本書以外,您的著作《遊戲編程權威指南》(http://www.ituring.com.cn/book/1742)在日本也博得了很高的人氣與評價,可否告知一下此書的創作背景?

平山尚:應該是2007年的時候,我負責新人培訓工作,對來到我們部門的4名新人進行編程教學。但我發現市面上沒有一本可以直接推薦給他們的書。雖然有一二十本以上關於數學、物理、C++的優秀書籍,但要讓他們去讀這些書,就太勉為其難了。他們的時間也不多,而且剛剛進入公司,若是直接把這些書一股腦給他們,難免會讓他們產生厭惡的情緒。所以我就想到,難道不能用一本書解決嗎?但我沒能找到這樣的書,所以只能自己制定課程,讓他們學著做一些簡單的遊戲,或者去模仿一些遊戲。培訓結束後,我在自己的博客上寫道,“要是有這樣的書就好了啊。”正巧我的博客被出版社的人看到,就問我要不要試著寫一本這樣的書。一般而言,在公司裡工作的人是不會寫書的,又不怎麼賺錢。但我詢問了上司後,上司竟然同意了。正好當時也不太忙,所以就開始編寫。沒想到花費的時間遠遠超出想象,本以為大概會寫300頁左右,沒想到最後的書長達900頁,花費了9個月的時間。實在有點對不起我的上司。

記者:說到遊戲開發,隨著Unity的普及以及移動遊戲的逐漸流行,遊戲製作的門檻已經低了不少。特別是使用Unity的話,可以不必再去學習曾被認為是必學語言的C++,平山老師怎麼看待Unity這款遊戲引擎?您認為遊戲開發的入門者還需要學習C++嗎?

平山尚:我認為Unity非常優秀,為遊戲製作提供了一條捷徑。有了Unity這樣的引擎,許多至今而言比較枯燥的部分、依靠程序員的死記硬背編寫出來的部分就不再需要了。可以說這是時代進步的必然結果。比如我們生活中的快遞公司,它們肯定不會自己去造運輸用車吧。這種理所當然的事情在遊戲界曾經不算理所當然。這種遊戲引擎的出現,使得高級程序員才能做的東西不再是必需的了。我認為這是正確的趨勢。

至於C++,也是同樣的道理。如果不再需要了的話自然不用再去學習。但必須要說,學了自然比不學要好。在生活中,自然是會的東西越多越好。要是有餘力的話,學一下總是好的。不過要是為了將來可能的需要而去學習的話,難免遇到挫折,也不會感到什麼樂趣。所以需要用到C++時再學就行了。如果想提前學習的話,可以讓自己的工作內容變得需要用到C++,比如說,進入到一些比較傳統的遊戲公司,依然需要編寫C++的程序。進入這種公司的話,即便厭煩也必須去學習的吧。把自己放到那樣的環境中就行了,不要想著等到學會C++後再去那樣的環境中工作。學會C++後,就能瞭解到Unity的內部到底在做什麼。因為Unity內部是用C++寫成的。如此一來,就算是僅僅使用一下Unity,也能使用得更熟練一些。像性能優化、載入時間等內容,都會在瞭解了內部的程序後有所掌握。比如垃圾回收器突然開始運行導致程序變慢後,你就能想到“因為用C++寫的話是這樣的,所以會這麼慢”。如此一來,就能和不會C++的人拉開很大的差距。

記者:伴隨著程序開發工具和遊戲引擎的進步,僅僅數人就能完成遊戲的開發與銷售。那麼專業的程序員應該如何提升自己的競爭力呢?

平山尚:大方向應該分兩種吧。第一種,去做一般的程序員做不了的工作。比如進入Unity內部後,肯定要用C++編寫代碼。那麼像性能優化這種不需要像過去一樣費心研究的內容依然不可或缺。這種人需要擁有很高的技術實力。因為現如今大部分地方都不需要鑽研這些內容,所以不做到世界上數一數二的級別是不行的。總之,成為一流程序員是一種辦法。

另一種方法是著眼於現在Unity並沒有提供,但是最好能用C++寫出來,需要專業編程能力的部分。比方說,雖然相關的資源可能有一些,Unity中並沒有過多涉及人工智能的內容。如果自己能編寫這一部分的程序,那麼一般人肯定無法做到,自然就有競爭力。

這兩種之外還有一個方法,就是成為能夠展現出遊戲本來趣味的人。也就是說,涉足策劃領域。一個遊戲成敗與否,與參數的調整、AI的行為動作息息相關。如果掌握了這些一般人難以掌握的內容,那麼一定能做出有趣的遊戲。單純的程序員做不到這些,單純的策劃人員因為不會編程,也無法直接寫出遊戲。若能兩者兼修,就能找到自己的生存空間。

記者:在平山老師眼中,編程到底是怎樣一種存在?編程對您的生活和人生帶來了哪些影響?

平山尚:首先,編程是掙錢的工具。在我意識到自己能夠編程前,我一直因為找不到賴以生存的技能而擔心不已。生物學又不好,雖然是生物專業的研究生畢業,卻完全不覺得自己擅長這方面。是不是件很痛苦的事情?但進入遊戲公司,開始編程後發現自己做得還不錯。可以說人生髮生了很大的轉變。因為我終於意識到,我可以憑藉它掙錢的。可以說這改變了自己的人生。雖然編程只是個工具,但它給我指出了一條生存的道路,我必須要感謝它。

但與此同時,我要冒險說一句,我認為我並不熱愛編程。我的一些同事,對編程有深深的愛,在家也會寫程序。他們會把許多程序和開源代碼拿來進行研究。我卻不會在家編寫代碼,也不會去看別人的代碼或者查一查有什麼庫存在。所以,我應該並不愛編程。但是,真正編寫時是很開心的,因為我喜歡鍛鍊自己的大腦。總之,編程對我而言既是玩具,又是工具,但卻說不上熱愛。真是很奇妙的感覺。

記者:訪談的最後,有什麼想要對中國的讀者說的嗎?

平山尚:那麼就談談這本書吧。本書是寫給那些認為自己“不能不學編程”的讀者的。所以家長要是讓孩子根據這本書進行學習的話,可能會有難度。因為沒有特意添加什麼有趣的要素。相較而言,不如讓孩子去試試Unity或者Minecraft。這本書的對象是希望學習編程、希望自己能夠編程的讀者。針對這些讀者,我盡了自己最大的努力去構思,去排除掉可能產生干擾的要素,希望能幫助所有有學習慾望的讀者學會編程。

但不得不說,這依然是一份苦差事。在書中,我會有意寫一些存在問題的代碼,並在很多頁後才指出來。整個閱讀過程肯定不會輕鬆。若是先略加瀏覽後再編寫代碼的讀者,對書的內容會有所把握,問題還不算大。但如果是從開頭就認認真真邊練習邊閱讀的話,需要做好受苦的準備。可我必須要說,能夠克服這些辛苦的讀者,才是最能從本書中獲益的讀者。因此,想要自己嘗試一下編程,想要學會如何編程,以及雖然讀過許多編程書卻仍雲裡霧裡的讀者,已經工作卻依然不自信是否能夠編程的讀者,比如因為“雖然掌握了某個庫的使用方法,卻不知道在其它環境下會怎樣”而忐忑不安的讀者,不妨嘗試著閱讀一下本書。


相關閱讀:

平山尚:為逃避生物進入編程領域的日本遊戲開發高手

本書是編程的入門書,目的在於教會讀者編程的基本思路和方法。書中使用專門的工具Sunaba,向讀者展示如何從零開始一步步做出一個完整的程序。本書講解詳細、連貫,並採用了大量能與現實生活相結合的例子。特別是在對編程思路的介紹上,作者不惜筆墨,進行了詳細的說明。

本書適合初次接觸編程的人閱讀,也適合有一定編程經驗的人查漏補缺。


分享到:


相關文章: