メッセージ。 - diary
2014-07-24
# にゃー
メッセージパッシング方式でコードを書いたことはないけど、理屈は別に間違っていると思わない。それが機能しない、ファンタジーだというなら、どういう理屈でうまくいかないか説明しないと、アランケイに失礼だし、議論が広がらないんじゃないかな?
個人的には、メッセージパッシング自体はオブジェクトが自身の内部状態と外部IOに責任を持つという考え方を別の言葉で表現した自然な見方のように思う。つまりそれは、各プログラマがコーディングする際にプログラム全体を把握していなくてもよくて、プログラムの一部の構造だけ理解していればいいということだ。
たとえば、アセンブリ言語でコーディングしていると、変数やルーティンはすべてグローバルなのでプログラマが手動でケアする必要があるし処理はGOTO文で書かなきゃいけず、壮大なパズルになる。でもこれだと大きなプログラムで整合性をつけるのが大変だし、複数人のプログラマで分業がしにくい。そしてダイクストラがGOTO文は有害だと言って、構造化プログラミングが普及していった。
で、C言語のような手続き型プログラミングの時代になるわけだけど、これによりプログラマーは、あるプログラムの全貌を子細に把握していなくてもプログラムをできるようになった。つまり、楽になったし、分業もしやすくなったわけだ。プログラムを構造に分解して、各部分を完成させれば、総体としてプログラムが動くはずなのだから。
ただ、C言語なんかではまだグローバルに生きる変数を強く意識しなきゃいけなかったし、アセンブリ言語でコードを書いていたときのような、プログラムの処理の流れの子細な把握、詳細仕様レベルの理解という仕事は、依然として各プログラマに課されていた(アセンブリよりかなり楽になったとはいえ)。その点を改善しより構造化を推し進めたのがオブジェクト指向の少なくとも一面といえるだろう。
プログラム全体の詳細仕様を知らなくても、ある機能ブロックの内部と外部とのインタフェース仕様を正確に理解していればその機能ブロックを改修できる、オブジェクト指向によってもたらされた一つの恩恵だ。ただし、ただオブジェクト指向言語を使えばこの恩恵が受けられるわけではない。構造化プログラミングの考え方に反するクラスをまたがるグローバル変数や、(不必要な)副作用を伴うメソッドを定義・使用しないようにしなければならない。
そうすれば、あるオブジェクト(クラス)の内部(プラス外部とのインタフェース)だけ見ていればプログラミングができるようになる。プログラムを抽象的に見られる人からすれば、これはメッセージパッシングに他ならない。
こうした構造化によるプログラム可能領域の可視化は、関数型プログラミングでも主要な話題だが
テスト
--047d7bdc0d9ee796ec04fed539a3
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
44OG44K544OIMg0K
--047d7bdc0d9ee796ec04fed539a3
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64
PHAgZGlyPSJsdHIiPuODhuOCueODiDI8L3A+DQo=
--047d7bdc0d9ee796ec04fed539a3--
個人的には、メッセージパッシング自体はオブジェクトが自身の内部状態と外部IOに責任を持つという考え方を別の言葉で表現した自然な見方のように思う。つまりそれは、各プログラマがコーディングする際にプログラム全体を把握していなくてもよくて、プログラムの一部の構造だけ理解していればいいということだ。
たとえば、アセンブリ言語でコーディングしていると、変数やルーティンはすべてグローバルなのでプログラマが手動でケアする必要があるし処理はGOTO文で書かなきゃいけず、壮大なパズルになる。でもこれだと大きなプログラムで整合性をつけるのが大変だし、複数人のプログラマで分業がしにくい。そしてダイクストラがGOTO文は有害だと言って、構造化プログラミングが普及していった。
で、C言語のような手続き型プログラミングの時代になるわけだけど、これによりプログラマーは、あるプログラムの全貌を子細に把握していなくてもプログラムをできるようになった。つまり、楽になったし、分業もしやすくなったわけだ。プログラムを構造に分解して、各部分を完成させれば、総体としてプログラムが動くはずなのだから。
ただ、C言語なんかではまだグローバルに生きる変数を強く意識しなきゃいけなかったし、アセンブリ言語でコードを書いていたときのような、プログラムの処理の流れの子細な把握、詳細仕様レベルの理解という仕事は、依然として各プログラマに課されていた(アセンブリよりかなり楽になったとはいえ)。その点を改善しより構造化を推し進めたのがオブジェクト指向の少なくとも一面といえるだろう。
プログラム全体の詳細仕様を知らなくても、ある機能ブロックの内部と外部とのインタフェース仕様を正確に理解していればその機能ブロックを改修できる、オブジェクト指向によってもたらされた一つの恩恵だ。ただし、ただオブジェクト指向言語を使えばこの恩恵が受けられるわけではない。構造化プログラミングの考え方に反するクラスをまたがるグローバル変数や、(不必要な)副作用を伴うメソッドを定義・使用しないようにしなければならない。
そうすれば、あるオブジェクト(クラス)の内部(プラス外部とのインタフェース)だけ見ていればプログラミングができるようになる。プログラムを抽象的に見られる人からすれば、これはメッセージパッシングに他ならない。
こうした構造化によるプログラム可能領域の可視化は、関数型プログラミングでも主要な話題だが
テスト
--047d7bdc0d9ee796ec04fed539a3
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
44OG44K544OIMg0K
--047d7bdc0d9ee796ec04fed539a3
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64
PHAgZGlyPSJsdHIiPuODhuOCueODiDI8L3A+DQo=
--047d7bdc0d9ee796ec04fed539a3--
2014-07-20
# 日本人とイノベーション
日本の社会や企業はイノベーティブじゃなくて嫌だとずっと思っているのだけど、最近になってなぜ日本はイノベーティブじゃないか分かってきた気がする。
それは、たぶん日本の社会が(ここ1000年以上といったスパンで)農業によって成り立ってきたからだ。農業というのは、毎年決まった時期に種をまき作物の世話をし、時期になったら収穫をすることで基本的な生活が成り立つ。自然の恵みは1年のサイクルと決まっていて、それこそが人間の暮らしを支えてくれる最も重要なファクターであったはずだ。
そういったサイクルの中で生きている人間にとって、最も恐るべきことは、そのサイクルが変わってしまうこと。自然の恵みのサイクルが破壊されてしまうことだろう。
英語の勉強をしていて英語圏の人と雑談なんかをしているとき、自分は「Do you feel it's natural?」と頻繁に質問してしまっているように思うが、たぶんこの質問を正しい(より自然な)英語で表現するならば「Do you feel it's better?」となるのではないか。
この違いはもちろん、物事の価値判断を「それが自然なあり方である」という基準で行うか、「それが良い方法である(良い方法であると自分が考える)」という基準で行うかということだ。日本人は、自分がどう考えるかではなく、自然の中でそれがどう位置付けられるか、自然と折り合いが付くかを暗黙の前提として考えてしまっている。つまり、自然を最上位に置く価値観を持っているように思う。
だとするならば、このような価値観のなかではイノベーションというのはそれほど重要ではなかったのではないか。もちろん、農機具が改良されたり、作物の作り方で新しい発見があったりすることも重要だろうけど、基本的には毎年のサイクルを回すことが基本であり最重要であることには変わりがない。また、20年そこらのサイクルで子が生まれまたその子に子が生まれというサイクルを回すこともまた重要な自然のサイクルであったはずだ。
そんな中で年功序列や家父長制以外の方法が価値を持つことなどあるだろうか?もちろん、発明や発想、研究なども重要ではあるのだけど、それらは博打みたいなもので稀にしか成功しない。人口の大半を占める一般大衆にとっては自然のサイクルを回すことのほうが生産的だし、社会全体として見たときに、そちらのほうが「まずやるべきこと」であることは間違いがない。
とにかく自分に回ってきた順番をこなすこと、自然のサイクルに沿って(基本的に)いつもと同じやり方を守ること、それが重要であっただろうと思う。また、「和をもって尊しとなす」というのも豊かな自然の恵みを分け合う、それ以上のことを望んで極端なことをしないことが賢いということだろう。その価値観が、現代社会にもそのまま息づいているのではないかという気がする。
それは、たぶん日本の社会が(ここ1000年以上といったスパンで)農業によって成り立ってきたからだ。農業というのは、毎年決まった時期に種をまき作物の世話をし、時期になったら収穫をすることで基本的な生活が成り立つ。自然の恵みは1年のサイクルと決まっていて、それこそが人間の暮らしを支えてくれる最も重要なファクターであったはずだ。
そういったサイクルの中で生きている人間にとって、最も恐るべきことは、そのサイクルが変わってしまうこと。自然の恵みのサイクルが破壊されてしまうことだろう。
英語の勉強をしていて英語圏の人と雑談なんかをしているとき、自分は「Do you feel it's natural?」と頻繁に質問してしまっているように思うが、たぶんこの質問を正しい(より自然な)英語で表現するならば「Do you feel it's better?」となるのではないか。
この違いはもちろん、物事の価値判断を「それが自然なあり方である」という基準で行うか、「それが良い方法である(良い方法であると自分が考える)」という基準で行うかということだ。日本人は、自分がどう考えるかではなく、自然の中でそれがどう位置付けられるか、自然と折り合いが付くかを暗黙の前提として考えてしまっている。つまり、自然を最上位に置く価値観を持っているように思う。
だとするならば、このような価値観のなかではイノベーションというのはそれほど重要ではなかったのではないか。もちろん、農機具が改良されたり、作物の作り方で新しい発見があったりすることも重要だろうけど、基本的には毎年のサイクルを回すことが基本であり最重要であることには変わりがない。また、20年そこらのサイクルで子が生まれまたその子に子が生まれというサイクルを回すこともまた重要な自然のサイクルであったはずだ。
そんな中で年功序列や家父長制以外の方法が価値を持つことなどあるだろうか?もちろん、発明や発想、研究なども重要ではあるのだけど、それらは博打みたいなもので稀にしか成功しない。人口の大半を占める一般大衆にとっては自然のサイクルを回すことのほうが生産的だし、社会全体として見たときに、そちらのほうが「まずやるべきこと」であることは間違いがない。
とにかく自分に回ってきた順番をこなすこと、自然のサイクルに沿って(基本的に)いつもと同じやり方を守ること、それが重要であっただろうと思う。また、「和をもって尊しとなす」というのも豊かな自然の恵みを分け合う、それ以上のことを望んで極端なことをしないことが賢いということだろう。その価値観が、現代社会にもそのまま息づいているのではないかという気がする。