トラック2・🧭プログラミング的思考

パターンを見つける(Pattern Recognition)

読む目安 約10分・ゴール:分解した作業の中から共通点・繰り返しを見つけ出せるようになる

アプリでこのトピックを学ぶ(無料・登録不要)

このトピックの要点

分解して部品を並べると、次に見えてくるものがあります。似ているものです。この「似ている」を見つける力が、2つ目の道具パターン認識です。

カレーとシチューは8割同じ

作り方を並べてみましょう。

最後以外は同じです。ということは、共通部分を「野菜の下ごしらえ」という1つの手順としてまとめ、最後だけ差し替えれば両方作れます。プログラムでいえば、共通部分を関数にして、違う部分だけ引数で渡す、という発想そのものです。

同じことを何度もしているなら、それは繰り返し

もう一つのパターンは「回数」です。

これらは「材料の数だけ切る」「5日ぶん繰り返す」と言い換えられます。同じ形の作業が並んでいたら、繰り返しにまとめられるというサインです。プログラムではループになります。

ビットコピペを3回した瞬間に「あれ?」と思えたら、それがパターン認識だよ。

なぜ見つけると得なのか

パターンをまとめると、良いことが3つあります。

  1. 書く量が減る — 100人分の処理も、1人分+繰り返しで書ける
  2. 直す場所が1か所で済む — 5か所にコピーしていたら5か所直すことになる
  3. 意図が読みやすくなる — 「同じことを繰り返している」と一目で分かる

逆に、パターンを見逃したまま似たコードを並べると、必ずどこかで直し忘れが起きます。これは初心者だけの話ではなく、現場のバグの定番でもあります。

見つけるコツ

パターンは、探そうと思って眺めても案外見つかりません。次の3つのサインを合図にすると見つけやすくなります。

ビット「あ、さっきと同じだ」と思ったら、そこで一度止まるのがコツだよ。

まとめすぎにも注意

ただし「似ている」と「同じ」は違います。たまたま今は似ているだけのものを無理にまとめると、あとで片方だけ仕様が変わったときに、かえって複雑になります。目安は、変わる理由が同じかどうか。カレーとシチューは「煮込み料理」という同じ理由で変わるので、まとめて良い仲間です。

分解で部品に分け、パターンで似た部品をまとめる。この2つはセットで使う道具だと覚えてください。分解しただけでは部品が散らかったままで、まとめて初めて全体の形が見えてきます。そしてパターンを見つける力は、経験がそのまま効く分野でもあります。たくさん見た人ほど、速く気づけます。

アプリでこのトピックを学ぶ(無料・登録不要)

確認問題

確認問題 1

次のうち、パターン認識が働いている例はどれでしょう。

  1. 月曜から金曜までの弁当作りを見て、「1日ぶんの手順を5回繰り返せばよい」と気づく
  2. 路線図から地形や距離の情報を省く
  3. 「夕食を作る」を「切る」「炒める」「煮る」に分ける
  4. その手順が必ず終わるかどうかを確認する
答えを見る

正解:A(月曜から金曜までの弁当作りを見て、「1日ぶんの手順を5回繰り返せばよい」と気づく)

同じ形の作業が並んでいることに気づき、繰り返しとしてまとめられるのがパターン認識です。「路線図から情報を省く」のは抽象化、「夕食を作るを3つに分ける」のは分解、「必ず終わるかを確認する」はアルゴリズムの条件の確認にあたります。

確認問題 2

カレーとシチューの作り方を比べたところ、最後の1手順以外はまったく同じでした。この気づきの活かし方として、最も適切なものはどれでしょう。

  1. わざと手順の順番を変えて、2つの違いを増やす
  2. 共通の手順を1つにまとめ、違う部分だけを差し替えられるようにする
  3. カレー用とシチュー用の手順書を、それぞれ最初から別に書く
  4. 似ているので、どちらか一方だけ作れるようにする
答えを見る

正解:B(共通の手順を1つにまとめ、違う部分だけを差し替えられるようにする)

共通部分を1つにまとめ、変わる部分だけ差し替える——これはのちのC言語で「関数」と「引数」になる発想そのものです。別々に書くと、直したいときに2か所とも直す必要があり、必ずどこかで直し忘れが起きます。

「プログラミング的思考」の目次

  1. 問題を分解する(Decomposition)
  2. パターンを見つける(Pattern Recognition)
  3. 抽象化——捨てる勇気
  4. アルゴリズム——手順を組み立てる
  5. 擬似コードで書いてみる
  6. フローチャート入門
  7. 日常の問題をアルゴリズム化する
  8. 良い手順・悪い手順——効率の予感

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版の販売ページは準備中です。

ほかのトラック

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版