今回は、プログラムの動く「手順」についてご説明しましょう。
プログラムって、「あらかじめ決めた手順を、ひとつずつ、ひとつずつ、順番に実行していく」ものといえるでしょう。
コンピュータって、すごく複雑なことをしているようですが、実は「ひとつずつ」が基本なのです。
ペンティアムだ、オプテロンだ、インテルはいってるテレビコマーシャルで、すんごいことになっていても、「ひとつずつ」が基本なのです。
オブジェクト指向型だ。グリッドコンピューティングだ。なんだ!かんだ!と、プログラムと一口にいっても、いろいろお作法があったり、「1つのCPUに4つのコアが載ってて、同時に命令を実行できるんだよ〜」など、正確には「ひとつずつ」でなかったり「順番」も複雑だったりしますが、ここは、そんなに難易度・専門性の高いコラムじゃないので適当にお茶を濁させていただきます。
そして、その「あらかじめ決めた手順」を、人間がわかりやすい形で表す方法が、「流れ図(フローチャート)」です。
流れ図、たぶんなにかで見かけたことがある方、いらっしゃると思います。
たとえば、下記のようなものが、流れ図です。
※1・・・昔の日本の棺桶は、ドラキュラ伯爵が寝てはいっているようなスタイルではなく、大きなたるのような桶に座るような形で、はいっていたのです。そして棺桶のことを桶とよんでおり、「桶屋が儲かる」の桶屋は、棺桶屋をさしていたといわれています。その後、桶=棺桶の概念が薄くなってきてから、ストーリーの後半が変更されたといわれています。
はい、みなさんどこかで聞いたことがありますよね。「風が吹けば桶屋が儲かる」です。
すみません。プログラムっぽくない例で。
+とか÷とかの算術記号がでてきたら、理系頭脳ばかりになって、拒否反応を起こす方もいらっしゃるかな?とおもったので、まずは、こういうのを例にさせていただきました。
この「風が吹けば桶屋が儲かる」は、論理的な落語の例として、よく事例にあげられます。
もちろん、この論理的にはムリがあります。ネズミが必ずしも柱をかじるか?といったら、チーズを食べるかもしれないし、傾いた家のそばを人が歩くかといったら、そうではないかもしれないし。でも、まぁ、上手な連鎖をつくっていると思います。「なんでそうなるねん!?」って、ツッコミどころがたくさんあるのが、お笑いですしね。
さて、プログラムを作っていく場合は、まず目的「桶屋を儲けさせる」があり、その目的のためには、どうしたらいい?「風を吹かせなければならないのか?」というように、流れ図の後ろから前へと逆に手順をつくっていくのが作業となります。
この「逆に手順をつくっていく」ことが、プログラムに限らず「ロジカルシンキング」という言葉で、いろいろと書籍になっています。プログラムを作る作業を「ロジカルシンキング」と捕らえると、普段の生活や作業に置き換えても、けっこう応用が広い方法といえるでしょう。
○○をするためには、なにをすればいいか考える。そうか××をすればいいんだ!
と考えたら、
××をやって、次に○○をする。
と、物事を進める。
それが、とっても複雑なものになったときに、手順をあらわす方法として、「流れ図(フローチャート)」を使ってみる。
あと何回か、流れ図に関してのコラムを続けますが、最終、プログラムを作らない方でも、そういう風に「流れ図」を応用いただくようになったら、とてもうれしく思います。
さて、またプログラムの場合は、「屋根から瓦が滑り落ちるためには、角度が必要で、その角度はn度で、瓦の重さや摩擦係数によっても、その角度は違うから、・・・で、そのためには柱が何本かじられる必要があり、ネズミの数と時間の関係からうんぬんかんぬん・・・」と、ひとつひとつをさらに細かい単位の「処理」にわけていって、コンピュータが扱える「数値化」していく作業も必要です。
コンピューターって、結局は「+ − × ÷ と、= > < と記憶、そして入出力くらい」しかできないのですから。
×も+の繰り返しだし、−も+で表現できるし、もっと処理を細分化できるぞ。それに、ビット演算はどうなるんだ、論理和は!論理積は?と自分で書いてていうツッコミはいったんはなしでお願いします。m(..)m
あ、すこしわけがわからないことを書いちゃいました。このあたりについて機会があれば、またコラムのネタとして取り上げたいと思います。
今回のコラムを経て、
プログラムとは・・・コンピュータの中では、すさまじい速度で、「風が吹けば桶屋が儲かる」みたいなものが、動いているものなんだ!?
それを人間にわかりやすい形で表現する方法のひとつに「流れ図(フローチャート)」というのがあって、それはプログラムだけではなく、通常の業務などにも応用できそうだぞ。
と、ご想像いただけたらうれしいのですが。
なかなか難しいでしょうか(^^;
ということで、次回は、落語ではない、もうすこしプログラミングっぽかったり、通常の業務に近い、具体的な例をもって、また、流れ図につかわれている記号の意味などを交えて、紹介させていただきたいと思います。