第1回
なんでいまさら「C言語」なのか?――C言語よもやま話

文字でコンピュータを操ろう

便利になってしまったプログラミング環境から敢えて離れ、少し不便なプログラミングを試しながら、コンピュータやプログラミングの根底のところを探ってみましょう。

まずはコンソールモードで

コンピュータと人間の意志疎通は、やはり原点に戻ってENIACのケーブル配線 ※8 から……というのはあまりに無茶なので、1行ずつコードを入力したパンチカードをリーダーに読み込ませて……って、これもまた無茶です、はい。

ケーブルの配線というのはあまりに機械寄り過ぎて、今ではほとんど無意味です。で、その後登場したのがパンチカードで命令を入力し、結果を穿孔テープ(穴のたくさん開いた紙テープ)で受け取るというスタイル ※9

どちらも意志疎通と言うにはあまりに機械に歩み寄りすぎていて、肝心のプログラミング技術以前にコンピュータとの対話技術を身に着けなければなりません。ということで、GUI登場以前の主流だったキャラクタ端末――コンソールモードを使うことにしましょう。ご存知とは思いますが一応説明しておくと、キーボードから入力した文字がディスプレイに表示されていく仕組みです。

キーボードとキャラクタ表示のディスプレイが登場してからは、それがユーザーインターフェイスの基本形になりました。先述したようにDOSもコンソールモードのOSです。Windows XPでもスタートメニューのアクセサリから「コマンドプロンプト」を選択すれば、ウィンドウ内にDOSのコンソール画面が表示されることは、知っている人も多いと思います。

現在はGNOMEなどの統合デスクトップ環境がかなり浸透したUNIX系OSでも、基本はコンソールモードで、GUIを使うX Window Systemは特別な使い方と言えます ※10


ご存知の方も多いと思いますが、最初に実用化されたコンピュータ・ENIACはパッチボードにケーブルを差し込むことで計算命令を与えました。違う計算をさせるにはケーブルを差し替えなければならず、その配線を計算するのが大変だったそうです
僕の友人に、1970年代のコンピュータ操作を経験した女性がいます。穿孔テープはリーダーで読み取るのですが、彼女はリーダーなしで読めたそうです。そんな彼女は、今漫画家をやっています
X Windows SystemでX Termなどのターミナル(Terminal)ソフトを動かせばコンソールモードを利用できます。Mac OSXでも可能です

文字で意思伝達

コンソールモードでは、コンピュータに対する処理命令をすべて文字(半角英数記号)で行います。Windowsならフォルダウィンドウを開いて中にあるファイルのアイコンを別のフォルダにドラッグ&ドロップすれば、ファイルがコピー(または移動)されます。が、コンソールモードでは以下のように、『どこにある何をどこにコピーするのか』を文字(英文)で示さなければなりません。

	COPY ABC.TXT D:\DATA ----- MS-DOSの場合
	cp ~/abc.txt usr/data ---- UNIX系OSの場合
GUIは非常に感覚的です。マウスでアイコンを操作する場合、人間は頭の中で『アレをここにコピー』といった感じで、実に曖昧に捉えています。日常頻繁に行う操作なら、半ば無意識的に行っていることもあるでしょう。

そのこと自体は、悪いことではありません。面倒な作業を感覚的にシンプルに済ませられることで、人間は他のもっと重要なことに意識を集中できるようになります。自動車の運転が「50m先の交差点を角度86度で左折せよ」などと文字で命令しなければならないとしたら、大変なことになるでしょう。左折したければハンドル(ステアリングホイール)を左に回し、それに連れて車体が左に曲がるから、余計なことを考えず周囲の状況に配慮できるのです。

が、コンピュータはちょっと事情が違います。

肉体と思考

自動車は目的地に移動するための手段ですが、コンピュータを使った作業はただ目的を達すればいいというものではありません。もちろん、Webの検索や単純なデータ入力なら問題はありませんが、企画書や計画書を書いたり、打ち合わせのメールを交わしたりする場合、ユーザーは思考しなければなりません。

コンピュータは、その『思考』を助けるための道具です。余計な作業に惑わされず、じっくり思考するために、操作はできるだけ簡単な方がいい――という考え方は確かに正解ですが、操作があまりにシンプルになると人間は思考を怠けるようになります。

思考という脳の働きは肉体の動きとどこかでつながっていて、じっとしていれば熟考できるというものではないのです。

これは自動車の運転でも同じで、高速道路にはおよそ2kmに一度はカーブを作ってドライバーに緊張感を与えることで、漫然と運転することによる注意力の低下を防いでいます。AT車のおかげで運転は楽になりましたが、運転中に携帯電話を使う ※11 などかえって危険を招く面が問題になりました。

ご存知とは思いますが、これは違法です。運転しながら口紅を塗っている女性ドライバーを見たことがあります。電車内のお化粧どころの騒ぎではありません

作り手には論理的な思考が必須

もちろん、家庭で気楽にコンピュータやインターネットを利用するユーザーは、できるだけ簡単に操作できる方がよいでしょう。しかし、プログラムを作る側にとってあまりに簡単すぎる操作は、AT車で一直線の高速道路を走るようなものです。

考えてみてください。そもそもプログラミングとは、コンピュータとの意志疎通です。それも人間同士の場合とは違って「あそこのアレを、ほれ、ああゆう具合にナニして……」などという以心伝心型の曖昧な表現は通用しません。

もう少し待てば、そういった人工知能型プログラミングツールも実現するかもしれません。が、今の段階では「〜を〜して、もしそれが〜でなければ〜して……」と、コンピュータの動作を逐一規定しなければなりません。さらに、最もアテにならない「人間」という生き物が、あなたの作ったプログラムを使うのです。不確定な要素は無数にあります。

そういった様々な状況に対応するために、少なくとも現在のコンピュータでは、作る側に論理的な思考が必須となります。

コンピュータはただの堅物

論理的な思考は文字によって行われます。テキストボックスをフォームウィンドウの『この辺』に置いて……というのは、ちっとも論理的ではありません。なのにちゃんと動作するプログラムが出来上がるのは、処理系が人間の曖昧な行動を論理的な数値情報に置き換えてくれているからです。

職人なら、そんな細部の設定を自分の意識で明確に規定したいと思うはずです。『てやんでぇ、おいらは384 x 256ピクセルのダイアログをクライアント・ウィンドウのX = 100, y = 200の座標に配置してぇんだよ、べらぼうめ!』と、(まぁ江戸っ子かどうかは別として)プロの意地というかこだわりのようなものがあるでしょう。

上の『』の中の「384 x 256ピクセル」とか「X = 100, y = 200の座標に配置」といった具体的な数値が論理的な思考の結果です。元々コンピュータは、このように具体的な値を明示して操るものだったのです。

もちろん、一般ユーザーにそんな面倒なことを押し付けてはいけません。職人の論理的で繊細な技は、外(エンドユーザー)からは見えないものなのです。というか、パッと見には分からなくても、分かる人には分かる――というのが、よい技術だと思います。

そんな職人気質のアプローチに応えてくれるのが、何でも文字で論理的に指示しなければ言うことを聞いてくれない、コンソールモードのユーザーインターフェイスです。面倒ですよね。でも、そんな面倒なことって案外嫌いじゃないでしょ?

……ということで、大昔ほどには面倒でないけれど、現在のスタイルからはちょいと面倒なやり方で、プログラミング作法の基礎を見直してみよう、と思った次第です。