「プログラミング」とは?~ダニエル・ヒリス著『思考する機械 コンピュータ』~

プログラミング教室。
これまでの、主に子どもやシニアだった対象者は、近年国が推し進める「リスキリング」によって、プログラミングに縁がなかった(或いは業務や日常生活で必要がなかった)社会人にまで広がっているようだ。

そういった教室に行ったことがないので、どういうことを教わっているのかわからないが、ただ指定のプログラミング言語で、例題に挙げられた動作ができるようなプログラムを作るだけでは、プログラミングについての理解は深まらないのではないか、と素人考えながら思ってしまう(だから、教室ではもっと深いことを教えているに違いない)。

何故なら、プログラミング言語はコンピュータにさせたいことを記述するためのもので、まず「コンピュータに何をさせるか」を明確にする必要がある(逆に言えば、「コンピュータに何をさせるか」が明確になっていれば、(極論すれば)プログラミング言語は何を使っても構わない、ということだ)。

『超並列コンピュータの専門家として有名』で『全米各地から逸材の集まることで知られるマサチューセッツ工科大学(MIT)で天才の名をほしいままにした人である』ダニエル・ヒリスは、自著『思考する機械 コンピュータ』(倉骨 彰訳、草思社文庫、2014年。原著は2000年刊。以下、本書)に、こう記している。

コンピュータの魅力はその万能性にある。コンピュータはプログラムしだいであなたが想定することはなんでもこなせる。ポイントは何をさせたいかをコンピュータに正しく教えることにある。

『正しく教える』手段が、つまりは「プログラミング言語」である。
本書においてプログラミング言語は、『情報を処理する機械であるコンピュータと人間とのインターフェイス(仲立ち)であ』り、『プログラマと、彼らが書くプログラムを読んで実行するコンピュータとの間で共有されている認識の表現手段』として、『データをどのように操作するかをコンピュータに伝えるためのツール』であると説明される。

プログラミング言語はそれぞれが独自のシンタックス(構文規則)を持っている。したがって、その言語でプログラムを書くためにはその言語のシンタックスを使わなければならない。しかし、シンタックスはプログラミング言語の基本ではない(スペリング規則や句読点規則が自然言語の基本ではないのと同じである)。プログラミング言語の基本はその言語の語彙(基本的な要素)である。そして重要なことは、これらの基本要素プリミティブの組み合わせで新しい要素を派生的に作れることである。

これを読んでわかるとおり、「プログラミング言語」だけではコンピュータは動かない。
『ポイントは何をさせたいか』であり、『させたい』ことがなければ、コンピュータは不要である。
『させたい』ことを実現するためには、その実現方法を考えなくてはならない。その「実現方法」を「アルゴリズム」という。

アルゴリズムとはつねに成り立つ真なる知識にもとづく問題解決の方法である。

たとえば、数学のテストで文章題など少し複雑な問題が出たとする。この問題を解決(回答)に導く方法が「アルゴリズム」であり、それはただ一つの方法だけがあるわけではない。そしてまた、同じ考え方でもそれをひたすら計算で導くのか、図を書いたりするのか様々である、それが「プログラミング言語」と考えてもよい。

アルゴリズムは問題解決の手順であって、それを記述する方法ではない。したがって、一つのコンピュータ言語で表現されているアルゴリズムを別のコンピュータ言語で表現することもできる。

本書は、「プログラミング」とは「言語ありき」ではなく、「どんな問題を解決させたいかの命題があり、その解決方法(アルゴリズム)」をコンピュータに(様々なプログラミング言語を使って)指示することである、とわかりやすく示してくれている。
本書は、2000年に書かれたもので、並列コンピュータやAIについては2020年代の今とは齟齬があるが、この普遍(不変)の原理を理解しておけば、この先コンピュータがいかに発達しようとも、それらをプログラムすることの大きな手助けになるはずだ。








この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?