ゲームプログラマー志望の大学一年生を弟子にとってみたけど、うまくいかなかった話
本記事は、学生本人から許可を頂いて書いています。
はじまり
こんにちはTECOPARK株式会社代表の三宅と言います。会社の代表作はPICO PARKという協力アクションパズルゲームです。今はゲームデザイン業務がメインですが、職業ゲームプログラマー歴が13年、メインプログラマー経験があります。
さて、事の始まりはそんな私がゲーム会社でゲームプログラマーをやってた時代にさかのぼります。私は当時、ゲームプログラマー志望の就活生のプログラムコードを見る機会がありました。ちゃんと設計されているコードを持ってくる学生ももちろんいるが、今のこのタイミングでこのレベルのものを持ってくるとなると厳しい就活になりそうだなと思う子もいました。就活のタイミングではなくもっと早いタイミングで見る機会があればいくらでもアドバイスできたのにな。そう思うこともありました。
その時、思ったのである。
「専門1年または大学1年の段階から、プログラミングのアドバイスしたらゲーム会社に入れるレベルまで育て上げる力が自分にはあるのかどうか」
起業した今、試したくなったのである。
今年6月、ゲームプログラマー志望の学生と話をする機会があった。その中にいた大学1年の一人に興味を持った。
まず話の受け答えがしっかりしていて好感が持てた。
そしてゲームプログラマーになりたいと、将来的には起業もしたいと、熱意を感じた。
ただ悩みがあると。プログラミングは大学に入って授業で学び始めたばかり。ただ諸般の事情でバイトを結構しないと生活が厳しく、授業以外の時間でプログラミングする時間がなかなか取れない。授業だけで十分成長できるとは考えておらず、悩んでいると。
私もプログラミングは大学から入って学び出したので遅いとは思わない。やる気があって問題が時間の確保が悩みなら、自分が限られた時間で効果的にアドバイスができれば十分成長させることができるのでは。
ということで私から本人に「君が効果的に成長できるような育成プログラム」を提案した。「自分の育成能力を確認することが目的なので、お金はいらない」ということも。
彼も快諾して、彼の育成プログラムが始まった。
開始した育成プログラム
具体的には以下を彼に提案した。
座学はしない。基本的に君のスキルレベルを見てプログラミングの課題を出す。週1で進捗を確認するので、私はその時点のものをコードレビューする。プログラミングそのものの知識は大学の授業、教授、本、ネットなどから学んでほしい。その学んでる途中やプログラミング中に疑問に思ったことはLINEなりでいつでも質問して欲しい。ただ、本やネットを調べれば分かるような質問は回答しない。代わりに調べ方を教える。そうじゃない質問は経験に基づいて回答する。私が提案する育成プログラムは、とにかく君が自主的に動かないと成長しないプログラムである。
月に一冊小説でも技術書でも活字であれば何でもいい、とにかく活字の本を月1で読んで欲しい。ページ数は君が読めるペースを考えて選んで欲しい。そして、その感想を私に説明して欲しい。プログラマーは文章を読むことが多い、そして書くことも必要。文章読解能力を高めて欲しい。
彼は了承して始まった。
始まったのは2024年6月である。
そしてこのプログラムは2024年11月に終了を迎えた。
うまくいかなかった。
うまくいかなかった育成プログラム
なにがあったのか書いてみる。
開始時点で彼のプログラミングスキルを確認したが、彼には申し訳ないがほぼ0だと判断した。
なので基礎から学ばせようとした。最初の課題は以下だ。
・C言語の初心者向けの技術書を読んでほしい。
・C言語でCUI上でうごくじゃんけんゲームを作って
この課題はクリアして次の課題は以下にした。
・C言語でCUI上でうごくトランプのブラックジャックを作って
少し時間はかかったがコードレビューしながら完成した。
次に以下の課題を出した。
・C言語でCUI上でうごくトランプのポーカーを作って
このあたりからアウトプットのペースが落ちてきた。
本も最初の二カ月あたりは読めたが、三ヵ月目から続かなくなっていた。
さらに時間はかかったがコードレビューしながら完成した。次の課題を出した。
・作ったポーカーを改造して、存在しない7枚版ポーカーを作ってほしい。オリジナルの役を考えて実装してほしい。(彼の創造力を確認したかった)
結局、これが途中まで進んだが完成しなかった。作成途中のオリジナル役に対して、既存役の延長じゃなく、もう少し工夫のある存在しない役を考えて欲しいと私が例を出しながら注文した。
そしてこの途中、この課題は中止となった。彼から提案があったからだ。
「課題のプログラミングが義務感になっている、一ヵ月、自分で課題を設定して作りたいものを作りたい」
私は了承した。作ってる途中分からないことがあったら何でも質問してとは伝えた。
そして一ヵ月後、彼から質問は一度もなくアウトプットもなかった。
この一ヵ月で実質授業以外でやったプログラミングの時間を確認したら、2、3時間程度だった。
モチベーションが上がらないと告げられた。
続けて彼は言った。この話をもらった時、とても嬉しくて成長できると思った。一日一時間は毎日プログラミングする時間を作ると思った。が、現実はそうならなかった。と。
ゲームプログラマーになりたい気持ちは今も変わらないが、プログラマーに向いているのかは分からなくなった。大学の講義を受けながら考えていきたい。
このまま進めるのは申し訳ない気持ちが大きい。
ということで、終わりにしようという話になった。
「思っていた自分とのギャップを感じた。それを自覚できたことはとてもよかった」
と言ってくれたので、全くの無駄にはならなかったのかなとは思っている。が、結果としては残念である。
ふりかえり
予定ではCUI上でのゲーム作りから、グラフィックありのゲーム作りにシフトしていきたかったが、そこまでいけなかった。
最終的にモチベーションの話になったが、最初話した時、とてもやる気を感じたので、課題や締め切りを出せばそれを意識して動くことを期待した。が、そうはならなかった。
物事を好きになり、モチベーション高く動けるようになるには時間がかかる場合がある。私も勉強で好きな科目が初めから好きだったわけじゃなく、ある程度分かるようになってから好きになって打ち込めた科目もある。彼が今後、プログラミングを好きになってモチベーションが上がることを期待したい。
今回の私の育成プログラムは、モチベーションを保って自主的に動いてもらうことを前提とした。座学をやりだすとそんな時間は私が作れない。だが、質問に回答やコードレビューはできると思って、それで成長できるのでは考えた。
自分が学生時代、自分なりに調べても分からない時、プロに質問できたら答えをもってるんだろうなって何度も思ったし、コードレビューしてもらえたら課題点に効率的に気づけるのになって思っていたからだ。
もしまたやるなら、やはり時間的に座学をやることはできない。自主的に動ける子の後押しが自分のできる範囲だと思っているので、ある程度プログラミングをやっていて、自分で動けることを事前に確認済みであることが必要だったのかなーとかは思っている。
今後について
また新しい学生にこの育成プログラムを試してみようと思っていたが、ちょっと私がやりたいことが増えてきて難しくなってきた。
ただ、プログラミングが好きでゲームプログラミングある程度していて、月1ペースでも質問やコードレビューをしてくれる人がいるととても助かる、絶対ゲームプログラマーになりたいと強く思っている人がいれば以下に連絡ください。一名だけ相談に乗るかも。
contact@tecopark.com
追記(何故C言語にしたのか)
多くのコメントありがとうございます。読ませてもらっています。
今の時代C言語はチョイスしないというコメントをいただき、何故、最初の課題でC言語を選んだのかだけ説明します。
別に手続き型プログラミングでのゲーム設計を教えたかったわけではありません。
一番最初、Unityで教えようと思いました。
ただ彼にUnityを触らせた結果、座学なりサンプルを用意してあげないと無理だと判断しました。座学は初めからしないと決めてたしサンプル作り出したら俺の本業の時間がやばくなると判断して、現実的な落とし所としてCUIでのゲーム制作を課題にしようと決めました。もちろん、それで楽しいと思ってもらえるかという懸念はありましたが。
C#も考えましたがclassとか今はまだ必要ない言葉がソースファイルに出てくるのが気になり、今はとにかく動けばいいを最優先して、大学でC言語でコンパイルはしたと言ったのでC言語を選びました。
オブジェクト指向なり設計の話になったら言語は変えようと思っていましたが、そこまで行きませんでした。
なお個人的な感想ですがUnityというエンジンは、オブジェクト指向を初心者に教えるのには向いてないと思っています。理由はシンプル、オブジェクト指向でのis-a 関係とhas-a関係を区別せずにUnityでオブジェクト指向を学ぼうとする行為は混乱を招き危険と思っているからです。
よって、C言語からC#、UnityとC++を併用して課題を出していけたらいいなと思っていました。
追記2 (皆さんの感想を見て)
いろんな視点からのご意見ありがとうございます。
以下に詳細と反省をまとめました。こちらは長文ですが、興味があれば目を通してみてください。
https://note.com/tecopark/n/n1bcb65902e9e
お読みいただきありがとうございました。