プログラミングの楽しみの1つは少しずつソースを書き溜めていって、いずれは何度も再利用できる自分専用の素晴らしいライブラリを構築できることである。プログラムは作るのは大変だが、使うのは天国、ライブラリ構築は自らの知的労働の実りを楽しむプログラミングの醍醐味である。
よいライブラリの構築のために必要なのは、大量のソースをきちんと整理する仕組みである。整理されていないものは、使用することもメンテナンスすることもできなくなってしまうからだ。
この整理法は各プログラマーに委ねられている。従ってプログラミングをやっていくとどうしてもソースや概念の整理整頓が好きになってくる。新しい整理法を思いついてソースをすっきり整理出来た時に感じる爽快感は何者にも代えがたい瞬間である。
さて整理法の詳細は各プログラマーに委ねれられているとはいえ、おおまかには2つの整理方針がある。それぞれ「手続き志向(関数志向)」と「オブジェクト志向」と呼ばれる。
歴史的にはまず「手続き志向(関数志向)」があり、後に「オブジェクト志向」が追加された。実際のプログラミング言語で言えば、C、Fortranなどは手続き志向であり、C++、Java、Pythonなどはオブジェクト志向である。元来手続き志向であったC言語にオブジェクト志向の概念を追加してC++という言語が生まれたのはわかりやすい例である。
両者には共通点と相違点がある。整理すべきものはソースである。共通点は物理的な整理の単位がファイルであるということである。相違点はソースの中身をどう整理するかという論理的な次元に存在している。
これは「本」と「目次」に例えるとわかりやすい。。本が物理的な単位であり、目次が論理的な単位である。
さて目次に例えるなら、手続き志向というのは1章、2章、3章、4章・・・とひたすら並列に章が並んでいる目次のようなものである
これに対してオブジェクト志向の目次は、1章1節、1章2節、2章1節、3章1節1項のように階層を持っている。
当然ながら階層がある目次の方が超大で複雑な本の内容を論理的に整理するためには優れている。一方でそれを書く側の人間からすれば、最初にそれだけ複雑な目次を考えなければならない負担があるし、当初考えていなかったような内容を追記する場合、論理構造がなまじ階層化されているだけに、目次全体を見なおさなければならない事態に陥るリスクもある。
プログラミングの世界に2つの整理パラダイムが併存しているようにWeb(CMS)の世界にも2つのパラダイムが並立している。Wikiというのはオブジェクト志向(階層化目次)の整理法だし、ブログというのは手続き志向(連番目次)の整理法である。
図書館は本は階層化目次で整理されているが、かつて一斉を風靡した超整理法というのは連番性(時系列)である。
論理の世界は明らかに階層を持っているので、一見、階層性は親和性が高いが、論理の階層化方法は1つではなく様々な階層化が可能である。それに対し、時間を軸とした整理は1つしかない。この点では整理のやり直しが必要ないというメリットがある。
両者一長一短であり、この2つのパラダイムが併存するということは、人間の認識構造の中に1つに統合されない2つのパラダイムが存在しているのではないかと考えさせられる。
コメント