访谈嘉宾:

平山尚 1977年生于北海道,曾在京都大学研究生院工学研究科进行分子生物学的研究,2002进入世嘉株式会社,参与了《电脑战机》(PS2)、《超级网球大奖赛3》(AC、PS3)、SEGA CARD-GEN MLB(AC)、《超级网球大奖赛4》(PS3、360、Wii、VITA)的开发。他编写的《游戏编程权威指南》获得2009年CEDEC最佳著作奖,并被指定为SEGA公司新人培训教材。

enter image description here

特约记者:

张沈宇,我的第一本编程书》译者,毕业于九州大学。大学期间主攻人机交互设计。现居日本东京,从事以自然语言处理为主的人工智能相关技术的研究与开发工作。

中文版链接

平山先生、本日はお忙しい中、インタビューをお受け頂きまして、ありがとうございます。

こちらこそどうも。

平山先生の経歴欄に、大学院時代では生物学を専攻されたと書かれていますが、どういう経緯でゲーム業界に入ったんでしょうか?

逃げてきたんですよ。生物学の実験って苦手なんですよね。時間がかかるし、手順がよく分からないし、理由がわからない手順があったりするんですよね。 時間が長いので、待てないし、下手くそでした。生物学は覚えることも多くて、理屈がわからなくても覚えるしかないわけです。

英語も苦手で、論文を読むのもしんどいし、書くとなればなおさら怖いでしょう?英語で話すのも大変ですし......色々と怖くなっちゃって、それでゲーム会社とか、IBMとかを受けて、たまたまセガだけ受かったんです。そのまま行くことにしました。

なるほど。となると、入社する前に、プログラミングの経験はどのくらいなさったんでしょうか?

入社前は一応研究データの処理でC++を多少いじったり、Visual Basicを書いたりしてました。でもその前に、内定ってありますよね。「就職試験を受けて、内定をもらうまでの間」で考えてみると、全然書いてなくてですね。Perlで掲示板を書いた位の状態で内定をもらいました。

初めてプログラムを触ったのは中学生の頃なんですけど、あっという間に挫折してしまいまして、「アセンブラで青い画面が出たぞ、これつまらないな、もういい」っていう。全然できませんでした。

となると、入社されった後にかなり苦労したと思いますが、どうでしたか?

それが......不思議なことに、やったらできたんですよ。だから、参考にならないかもしれないですけど。でも、やったらできたと言っても、やった時間は多分結構なものだと思います。チームに配属されますよね。最初の新人研修が終わったらチームに入るんですが、10時に会社に来て、夜中の1時くらいまで、プログラムを15時間書いているんですね。昼休みもやってましたから、ほぼ15時間丸々書いてる感じでした。日曜日は休みましたが、土曜日も働いていましたし。週六日15時間書いていれば、それはできるようになるんじゃないかなと思ったりもします。

プログラミングを勉強する際に、アルゴリズム、データ構造、そして数学の知識も必要になってくると思いますが、それらの重要性、そしてプログラミングとの関係性について先生はどう思われますか?特に、「アルゴリズムは業務の中にあんまり使われていないのに、なぜ面接の中に頻繁に聞かれているの?」という質問はよく耳にしますが、そのことに関しては、先生はどう思われますか?

これは難しい問題ですね。仕事で使う人と使わない人は結構真っ二つに分かれますから。使う人は使います。私とかは普通に使うんですよ。ベクトルでも、行列でも、クォータニオンでも、ソートでも、検索でも、ほぼ毎日普通に使ってます。だから「使わないのに、なんで勉強するの?」と言われたら、「いや、使うじゃん」という風にしか思わないわけです。ですけど、例えば、ゲームでキャラクターがこうやって動くと面白いとか、このアイテムはこういう確率で出るとか、そういうところを書いている人はきっと使わないですよね。なので、簡単には言えないと思います。

あと、もう一個言えるのは、そういう基礎的なものっていうのは、やると頭が鍛えられるんですよ。小学校、中学校とかでやることは頭を鍛えるだけで、覚えたものをまんま使うとは限らないでしょう? アルゴリズムももしかしたら、そういうものかもしれません。

日本・中国を問わず、子供にピアノ教室とか、そろばん教室に通わせることはよくあると思いますが、先生から見れば、プログラミングの教育はいつから始めさせるべきだと思われますか?そして、どのように初心者にプログラミングへ興味を持ってもらうのでしょうか?

自分で興味を持てない人に教えたことがないし、私は子供からやっていないから、ちょっと答えにくいですけど。あまり早くやる必要はないと思いますよ。ただ、コンピュータやプログラミングの本を置いておいて、子供が勝手にやり始めたら、それはチャンスですよね?その子はすごく伸びると思いますよ。でも、例えば、そういう機会がなく、中学生とか、小学生とかに無理矢理授業で教えても、多分うまく行かないでしょう。そもそも先生が教えられないし。プログラミングできる人は多分プログラマーになって、プログラマーの仕事をしてるんですよ。先生になる人は大抵プログラムは書けないと思いますね。

平山先生はどういった経緯で本書を書くことにしたんでしょうか?

直接のきっかけは九州大学で授業をしたことですね。先輩から「ちょっと講義してきて」って言われて。本当は先輩が頼まれたんですが、「忙しいから、お前がやれ」と。それで私がやってきたんですよ。講義をやれと言われても、学生さんはどうも芸術系の学生らしくて、そんなにプログラムは書けないらしいと。そうなると、半分完成したキットみたいなもの、料理でいう、「野菜を切って、鍋に入れたら、美味しい料理ができます」のようなキットを作って、「ほら、楽しくゲームできたよ」みたいな感じにしようとも思ったんですけど。Unityみたいなアプローチですね。でもそれは、みんなやってるし、面白くないなと思って、何もないプログラミング言語を作って、点しかない状態でゲームを作ってもらおうかなと思ったんですね。やったら、結構うまくいったんです。

じゃ、そのために、本書は実際の解決策ではなくて、プログラマーの思考法を述べる形にしたんでしょうか?

実際の解決策って、多様じゃないですか?作っているものもいろいろだし、ゲームを作っている人とゲームじゃないものを作っている人は全然違いますし。それに、言語が違う、環境が違う、機械が違う・・10年前のゲームと今のゲームは違いますよね。スマホで動くゲームは10年前想像してなかったわけですから。だから、どのライブラリを覚えるとか、あんまり意味なくてですね。「環境や言語がどうなっても、俺はプログラムを書けるな」と思えちゃったらいいですよ。「どうなっても書けるな」と思えるためには、極力何もない状態で書けた方がいいと思いますね。「点しか書けないよ」と言われた状態で、テトリスを作れたら、多分どこにいっても、どうにかなるかなと思えるかなと。

なるほど。じゃ、本書のオススメの読み方を教えていただけますか?

一応順番通りに自分でコードを書いて、確かめながら読むと、一番効果があるように書いたつもりです。ただ、私がもしこの本を読もうと思ったら、絶対そうはしないでしょうね。例えば、プログラムの教科書とかに、練習問題が一杯あるじゃないですか。やったことないです。学校の教科書もそうですね。化学でも、数学でも、生物でも・・面倒くさいじゃないですか。だいたいコードなんて書かず普通に読んじゃいます。多分そういう人も一杯いると思いますので、バーっと読んじゃってもいいと思います。読んじゃった後で、「あ、これはやってもいいかな」と思ったら、自分でコードを書いて、もう一回やり直してもらえたらいいと思います。

本書以外に、先生の著書「ゲームプログラマーになる前に覚えておきたい技術」という本も日本で高い人気と評価を博しましたが、そちらの本を書かれた経緯を教えていただけますか?

2007年くらいだと思いますけど、新人研修をしたんですね。うちの部署に来た四人に対して、プログラムを教えたんですけど、「とりあえずこれを読んでおけ」って言える本がなくてですね。数学とか、物理とか、プログラムのC++の本とか、いろいろあって、読んだほうがいい本はたくさんあるんですよ。10冊でも、20冊でも。でも読めと言っても辛いでしょう。忙しいでしょうし、会社に入ったばかりなのに、先輩からバーンって本を渡されたら嫌じゃないですか?どうにか一冊で済まないかな、と思ったんです。でも、そんなものはないので、自分でカリキュラムを考えて、簡単なケームを作らせたり、どこかで見たようなゲームを真似して作らせたりして、やってみました。それが終わった後に、「こういう感じの本があったらいいのに」という風にブログに書いたんです。たまたまそれを出版社の人が見ていて、「書いてみないか?」と、お声を頂きました。でも、普通は会社に勤めている人間は本なんか書けないんですよ。儲かりませんし。ですけど、上司に頼んだら、たまたまオーケーがもらえてですね、ちょうど忙しい時期ではなかったんですね。それで書き始めてみたら、誰も予想しないくらい時間が掛かっちゃって、自分も300ページくらいかなと思ったんですけど、900ページになっちゃって、9ヶ月掛かりましたね。上司には申し訳なかったです。

ゲーム開発と言えば、Unityの普及とモバイルゲームの流行によって、ゲーム制作の敷居が低くなってきていると言われています。特にUnityを使用すれば、昔では必須言語だと思われるC++を勉強しなくても済みますが、平山先生はUnityという言語(ゲームエンジン)についてどう思われますか。そしてゲーム開発の入門者にとって、C++を勉強する必要はまだあるのでしょうか。

Unityはすごくよくできているんで、ゲームを作るなら近道だと思います。ああいうものがあれば、今まで比較的につまらないところ、プログラマーが頑張って覚えて書いていたところはいらなくなるんですね。それは歴史の流れとしては普通で。配達するヤマト運輸みたいな会社がありますね。自分で車を作らないじゃないですか。当たり前ですね。でもそれって、ゲーム業界では当たり前ではなかったわけです。ああいうものが現れて、本来なら専門家がやってくれればいいものを、自分でやらなくて良くなったというのは正しい流れで、そうなるものだと思います。

当然C++もそういうものですよね。覚えなくてもいい言語になれば覚えなくてもいいはずです。ただ、覚えたほうがいい、というのは間違いないんです。世の中に、できて困ることは何もないので、余裕があれば、覚えたほうがいいですね。だた、前もって覚えようとすると、挫折するし、つまらないので、C++が欲しい状況になったら覚えればいいと思います。もし先にC++を覚えようと思うんだったら、自分の仕事をC++が必要な状況に追い込めばいいと思います。例えば、古いゲーム会社に行けば、今でもC++で書いています。そういうところに入っちゃえば、嫌でも覚えるじゃないですか。自分を追い込んじゃえばいいですよ。先にできるようになってから行こうと思わないでね。C++がわかるようになると、Unityの中で何をやっているかがよくわかるようになります。Unityの中はC++で書かれていますから。そうすると、Unityはただ使うだけであっても、もっと上手に使えます。例えば、性能の事とか、ロードの待ち時間とか、中に何をやっているのかは想像できるようになるので、急にガベージコレクションが走って遅いというのが、「ああ、C++で書いたらこんな感じになるから、こんな風に遅いだろうな」って想像がつくようになるわけですよ。そうすると、他のC++がやったことがない人にすごく差が付くと思います。

プログラムの開発ツールやゲームエンジンの充実によって、プロじゃなくても、数人でゲームを開発し、販売し始めるビジネスが可能になってきていますが、プロのプログラマーにとって、どうやって競争力を高めていくべきでしょうか。

2つくらい大きく分けてあるかな。一つは、素人ができないことをすること。例えば、Unityの中に入れば、C++でコードを書きますよね。きっと性能とか、そういう昔頑張ってやっていた今はもうやらなくなったこともやりますよね。それには、非常に高い技術力が要ります。世界で一番とか、二番とか、そういう人にならないと、今の人が普通に書かなくなっちゃったところを書く必要がないからですね。つまり、一流になる、というのが一つです。あとは、今Unityが提供していないけれども、C++で書いたら嬉しいこととか、例えば、プロのプログラミング力があった方が嬉しいことを手掛ける。例えば、AIとかはUnityが提供していません。部品は幾つかあるかもしれませんけど。そういうものが自分で書けるようになったら、それは素人がとても手が出せないので、競争力を持てます。あともう一個あるかな。ゲームそのものの面白さを表現する人になること。つまり、プランナーを兼ねることですね。パラメータの調整とか、AIの挙動とか、そういうものにゲームの魂がこもりますから、そういうところをかけるプログラマーになって、普通の人がかけないものをかけるようになれば、きっと面白いゲームが作れますよね。それはただのプログラマーではかけないし、ただのプランナーでは自分でコードがかけなくて、直接作れないわけです。両方できる人になれば、生きていけると思います。

平山先生の中で、プログラミングは一体どんなものでしょうか?そして、プログラミングは平山先生の生活と人生にどんな影響をもたらしましたか?

まずプログラミングはお金を稼げる道具ですね。プログラミングは自分ができると分かるまで、「私は何で給料をもらって生きていくんだろう」って凄く怖かったんですよ。生物学が苦手でしたし、大学院を出ても、専門でやったことが全然得意だと思えないですよ。辛いじゃないですか?でもゲーム会社に入って書いてみたらどうにかなったわけです。そうすると人生変わりますよね。「自分がこれで給料をもらっていいんだ」って思えるようになったんですから。本当に人生を変えたと思います。プログラミングは道具なんですけど、やっぱり自分の生きる道を広げてくれましたので、凄くありがたいです。

でもその一方で、これを言うと怒る人もいるかと思いますが、私はプログラミングをそんなに愛していないと思います。私の同僚にも、プログラミングを愛している人がいて、家でも書くんですね。色んなプログラム、オープンソースとかあるんじゃないですか。ああいうのを持って来てみたりとかしますよね。私は家で全然やらないし、他人が書いたコードを見ないし、どんなライブラリがあるか、調べもしないし、だから、多分愛していないと思いますよ。だけど、書いている間は楽しいですよね。自分の頭が鍛えられるのは凄く楽しいです。だから、おもちゃでもあるし、道具でもあるんだけど、愛していると言われると違う、不思議な感じです。

インタビューの最後に中国の読者たちに一言お願いしたいと思います。

この本について言うのが一番いいですかね。この本を誰に書いているかといえば、「プログラミングができないといけないかな」と思った人なんですよね。例えば、親が子供にプログラミングを習わせようとしてこれを渡すのは多分キツいと思うんですよ。楽しくなるような細工をしていないから。Unityを渡したり、Minecraftを渡した方が良いと思います。この本は、自分でプログラムを書こう、出来るようになろう、と思った人が手に取るものです。そういう人には、私が今出来る限りのことを考えて、出来るだけ邪魔になるものを排除して、やる気さえあればできるように、と考えて書いたつもりです。だけど、それだけにしんどいと思うんですよ。中ではわざと良くないコードを書いていたりしますし、それをしばらく黙っていたりしますよね。いろいろ大変だと思いますよ。一回軽く読んでからプログラムを書き始める人は展開がわかっているのでまだいいんですが、順番に真面目に書きながらやっている方はかなり苦労されると思います。

でもその苦労を全部やってもらった時に一番力がつくように書きました。ですので、まずは自分で書こうかなと思っている人、勉強して出来るようになろうと思っている人、後は今まで色んな本を見てやってみたけれども「よく分からない」と思っている人、さらには、仕事ができて給料ももらってるんだけど自分は本当にプログラムを書けるのか分からないと思う人、例えば、「このライブラリを使う事は覚えたけど、他の環境に行ったらどうなるんだろう」って不安に思う人。そういう人に一回箸休めとしてやって欲しいです。

わかりました。それでは、本日はどうもありがとうございました。

こちらこそ、ありがとうございました。 enter image description here