オブジェクト指向言語が流行した必然性について考える(1)

さて、4月からこのBLOGを書いていますが、プログラマーズログと銘打っているのにこの記事が初めての技術系の記事ですw

なぜ唐突に技術系の記事を書き始めたのかというと、ダジャレクラウドの使用技術が JAX-RS(RestEasy) Google App Engine/Java Slim3 Twitter4J jQuery という技術を使っているので、これら周辺の技術を身につけたいIT技術者も結構いるんじゃないかと考え、ダジャレクラウドの実装で得た知識をベースにした実践的な勉強会を開こうかと企画しているからです。

とりあえずは、技術者向けでなく自分でWebサービスを立ち上げたいが、フロントエンドはともかくとしてバックエンドがよくわからないWebデザイナーイラストレータだけどWeb系の知識をつけたい人のようなグラフィック系のスキルを持った人を対象に基礎的な講座を開こうかと思っています。グラフィック系の人をうまく巻き込みたいので。そこでノウハウを貯めて、IT技術者向けをはじめようかと思っています。

が、最近試しに開いたうちわで勉強会の経験からすれば、だいぶハードルが高いかんじなのでJavaScriptフォーカスの勉強会からかな、と考えなおしていたりw 現在絶賛悩み中。

で、そこらへんを教えるにあたって避けられないと個人的に思っていることが「オブジェクト指向とはなんぞや?」という古くからの難題。これを避けて説明すると、たぶんもやっとしたままフワフワ理解して、わかったのかわからないのかがわからないまま学習が進んで行く気がするのです。なので、僕なりにこの難題に取り組んで見ようかと思います。まあ、きっと玉砕に終わるでしょうけど(T_T)

初心者向けの書籍を最近読んでいないので、最近の書籍ではうまく説明されているのかもしれませんが、そんな話を聞いたことがないので、たぶん今でもオブジェクト指向に関する説明の始まり方は

「世界は全部オブジェクトで出来ているんじゃぁぁーーー」
という「オブジェクト至高教への洗脳」から始まっているものと推察しますw テンション高めの説明から入るのでドン引きする人多数な感じがかなりアレですね。オブジェクト指向の説明は独特な説明から入るので宗教っぽいんですよね、若干。宗教という表現をさけるなら思想、哲学といえば柔らかいでしょうか。

僕がその手の初心者向け書籍を読んだ時に思った事は「なぜオブジェクト指向言語(Java)で書く必要があるのか? 構造化言語(C言語等)ではダメなのか? 何が違い、何がメリットなのか?」にうまく答えられていない、という疑問でした。オブジェクト指向の世界観の説明で手一杯でそこらへんをうまく説明できていない気がしました。

構造化言語(C言語等)ではできなくて、オブジェクト指向言語(JavaC++等)で出来るようになったものとは何か?

結局ここらへんが「オブジェクト指向言語が流行した必然性」につながっているのだと思うのです。ところがオブジェクト指向言語が生まれた経緯の説明は、僕の偏見が入った見方だとは思うのですが

なんとなく物好きが集まってSmalltalkというイケてる言語を生み出して、結構イケてたのでなんとなく技術的影響力を持ち、現在のプログラム技術にはなんとなく必要不可欠のものになりました。

という説明が多いように見受けられます(超意訳) まあもっと理論的な始まりが有るんですが、一般的なイメージはこんな感じな気がします。僕はオブジェクト指向言語が流行したのは必然だと思っているので、このような説明だとそこらへんの必然性がぼやけてしまい理解を妨げているのではないか? と思っています。その為、そこらへんの説明から入ったら、もしかしたらいままでの説明より若干分り易くなるんじゃないかと考え、まず始めにオブジェクト指向言語が流行する歴史的必然性への考察からの説明を試みたいと思っています。

まずその説明に入る前に、話の枕としてすこし変わった話をしたいと思います。中学校の英文法の時間(今も行われているのかどうかは不明)で、日本語と英語では

英語  : S(主語) V(述語)  O(目的語)
日本語 : S(主語) O(目的語) V(述語)

S:Subject(主語)V:Verb(動詞)O:Object(目的語)
C:Complement(補語)M:Modifier(修飾語)

という語順の違いがある、という事を教えられたと思います。英語は日本語と違って V(述語)の位置が前にきているわけですね。この語順の世界的な割合は言語数での比率だと

日本語型(SOV) 45% アラビア語型(VSO) 18% 
英語型(SVO)はWikipediaに記載がないので詳細は不明ですが30%位?

【参考】 Wikipedia SOV型 SOV言語はどのくらい存在するの?

のようです。WikipediaBiglobeの情報は若干違いますが、日本語型(SOV)が一番多い事は共通しているようです。しかし使用言語と人口比率の関係をみると圧倒的に英語型(SVO)の方が使用人口が多いらしいです。英語と中国語がこの形式だからですかね。

しかし面白いことを最近知りました。英語型(SVO)の言語の人に言葉を使用せずジェスチャーのみでコミュニケーションする、という実験をすると 日本語型(SOV) の語順で説明するようになるらしいです。【参考】「英語式語順は、自然な思考の順番に反する」研究結果

面白いですよね。つまり人間の自然なコミニュケーションの形は日本語型(SOV)である可能性が有るわけです。ということは、英語型(SVO)の語順は不自然である可能性が有るわけです。

なぜ V(述語)の位置が前に来たのか?

ここらへんに、不自然さを生み出した原因があると思うんです。そんなことを考えていた時に、複数の言語を喋れる人に上記のジェスチャーだと語順が変わる、という話をしたら、

それはたぶん意思疎通がとりあえず出来るようになるからだろうね。
SVでとりあえず文の大枠の意味は確定するから

とおっしゃっていました。なるほど! とその時思ったわけです。英文法の時間で文をする構成パターンとして

SV SVO SVOC etc..

というようなパターンがある、と習ったと思います。Cは補語ですね。参考 : 英文法の文型

つまり文の最小構成は「SV」 SVさえ確定すれば文の意味は、ほぼ決定する訳です。つまり読む人と意思疎通がとりあえず完了する。これに気がついて「英語型(SVO)の話者の比率がなぜ多いのか?」の一端が理解できました。英語も中国語もSVO型、ちなみにアラビア語はVSO。

どれも大陸国で異民族交流(平和的、侵略的な場合も含む)が避けられない環境から生まれた言語と言えます。まあ、英語はイギリスなので島国ですが、ノルマン・コンクエストとかフランス語の影響とかを考慮すると(参考URL) 異文化交流の影響でSVO化したとみなして良い気がします。異文化交流が絶え間なく続くのでネイティブ話者でない人と会話せざるを得ないわけです。そういう人達と会話することを想像してみてください。

日本語型(SOV)でそのまま会話しようとすると、O(目的語)の部分は長かったり短かったりするので、ネイティブでない聞き手は

O(目的語) と V(述語) の別れ目が判断出来きずに意思疎通できない

あるいは出来ずらいはずです。そういう相手に対して普通に話してみて伝わらなかった時、次に同じ内容を伝えようとした場合、省略しても問題ない部分を省略して、大事な部分を残して話を再構成すると思います。その再構成方法は殆どの場合、おそらく

O(目的語)を抜いて S(主語)V(述語)だけで再構成

するのではないでしょうか? そうやって意思の大枠をとりあえず伝えられたら、その後により意思、意味を詳細化、確実化するために O や C を付け足すようにコミニュケーションするのではないでしょうか? アラビア語はVSOのようなので多少状況が違いますが、SVでとりあえず意思伝達を仮確定する、という仮説は満たせそうです。

つまりネイティブ話者でない人達との会話が常態化している環境だと、SVでとりあえず意思疎通を仮確定し、OCで詳細化、確実化という意思疎通手順を取らざるを得なくなって、語順としては不自然なSVO型が定着したのでは無いか? と思ったわけです。

そう考えるとこの英語型(SVO)は、言語が国際化(異文化と活発な交流)する過程で変化せざるをえない形なのかもしれません。日本のように縄文時代のようなのほほんと過ごしていた時代から異民族交流がほぼなかった環境だったから、自然な並び順であるSOVのままで変化が起こらず現代まで来ることができたのだと思います。

しかしこれからはどうでしょうか? 異文化交流も増えるだろうから日本語も日本語ネイティブの人と会話せざるを得ない状況が常態化すれば、もしかしたら語順の変化が起こるかもしれませんねw

さて、なんでこんな枕話をしたのかというと、

・ネイティブ話者でない人と意思疎通するにはSVを先に明示するのが合理的
・意思疎通において SV は必須だが OやCは省略可能

ということを強調したかったからです。この事をオブジェクト指向言語的に記述してみると「S.V(O,C,M)」もうちょっとプログラムっぽく書くと

subject.verb(Object o,Complement c,Modifier m)

の様な感じでしょうか? ここでのカッコ() 表記は、メソッド(関数)の呼び出しを意味するカッコ表記ですが、このカッコの意味を「省略可能である」「補足情報である」という意味でとらえ直すとなかなか興味深い表記に見えてきませんか?

ここらへんに「オブジェクト指向言語が流行した必然性を考える」上で、キーポイントがあるのではないかと思ってこんな枕話をしてみました。

長くなったので、ここらへんで一旦終わりにします。つづきは来週。