改めて、ゲームプログラマー志望の大学一年生を弟子にとってみたけど、うまくいかなかった話の詳細と反省

 こんにちは。ゲーム会社でゲームプログラマー13年従事後、現在は会社を立ち上げ主に自社ゲーム開発をしております。

 先日、こちらの記事公開後、多くの方に読んでいただき多くの厳しいご意見を頂きました。私が反省しなければならないことがたくさんあり、貴重なご意見ありがとうございました。

 一方で1つ、私と当事者の学生(以降、N君と呼ぶことにします)の間の結論と、読者の間でのギャップの大きさも感じました。今回のプログラムに関して、2人の間では「当初の目標に対してうまくはいかなかったがお互いにとってプラスになった。やって良かった」という結論でした。

 N君とは今も関係が続いており、記事公開後、改めて話をしました。
 いろいろ話をした後、今回のプログラムを何故お互いはやって良かったという結論に至ったのか、より詳細に説明しようとなりました。私自身、「初学者向けにいろいろ考えてたこと」とかもすっぽり抜けており、詳細に書いた方がより正確なご意見を頂けるのではと思いました。

 もちろん学生は初学者であり、彼自身がプラスと思っていても、付き合わされるべきじゃなかった、というご意見もあるかと思います。
 それ含め皆さんからの指摘で反省しなければいけないと思った点もふりかえりとしてまとめながら書きました。経緯や何を考えていたかを書いた結果、長文になってしまいました。

 それでも良ければ読んでいただき改めてご意見をいただけるとありがたいです。

1章:N君との出会い

 私は大阪電気通信大学のデジタルゲーム学科出身である。
 6月頭、久しぶりに母校の四条畷キャンパスを訪ね、私の当時の担当教授の研究室に遊びに行っていた。教授とはゲーム会社に就職できている学生が最近は何%なのかとか、どういう学生が就職できているか、とかそんなことを話したりした。

 そんな中、教授からの提案で、私は1年生の講義で自身のゲーム開発経験の話を10分程度にまとめて話した。
 最後に「もしゲーム開発に関して質問があるなら、今日はこの後○○研究室に暫くいるから気軽に遊びに来てください。雑談でもいいので」と伝えた。

 何人研究室に遊びに来るだろうか。0人もありえると思った。
 幸いにも2名来た。そのうちの1名がN君だった。
 N君は大学の後輩にあたる。
 
もう1名についてはその場の質問に答えて終わったので割愛する。

 彼は、ゲームプログラマー志望であると、将来的には起業もしたいと。
 ただ悩みがある。プログラミングは大学に入って授業で学び始めたばかり。ただ諸般の事情でバイトを結構しないと生活が厳しく、授業以外の時間でプログラミングする時間がなかなか取れない。授業だけで十分成長できるとは考えておらず、悩んでいると。

 その時は、少し突き放すようだが、厳しい話をした。
ここは大学だがデジタルゲーム学科。普通の大学なら、ゲームを作っていなくても就活で他の部分で評価される余地はある。でも専門学校やここのような大学だと自分でどれだけゲーム作ってきたかプログラミングしてきたか見られてくる。時間の確保は難しいとは思う。でも0ではないでしょ。とりあえずは、一度、授業以外で自分がどれだけプログラミングの時間を作れるか試してみて欲しい
 そんな話をして、その日は終わった。

2章:N君のために私ができることは何か?

 帰宅した後、N君のことが気になった。
 1年生の講義で「ゲーム業界に行きたい人は手をあげて」。ほとんどの学生が手をあげた。現実は、大阪電通で実際にゲーム会社に就職が決まっているのは毎年一握りだ。(大阪電通に限らずだとは思うが)。今まであまたのゲーム会社を希望して就職できなかった学生を見てきた。彼もその一人になるのではと心配した。

 受け答えはしっかりしてて、なりたいと言っている。でも時間が限られている。私に何かできることはあるか。

 PICO PARK 2の完成直前。9月から社員も1人入社する。
 私も時間が限られている。
 その時、過去の二つの思い出を思い出した。

==================================

思い出1、ゲーム開発経験のない優秀な新入社員

 ゲーム会社時代、私の6年くらい下で入社してきた後輩がいた。彼は私大出身でプログラミング経験はあるが、ゲームプログラミング経験はない。
 だが彼の成長スピードは著しかった。ゲームプログラミング経験がないのに新人から活躍してくれた。彼はメキメキと成長していった。
 彼の何が凄かったのか。
自分が何を分かっていて何を分かっていないのかの区別がうまかった
 分からないことはすぐ質問してくれるし、仕事を振った時の彼自身にとってのその仕事の難易度判断も的確だった。ちょうどいい仕事を振りやすかった。
 何を分かっていて、何を分かっていないのかを分かっている人間は強い。

思い出2、 別のとある学生の気付き

 今から10年くらい前、別のとある学生のゲーム作品のソースコードを見た。彼はC++でゲームを作っていた。
 少し気になることに気づいた。読み込んでいるファイルの拡張子が.binなのに中身はテキストファイルだったのだ。ただ彼はバイナリと言った。
 バイナリ変換ツールがあると言うので見せてもらった。
 端折って簡単に書くと以下な感じだ。
 FP* fp_i = fopen("input.txt", "r");
 FP* fp_o = fopen("output.bin", "wb");
 freadでfp_iから読み込み、fwriteでfp_oに読み込んだデータを書き込み。
 彼はfopenに"wb"にすればバイナリ形式となると勘違いしていた。
 バイナリを分かっていないことを指摘したら彼は、すぐ調べなおして修正した。

 彼はバイナリに関して分かっていないことを分かっていなかった。
 私が彼と接した時間とても短かったが、その限られた時間での指摘で彼にとっては気づきになってくれた。

==================================
 この二つの思い出から、以下を考えた。
  「N君が何を分からないのかが分からない状態にしないこと」
  「何を分かっていないかを教えること」
 
これは大学では個別には教えてくれないだろう。限られた時間でも、マンツーマンじゃないとできないことだと思った。
 情報自体は世の中溢れている、ただそれにアクセスする前段階が「何を分かってないかを分かってる」
 これが限られた時間の中で私が初学者のN君に対してできることなのでは?と考えた。

 「何が分からないのかが分からない」で検索すると、塾の講師や新人教育などいろんなページが出てくる。
 何が分からないのかが分からないと、調べるのも、質問するのも難しい。
 逆に言えば、そこがはっきりすれば、調べやすく質問しやすくなると考え
た。

 N君はわざわざ研究室まで来て私に質問に来た。その行動力はある。
 申し訳ないが座学やちゃんと説明する人は大阪電通大に任せよう。お金払って通っていて自分より接する時間が多い。大体教授陣知ってるし、どの教授に質問すればいいかも大体分かる。教授陣は自主的に学びに来る学生を無下にはしないはず。(忙しい時は無理だが) 本も大学図書館いろいろあるはず。なければリクエストを出してもらおう。

 当時は、これが彼のためになることは何かと考えた時の結果である。

2章ふりかえり

 反省点1:と考えはしましたが、自分が「初学者教育に関しては素人」である自覚が抜けていました。ゲーム会社で後輩に教えてきた経験はあるが、初学者相手はなかった。もっと自分自身が初学者教育について勉強すべきだったと反省しています。
 反省点2:この関わり合い方で、弟子と呼ぶにはおこがましかったと反省しています。自分以外の人に任せた部分もあり、無責任だったと反省しています。

3章:私にとっての利益

 私の中でもはじめての取り組みで、お金を取ることではないと考えた。

 なので無償でやろうと考えた。
 ここでだが、私のボランティアに対する基本的な考えとして、他人のためになることをする時は、自分のためにもなるべきであると思っている。
 では自分の利益とは何か、前回の記事にも書いていたが「専門1年または大学1年の段階から、プログラミングのアドバイスしたらゲーム会社に入れるレベルまで育て上げる力が自分にはあるのかどうか」を知りたかった。そこにマッチした。

 私にも利がある取り組みとして納得した。

3章ふりかえり

 反省点3:無償だからといって、相手が了承したからといって、初めての試みを、学生相手にやってよかったのかはもっと考えるべきだったと思っています。ここをちゃんと考えずスタートを切ってしまったことは本当に反省しないといけない。
 検討すべき点1:金銭のやり取りを発生すべきだ、という意見もありましたが、そこは検討はすべきですが注意すべき点だとも思っています。お金をもらっても、お金を払っても、続かない時は続かない。と思っています。違いはあるかもしれないですが。

4章:N君への提案

 N君とはあの時研究室で話しただけで、連絡先も名前も聞いていなかった。なので教授に連絡して事情を説明して繋げてもらった。

 そして6月14日彼に提案した。
N君はゲームプログラマ-になりたいと、ただ時間などに悩んでいると相談してくれた。あの後考えて、申し訳ないけど、私がN君にプログラミングをしっかり教えることは現実的にできない。ただ、N君が何を分かっていて何を分かっていないかを教えることはできる。私はN君にプログラミングの課題を出す。N君は課題をこなす。私はN君がプログラミングに関して何を分かっていて何を分かってないかをつど確認する。分かっていないと思ったことは、本やネットや大学を頼って欲しい。どう調べたらいいか、どう質問したらいいかは、教える。座学が必要なレベルになったら、大学の授業の後や研究室に行って教授陣に教えてもらって欲しい。お金を払ってデジタルゲーム学科に通ってるんだから大学を利用できるだけ利用してほしい。それでも分からなかったら経験に基づいて私が教える。私が提案するこのプログラムは、とにかくN君が自主的に動かないと成長しないプログラムである。興味ある?

 彼は了承して始めることになった。

「何がわかっていて何を分かっていないかを教える」
「どう調べたらいいか、どう人に質問したらいいか教える」
 
が私の教えることと設定した。

4章ふりかえり

 反省点4:今回のプログラムは、N君のモチベーションが維持する前提で考えてしまっていました。つまり私はモチベーション管理を一切していませんでした。それはご指摘された中で、私が最も反省すべき点であると思っています。前回の記事で、ダニエル・ピンクの「モチベーション 3.0」という本を紹介してくれた方ありがとうございます。早速購入しました。年末年始読みます。

5章:N君への課題設定

 ここで初めて、彼のことをいろいろ聞いた。

Q1. 何故ゲーム開発の中で、ゲームプログラマーを目指しているのか?
 子供の時Youtubeを見てプログラマーがかっこよく思ってからずっとプログラマーになりたいと思っていた。高校が情報系で、ゲームが好きだったのと合わさってゲームプログラマーになりたいと思った。

Q2.  作りたいゲームがあるのか?
 GTAのようなリアルグラフィックで、もうひとつの現実世界を作るような大型ゲームに関わりたい。

Q3.  普段どんなゲームが好きなのか?
 GTA5、ARKなど

Q4.  高校で情報系って言ったけど、数C、数Ⅲ、物理やってる?
 数C、数Ⅲ、物理はやっていない。

Q5. ベクトル分かる?
 分かっていません。

Q6.  受験勉強どのくらい頑張った?
 AO入試でした。
 
Q7.  職業としてゲームプログラマーを目指してるんだよね?
 はい

Q8. 大学では何の言語触った?
 Unityを使ってちょっとオブジェクト動かしたのと、C言語は基礎を少し。

Q9. 普段、本読んだりする?
 あまり読みません。

Q10.  最初に作ってみたいものある?
 敵が弾を撃ってくるようなものを作ってみたいです。

 まとめると目指しているのは、職業ゲームプログラマーであり、作りたいゲーム的に大型タイトルの家庭用ゲームプログラマーである。

 ひとまず最初の課題として、敵が弾を撃ってくるようなものを作ってみたいとのことだったので、Unityで挑戦してもらった。が、分かっていないことが多すぎた。「何を分かっていて何を分かっていないか」を教えることを私の役割としたが、どうすべきか悩んだ。Unityはプログラミングをいろんなことを分かっていないままそれっぽいものを作れてしまう。最速ならRigidBodyをつけて、OnCollisionEnterなどを書いて、PrefabをInstantiateしたりGameObjecをDestroyをすればできるだろう。Unityの勉強にはなるがプログラミングの勉強になるのか疑問を覚えた。この課題と自分の教えらえることとの乖離が大きかった。

 またベクトル、行列、放物運動などが分かってないということで、元会社の社員を想像した。数学や物理が苦手なゲームプログラマーも確かにいた。システム寄りのプログラマーで活躍されている。まずは、そういう数学物理要素を排除したことから始めた方がいいと思った。

 なので、もう一つ大学で学んでいるC言語を使う課題で、基礎から一つずつ積み上げてもらおうと思った。C#もありかとは思ったが、クラスとかが出てくるので後でもいいだろうと考えた。その話をした彼は、大学でも授業があるし、Excelで関数をいじるのは楽しかったと言っていて問題ありません、とすんなり了承してくれた。
 分からないことも一つ一つはっきりしやすし、大学に教えてもらいやすい。なので基礎的なCUI + C言語を最初の課題にすることにした。
 また、これから技術書や本を読んでもらうことに慣れてもらいたいため、またプログラマーは文章読解能力を高めて欲しいため、好きな本でいいから月に1冊本を読んで欲しいと課題を追加した。

5章ふりかえり

 CUI + C言語に関する振り返りは6章でします。

 反省点5:いろいろ考えて課題をUnityからC言語に変更しましたが、彼の都合というより私の都合で変更してしまいました。彼が自分で設定したUnityの課題をやり遂げてもらうべきだったのでは、その道筋を示すことをもっと検討すべきだったのではもっと慎重にN君と話あって決めるべきだったと反省しています。
 反省点6:月一の読書課題は本当に私の成功体験によるエゴだったと反省しています。やるべきではなかったと反省しています。途中で、この課題は中断してプログラミングに集中してもらいました。

6章:N君に課したCUI+C言語の課題


最初に以下の課題を出した。
・C言語の初心者向けの技術書を読んでほしい。
・C言語でCUI上でうごくじゃんけんゲームを作って

C言語の技術書には以下を付け加えた。
分からない単語とかたくさん出てくるだろう。分からないことを自分で調べたりするのは嬉しいがしなくてもいい。今は、とりあえず分からなかったら止まらず、読み飛ばして構わない。分からないと思ったことを覚えて欲しい。一ヵ月後くらいを目標に

 じゃんけんゲームは一週間ですんなり完成した。
 ソースコードを共有して私に説明してもらった。分かっていないまま使っていることがないかの確認のためだ。特にここでは問題がなかった。

次に以下の課題を出した。
・C言語でCUI上でうごくトランプのブラックジャックを作って

 難しいかもだけど、とりあえず一週間、自分なりに調べてみたり考えたりしてみて欲しい。と伝えた。
 一週間後、何を調べたかを確認して、私はネット上にあるブラックジャックのサンプルコードを紹介した。これをコピペは禁止。見ながらでもいいから自分で書いて動くようにして欲しい。と伝えた。
 数週間後、動いてはいたがバグがあった。彼は原因に気づいてなかったので、問題の箇所付近を一行ずつN君に何をしているか説明してもらいながら自分で間違っている箇所に気づいてもらって修正してもらった。動くようになった。他にも、気になった箇所についてN君に説明してもらって、理解が足りないと感じた箇所について、大学の教授にソースコード見せてこの箇所について教えてもらって欲しいと伝えた。

 このタイミングでC言語入門書に目を通したとのことなので、例えばifやwhileは分かっているが、switchは分かっていなかったりを確認したり、ポインターとかは今は存在を覚えておくだけにしといてなどの話をした。

次に以下の課題を出した。
・C言語でCUI上でうごくトランプのポーカーを作ってほしい。調べればいくらでもサンプルはあるので、見てもいいし、見なくてもいいし。ブラックジャックで使ったソースコードを改造して作ってほしい。

 この後のプロセスはブラックジャックと同じだ。途中報告してもらって、バグに困っていたら問題の箇所付近をN君に説明してもらって気づいてもらう。私が見て気になった箇所をN君自身に説明してもらって理解度を確認する。足りてない箇所は、サイトの紹介や大学に教えてもらって欲しいと伝える。
 できたのは9月頭だった。

次に以下の課題を出した。
 
・作ったポーカーを改造して、存在しない7枚版ポーカーを作ってほしい。オリジナルの役を考えて実装してほしい。

 プログラマーは技術寄りのプログラマーと、面白くしたがるクリエイター寄りのプログラマーに分かれたりする。こういう仕様を考えることへのモチベーションを確認したかった。がその意図を正確に伝えることくを怠っていた。
 この課題は途中経過で、一度上がってきた役に対して、こういう考え方もあると例を出して、もう一度考えてもらうことにした。

 そして10月頭、彼から中断の相談を受けた。

6章ふりかえり
 この課題に対するN君評は7章に書いてます。

 反省点7:意見で頂いてごもっともですと感じたことですが、褒めることが圧倒的に不足していたと思っています。一つ一つの課題が終わった時に褒めること、モチベーションを確認すること、そこを怠っていたのは大きな反省点と思っています。
 反省点8:各課題の意図を正しくN君に全て伝える努力を怠っていました。これは本当に反省すべきだったと思っています。
 反省点9:皆さんが言うように、オリジナルポーカーの課題は早かったのかと考えています。本もそうですが、いろんなことを同時に確認しようとしすぎたのは本当に反省すべき点だったと思います。

 検討すべき点2:CUI+C言語課題について、多くの方にこれがつまらなそう、というご指摘をもらいました。つまらなそうなのは分かります。楽しい課題の方がいいのも分かります。
 ただ勉強について、世の中の資格や受験などで勉強頑張っている人達はそれを楽しんでいるのか、自分が勉強=楽しくあるべきという意識が不足していました。その意識不足は反省点です。
 ただ楽しい課題から入るのは、ゲームをただ作りたい人になら分かります。あくまでも作りたいもののための手段としてプログラミングを考えてる人になら分かります。職業ゲームプログラマーを目指している人に対しても基礎を置いてでも、そうであるべきなのか。
 N君は職業ゲームプログラマーを目指していました。仕事でCUIのツール作ることはあるだろう。自分がやりたいと思っている仕事じゃないプログラミングを任されることもあるだろう。
 ゲーム作りの楽しさが見えたら、その後待っている多くの専門知識の学習を頑張れるのだろうか。私の中の勉強に対する考え方とコメントの意見に乖離を感じた。私は古い人間なのだろうか。私の周囲の現役職業ゲームプログラマーと話したが、私含めてみんなプログラミングそのものを初めから楽しいと感じる人間ばかりでこの課題も楽しいでしょになってしまうのでそのまま結論付けるのは偏りを感じるので良くない。今回の課題が家庭用職業ゲームプログラマーを目指す学生にとって悪かったのか。後でも書くかN君自身は課題に関して問題意識を持っていなかった。
 もしも現役の職業ゲームプログラマーで、最初の課題がCUI+C言語の課題だったら職業ゲームプログラマーになってなかったと思う方がいたり、こういう課題が自分にあってたという意見をお持ちの方がいたら、コメント頂きたいです。
 もちろん学生側に既に得意な言語があったり、ゲーム作っていたりしていたら、それで進めてよかったとは思っています。

7章:N君のモチベーションと決断


 改造トランプの途中で、10月頭、N君から提案を受けた。
課題のプログラミングが義務感になっている、一ヵ月、自分で課題を設定して作りたいものを作りたい
 私は了承した。作ってる途中分からないことがあったら何でも質問してとは伝えた。

 そして一ヵ月後、彼から質問は一度もなくアウトプットもなかった。
 この一ヵ月で実質授業以外でやったプログラミングの時間を確認したら、2、3時間程度だった。

 モチベーションが上がらないと告げられた。
 続けて彼は言った。
この話をもらった時、とても嬉しくて成長できると思った。一日一時間は毎日プログラミングする時間を作ると思った。が、現実はそうならなかった」と。

 モチベーションが低下していった理由って尋ねた。
低下したというより、正直、モチベーションが最初からどれだけあったのか分からなくなっている。『ゲームプログラマーになりたいという気持ち』がそのままモチベーションかと思っていたが、そうではなかった。『ゲームプログラマーになりたいという気持ち』と『それに向かうためのモチベーション』は違うんだと気づいてから義務感と感じるようになった。だから低下したのかはじめからあったのか分からない。でも三宅さんが提示した課題に関しては、C言語は大学でやっていたし、必要なことだとただただ思っていたので、それで低下とかではないと思っている。ただゲームプログラマーになりたい気持ちは今も変わらないが、プログラマーに向いているのかは分からなくなった。大学の講義を受けながら考えていきたい。

 このまま進めるのは申し訳ない気持ちが大きい。
 ということで、終わりにしようという話になった。

 最後に、このプログラムをやったことはN君にとって良かったのか悪かったのか。

自分の分かっていることや分かってないことを教えてもらい、以前より間違いなく自分の現在地点がはっきり分かるようになった。以前はすごくふんわりしていた。そういう意味で、このプログラムをやってくれたことはとても自分にプラスになった。やってもらって良かったと思っている

 私の役割と設定した「分かっていることと分かっていないことは何かを教える」にN君が意味を見出してくれていたので、私にとってもやってよかったと思えた。
 なので、お互いにとってこれが現実的な着地点なのかなと思い、今回のプログラムは終了した。

7章ふりかえり

 反省点10:N君のモチベーションは下がったのか、はじめからあったのか分からないが、少なくともN君のモチベーションを上げることができなかったのは事実であり反省すべき点だと思っています。それは十分考え直さないといけない。N君のモチベーションに対して批判的な意見もそれなりにあったが、彼は何も悪くはない。高校の段階で正確に自分のモチベーションを客観視できる人は多くないだろう。それらを正確に見定めようとせず、このプログラムを開始し、モチベーション管理を怠った自分が反省すべき点です。
 反省点11:結果的には育成ではなく選別になってしまった、私が最初思い描いていた形ではない形になってしまったのも反省点です。
 検討すべき点4:彼は自分の現在地点を以前よりはっきり分かるようになったことをプラスと考えてくれた。ただし時と場合によっては、現在地点をふんわりしたままの方が頑張れることもある。彼がプラスと判断したからといって、誰でもプラスと思ってはいけない。

8章:本プログラムの評価軸

 タイトルに書いた「うまくいかなかった話」

 これはゲームプログラマーに育て上げることがうまくいかなかったと言いたかった。
 ただ、このプログラムそのものが失敗だったかどうかは別軸だと考えている。N君にとって、私が関わらなかった場合、関わった場合、どちらがN君にとってプラスになったのか、これがこのプログラムの評価軸だと考えている。
 そういった意味で、彼はより自分の立ち位置を客観視できるようになったことを彼はプラスに捉えてくれており、なので成功ではないが、失敗でもない、やってよかったと判断していた。

8章ふりかえり

 反省点⑨:やってよかったと判断したが、反省点も多く、また他の人も同じようにプラスと捉えるとは思ってはいけない。

9章:最後に

 ここまで長文にも関わらず読んでいただきありがとうございます。
 N君は現在、自分の方向性を少し修正しつつ前に進んでいます。私は私なりに彼を応援し続けたいと思います。

 今回、N君はたまたま私のプログラムに対してやって良かったと思ってくれたが、万人に良かったと思えるものではなかったと反省しています。多くの方のご意見をもらって、初学者教育、モチベーション管理、課題設定、自分自身が学ばないといけないことが多いと気づきになりました。
 幸い、8人の方から私にメンター等の希望メールを頂きました。どの方々も初学者ではなさそうでしたが、折角な縁でもあるので、現実的な落としどころを作って何かしらできることはないか慎重に検討したいと思います。

 貴重な時間をありがとうございます。もしよろしければまたコメントなり感想、ご意見いただけると嬉しいです。ありがとうございました。

いいなと思ったら応援しよう!