ゲームプログラマ・エンジニアを目指してプログラミング言語を覚えた次に学ぶこと

この記事は、ゲーム制作 Advent Calendar 2018 の4日目の記事です。

そして、明日発売される書籍「ゲームプログラミングC++」の宣伝です。

ゲーム業界に入るのは難しい。近年はUnityなど素晴らしいゲームエンジンが出てきて、ゲームが手軽に作れるようになってきました。そう、デジタルゲームは、手を動かしさえすれば、誰でも作れてしまう世の中になったのです。逆にいえば、ゲームが作れるだけではゲーム業界には入れない世界になってしまいました。プログラマーであれば、より深いゲーム制作の知識や人と違った技術の習得が求められるようになってきたのです。と、いう話をゲーム業界の人とすると、「低レベルなメモリ管理ができなければいけない」、「直接3D APIを叩けなければいけない」という話に向かいがちなのですが、おいおい待てよと心に思うわけです。老害世代には、直接ハードをいじれる機会がありました。8bitパソコンのアセンブラ。DMAを直叩きしたPlayStation2。低レベルのプログラミングが機械を支配している万能感を与えてくれました。でも、今そんなのないって。人工知能のプログラミングをするなら手軽で速いPythonを選びますよね?Win32ならC++でプログラミングできるとかって、あなたのOS何ビットですか?Visual Studioでアセンブラを学ぶって言っても環境構築は面倒だし、昔みたいに、それをしないと性能が出しきれない状況にまず出くわさないので、そもそもの実際的な目的がないんですよ。ということで、自発的に低レベルな言語を学ぶ機会がないのが現代ではないでしょうか。そんな時代に老害世代と同じスキルを身に付けないと就職できないとか明らかにおかしい。しかし、そのような人たちが面接官という障壁として待ち構えている可能性高い現状、低レベルな技術を身につける必要があります。という理由だけではないのですが、ゲーム業界に入る前にゲームエンジンの中の知識をある程度は知らないとゲーム業界に就職しにくいというのが今の世の中といえるのではないでしょうか。

ゲームプログラミングを学ぶのは本当に難しいです。ゲームプログラミングを学ぶのに、最初にプログラミング言語を学習する必要があることは直ぐに思いつくかと思います。しかし、次の一歩が難しい。ジェイソン・グレゴリーさんの「ゲームエンジン・アーキテクチャ」は、その次の一歩ですが、この本はソースコードが少ない。頭で考えたことを自在に組み立てられる中級以上のプログラマにはお勧めで、沢山の良い知識を仕入れられるものの、初学者が書かれている事を即座に実装できるものではありません。「ゲームプログラミングパターン」という良書も訳されていますが、パターンを組み合わせてもアーキテクチャが生まれるわけではないので、この本を読んだところでゲームエンジンのような基盤が作れるようになるわけではありません。ということで、コンピュータ言語を学んだ後にゲームプログラミングを学んでいくための方法は悩みが深いのです。が、このミッシングリングを解く存在が「ゲームプログラミングC++」です。本書は、プログラムを少しづつ書き換えながらPongクローンからFPSのゲームエンジンを作っていくことになります。本書のソースコードは、GitHubのgameprogcpp/code に上がっていますので(英語版ですが)、具体的にどのような物を作るのだろうと気にされている方は、ご覧いただくのが良いかと思います。

もちろん、この本は完璧ではありません。今どき物理ベースレンダリングではないし、メモリ管理はSTL頼みだし、マルチスレッドではないし、エフェクト出ないし、ネットワーク扱わないし、バトルシステム作るならもっと作り込み必要だし。文句はいくらでもつけられます。まぁ、「そんなこと言うなら、お前書けよ」というのは最もですが、それは置いといて。本書を読めば実際に使える俺俺ゲームエンジン作れるようになるという事で、現代のゲーム開発者を目指す者・初学書にとって、必携の書籍といえます。

GPCpp.jpg

私は、本書の監修を務めさせていただきました。翻訳者の吉川邦夫さんの訳がすばらしかったので、こちらは、「ゲーム開発者はそんなこと言わないですよ」とか、「その意味違っていますよ」とかに集中することができました。で、おかしな点を指摘したら、原著からある間違いということが判明して、原著に訂正の指摘を出す事態に至ってもいます。ということで、英語版よりもある意味正確な日本語版。前半の方が文章がお堅い気もしますが、ぜひお買い求めいただければと思います。

明日のゲーム制作 Advent Calendar 2018 は、eunx32さんです。

大学のゼミでモブプロ中

この記事は、「モブプログラミング Advent Calendar 2018」の12月4日分の記事です。

早いもので、大学の先生をはじめてからもうじき三年になろうとしています。学生を素敵な場所にはばたかせようと思っているのですが、まだまだ試行錯誤の毎日です。そんなじたばたあがいていることに一つにモブプログラミングがあるので、やってみての事を書こうと思っています。

自分とモブプログラミングの関係はまだそれほど深くありません。TDDワイワイ会(TDDyyχ)に参加させていただいたのと、産業技術大学院大学のenPiT2 の「アジャイルチームキャンプ」でお手伝いをさせていただいた程度になります。ただ、ペアプロを以前の職場で導入して、教育に良さそうなことは実感として持っていました。

さて、モブプロを導入しようとしたきっかけは就活です。売り手市場と呼ばれる就職状況でも学生が希望する企業にたやすく就職できるわけではありません。話を聞くと、面接に行く前に落ちている学生も多く、基礎力が足りないのではと考え、プログラミング力の向上について検討していきました。所属している学科は、3年生の4月から各研究室に配属されゼミ活動を行っています。色々な授業でプログラミングの力を向上させることを考えているのですが、少人数での実習科目を受け持っていなかったので、ゼミでモブプロをしてプログラムの機会を増やそうと計画をしました。

今回は、3年生のゼミ生でモブプロをしました。学生の配属が4名だったために、自分を含めた5人でモブプロをしています。実施しているのは、毎週1限の時間で各自が持ち回りでドライバーを務めてプログラミングをしています。メディア的な学科の特性上(?)ゼミ室には65インチのテレビが置いてあるので、そちらにPCを繋いでワイヤレスキーボードでプログラミングをしています。使っているサービスはもろもろの理由で内緒なのですが、オンラインエディタで編集出来て、CIのテストも実装されている物を使っています。テストは、お題に対して既にユニットテストが書かれているものを使っているので、TDDをしているというわけではありません。

mobpro

やってのところですが、お題的に30分から1時間の課題に取り組んでいるのですが、時間的に想定時間よりも早く終わる場合もあれば、3時間ぐらいかかる場合もありました。どうしてもドライバーがプログラミングをするという意識が強くなってしまい、発言を促しても、それに対して頑張ってくれる人もいれば、他人事のように扱ってしまう人も生じました。あと、何回かやるとプログラミング力の差がどうしても分かってしまいます。それを補うためのペアプロですが、どうしても良くできる人の発言が強くなるように感じました。まぁ、基礎力は上げってきているかな!?

プログラミングの教育としては、すでに組んだソースコードをレビューするということもやった事があるのですが、ある程度できたプログラムというのは、すでに手遅れな場合は多く、良くなるように導くというよりも書き直した方が早く感じたのですが、お題に取り組む場合は、きれいな状態から始められて、より良いパターンを教えるのも、少ない場所だけ指導すれば良いのでやりやすく感じました。

明日のモブプログラミングAdvent Calendarは、tronperidotさんです。