自分の考えをコードに置き換えるためには自分が想像したこと、考えたことをプログラミングすればよいのですが、そこが最も難しいところでプログラミングは勉強したもののその先に進むことができないという話を聞いたことがあります。
まずは何をしたいかを明確にすること。問題を細分化していきます。例えばホットケーキを食べたいと考えたとします。そのためにホットケーキ調理プロジェクトを立ち上げます。
ホットケーキ調理プロジェクト
かなり適当なのであんまり真に受けないでね😅
ホットケーキを作って食べるためには何が必要でしょうか?
- ホットケーキミックス1袋
- ミルク200cc
- 卵1こ
って、これでは材料しかそろってないんですね。これだけではホットケーキはできないことがわかります。
あと何が必要かなって考えると、こんなのもありますね。
- 油
- ボール
- 泡立て器
- フライパン
- オタマ
- フライ返し
- お皿
- フォーク
- バター
- メープルシロップ
この一つ一つはホットケーキを作るために必要なおのオブジェクトになります。
これよりホットケーキプロジェクトのためのホットケーキ調理システムを構築します(w
材料混ぜ合わせシステム
- ボール
- 泡立て器
- ホットケーキミックス
- ミルク
- 卵
ホットケーキ焼き上げシステム
- 混ぜ合わせた材料
- フライパン
- オタマ
- フライ返し
- 油
ホットケーキ実食システム
- お皿
- フォーク
- バター
- メープルシロップ
と、ここでお片付けシステムがないことに気が付きます。
お片付けシステム
- スポンジ
- 洗剤
- ふきん
役者がそろったところでプロジェクトは完成し、ホットケーキの調理から片付けまできれいに整うわけですね。
オブジェクトをまとめシステムを明確にしていかないと、プロジェクトは完了しないというわけです。
システムの組み合わせから大雑把に考えて細分化する
ホットケーキミックスの箱に大概は材料などは書いてあるので、上のような考え方は成立するわけですが、説明書が一切ないケースもあります。しかし、問題を解決するためのシステムが構築できればプロジェクトは達成できると考えられます。
ある程度できたら、そこに必要なものを後付けして考えても構いません。
結局のところホットケーキの作り方を知らなくても、作って食べればいいわけですから、おっざっぱにシステムを掲げて細かく細分化していくという考え方もできます。
この場合はホットケーキの作り方さえわかればできるわけですから、最初に調査を行います。
あとはシステムを考えて、システムを実現するためのオブジェクトを検討していけばホットケーキは無事に作れるということになります。
- 調査
- 調理システム・・・材料混ぜ合わせシステム、ホットケーキ焼き上げシステム
- 実食システム・・・ホットケーキ実食システム
- お片付けシステム
どんな方法を取ってシステムを作っていくかは臨機応変に考えなければなりませんが、変わらないことは「システムとはオブジェクトの集まりである」ということです。
何かをなすためにはシステムとオブジェクトの関係は密接であり、システムを構築するためのオブジェクトととして何が必要かを見極めていく必要があります。
それはシステムを構築しながらでも構わないので、PDCAサイクルやトライアンドエラーを繰り返してシステムを練り上げていくことが大切です。
ホットケーキ調理システムを改良する
プログラムのアレンジとか改良のポイントってシステムを見返すと案外簡単に見つかったりすることがあります。ホットケーキ調理システムのフライパンの部分をタコ焼き機にすると、なんだか楽しいまんまるのホットケーキが焼けます。
ホットケーキ焼き上げシステム改
- 混ぜ合わせた材料
- タコ焼き機
- オタマ
- フライ返し
- 油
材料混ぜ合わせシステムにジャムやフレーバーを加えると、また一風変わった味を楽しむことができます。実は最初のフライパンの上の写真にはブルーベリージャムが混ざっています。若干色が悪いのはそのせいです。たしか、あのホットケーキは最後にレモン汁をかけて色の変化を確認するための実験だったと思います。
こんな風にできるところから問題を解決していけば、プログラミングでもそうですが実生活でもできないことができるようになってしまうこともありますので、困ったときは問題を細分化してオブジェクトに当たるものは何か考えてみましょう!