2004年08月24日
川俣晶の縁側ソフトウェア技術雑記total 10358 count

絶望はまだ早い? プログラミングの未来への輝ける進歩への希望がここにある? 檜山正幸さんのプログラムの正しさに関する講演資料

Written By: 川俣 晶連絡先

 日本のXML界の黎明期に、XMLを牽引した2大偉人は、村田真さんと、檜山正幸さんだと思います。(自称偉人、仲間内の偉人はいくらでもいるでしょうが、それじゃ駄目ですよ)。INSTACの委員会などで積極的に発言したのはこの2名であることは間違いないと思いますし、それだけに限らず、RELAXという新しいスキーマ言語を生み出して、現在ISO/IECの規格にまでなったRELAX NGに至る激しい荒波の最初の一方を踏み出したのもこの二人であると言って良いと思います。

 残念ながら檜山正幸さんは、日本のXML関係のメーリングリストやイベントからは引退されてしまいましたが、Java World誌の雑誌内雑誌であるXML Worldで硬派の連載を続けるなどの貢献が見られました。

 しかし、以下の内容を見た時、心底これは凄いと思いました。

 これはXMLに関する話ではありません。

 基本的には、プログラミングの話題であり、プログラムの正しさとは何かという話です。

 JUnitという言葉が出てくることから分かるとおり、テスト駆動開発とも関わりのある話です。しかし、単純にプログラム技術に関する解説ではありません。Javaの話でもありません。表面的には形式的(formal)であることのススメであると言えますが、それよりも硬直化した非現実的な現在のプログラミング思想に対する痛烈な批判という部分があるでしょう。

 それは、私自身の立場と、どことなく類似性を感じさせるものです。

ぶっちゃけたことを言えば、このコンテンツにて、本質的に意味のある内容はここで終わりです。興味を持った人は上記サイトに飛んで一通り内容を読んで下さい。

類似性を感じる部分 §

 理論的に凄い部分を差し置いてこんな話を書くのもあれですが。

 どういうところで類似性を感じるかというと。

 たとえば、上記サイトの事後に追加した資料「増補版テキスト」には以下のような文章が見られます。

私は、人間の(集団によって共有される)理解の様式、解釈の立場、あるいは主義主張や文化・趣味を離れて、計算現象それ自体を問題にしたいと述べました。「単一継承 vs 多重継承」、「継承 vs 委譲」などを趣味の問題だと片付けては、おそらく袋だたきにあうでしょうが、このての議論を棚上げにして、たまにはその背後の現象や構造を見つめてみてはどうでしょうか。

 ここでは、袋だたきにあうようなことを自覚していることが示されています。

 一方で、私もこんなことを書いてます。

▲→川俣晶の縁側→技術関連執筆情報 熱血VBプログラマ応援団 第7回 VBのモジュールはオブジェクト指向に不要?より

 こういうものを書くのは、けっこうヒヤヒヤものです。

 何がヒヤヒヤするのかといえば、何と言ってもオブジェクト指向の絶対的な正しさに異論を唱えているからですね。それに加えて、Javaなんが眼中に無いぜ、VB.NETが本命だ、などという態度を取っているわけですから、夜道で誰か刺しに来るかも知れませんね。(中略) (笑。

 言っている内容には相当な違いがありますが、「夜道で誰か刺しに来る」という危惧を、笑いと共に表明している点で、「袋だたきにあう」ケースに言及した檜山さんと共通する何かがあるように感じられました。

クラスとオブジェクトの定義 §

 大多数のオブジェクト指向に関する書籍や発言に対して不満であるのは、クラスやオブジェクトの定義が曖昧であったり、不明瞭であったりすることです。しかも、曖昧であったり不明瞭であったりすることの問題に対して、あまりにも無自覚的であること。「現実の物と1対1に対応するもの」と言った現実にはほとんど何も定義していないような説明がまかり通ることもあります。

 もちろん、クラスやオブジェクトというものの生まれた経緯から必然的に、その定義は1つに収束できず、多義的にならざるを得ません。そこで問われるのは、オブジェクト指向について語るあなたは、クラスやオブジェクトをどのようなものと定義して語るのか、と言うことになります。その言葉を発した人の中には、その人にとっての定義があるはずです。多義的な言葉の意味を選び取って使っているはずです。しかし、そのような問題意識は、非常に多くのケースで通じません。どの定義を選んでいるかというレベルで通じないのではなく、そのような問題意識があり得るという認識そのものが通じないのです。

 そういう非常に不満な状況で生きてきたわけですが、檜山さんは上記サイトで素晴らしい定義を付けています。

  • クラス:≡状態遷移系(座標付き状態空間とその上に働く遷移の集合)
  • オブジェクト:≡状態空間における運動の軌跡
  • オブジェクトの状態:≡オブジェクトがある時点で占める状態空間の点
  • インターフェース:≡観測と遷移を行う“メソッド記号”の集まり。
  • 仕様:≡インターフェースに対して、制約を記述した論理式を付け加えたもの。

 実に素晴らしいですね。「現実の物」のような、何かを言っているようで実は何も言っていないレトリックのような言葉は使われていません。

 その上で、檜山さんは、この定義が100%完全ではないと言うニュアンスも文章から匂わせています。当然、100%完全な定義などあり得ないことを自明の前提としている訳で、とても好感できる知的な態度です。

 実に素晴らしいですね。

アクセッサとミューテータ §

 メソッドに相当するものを、アクセッサとミューテータに分類して扱っています。

 JavaWorld誌の連載にもこの話題は出てきます。

 これも良いですね。

 アクセッサは内部状態を変更せず値を取得するだけのもの。ミューテータは内部状態を変更するものです。内部状態を変更するものと、変更しないものは、意識的に分けて使う必要があるのではないか、ということはプログラムを書いていてしばしば思うことです。

 それに加えて、最近手を出したRubyには、名前の最後に!が付くメソッドと突かないメソッドがあって、付くメソッドは破壊的に処理を実行する、といった分類を見て、内部状態を変更するか否かはもっと注目すべきではないかと思っていたところでした。

 ちなみに、内部状態を変更できないクラスというのを良く書きますが、このような漠然とした問題意識の反映かもしれません。

歯ごたえありすぎ・これでもまだ終わりではないのか…… §

 これを書いている時、増補版テキストには、「スライド31:刺激反応系としてのオブジェクト」までしかありませんが、ここまで読んで既に分からないところもあって、かなり大変だったのにまだ続きがあるとは……。

類似性を感じる部分 (もう一度) §

 でも、本質的に類似性を感じたのは、以下のような部分です。

いま言えることは、(理由と根拠はなんであれ)私が「プログラミングの流儀」や「開発の心構え」などには(今回の文脈では)注意を払ってないということです。したがって、「正しさ」は、実社会やプログラミング社会(?)の道徳や正義とは何の関係もありません。ここでの“正しさ=correctnes”は、ある対象に関する記述と、その対象の実際の振る舞いとのあいだの合致のことです。そして、そのような記述や振る舞いを論じるにあたって、計算現象を前提とする態度が(少なくとは私にとっては)健康的であり有効性を持つと期待できるのです。

 たとえば、プログラムの健全さの尺度として、私は「クラスのたった1つの役割」というような表現には否定的です。「このクラスは複数の責務を持っているから良くない」といった論評には賛成しません。ここでいう「役割」や「責務」というのは、上の文章でいう「実社会やプログラミング社会(?)」の「道徳や正義」あるいは常識といったものによって裏付けら得るものに過ぎず、道徳も正義も常識も共有されない相手との共同作業で使える尺度ではありません。それどころか、親しい仲間と共有していると思うことすら危険なことで、そう思い込むことは自分から破滅への第1歩を踏み出すことの同義語でしょう。そんな意図しない破滅願望者の仲間入りは御免だと思います。

 だからこそ、人間の思い込みや恣意的解釈を除外して、数値によって計算できる複雑度によってソースコードの善し悪しを判定できるか、という考えを私は持ち始めたわけです。(とはいえさっぱり勉強が進んでいませんが)

 そのような思いと、「実社会やプログラミング社会(?)の道徳や正義」と切り離された「計算現象を前提とする態度」が「健康的であり有効性を持つと期待」することには、類似性を感じるわけです。

 飛躍しますが、今の(昔から?)プログラミングの世界の問題は、ミームと現実の相違が明確に付いていない多くの人達によって、ミームの正義があたかも現実であるかのように語られることだと思います。それはミームの持つ正当な機能性と言えますが、プログラムが実在する計算事象を引き起こすシステムである以上、実際に計算事象を引き起こせば、ミームの正義と現実の相違は明らかになります。それを拠り所にして、人間がミームと現実を識別して、意識的に複数のミームを取り替えながら活用できるメタミーム的存在に進んでいく必要があるでしょう。

 (メタミーム化はコンテキスト性の希薄化への処方箋と言うこともできそう)

もっと蛇足の余談を付け加えると §

 こんなことを思い出しました。

 未熟な若い日に、プログラミングとは何であったか。

 それは、自分が思い込んでいることと現実は違うと言うことを思い知らせてくれる行為であったと思います。プログラムを書いて実行してみて、思った通りの結果にならなかったことは、いくらでもあります。バグは別としても。

 最近では、出来の良いプログラムの実例が山のように世の中にあるので、あまり非常識なプログラムを発想することは多くないのかもしれません。もしそうなら、今時の若いプログラマは、こういう経験をあまり持たないかもしれません。

 しかし、思い通りにならない他者としての「計算現象が存在する」ことは間違いない、と私には思えます。計算可能と不可能の限界領域にチャレンジしていけば、その実在感はくっきりと浮かび上がってくるのではないかと思います。

 「CPUの性能が上がったから、もう変なトリックは使わなくて良い」という誤った常識が蔓延した結果、限界領域へのチャレンジが減っているような気がしますが、「計算現象が存在」を体感するためにそのようなチャレンジは有益だと思います。

 そして、計算事象の実在性が実感できれば、明らかに計算不能に思える怪しげなパラダイムの誘惑に引っかからなくて済むようになる……かもしれません。

オマケ §

 この資料が公開されてから既に日が経っているのに、なぜ今頃これを書いたかって?

 それは、Java World誌を見ていて、このURLが書いてあったからです。

 パソコン雑誌の速報性など、しょせんはこの程度です。

2004年12月29日追記 §

 このコンテンツに対するフォローを書きました。

Facebook

トラックバック一覧

2005年01月27日これは正気の試みか、未来への希望か、パイプとフィルタを極めて大胆に拡張する檜山正幸さんのChimaira!?From: Body First! オータム マガジン

これとか、これのあたりで檜山正幸さんの書いたものについて紹介した関係上、これも紹介しておく価値があるでしょう。 実は、檜山正幸さんから、以下のサイトを作ったというメールが来ました。Chimaira. 続きを読む

2004年09月24日XMLに限定されず情報技術に携わる者はみな読むべきJavaWorld誌連載「XMLボキャブラリの理論と実践」From: 微速前進! オータム マガジン

JavaWorld誌に延々と連載が続く「XMLボキャブラリの理論と実践」。 これは実に素晴らしいですね。 最近、特に切れ味が鋭くなって、ドキドキ度がアップしています。 もはや、XMLに限定された話題 続きを読む

2004年08月31日イノセンスとビューティフル・ドリーマーとの決定的な相違点・物理現実は判定できる!?From: 過労ダウン! オータム マガジン

下高井戸シネマのレイトショー 下高井戸シネマでは、2004年の8/30(月)~9/4(土)に渡ってレイトショーとしてイノセンスが上映されます。歩いていける距離ですので、初日に行ってみました。 とはいえ 続きを読む

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2004年
08月
29日
生APIレベルでのGDI+初体験・用もないのにGDI+を使ってみるドキドキ (C++ソース付き)
3days 0 count
total 22331 count
【技術雑記】の前のコンテンツ
2004年
08月
19日
ソフト冒険記・SUSE Linux 9.1 Personal
3days 0 count
total 4145 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20040824151637
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.