言語にとって美しさとは

ところで,諸君.これまでプログラミング言語とか,プログラミング方法については 何も話したことがないと思う. それは講義とは直接に関係ないからと思っているのと,SASプログラミングをするとしても それほど長いプログラムを書くわけではないからだ.

しかしながら,時々,気になることはある.書かれたプログラムが美しくないからである. この頃の学生諸君は,ちょっとしたプログラミング なぞするらしい.どんな言語を使うのかは知らないけれど,恐らく現在でも,学んでおいて損はし ない言語は,Cであろう.VCでもよい,もちろんVBが広く使われているかも知れない. インターネット時代でPerlなどを使うことが多いかも知れないが,そんな時でもCを学習して いることは損にならない.

私はCを使えるわけではない.プログラマーになろうとしたこともない.また,データ解析にとっては SAS言語でなんでも,できてしまったせいもあり,新しい言語の学習に保守的になっているせいもある.

現在利用される言語は,おおむね第三世代言語か,第四世代言語である.そのどちらであっても言語の美しさ,プログラミングの美しさというものがある.諸君,美しいプログラムを書けるようになりなさい. どうせ,プログラミングをするのなら.私は美しいプログラムを書く人が好きだし,そのようなプログラムが好きだ.美しいプログラムは正しいプログラムであることが多い.

プログラミングをするのなら,誰でもが読んでおいたほうがいい,という本がある.もしプログラミングをするになら,ぜひ読んでおくべきである.それは,ダイクストラとか,クヌースとか,カーニハンの本だ. 彼らは,TEXの著者であり,Cの著者である.その本には,強い思想を感じる.そして忍耐強さとか, 見通そう,正確さを維持しようとする意思を感じる.

amazonで検索すると,ダイクストラの本は絶版が多い.クヌースやカーニハンは大丈夫だ. 彼らは構造化プログラミングとか,文芸的プログラミングとか,プログラミング書法とか−−そういう ことを言った人々だ.

いくつか大切なことがある.美しくあるために大切なことだ.本質的に重要なことは構造化すること である.現象的に大切なことは,他人が見て分かりやすいこと,将来の自分がみて分かりやすいこと,である. 長いプログラムになるほどそうである.ちょっとまとまった仕事をすれば,すぐに数千行のプログラムになる. 全体をよく見通せるプログラムでなければいけない.そこには確固たる世界が存在する.破綻したプログラムは破綻した世界をもたらす.

プログラムというのは,書いている時は没頭しているので細部まで記憶しているけれど,ちょっと離れると,自分の書いたプログラムでさえ,何をやっているのか分かりにくいものになる. 変数名をどうつけるべきか.空白はどう使うのか.コメントの書き方と書く量は?.インデントを使え. GOTO文を使わない.など形式的なことかも知れないが,プログラムとは,人に伝えるつもりで書くことがよい.

いまプログラミングで実現しようとしている,ある全体は,そのままでは混沌である.プログラマーはそこに世界を創造する. 混沌に対面して,ここから世界を構造化していく.ここにデカルトが登場する.分割するのだ.分割の過程で いくつか共通性・一般性が出現する.分割は順序性をともなう.そして分割のあとには,一般性と特殊性の分離 がある.一般性は関数化されるべきである.特殊性は引数化されるべきである.変数名は規則性をもつべきである.

これがプログラミングの基本的な思想だ.西欧の伝統的な思想である.統計的データ解析も,その思想の一部分に含まれる.回帰分析モデルは構造と差異を,モデルと残差に,シグナルとノイズに分離する.因子分析モデルは共通性と独自性に分離する.世界の何が構造の系であり,何が差異の系であるかを定式化するための営み.自然と人間,即自と対自,使用価値と交換価値,意味するものと意味されるもの,意識と無意識,本質と現象,対立と調和.漱石の文学論では,Fとf.

少し大きなプログラムを書くとき,何の見通しもなくはじめるわけにはいかない.たとえ,全体が決定していなくても,枠組みを設定することはできる.とても美しいプログラムを書け.いつも美しく言語を使わんと意図せよ.