2009年06月27日

プログラムを作成するときに発揮する論理(ロジカル)力について(3)

3. スタート地点とゴールまでの通過ポイントの通り方は最適か?

よく人に説明する場合、ある程度手順ではありませんが、話のつながりを持たせて話さないと、「あれ?今の関係していたの?」や「それは関係ないんじゃないの?」と言われてしまうことが多いと思います。
実際には関係しているつもりでも、やっぱりそれは暗黙のうちに相手も分かったつもりで話しているということもあると思います。その場合には1での暗黙のうちに手順を飛ばしてしまうケースが生じているためと言えます。

同様に、人に説明しているとだんだん説明の内容が矛盾してきてしまったり、話が前後してしまうことはありませんか?
それは前の話の内容と、後の話の内容が明確でないケースでも発生しますが、話す順番が良くないために、自分で混乱してきてしまい、当初思っていた想定とは違うことになっていることは、結構起こりやすいと思います。

これがプログラムを作るときに起きた場合どうなると思いますか?
良いケースではプログラムが思った通りの結果を出さないことになります。つまり、当初こういう結果を出そうと思っていたのに、気づいたら途中からおかしな計算をしていた等のケースです。話が前後した場合での分かりやすい例で言えば、 3 + 4 × 2 を計算する場合、通常であれば順序は4 × 2を最初に計算しないといけませんが、気づいたら3 + 4を先にやってしまっていたということに近いと思います。

悪いケースでは、プログラムが暴走、つまりプログラムが終わらないケースが発生します。
このようなケースは途中から論理が少しずれてしまっている場合が多いと思います。少し宜しくない例えですが、「お金が欲しい」→「お金がないからATMからお金をおろしたい」→「お金をATMからおろしたいけれど、口座がない」→「口座を作るには、最低1000円はお金が必要だ」→「お金が1円も無いから口座が作れない」→「お金が欲しい」と言う様に、最初に戻ってしまうケースです。
これは、ぱっとみ論理的にはおかしくないようにも見えますが、現実的には変だと思いませんか?
お金がなければATMからおろしたいというのは、この話の前提に口座を持っていて、そこにお金がなければならないのに、その前提にふれず、かつそれがあたかも前提としてあるようにATMからおろすに話を持っていっています。
これはまず、「お金が欲しい」→「お金はどうしたら手に入るか、1) 口座を持っているか? 2) 働くか?」などのように、その前提条件をチェックする等の手順が必要になりますし、その手順がちゃんと途中に存在する必要があったりします。

話を論理的にする、プログラムを動作するように作るには、1での話にあった暗黙の手順を明確にしたり、2での話にあったスタート・ゴールの明確化のほかに、スタート・ゴールまでの手順をどのようにつなげるかがとても重要です。
これが正しく出来なければ、話がだんだんずれていって、ゴールからかけ離れたりして、相手に伝わらなくなります。


話は分かりますが、実際にはこんなことを考える機会はなかなか無いように思います。
そういう場合では、私は例えば、買い物をするときにどういう順番、経路で行けば最も効率的で速いかを考えて出かけるというのが分かりやすいと思います。

例えば、今はすでに図書館等にいます。これから家まで買い物したり、銀行へ行ったりしたいとします。

現在の所持金、3000円。途中で買い物等のため、立ち寄りたいと考えています。
A) 図書館 : スタート地点
B) 薬局 : 1000円の買い物。購入後は500gだけ荷物が増える。10分ぐらいで終わり。
C) スーパー : 2000円の買い物。購入後は2kg荷物が増える。15分ぐらいで終わり。
D) 本屋 : 1500円の買い物。購入後は1kg荷物が増える。20分ぐらい立ち読みし、購入。
E) 銀行 : 5000円お金を引き出す
F) 家 : ゴール

等のように考えて、地図の上でいろいろな位置にA〜Fを配置してみてください。
実際の近所の地図を使ったり、仮想的に地図を作り、一方通行などを作るのもおもしろいと思います。
先にスーパーで買い物をすると、重たいものを持ったまま立ち読みになるのでつらいから後に回すこともあるでしょう。しかし、家に最も近ければ先に行くのもありです。
自分がどうしたいのか、それは時間的に速い、歩く距離が短い、荷物が重くないようにしたい等の条件から最適なものを見つける癖をつけると良いと思います。
他には銀行でお金をおろさなければ、買い物を継続できませんので、その分も考慮する必要があって難しいです。


最適なポイントの通り方は、日常生活でも例えば行き方、勉強の仕方、朝の準備の手順等、最も効率的に行うにはどうするかを考える癖がついている方が、やはり論理的にプログラムできるような気がします。これは、勉強するよりも日常的に考えるほうが分かりやすいと思います。

なかなか大変ですが、一度一つ何かのやり方は果たして最適か?そしてそれを最適化してみようとやってみると面白いと思いますが、いかがでしょうか?
posted by Kiruahさん at 09:05| Comment(0) | TrackBack(0) | ノウハウ
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/30112456
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック