コンピュータと電卓は、ただ「計算を行う」という点だけ見ればほとんど同じ機能を持っています。電卓に対して、コンピュータが優れているのは「自動処理」の能力にあります。自動処理とは、一連の計算処理を(あらかじめ)処理手順として書いておき、それを与えれば指示された通りに処理を行うことです。電卓を使って複雑な処理をしようとした時、手順を追って計算処理を実行するのはユーザ、つまり人間=手動処理が必要です。
この手順を書いたものを「プログラム」と呼びます。
あなたがスマートフォンで QR コードをカメラで読み込んだとき、カメラアプリが画像処理をしてデータを取り出し、それが URL だったらブラウザ・アプリを起動してその URL にアクセスに行く、といった動きをしますが、そのような動作をするのはすべてプログラムとしてそのような処理の中身が詳しく書かれているからです。チケットサイトの特定の商品の「購入」ボタンを押せば、席が確保されてチケット情報が届くのも同じくプログラムに従った自動処理の結果です。
ところで「アルゴリズム」という概念があります。例えば「2 以上のある数 N が素数であるかどうかを判定する」ために、以下のような「試し割り」と呼ばれる(素朴な)手順を考えたとします。
上の手続きを実行できれば、実行する人に「素数」の理解があろうとなかろうと、正しく素数の判定ができます。何となれば「割り切れる」という数学的な概念がない人でも、やはり正しく素数の判定ができます。
この、手順どおりに処理を実行しさえすれば、自動的に(機械的に)解が得られる、正しい結果が出せるよう記述されたもののことを「アルゴリズム (algorithm)」と呼びます。
現時点では(実用的な)アルゴリズムを考えるのは主に機械ではなく人間です。
アルゴリズムは様々な方法で記述することができます。例えば上の 1. 〜 6. の手順は「日本語」で記述しました。しかし日本語、いや、自然言語は「曖昧」で「多義性」があり「文法的に複雑」な性質から、コンピュータに対する手順指示の言語としては適しません。そこでアルゴリズムを適切に書き下すための言語が設計されました。これを「プログラミング言語」と呼びます。
現時点ではアルゴリズムをプログラミング言語で書き下す作業を行うのは主に機械ではなく人間です。
自然言語と人工言語 |
---|
自然言語とは人類が長い時間をかけて獲得した、つまり人々が日常的に意思疎通のために使っている言語です。これに対して人間が何らかの目的でその知性によって設計した言語のことを人工言語、と呼びます。エスペラント語などが有名ですね。プログラミング言語もまた人工言語です。 |
ようやくここまで来ました。つまりアルゴリズムが明確になり、それをプログラミング言語で書き下すことでプログラムの形にしてはじめて、コンピュータはそれを実行することができます。
この過程を丸ごとすべて「プログラミング」と呼ぶのだ、と考えてください。狭義には「すでに明確になったアルゴリズムをプログラミング言語で書き下す」作業だけをプログラミングだと考えるのは避けて、これらの過程を全て行うのだ、と考えてください。