AIを使った新しい学習法が現れた本を読んだ

ある日、twitterで画像のようなツイートをしたところ、突然、日経BPさんから献本しますので読んでいただけませんかってメールがやってきた。
突然のご連絡で申し訳ございません。
岩崎様のXでのご投稿を拝見しまして、ぜひご紹介したい書籍がありご連絡いたしました。
岩崎様がXで仰っていたような「AIで動くゲームを作るためには、動くゲームを作れる実力が必要で、これがないとそもそもAIに正しく動くコードを作る指示が出来ない」を実際に体感した女子大生の実話になります。
もちろん、こんな面白い話、読む以外ありえないので献本していただいた本が『#100日チャレンジ 毎日連続100本アプリを作ったら人生が変わった』。

これを読んで、LLM(AI)登場以前には不可能だった非伝統的な学習方法が登場し、少なくもそれを使って同じ山に登れることが証明されたと思った&とても面白かったので、この本の内容に触れつつ、そう思った理由を書きたい。
さて。
プログラムの学習をするとき、従来の方法は
- 基本的な環境の構築
- 文法を学習しながら
- 小さなサンプルを書く(Herllo, Worldから始まる)
- 徐々にサンプルを複雑にし、文法学習を進める
- ライブラリなどの知識も増やしていく
と、こんな風に学習していくやり方だった。
この方法は英語だろうがなんだろうが、およそあらゆる「学習」に使える万能にして唯一の方法で、数学から何から、あらゆるものを、僕は、この伝統的な学習方法で学んできた。
この伝統的な学習方法の最大の弱点は、一部の例外を除いて「つまらない」ことだ。学習効果が出てきて、意味を理解できるようになるまでは写経レベルで、ともかくツラい。
要は勉強が面白くなるのに時間がかかる。
それでも自分がこの方法を取ってきた理由は簡単で、漢字の書き取りだろうがプログラムだろうが、小さな、そして退屈な反復練習の繰り返しを積む以外の方法は少なくとも一度も効果を表したことがなかったからだ。
様々な「楽できそうな学習方法」を試して効果がなければ、そりゃあ諦める。
この考え方と全く違う学習方法で、プログラムを学習して、そしてちゃんと実力をつけることに成功した過程を書いたのがこの本だ。
そのやり方は以下。
- ChatGPTにともかく動く小さなコードを要求する(本ではゲーム)。
- 走らせる。
- 動かないと理由をChatGPTに聞く
- 修正して2に戻る
- 2で希望通りの形で走ったら終わり。
ともかくChatGPTに聞いて、無理矢理動くゲームを量産する。わからないところはChatGPTに聞くことで、学習を進める。
まじか! と言いたくなるが、マジでLunaさんは、これで100日で100個ゲームを作るというチャレンジを始めてしまう。
そして最初はワケがわからないままコードを作り始める。ところが「本当に何もわかってない」ので、実現できないことが次から次へと出てくる。
そこで彼女は、あらゆることをChatGPTに聞いて解決していく。
例を挙げると、Pythonを使っているのだけど、ゲームには使えないぐらいグラフィックが遅い→Pygameを教えられ、なんとかなる。
当たり判定が必要になりボックスの当たり判定を知る(ちなみにこれ、判定方法で速度が違うのだけど、そこまで教えてくれたのだろうか?)。
こんな風に具体的に動かすための質問(もちろん命令語句のレベルから聞いている)と修正、しかも動けばいいやレベルから話は始まる。
ところが数を作っていけば、毎日ソースを見ているわけだから、人間、だんだんわかるところが出てくる。さらにChatGPTが言った事に食いついて「クラスってなに?」とか聞いていくことで、プログラムへの理解が進んでいく。プログラムがだんだんわかるようになっていくのだ。
そして24日目にはクラスを使ってゲームを作るところに進み、さらにターン制のゲームからステートマシンの制御に進んでいく(ここでちょうど1か月)。
「え? なんでステートマシン?」と伝統的な学習プロセスを踏んでいる人なら思うだろう。
実は、ここに至るまで単純なアクションゲームかそれともシミュレーションして画面で動かすような物しか作っておらず、しかも長いメソッドで一気に書く方法でやっているので、ターン制御をどうすればいいのかとかわからないのだ。
常識的な学習過程だったら、絶対にステート制御をそれより前に教えられているわけで、ありえない流れで驚いてしまう。
ステートマシンでゲームの状態制御をするのはゲームの定石なので、20個以上もゲームを作ってきて、それを知らないこと自体が驚きだ。非伝統的な学習方法のビックリするところと言えるだろう
そして、1か月を過ぎたあたりで、スプライトをClassとして使えるようになり、ステートマシンとして管理したコードを書けるようになったあたりから、Lunaさんの考え方自体が変わり始める。
ChatGPTは強力だが、自分が知っている以上のことはできない。なぜならChatGPTに適切に質問したり指示したりできなければ、出てくる回答は、それに合わせた曖昧でいい加減なものになるから。
全くその通りなのだけどChatGPTを使って勉強するだけで、ここにたどり着くのだから驚きだ。
そして、効率を考えるようになり、40日ぐらいで、コードを再利用するようになり(汎用ボタンクラスを作ろうと四苦八苦するのは苦笑した)、クラス図が書けるようになり、さらにキー入力イベントからハード→OS→Pygameという流れを理解する。
ここらへんは思わず笑ってしまったところで、僕の世代の人間にとってはキーマトリックスからキーコードを読み取るハードにベタづきの原始的なコードを書くのが当たり前で、ハードからOSを介してPygameにイベントがやってくるんだ、みたいな説明を読むと「遠くにきたもんだ」と思ってしまう。
さらに60日を過ぎると、デザインパターンを理解する。このころになるとChatGPTは基本的にはLunaさんが使う部品を手早く出力するための道具になっていて、もはや部下のような扱いだ(要求仕様を書いて、出てきたものをクラスに組み込むような使い方が増えている)。
そして最後には、こう書く。
また、プログラムの規模が大きくなるについて、全体を最適化できるのは私しかいない、という意識も強くなった。Chat-GPTは、細かな単位で明確に指示することで、より適切な回答をくれる。しかし、それはあくまでその指示への回答であり、プログラム全体を考慮したものではないし、再利用や拡張を前提にしたものでもない。デザインパターンのような構造化手法を私が取り入れないと、局所最適されたコードの組み合わせからは抜け出せない。
「ChatGPTは最短の解決策を教えてくれるかもしれないけれど、それが全体を見通した最適解かどうかは私しか判断できない」
当たり前のことだけど、作品作りの主体は私なのだ。
Lunaさんは、疑いもなく100日で、ChatGPTを使うことでプログラムを学習し、ソフトウェアエンジニアとしてプログラムを書けるようになったのだ。
これは、疑いもなく、僕が知っている伝統的な学習方法ではない。でもちゃんと同じ山に登れている。だから、新しい学習方法が登場した、と書いたわけだ。
ただ、この学習方法の効率がいいか悪いかは実はわからない。
なぜなら、この本の中でLunaさんは、そもそも経済学部の学生としてある程度の教養がある状態で、平均10時間程度を1個のプロジェクトに投入している。
10×100=1000。
学習時間として1000時間。大学の授業を90分をベースとして考えて、約100日ちょっと、667コマ分ぐらいを投入していることになる。
そして大学の1年の授業は大雑把に600コマ程度なので、Lunaさんは約1年分の1日4コマの全授業分を3カ月で投入したことになり「そりゃあ伸びるでしょう」ということになる。
加えて、Lunaさんは大学生で、ChatGPT以上に適切なアドバイスをくれる大学の先生という、いわば知の塊が近くにいて、このプロジェクトを面白がってアドバイスしてくれている。
そういう意味でも、この学習方法の効率がどれぐらいのものかはわからない。
ただ、今までの学習方法にはない非伝統的な学習方法がLLMによって登場した、言い換えると、伝統的なもの以外にもう一個、すくなくとも考慮する価値がある、効果があるのは明快な学習方法が登場したのは、とても重要なことだと思うのだ。


以下、余談。
Lunaさんの成功の理由の一つは、小さい完成品を大量に作る方法をとったことだったのは間違いない。
なんせ小さな完成品を大量に作るというのは、学習をするうえで極めて効率的だ。
しかも、それをするときChatGPTという絶対にイヤにならず24時間いつでも返事してくれる相手がいるのだから、うまくいく確率も上がるというものだ。
ところで『失敗の科学』という本で出てくるが「たくさん出すこと」は、1作のカッコイイ作品を作ろうとするより質が良くなるという研究があり、その点でもLunaさんが取った作戦は正しかったわけである。
さらに余談だが、この『失敗の科学』という本はひっくり返るほど面白いので、オススメしておきたい。またこの本の双子と言ってもいい『多様性の科学』もメチャクチャ面白いので2冊ともオススメしておきたい。



