[日文版]《我的第一本程式設計書》作者平山尚:しろうとの逆襲(圖靈訪談)

劉敏ituring發表於2016-08-10

訪談嘉賓:

平山尚 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

相關文章