プログラミングを学ぶと何がいいの? -考える力がつく

子どもにプログラミングを学ばせるのはどういった意味があるのでしょうか?
今回は1つの例を挙げて説明します。

カーナビのプログラムを考えてみよう

カーナビのルート案内の道を決めるプログラムを考えてみましょう。カーナビのプログラムはとっても複雑だと思いますので、簡単な部分だけ取り上げます

  • GPSから現在地を取得する
  • 目的地を入力させる
  • 現在地から最も近い高速道路の入り口を探す
  • 目的地から最も近い高速道路の出口を探す
  • 現在地から高速道路の入り口までの道を決める
  • 高速道路の出口から目的地までの道を決める

こんな流れでプログラムが作れそうです。

ただ、これだけでは不都合が発生します。例えば神奈川県の横浜駅周辺から川崎駅周辺に行く場合を考えます。話の都合で首都高速道路や第三京浜道路は無いことにします。

このルートをプログラムで出させてみると、横浜駅から東名高速道路の横浜町田ICまで行って、東名高速道路に乗って東名川崎IC で降りて川崎駅に向かうというルートになります。

でも、これでいいのでしょうか?

プログラムには予期しない不具合がつきもの

横浜駅から横浜町田IC まではずいぶん距離があります。東名川崎ICから川崎駅までもずいぶん距離があります。しかも横浜町田IC 近辺は道路が混んでいます。東名高速道路など使わずに一般道で川崎駅に向かって進めば横浜町田IC に着くより早く川崎駅に着きそうです。

大回りして、高速料金を払って、着くのが遅いのではルート案内プログラムとしては失格です。実際に私の車のカーナビはこういうバカな案内をすることがあるので私は怒っています。

このプログラムには、目的地までの直線距離が短いときには高速道路を使わないルートも考えるという処理を追加したほうがよさそうです。これはずいぶん極端な例ですが。

想定外が無いかをよく考える

このように、プログラムを作るときには予期しない不具合がないかを考えておく必要があります。プロのIT エンジニアが考えても想定外のケースが見つかることが多々あります。

さまざまな使い方を想像して想定外がないようにしておくのは結構大変だったりします。でもその訓練をしておくことで考える力が養われます。

子どもにプログラミングを学ばせる意義の一つは、想定外のケースがないかを考えることで考える力がつくことだと私は考えています。