世界を動かす、見えない指示
私たちの生活は、いまやソフトウェアなしには成り立ちません。スマホ、銀行、電車、店のレジ、車、インフラ——あらゆるものが、ソフトウェアで動いています。しかし、そのソフトウェアが「どう作られ、どう動いているのか」は、多くの人にとってブラックボックスです。このコースは、プログラムを書けるようになるためのものではありません。ソフトウェアという「現代の見えない基盤」を読み解く視点を養うためのものです。まず、すべての出発点——「プログラムとは何か」から始めましょう。これは、コンピュータの原理を、ソフトの側から捉え直すことでもあります。
コンピュータは、指示通りにしか動かない
プログラムを理解する上で、最も大切な一点があります。それは、コンピュータは、指示された通りにしか動かない、ということです。当たり前に聞こえるかもしれませんが、この意味は、驚くほど深いのです。
プログラムとは、コンピュータに「何を、どんな順序で行うか」を、曖昧さなく厳密に指示した手順の集まりです。前にアルゴリズムで学んだ「手順」を、コンピュータが実行できる形で、細部まで書き下したものと言えます。
ここで重要なのは、コンピュータが指示に、完全に忠実だということです。コンピュータは——
- 自分で気を利かせたり、意図を汲んだりはしません
- 「たぶんこういうことだろう」と推測しません
- 書かれた指示を、一字一句、その通りに実行します
人間なら、「ちょっと曖昧な指示」でも、常識で補って、うまくやってくれます。しかし、コンピュータは違います。指示が曖昧なら、曖昧なまま(あるいはエラーで)動く。この「馬鹿正直さ」こそ、コンピュータの本質であり、プログラミングの難しさと面白さの源なのです。
「厳密に指示する」ことの難しさ
コンピュータが指示通りにしか動かないなら、プログラムを作るとは、やってほしいことを、一切の曖昧さなく、細部まで書き下すことです。これは、思いのほか難しい作業です。
たとえば、「道を渡る」という、人間には簡単な行為を、コンピュータに指示するとしましょう。「左右を見て、車が来なければ渡る」——では、「車が来る」とは、どのくらいの距離、どのくらいの速さか。「渡る」とは、どのくらいの速さで、どの方向へ。人間なら無意識にやることを、すべて明示的に指示しなければなりません。私たちが日常で、いかに多くのことを「暗黙のうちに」判断しているかが、プログラムを書こうとすると、突きつけられます。
この「曖昧さを排して、厳密に手順を記述する」訓練は、論理的な思考や計算論的思考そのものです。プログラミングが、単なる技術を超えて「考える力」を鍛えると言われるのは、このためです。
「コンピュータのミス」の正体
この性質から、重要な帰結が導かれます。「コンピュータのミス」の多くは、実は人間のミスだ、ということです。
コンピュータは指示に忠実なので、指示(プログラム)が間違っていれば、その間違いを忠実に実行します。想定外の状況が考慮されていなければ、そこで誤作動します。つまり、システムの誤動作の多くは、コンピュータが「勝手に間違えた」のではなく、人間が書いた指示に、誤りや見落としがあった結果なのです。「コンピュータの誤り」というニュースを見たら、その裏には、たいてい人間が書いたプログラムの問題があります。この視点は、後で学ぶバグや、AIの問題を理解する土台になります。
ニュースで使う視点
システム障害、ソフトウェアの不具合、「コンピュータのミス」——こうしたニュースに触れたときは、「その指示(プログラム)を作ったのは人間だ」ということを思い出してみてください。コンピュータは忠実な実行者にすぎません。この視点は、技術のトラブルを、正しく理解する第一歩です。次のレッスンでは、そのプログラムの集まり——ソフトウェアが、どう作られるのかを見ます。