明日から役立つ?プログラマーの考え方講座 その6
「料理でわかる、プログラミング的思考法」

こんにちは。鳥井雪です。
ヒューマンアカデミー こどもプログラミング教室の教材監修をしています。
このコラムでは、現役職業プログラマーとして、実際にプログラマーが毎日どんなことを考えてプログラミングしているかを、わかりやすく紹介していけたらと思っています。前回前々回とデータ構造の話が続いて、ちょっと肩が凝ったかなと思いますので、今日は逆のアプローチでお話してみようかと思います。「料理でわかる、プログラミング的思考法」です。

プログラミング的思考法の要素

プログラミング的思考法、最近よく聞く言葉ですよね。小学校にプログラミング教育を導入する、目的の1つとされています。NHK Eテレのプログラミング番組「テキシコー」では、プログラミング的思考法の要素を次のように挙げています。

では、これを「冷蔵庫の中の材料から夕ご飯をつくる」というミッションに当てはめてみましょう。

1.分解

「夕食を作る」という大きな「やりたいこと」が1つあります。これを「メニューを組み立てる」「必要な材料や器具を揃える」「下ごしらえをする」「実際の調理」「器に盛り付ける」など、それぞれの小さな仕事に分けるのが、分解です。分解することで、作業のみつもりもしやすくなりますし、もし同時にできそうな仕事(スープのためにお湯を沸かしながら材料を切るなど)があれば、同時にすることもできます。

2.組み合わせ

手順や条件、繰り返しなどを組み合わせて目的を達成することです。先ほど「分解」で挙げたスープの並行作業なども組み合わせですね。また、「冷蔵庫に賞味期限の近いひき肉がある(条件)」✕「今日は時間がないから(条件)フライパンで炒める」という組み合わせで「ひき肉とピーマンの炒め物」をメニューに決めるのも、組み合わせになるでしょう。

3.一般化

あることの共通性や関係性を見出すこと、またそれを他のものにも応用する、ということです。煮物はじゃがいもの煮物とかぼちゃの煮物しか作れない、だってそれしか作ったことないから、という人は珍しいと思います。これは、いくつかの煮物のレシピを覚えた上で、「煮物をつくるならだいたいこんな手順」と一般化された情報として頭に入っているからですね。なので、冷蔵庫にあるのがじゃがいもでなくてサツマイモで、そういえば煮たことないなぁと思っても、それっぽい煮物が出来上がってきます。

4.抽象化

ものごとのうち、目的にかなった性質や側面の大事な部分だけを取り出し、余計な部分を切り捨てることです。たとえば、「最近野菜が少なかったから、野菜たっぷりメニューにしよう!」と考えます。そのとき、野菜はトマトかキャベツか、オクラかインゲンか、というような個別の情報は切り捨てて、「野菜」という抽象でつくるメニューを決めたり、評価したりするわけです。これで野菜ごった煮スープができましたね!

5.シミュレーション

料理を作る時、いきなりレシピを頭からやるのではなく、たいてい手順を思い描いて、材料や所要時間は大丈夫か、必要な道具は揃っているか、どれくらいのタイミングでできるか、出来上がりの料理の予想、家族が喜んで食べてくれるか、などの見当をつけてから始めると思います。まさしくシミュレーションですね。

こんな風に考えてみると、「プログラミング的思考法」も少し身近に思えるでしょうか。わたしたちは日常でも、プログラミング的思考法を使っているとも言えますね。毎日の生活で、「あっ、いまの考え方は『シミュレーション』だな」なんて意識してみると、また違った楽しさがあるかもしれません。
もしかしたら効率アップのヒントがあるかも。ぜひ試してみてください。

一覧ページへ戻る