Preface




現在本屋のITやパソコンコーナーにはエクセル,ワードのマニュアルから
ホームページ作成方法などたくさんの書籍が並べられています。
最近特に目立つのはJava、VB、C#、C、C++、Ruby、PHP等の
プログラミング言語の解説本です。これまでどちらかと言うとプロが
使うような言語まで一般のユーザーが関心を持つようになっています。
これはリナックスやエクリプス、ジャカルタ、MYSQLなど無償のソフト
が自由に入手でき、かつGUIを使った簡便な手法でプログラムできる
環境が整いつつあるせいではないでしょうか?

そこでこのホームページでは、プログラマーやSEなど職業として
プログラミングを使う立場ではなく、一般の学生やOL、サラリーマンが
「プログラミングをする意義や効果」について考えてみたいと思います。

プロフィールでも述べておりますが、我々Aranskプログラミング鑑定団は
性別、年齢を問わずプログラミング自体に興味を持つものの情報交換
同好会です。
厳しい能力査定と面接試験をクリアしたもののみが選抜される
エリート集団です。ではその入会における絶対条件とは:

1.チョコレートパフェ又はフルーツパフェを冬でも「美味しい!」と思うこと。  
2.紫堂先生のコミックの愛読者であり、かつアユの熱烈な
  ファンであること。アユもそのファンも大好きであること。
  …です。プログラミングには関係ありません。

で話しを本筋に戻しますと、プログラミング言語を習得することは
言語学的に「二つの異質性に直面すること」ではないかと、Aransk
鑑定団はチョコレートパフェを舐めながら思いついたのです。

「エクソフォニー」母語の外へ出る旅ー岩波書店/多和田葉子著
を読まれた方もおられると思います。この本の著者はドイツに在住し、
そこから色んな国に出かけ多数の言語と出会う訳です。その時に
第一母国語である日本語、第二母国語であるドイツ語から
その異国語を眺めながら、両方の母国語で築かれた心象風景や
思考フレームを見なおすのです。私達は普通日本に暮らし、方言は
あっても日本語で共通の感情や思考を表現しており、それはほとんど
身体化していると言っても良いほど自然な行為となっております。
従って違う言語を学ぶこと、それを使って考えること自体、新たな世界を
広げる可能性を秘めております。これがプログラミング言語を学ぶ
一つ目の異質性です。

もう一つは、プログラミング言語はコンピューターに人間の意図を伝える
ものです。人間同士の言語に比べはるかに簡単な文法と語彙しか
ありません。ライブラリーなども含め1000語程度のイディオムを覚えれば
ほぼプログラムを書くのに不自由はしません。日常言語は一万語です。
またプログラム言語の文法は命令文だけですから
丁寧語や敬称なんか必要ありません。時制も現在形だけ。
西サモア語と同じです。フランス語みたいに半過去なんてありませんから。
女性名詞もありません。男女平等の世界です。
その代わり無茶苦茶厳密です。コンマとコロンを間違えてもアウト!です。
0101に最終的には変換される訳ですから、人間とのコミュニケーションとは
根本的に違います。チェスの世界チャンピオンであるガスパロフがIBMの
ディープブルーに負けた時に「人間とは異質な知性を感じた。」と
言っております。
従ってプログラミング言語はこの異質なもの、物質との、物自体との
直接対話であると言えるでしょう。

で?この言語的な母国語=日本語以外の異質性と、人間以外の物自体
との対話という異質性を経験することは、我々にとってどんな意義がある
のでしょうか?

この辺りは情報工学で言えば色んな説がありますが、我等がAranskコミック
パフェ同好会?は現実の世界をプログラムで写像(モデル化)することにより
課題を解決する方法を模索することがプログラミングの目的と考えます。

その為には対象領域(プロブレムクライテリア)を事象的に抽象化し
分析できる形に再構成することが必要です。
その時に上記の二つの異質性が、母国語以外の、かつ人間
(生物)以外に対する、志向性を持たない無機物と対話する
ための厳密なコミュニケーション手法が、日常的な思考フレーム
ワークを脱皮させ、多様な、より創造的な問題領域への
アプローチを可能にするのです。
ブルースエッケルスの著名な「Thinking in Java」を読まれたで
しょうか?母国語で身体的な思考フレームワークが形成されて
いる上にプログラミング言語の眼鏡をかけることによって、これまで
見えなかった問題領域や構造が浮かび上がるのです。

はて、現実の世界を写像するって?
抽象化して分析できる形に再構成するって?

当然コミック・パフェ派の皆さんは思われますよね?
では具体的に三つの視点(ゲシュタルト)を導入して考えてみましょう。

(時々訳の分からん小難しげな単語を並べるクセがあります。
全て養老先生の「バカの壁」のせいですから!)

オブジェクト指向の本なんかを読むと哲学的な隠蔽性、継承性、
多態性、特化や汎化などの単語が頻発します。

我等がコミック・パフェ派は決してあんなコケオドシには引っかかり
ません。何故ならプログラム構造や文法をマシーン側から解読
するからです。物質側から人間の意味付加構造を分析する
からです。ヒープやスタック、レジスター操作レベルでその仕組みを
解析するからです。それは大脳生理学で言えば、海馬や扁桃体
レベルにおける神経パルスの動きまで記憶や感情メカニズムを分析する
ことに匹敵します。

「バカの壁」のせいで大脳生理学まで脱線してしまいましたが、
本筋に戻します。
現実世界をモデル化するための視点は:
1.関係性・構造性
2.重層性
3.推移性
になります。この辺りはUMLを勉強された方には自明のことですね。
1.はアクターの関連やその構造
2.はクラス継承関係
3.は状態遷移図にそれぞれ該当します。

と簡単に説明されても、UMLを知らない人は何のこっちゃ?
でしょうから、若干噛み砕いてご説明致しましょう。

1.関係性と一言で言っても、1対1の対立項なのか、1対Nの
複数関係かそれともN対Nの複合関係にあるのか、とか
その関係性そのものも、因果関係なのか、演繹か帰納なのか
前提なのか手段なのか目的なのか、その連鎖関係なのか
属性なのか機能なのかとか…まあ様々に分析する必要があり
それを構造化することが、この段階で要請されます。

2.重層性とはレベル、パラダイム、抽象性の世界における分析です。
現実の世界はある具体的な関係構造が同じレベルで並列に
関係すると同時に、さらに次元の高い(抽象度の高い)レベルと
次元の低い(より細密で具体的な)レベルの関係性の間に重層的に
サンドイッチになっております。例えば県議会が国会と市議会に
サンドイッチになってるようなイメージです。(ちと違うかも?)

3.推移性とはその構造的な重層性は決して固定的ではありません。
当然それぞれは自律的また他律的に影響を与え合いながら関係性を
変化させると同時に自からのシステム構造を変形させております。
このモデル構築から推移性を分析すること=シミュレーションが
プログラミングの最終目的です。立体的な構造物が重層的に
俯瞰され、その全体と個々の部分が自律的かつ他律的に
影響を与えながら変形、変移、変転してゆくことを総合的に
把握することがプログラミング行為そのものなんです。

かなり噛み砕いてみましたが、ますます分からん??という方!
そう貴方です!
そんな方々の為の思考フレームワークの再構築がこのホーム
ページの作成の目的であります。
思想の脱構築ではありませんので念の為。「脱」とは既に堅牢に
構築された近代思考フレームワークの存在が前提になっております。
現代日本に共通の堅牢な思考フレームワークなんてある
訳が無い。また無いこと自体が無限の可能性を秘めて
おるのであります。

分からん貴方の為に、特別に基礎的な部分をご説明します。
(分かりきっている方は飛ばして結構ですから。)

言語による意志疎通とプログラミングによる意志疎通とは
何が違うのでしょうか?

AとBの言語行為の場合です:

Aの意図ー>言語記号に翻訳ー>表現
ー>Bは言語であると認識すると同時に翻訳作業
ー>BはそれによりAの意図を「推測する」ことが出来る。

AとBのプログラミングにおける意志疎通:
(エクストリーム開発におけるペアープログラミングのイメージ)

Aの意図ー>現実のモデル化からプログラミングに翻訳ー>
作動実行ー>Bはプログラム構造と作動により意図を理解する。

言語は一意に意味が固定しません。翻訳自体に推測が
入ります。つまりAとBの脳が直接接続は出来ないのです。
ところがプログラミングは言語構造自体が一意性を持っております。

Perlのように多様な表現方法はあっても結果は一意です。
つまり最終的には0101に収斂される訳ですから。
もちろんハードの種類によって2進法表現が違うなんて言い出せば
そうですが、それは日本語と英語の違いと同じと考えて、少なくとも
同じ言語であれば差はありません。
さらにプログラミングは言語と違い現実に物質を加工しております。
つまり結果が物質化しているのです。その作動は誤魔化しようが
ありません。つまりコンピューター言語、プログラミング作業とその
作動結果をインターフェースにすることにより、AとBの間の
コミュニケーション・ギャップは言語行為に比べ飛躍的に縮小するのです。

勿論プログラミング対象領域は言語に比べ狭い。
ちょっと脱線・・・・
まさか?

//Kokuhaku.javaです。

class Kokuhaku {
    public static void main(String[] args) {
        System.out.println("貴方が大好きです!");
	//黒々としたDOSコンソール画面に文字列がOPされる。
    }
}
こんなことはプログラミング本来の役割ではありません。
しかし、この意図は間違いなく相手に通じる…「はず」です。
振られるかどうかは別にして…

本線に復帰して今度はプログラミングの意義を「社会的」に捉えて
みましょう。

フルーツパフェのようにフンワリとしたトロトロのクリームに
色鮮やかなフルーツが乗っている…味わえば口の中で
全てがミックスされて…そのような快感にどっぷり浸った
ブランド志向的、消費快楽主義がこの高度経済体制を
支える基盤であります。
それをいかに「壊すことなく」知的好奇心から知的成長へ、
エネルギー大量消費から省エネ環境保護へ、消費快楽行動から
人道的支援へと人類の関心を変換するか?そのための
道具としてコンピューターを位置付けたい。その為の
プログラミング手法の習得でありたい。
かのアラン・ケイ先生が80年代初頭にゼロックスの研究所において
抱いた夢!「コンピューターを人間の思考のための道具にしたい。」
「人間の能力と創造性、及びその交流と創発性を高める道具にしたい。」
この理想を継ぎたいと考えておる次第であります。


あと少し現在のプログラミングをめぐる業界の状況に軽く触れることにより 若干の危惧を表明しておきます。 さてアラン・ケイ先生の高邁な理想は実現の方向に進んでいるのだろうか? ハードは確実にその方向に進んでいます。10年前のホストコンピューター 並の性能を誇るパソコンをほぼ一人が一台オフィスで占有しております。 が、・・・・本当に使いこなしているのだろうか? そこの団塊世代のオジサマやオバサマ! 若い連中にパソコン操作は頼りっぱなしじゃないの? トマホーク並のミサイルみたいな高性能パソコンを線香花火のように ポチポチとメールだけは辛うじて読み書きしているだけでは? もう年金は当てに出来ないんだからね。いや応なくこのネットワーク 環境で働き続けなくちゃならないんだから。 せめて自動車の運転免許をとるぐらいの気持ちで勉強しては いかがでしょうか? さらにこのような無知蒙昧なユーザーにつけ込む業界! ERP業務パッケージに仕事を嵌めこんで、仕事自体を ブラックボックス化してないだろうか?グローバルスタンダードな 業務基準と称して企業の経営手法における差異を失わせて いるのではないか?歴史的に築き上げたその企業独自の 知的ノウハウを逆に喪失させているのではなかろうか? レディーメイドのソフトをオーダーメイド並の値段で売ってないか? サルでも分かる簡便操作で人間の思考能力を奪ってないだろうか? 高い給料の人間をキーパンチャー代わりに使ってないだろうか? プログラマー自体もオブジェクト指向やデザインパターンでプログラムを ブラックボックス化してないだろうか?COM、ActiveX、EJB、など 本当に理解して使っているだろうか? デイリーの開発やメンテ、トラブル対策に追われて勉強する機会を 確保できているのだろうか? 個々人の創造性なんて…能力を高めるなんて…どこの 業界の話しであろうか? 結局以前の開発プロジェクトの焼き直しと、足りない部分は ユーザーに「エンドユーザーコンピューティング」という名目で 押しつけることでお茶を濁してないだろうか? 甘いユーザーのプロジェクトには新人を大量に放りこんで 人月を稼ぎ、金をもらいながら研修させていないだろうか? 初めはやる気があったプログラマーも得意分野が決まってしまい、 同じ分野で塩漬けになって、プログラマー達の停滞を招いていないだろうか? 時代遅れの技術から脱皮出来ず、開発の為に最適技術を選択する のではなく、開発を既存の技術に押しこんでいないだろうか? 既存技術のプログラマーを食わせる事が経営だと、ユーザーの システムを既存技術で囲いこむことが経営者の仕事であるかのように ひたすら縄張り争いに憂き身をやつしていないだろうか? また逆に最新技術の名前だけでユーザーを踊らせ、失敗は 最新技術には不可避です、とか言って不注意まで新技術のせいにし、 結局プロジェクトの無責任体制を招いていないだろうか? 管理者優先指向がプログラマーにも適用され、優秀な技術者が 専門技術を磨き、自から勉強する意欲を失ってないだろうか? SEやプロマネの中に技術的な判断が出来ない人間はいないだろうか? プログラマー=コーダー的な偏見と差別はないのだろうか? コストと納期に追われて、「プログラミングは自己を表現するアートで ある。」という原点を見失ってないだろうか? とまあ、Aransk同好会はプログラミング業界に関して、 様々な問題意識を持ちながらも、我々ド素人がカコチガホナル 言及をするのは全くの筋違いではないか、と考える次第であります。
従ってこのホームページでは今後一切このような業界ネタには 触れることなく、ひたすらアカデミックにかつ「ペダンティック」に プログラミングの本質に迫ろうと考えております。 (もし以降本文中に再々出現するようなことがあれば、それは、あくまで IT業界に対する激しい愛ゆえの鞭と…ピシピシッ) そして、冷たくパフェのグラスの底に残った アイスクリームをストローで「ズズーッ」と吸い上げるので あります。 チョコレートや生クリーム、フルーツの味が一体となって口一杯に 広がり、まさに至福の瞬間であります。 以上がこのホームページの前提です。長々と述べては おりますが、 結論として、「ズズーッ」と吸い上げる快感を味わうことに 収斂しておるのがお分かり頂けたでしょうか? 目新しい手法、難解な語彙、異質なものの組み合わせを ひけらかしたりする、かわりに全てを良識や秩序立った論理に よって判断し無理の無い結論に導こうとする姿勢には、信頼感を 与えるものがあります。 足が地についた安定感を感じさせます。 しかし、このホームページではその手法を採用致しません。 論理や根拠の浮遊性を重視します。分裂的な感性に 依拠します。ぐねぐねとどこまでも繋がり、読み終えても 何が前提で何が結論か分からない、根茎(リゾーム)的な ホームページでありたいと考えております。 次から次へと変化して行くシステム構造を目指して作成する 方針であります。(取り敢えず今のところは) 従って従来のHPと一味違って、読者の皆さんの主体的な参与 が必要となります。開かれたテクストであると言う事は、解釈に よりどうでもなる…?もとい、文章自体の関係性をより重視 せざるを得ません。つまりこの: 空間、行間こそ真の意味での我々の主張であります。 この空間を何で埋めるのか?それを決めるのは皆さんです。 何度も読むに値するHP。読む度に新たな発見があるHP。 出来るだけ頻繁にHPをあちこち追加修正しようと考えております。 今お読みの貴方だけのためのHPでありたい。 皆さんの思考や議論の為の種をまきたい。 それは生成への意志であります。生成の意志とは即ち未完成の 意志であります。