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

抽象化——捨てる勇気

読む目安 約10分・ゴール:目的に必要な情報だけを残し、残りを捨てる「抽象化」の考え方を理解する

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

このトピックの要点

電車の路線図を思い浮かべてください。あの図には、実際の距離も、線路の曲がり具合も、川も山も描かれていません。それなのに——いや、描かれていないからこそ、乗り換えが一瞬で分かります。

これが3つ目の道具、抽象化です。一言でいえば、いまの目的に関係ない情報を捨てることです。

目的が変われば、捨てるものも変わる

同じ「東京」を表すのでも、

どれが正しい地図か、という問いは意味がありません。目的に対して適切かどうかだけが基準です。抽象化は「情報を減らす技術」ではなく、「目的に照らして残すものを選ぶ技術」なのです。

ビット全部描いた地図がいちばん役に立たない、っていうのが面白いところだね。

名前を付けることは抽象化そのもの

「野菜を切る」という言葉には、包丁の握り方も、まな板の位置も入っていません。それでも私たちは通じ合えます。名前を付けた瞬間、中身の細かさを一段隠せるからです。

プログラムでも同じことをします。

つまり良い名前を付けられる人は、抽象化ができている人です。逆に名前が決まらないときは、その部品の役割がまだ1つに定まっていないというサインでもあります。

抽象化には階段がある

もう一つ、抽象化には「高さ」があります。同じ料理でも、

どの段で話すかは、相手と目的で決まります。友達には「夕食作っといて」で通じますが、料理をしたことがない人には低い段の説明が要ります。プログラムを書くときも同じで、上の段から下の段へ降りていくように設計します。上の段だけ見れば全体の流れが分かり、必要なときだけ下を覗く。この構造ができていると、あとから読み返しても迷いません。

捨てすぎの危険

抽象化には失敗もあります。必要な情報まで捨ててしまうと、あとで困ります。

捨てる前に「この目的で、本当にこれは要らないか」と一度だけ問い直す。それが安全策です。

この道具の効き目

分解で細かくし、パターンでまとめ、抽象化で名前を付けて隠す。この3つが揃うと、大きなプログラムでも頭の中に収まるようになります。人間が一度に考えられる数はせいぜい5個か6個。だから隠すのです。抽象化は、人間の記憶力の限界に対する対策だと考えると腑に落ちます。

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

確認問題

確認問題 1

抽象化の説明として、最も適切なものはどれでしょう。

  1. 難しい専門用語で言い換えること
  2. 作業を小さく分けること
  3. いまの目的に関係のない情報を捨て、必要なものだけを残すこと
  4. 情報をできるだけ多く盛り込んで、正確さを高めること
答えを見る

正解:C(いまの目的に関係のない情報を捨て、必要なものだけを残すこと)

路線図が距離も地形も描かないのに役に立つのは、乗り換えという目的に関係ない情報を捨てているからです。全部描いた地図がいちばん読みにくい、というのが抽象化の面白いところ。「作業を小さく分ける」のは分解の説明です。

確認問題 2

電車の路線図に実際の距離や地形が描かれていないことについて、最も適切な説明はどれでしょう。

  1. 情報が足りない不正確な地図なので、本来は距離も描くべきである
  2. 乗り換えを知るという目的に不要な情報を捨てているので、その目的に対しては正しい地図である
  3. 印刷代を安くするために省略しているだけである
  4. 描く技術がないので省略されている
答えを見る

正解:B(乗り換えを知るという目的に不要な情報を捨てているので、その目的に対しては正しい地図である)

抽象化に「正しい/正しくない」は単独では決まりません。目的に対して適切かどうかだけが基準です。実際、徒歩で移動したい人には路線図は役に立たず、道路の形が描かれた地図が必要になります。目的が変われば、捨ててよいものも変わります。

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

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

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

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

ほかのトラック

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

Web版