2012年に、ある経緯で「Androidアプリケーション開発講座」を担当したことがある。7人の初心者が受講し、1人がAndroid開発の職に就いた。その経験からすると、この方法は教える側と学ぶ側双方にとって辛いだろうと思うとともに、おそらく10人に1人くらいはうまくいくだろうとも思った。
私のやった講座は前々任者が倒れたのを引き継いだ前任者から引き継いだもので、まずJavaの基本を学んだ後にO'reilly"Learning Android"でTwitterライクなアプリを作ることで一通りのAndroidのAPIを触る。その上で独自のプロジェクトを考えてプレゼンするというものだった。前任者が立てたカリキュラムで、Ph.D.を持っている人物なのでレベルは高めだった。国とかあれこれとかがあるので途中変更はできなかった。そもそも職業訓練なのに教科書が英語である。なので基本的にわからんわからんとなるのだが、7人なのでわからないところを徹底的に聞いて言語化し、アドバイスすることでなんとなくわかってもらい、全員がTwitterライクなアプリをコピペで作ることができた。その後の独自プロジェクトはポシャったのでアイデアプレゼンと、「作るとしたらどんな感じのプログラムの構造にする?」で終わらせた。
さて、1人が就職できた理由は割と明らかだった。基本的にもうコピペで作るしかない状況だったので、逆に言えば要領よくやれば時間が余る。そこで、1人だけが「ここを変えたらどうなるだろう?」と試して動かなくなって私に質問をしてきた。「ここはこういう理由で」と説明したらわかってくれた。そこで感じた。彼は大丈夫だ。そして就職までしてくれたのは、おそらく私の力ではない。
この経験からすると、元記事の
私が提案する育成プログラムは、とにかく君が自主的に動かないと成長しないプログラムである。
は、正しいが動く気に関わらず相当数を振り落とす。正直あと何人かやったら弟子ができるのではないか。
ちなみに、私は女性に3回お付き合いを断られた後に飲み屋で「君は10人にアプローチしたら3人と付き合える。もっとトライしろ」と言われたが、その後合計10人にアプローチしてお付き合いを断られて恋愛から降りた。
まあただ、当事者からしたら取り戻せないが、元記事の事例もうちょっとうまくできたんじゃないかなーと思う部分がある。
はっきり言って、開始時点でスキル0で、2-3ヶ月程度でロジックが破綻していないちゃんと動くポーカーを作れるのは、実力があると言っていい。自信持っていい。私はソフトウェアを本業として12年経った今、自分のプログラミング能力に自信をなくしつつある。しかし、君は、自信を持っていい。無責任だろう。無責任だなあ…
その上で
・作ったポーカーを改造して、存在しない7枚版ポーカーを作ってほしい。オリジナルの役を考えて実装してほしい。(彼の創造力を確認したかった)
ちょっとこれ致命的じゃミスじゃないかなあと思う。というのも、意図はわかるのだが、「ゲームの構想力」と「自力でプログラミングの課題を作り、実装する」という2つを同時に課しているからだ。
私ならゲームプログラマーじゃないのでアホ寄りの発想で、まずファイブカードとシックスカードを追加する(追記:本当にアホじゃねえか!だが開き直る!アイデアの試行錯誤こそが成長を生む!あえてやるなら、もう1枚引いてその数字を全部ジョーカーにするドラ的発想とか?balatroってこんな感じでできたのかな…)。フルハウスがinconsistentになるので4-3にする。ストレートとフラッシュも拡張するが、役の完成が難しくなるのでゲーム的には投機性が高くなりそう。あとスリーペアも可能か。
これらを初心者が思いつけるかどうかはわからない。ある程度確実にする方法としては、「ポーカーを遊びまくる」があるだろう。まあただ「よくわからんから全部ロイヤルストレートフラッシュにする」でも俺は許す。役が増えると実装が面倒くさそうなので全部加算してブラックジャックみたいにしてもいい。しかし教育的にはよくないと思うので、そこは多分ちゃんとケアしてあげた方がいいと思う。
さて、そこからの問題は、「答えがある課題の中でスリーカードを実装する」ことと、「自分が設定した答えがない課題の中でシックスファイブカードを実装する」ことの間には、少なくとも初心者には大きな隔たりがあるということだ。破綻なくスリーカードとフォーカードを作れたのなら本質的には難しくはない。しかし、俺が…ここ3ヶ月そうだったのだが…ゴールと実装可能性が曖昧な状況は…予想以上に…精神に…これ以上考えるのはやめよう。初心者にとってはもっと不安だ。
この状況に対応する方法は大きく分けて2種類ある。試行錯誤しながら、学びながら実装を完成させるか、課題設定を変えるかだ。そして、この2つのどちらにするかという判断が常に入る。そこで初心者に足りないのが、自分の能力に対する認識だ。それがないと、「自分は〜ができて〜ができないから〜という判断をする」ができない。結果、手が止まる。最終的に乗り越えるべき壁だが、かなり最終に近い。
なので、課題が一気に2つ増えた上にその2つの交叉から「自分の能力を認識する」という3つ目の課題ができたことになったと考えられる。これは難しいし、教えるのも難しい。弟子の「一ヵ月、自分で課題を設定して作りたいものを作りたい」という思いはわかる。しかし、それもまた同じ問題に直面することになるのだ。モチベーションを失っていたこと、自信を完全になくしたのは事実だろう。
多分いきなりそこにいく前にもっといろいろ経験をして、プログラミングというもの、ゲームというものをもっと理解すべきだったのだろう。そこで自分で少し拡張し始めたらコントロールの幅が広がるので一つの転機だが、できるかどうかはわからない。それ以上の解決策を私は思いつかない。
あと、最も重要なのは、自分を追い詰めないような環境を作って維持してあげることだ。教育は、精神論に頼るべきではない。
そうですね。結論はまとまりませんし、誰でも(ゲーム)プログラマーになれるパスはありませんが、いずれにせよ、元記事の方も弟子の方もお疲れ様でした。