デザインパターンを学ぶ前に

プログラミング初心者の方は、後でまた来てください。
これは、ゲーム開発を勉強しながら感じたことです。今の自分もそれほど上手いわけではありませんが、プログラミングを始めた頃は欲張りでした。C# の文法や Unity の機能を隅々まで把握しようとしていて、その中には アルゴリズム や デザインパターン も含まれていました。
初心者がデザインパターンを勉強して実際に適用しようとすると、難しいです。難しいだけでなく、 「何なのかはわかったけど、これを一体なぜ使うんだろう?」 という疑問しか生まれません。なぜなら、必要な知識のように見えたから勉強しようとしただけで、実際に不便さや答えに詰まった経験がないからです。
勉強していると、知識を共有してくれる人たちがよく使う言い回しがあります。
「こういうことがしたい場面が出てくると思いますが、そのときにこれを使えばいいんです」
初心者だった自分はこの言葉を何度も目にして、そもそも「そういう場面」がいつ来るのかから疑問でした。同じ疑問を感じたなら、その知識は今すぐ必要なものではない可能性が高いです。
必要な勉強をしましょう。
もしこの記事を読んでいるあなたが初心者なら、聞いてみたいことがあります。ゲーム開発に必要な勉強って何だと思いますか? C#、C++、データ構造、アルゴリズム、デザインパターン、CS、ゲームエンジンでしょうか?これらを全部マスターしないといけないのでしょうか?
単純にキャラクターを動かす機能を作りたいとしましょう。キャラクターの移動を実装するために、数学や物理の法則から始め、どのデータ構造を使うか、どのデザインパターンを使うか、実装したときにCPUやGPU、RAMで何が起きるかを全部勉強しないといけないのでしょうか?
深い理解は、開発において確かに有利です。でも、深い理解があるからといって、面白いゲームが作れるとは限りません。
まず実装してみてください。疑問が生まれたり、深く理解したくなったら、そのときに調べても全然遅くありません。
コードを思いきり書いて、壊してみてください。
デザインパターンは勉強するものではなく、経験するものです。コードを自由に書いて壊してみることが、デザインパターンを最も早く身につける方法です。コードがどんどん汚くなって管理しづらくなると、自然と答えに詰まって不便さを感じるようになります。そのときに自分でコードを整理してみてください。きれいに整理できたなら、あなたはいつの間にかデザインパターンを使っていたかもしれません。
デザインパターンは必ず守らなければならない ルール ではありません。そして誰かが 「これがデザインパターンだ!」 と先に定義して作り出したものでもありません。前の世代の開発者たちがコードを書く中で 「こう書くと管理しやすくて楽だな」 と感じた設計に、デザインパターン という名前をつけて共有したものです。
この話はデザインパターンに限らず、ほとんどの開発知識にも当てはまります。あなたがゲームを作りたい理由は何ですか?おそらく、面白いゲームを作って、その体験を他の人と共有したいからだと思います。

上のYouTube動画は、有名なインディーゲーム Hollow Knight: Silksong のコードレビューです。
この動画を見ると、このゲームのロジックはオブジェクト指向プログラミング OOP の5つの原則である SOLID 原則をまったく守っていないことがわかります。前作の Hollow Knight はコード品質がさらに良くありません。では質問です。Hollow Knight は失敗したゲームでしょうか?
本質
ゲーマーは 「このゲームは面白いか?」 を判断するユーザーです。ゲーマーは私たちが書いたコードを見て美しさを感じ、感嘆したりしません。もちろん、設計や SOLID 原則などの開発知識は重要ですが、完璧な設計や美しいコードに執着しないでほしいと思います。
「ゲームは面白くなければならない」 という本質を忘れないことが大切だと思います。
勉強はいったん置いておいて、コードを壊してみてください。