🧭 プログラミング的思考
🎯 身近な問題を、抜けのない手順として書き下せるようになる
道具は4つ揃いました。分解・パターン・抽象化・アルゴリズムです。ここでは実際に、日常の問題を機械が実行できる手順に落としてみます。これができれば、あとは文法を覚えるだけという段階に入ります。
例題1: 自動販売機のおつり
1000円を入れて150円の飲み物を買ったとき、850円のおつりを枚数が最も少なくなるように返す手順を考えます。
850円なら、500円が1枚(残り350)、100円が3枚(残り50)、50円が1枚(残り0)。合計5枚です。大きいものから順に取れるだけ取るというこの考え方には、貪欲法という名前が付いています。
例題2: じゃんけんの勝敗
自分と相手の手を受け取り、勝敗を返します。素直に書くと、組み合わせを9通り全部書くことになります。でもパターンを探すと、こう縮みます。
9通りが3通りになりました。先に例外(あいこ)を片づけると、残りが単純になる——これは実務でもよく効く型です。
例題3: 朝の準備を最短にする
ここには新しい観点が入ります。同時にできるかです。
順にやれば12分ですが、「お湯を沸かす」と「パンを焼く」を先に始めて、待つ間に顔を洗えば5分で済みます。プログラムの世界でも、待ち時間の間に別の仕事をする考え方があります(並行処理)。今は「順番の付け方で、かかる時間が変わる」ことだけ知っておいてください。
書けたら、必ず変な入力で試す
手順ができたら、意地の悪い入力を自分で当ててみてください。おつりの例なら「ちょうどの金額を入れた(おつり0円)」「1円足りない」「両替できる硬貨が切れている」。じゃんけんなら「グーとしか書かれていない入力」。普通の入力で動くのは当たり前で、変な入力で壊れないかが品質です。この習慣は、のちのセキュリティの話にまっすぐつながります。
共通する進め方
どの例題でも、やったことは同じです。
この順番は、これから何度も使います。困ったら1に戻ってください。
問題を解くための手順を、誰が読んでも同じ結果になるように整理したもの。料理のレシピのように、順序立った具体的な手続きのことを指す。同じ問題でも、良いアルゴリズムを選ぶことで処理速度が大きく変わることがある。
プログラミング言語の文法にとらわれず、日本語や簡単な記号で手順の流れを書き表したもの。実装に入る前に頭の中を整理するための下書きにあたる。「もし〜ならば」「〜を繰り返す」のように、日本語まじりで書いてかまわない。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。