文章とプログラムのアナロジー

良いプログラムと良い文章は似ている。 あるいは悪いプログラムと悪い文章は似ている。 そう思って理解する。 それが、ここでいうプログラムと文章のアナロジーである。

そもそも

そもそも、なぜこのようなアナロジーが成立するのかを考えてみる。 文章は人に思想を伝えるためのものであるが、プログラムは元々コンピューターを動かす命令の集まりに過ぎなかった。 しかし、プログラムは時代とともに一人のプログラマーがその誕生から退役までを見守るものではなくなり、別のプログラマーが元のプログラマーの命令した意図を理解する必要が増えてきた。 逆に言えばプログラムを書く際にはそのプログラムの意図が伝わるように書かなければならなくなった。 したがって、プログラムも文章と同様に(テーマが限られるとは言え)思想を伝えるためのものなのである。 どちらも思想を伝えるためのものであるならば、より的確に伝える技術は似たものになるのは当然と言えよう。

集団

言語は集団に共有されて初めて意志を伝達する道具となる。 人工言語であるプログラミング言語においてもその事情に何ら変わりはない。

しかし、違いもある。 プログラミング言語では、ごくわずかの語の規定を除いて統語論(syntax)しか定義されていない。 規定されている語は主に制御構造に関するものであり、日本語でいうならば助詞だけが決まっているようなものである。 残りの語彙の決定は、小集団に任される。 そこに、命名規則やコーディングスタイルといった集団ごとの独自性が生まれる。 いわば方言である。

ときどき、コーディングスタイルの優劣に関する論争が起こるが、これが不毛なのは機能的に差がないものの優劣など慣れ以上の論拠が存在しないからだ。 自然言語で方言に優劣を付けようとする議論が虚しいように、コーディングスタイルの議論も実りを期待できない。

また、小集団内で言語を均一化する一つの方法は多くの人がお互いと話すことだと思われるが、これをプログラミングの世界で実現するのがペアプログラミングである。 ペアプログラミングの(おそらく)本来の目的は正しくないコードを生み出す機会を減らすことだが、一方で集団内での語彙の均一化にも役立っていると思われる。

例: 長さ

文章における段落と、プログラミングにおけるメソッドや関数とは、どちらも長すぎると読み難い。 段落であれば段落を分割し、関数であれば関数を分割することがそれぞれの改善方法である。

一文が長いのもまた悪文の特徴である。 長い文はいくつかの文に分けると良い。 プログラムで一行の文字数が多すぎるのも何か問題のある兆である。 こちらも整理すれば何行かに分割して解り易くできる場合が多い。

例: 一貫性

段落の中で論旨は一貫していなければならない。 一貫性を欠くと理解し辛い文章になる。 同様に、一つの関数の中は一つの目的のために記述されるべきである。 別の目的のものが紛れ込んでいたら、どこかに移動した方が良い。

2005-09-01