プログラミングと言語ゲーム

プログラミングというものは、必然的にヴィトゲンシュタインの「言語ゲーム」を含んでいる。

なぜなら、プログラミングにおいて変数や関数は、それが名前の付けられた時点では、何ら機能を持っていないからだ。

それは、それらが使われること、使われるルールの中で、定義付られる。

変数はデジット上のパターンであり、このアドレスの値を、その後、どのように使うかで、意味づけられる。たとえば、色を指定する変数 _colour であったとしても、それがそのあとで、まったく違う用途で用いられたとしたら、その変数の意味は違う。これがプログラムのいろいろな場所で混乱をきたす理由となる。

言語空間においても、実は同様であり、同じ言葉が違う用途で使われることで、誤解が生まれる。

関数はまずその名前が付けられて、その関数の内部の処理が記述されたところで、本来意味が固定されるはずだが、その関数が使用されるに従い、違った使われ方をするとか、内部処理が書き換えられたり、拡張したりして、違う使われ方になって行く。

たとえば、四次元座標をある軸に沿って回転する関数を、Rotate4DonAxis と書いたとする。ある用途によっては、四次元ベクトルをある軸に沿って回転させたい。Rotate4DVeconAxis という名称で同じ機能を使いたい。この場合、名前を優先するとしたら、単に前者の関数をラップするか、type で別名にするしかない。結局、前者の関数をそのまま使うとすると、用途は違うのに、名前がそのまま通ってしまうことになる。だから、プログラミングにおいて、名前が意味を与えるという視点は、どんどん通用しなくなる。

これは言語ゲームととてもよく似ている。そういった「使われ方が意味を変えていく」ことが言語ゲームの本質であり、それはそのままプログラミングの本質である。

さらにクラスとなると、もっと使われ方に幅を持ち、最終的にソフトウェアができたあとも、あいまいなクラス、あいまいな関数、あいまいな変数、が残ってしまう。しかし、それは確かに言語ゲームから見ると当然の結果だ。

プログラムでは、そういった意味を内部ではなく外部から固定するために、ドメイン駆動の考え方が取り入れられたが、完全に固定することはできない。

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