ガチでプログラムで飯食っていきたい、ゲームエンジンデザインしたいって言うなら
次の本は読んどけ、一線級のプログラマが何を考えているのかを知っておけ
ゲームエンジン・アーキテクチャ 第2版 ジェイソン・グレゴリー
本当に重要なのはどのようにライブラリ、パッケージを分割するかだ、つまりアーキテクチャだ
関数の分割もできないやつはアーキテクチャを作れない
次に意味論だ、アルゴリズムやデータ構造をよく知っとけ、使いこなせ
ここらへんは、言語によって呼ばれ方は様々だが
1.単方向リスト、 2.ベクタ、 3.セット(集合)、 4.連想配列(辞書、ディクショナリ、ハッシュ、マップ)
この4つだけは最低抑えとけ、C++で戦っていく気ならSTLだかboostだかに入っているであろうこれらのデータ構造を探しとけ
もっと言えば5.2分平衡木ぐらいはしっとけ
ガチで3Dのゲームエンジンをデザインするなら木構造は必須だ

これらをしっかり理解しとけばじゃんけんプログラムの実装においても
ほとんど設計で悩むことはない
事実俺はじゃんけんのルールをただ記述しただけだ
3つの手がでればあいこ1つの手がでればあいこ、
2つの手が出たならばグーとちょきはグーが勝ち、ちょきとパーは・・・(ここは表(テーブルともいう)で処理した)
華やかさのために人の名前も入れたけど、本当はいらないし省ける
ただじゃんけんのルールを記述するだけでよくなる
たかがじゃんけんのルールを記述するのに設計がどうだの議論は不要だろ?
(もちろんじゃんけんのルールを深掘りすれば使える不変量みたいなものは見つかるかもしれないが)