本当に初心者の人に捧げるコンピューター入門


ソフトウェア プログラム編その1

迷宮からの脱出

 前章では様々なデータを数値で表す方法について概観してみました。この章ではソフトウェアのもっとも本質的な部分であるプログラムに関して説明します。

プログラムとは何か



 さてコンピューターを使っている以上、プログラムという言葉を聞いたことのない人はいないと思います。ではこのプログラムとは一体なんでしょう?
 プログラムとは一言で言えば以下のようになります。

計算や操作の手順を、コンピューターが理解できる言葉で記述したものがプログラムである

 この定義には二つの重要な要素があります。すなわち計算や操作の手順コンピューターが理解できる言葉です。

 計算や操作の手順を通常アルゴリズムといいます。厳密なことを言うと少し嘘なのですがまあ細かいことは気にしなくていいです(ちなみにアルゴリズムは日本語に訳せば算法です)
 コンピューターが理解できる言葉とはすなわちコンピューター言語と呼ばれるものです。例えばC言語、BASIC、PASCAL、JAVA・・・などです。
 一般的にプログラムと言われると、二番目のコンピューター言語のことばかりが強調されるきらいがありますが、実際にプログラムという物を理解するためにはこの二つのことが必須です。


アルゴリズム



 それではまずアルゴリズムに関して説明しましょう。アルゴリズムとコンピューター言語の関係は、文章の内容とそれが書かれている言語の関係と同じです。以下の二つの文を見てください。

 Go to hell!
 地獄に堕ちろ!

 この二つの文は見かけは違いますが、その表す内容は同一ですね。
 アルゴリズムとはコンピューター言語で書かれた文の内容であると考えてもいいでしょう。ですから、アルゴリズムはどのような言語で表現されても不変です。プログラムにおける重要性から言えばアルゴリズムの方が遙かに普遍的かつ重要なのです。

 考えてみれば当たり前のことです。これを読んでいる方ならば少なくとも日本語を理解することができるでしょう。でも、日本語が分かれば小説が書けると言ったら嘘ですね。確かに誰でもその気になれば小説らしき物をでっち上げることはできますが、たいていは読むに耐えない物です。

 同様にプログラム言語を知っていてもまともなプログラムが書けない人もいるのです。嘘だと思うでしょうが本当です。もし出版社が作家不足なので日本語を話せる人を適当に捕まえてきて小説を書かせたら・・・なんてことは起こりませんが、コンピューター業界ではそれと同じようなことが現実なのです・・・

  • この点は後にもう少し細かく書くことになると思います。プログラムを作成する場合、実際にプログラム言語を使ってプログラムを書く作業(これをコーディングと言っています)は全体からすれば1/4程度の重要性しかありません。残りの3/4は設計とデータ構造の作成、そしてデバッグです。
 それはそうと、アルゴリズムというのは表す内容のことですから、これを日本語で表現することもできます。だからしばらくはアルゴリズムをすべて日本語で表記していきましょう。
 さて、アルゴリズムを表現するにあたって、極めて重要な原則があります。それは、

アルゴリズムを表現する際には曖昧な言葉が混じっていてはいけない

ということです。
 あなたが社会人ならば、退社間際にいきなり上司にどさっと書類を渡されて「これ明日までにやっといて!」という体験はあるでしょう。あなたはその上司に殺意を抱いたはずです。なぜならあなたはこれから何をしなければならないかを理解しているからです。
 しかしコンピューターが相手だと問題は全然別の所に発生します。コンピューターは徹夜させようが何しようが文句は言いませんが「これやっといて」と言っただけでは何をしていいのかさっぱり理解できないのです。

 その理由は今までのところを読んでいただいていれば、大体想像がつくでしょう。何しろコンピューターが分かるのは「数」だけなのです。そういう相手にあれだのこれだのと言っても分かってくれるはずがありません。
 プログラムが難しい、もしくはややこしい理由は、相手が人間だったら極めて明白な指示なのに、コンピューターはそれを簡単には理解してくれないためなのです。

 ではコンピューターには一体どの程度の頭があるのでしょうか?それを知るには実際に簡単なプログラムを作ってみるのが早道です。
 以下を読んでいただければ、プログラムという物がどういう代物であるかが理解できるでしょう。


それでは問題です



 下の図はRPGなどでよく出てくる迷路の一例です。あなたはこの迷宮の奥深くに放り込まれてしまいました。左下にいるのがあなたです。早く脱出しないと、迷宮に住んでいるドラゴンに食べられてしまいます。

 そこで、この迷路を脱出するプログラムを作ってみましょう。
 そのためにはまず出口まで行くアルゴリズムを考えなければなりません。
 アルゴリズムとは前にも書いたとおりに、計算や操作の手順です。従って、この問題は出口に確実に到達するための手順を言いなさいというものになります。



 もちろんいい加減に歩き回っていてもたいていの場合は出口にたどり着くことはできます。しかしここでは確実に出口にたどり着きたいのです。そのためにはどうしたらいいでしょうか?

 これは簡単ですね。迷路と言えばたぶん誰でも知っている脱出の方法があります。有名な左手の法則です(右手でも別にかまわないんですけどね)
 それを知らなくとも、普通の人ならば次のように言えば簡単に理解できるでしょう。

左手を壁にずっとつけながら歩いていけばそのうち出口にたどりつく

 少なくとも上の例の迷路ではこれは事実です。人間ならば間違えようもありません。この方法であなたは確実にこの迷宮から脱出できます(2〜3回ドラゴンと戦わなければならないのは仕方ありません)

 ではこれでアルゴリズムができたかというと、ぜんぜんそうではありません。この言い方ではコンピューターにとってはまだまだ全然どうしようもなく致命的に曖昧なのです。コンピューターに口があればたぶんまずこういうでしょう。

「なんだかよく分からない。もっと詳しく手順を説明してくれ」


もっと詳しく説明しろだと?



 普通の人ならばこんなことを言われたら、考え込んでしまうのではないでしょうか?こんなに当たり前で明白なことをさらに詳しく説明しろだと?
 そこでこれをもっと厳密に説明したのが次の例です。

 1 道なりに進め
 2 分かれ道があったら
    左側に道がある場合はその道を選ぶ
    左側に道がない場合はまっすぐを選ぶ
 3 行き止まりになったら引き返せ
 4 この1〜3を出口になるまで繰り返せ!

 じっくり読んでいただければ確かにこれは左手の法則を表していることは分かります。あなたがこの迷路に入ったとして、この指示通りにやっていけば確実に出口にたどり着くでしょう。
 ただ2が少しややこしいですね。でも下の図を見てみれば理解できるでしょう。分かれ道のパターンは以下の4種類しかありませんね。左側に道がない場合というのは最後の例です。



  • ところで、もしあなたが何のヒントもなしにこの例にたどり着けたとしたら、間違いなくプログラマーになれる素質があります(喜ぶべきなのか悲しむべきなのかは分かりませんが・・・)
 それはともかく、ここまで厳密に書いてやれば相手がいかな馬鹿者でも理解できるはずだ、とあなたは考えます。でもコンピューターはこう言います。

「道なりって何だ?」
「進むって何だ?」
「分かれ道って何だ?」
「左って何だ?」
「まっすぐって何だ?」
「行き止まりって何だ?」
「引き返すって何だ?」
「そもそも迷路ってなんだ?」

 普通の人ならここでキレてこのふざけた機械をたたき壊すでしょう。福岡ならたたき壊せば燃えないゴミ(無料)で、壊さなければ粗大ゴミ(有料)です。


先が長そうな気配がする・・・



 たとえ有料でも廃棄処分にできれば問題はもう二度と起こりません。しかし、あなたはなぜかこのコンピューターを使わなければならないのです。そこで仕方なく自分がコンピューターになったつもりで、一から考えなければなりません。
 そのための原則は、すべてを数値で表すと言うことですが・・・
 次の節ではこれをもっと詳細に表現してみましょう。


前へ 目次へ 次へ