プログラマの再教育におけるパラダイム変換、あるいは、嫌いな人にも使える言語はどれだ?
よしきさんから、再び、コメントをいただきました。
私は「『この思考形態』の中と外」という図式を提示して、その図式の中に自分なりにSmalltalkとRubyを位置付けてみたわけです。
私は、(ファン歴は長いけど)実際にSmalltalkを使った経験は無いので、Smalltalkを見る視線は、当然、実際に毎日使っている方から見るとズレている部分があるのでしょう。それは当然の指摘だと思います。Smalltalkには「理想を追求した」面と、「丁度良いバランスを取っている」面があるのでしょうが、遠くから見てるとどうしても前者が目についてしまうということではないかと思います。
だから、その図式の中で私が「Smalltalkはこのへんだろう」と置いた駒を動かされるのは、全然かまわないし、私にとっても読んでいる人にとっても有用だと思います。
ただ、(もう一度引用させていただきますが)
「普通」ではないかもしれないけど数の少ないコンセプトを一旦理解すれば、後はなんでもできる、という思考形態は、人間にとって本能的に受け入れにくいところがある
という「受け入れにくさ」については、もうひとつ理解されてない(というよりそもそも私がうまく説明できてない)気がします。
そこで、もうちょっと別の形で、この図式にこだわってみたいのですが、私がこれを書きながら考えていたのは、「ひとつの言語を習得したプログラマが次に(パラダイムの違う)言語を習得する時に起こる抵抗」ということです。例えば、COBOLの経験者にCを教えるとか、Cの経験者にC++を教えるという時の困難さです。
一般的に、よくできたプログラミング言語にとって大きい課題が「経験者への再教育」ではないかと思います。つまり、よくできた言語は、従来の概念をバラして「数の少ないコンセプト」で再構築したものです。ですから、これを使いこなすには、自分の頭の中のパラダイムをいったんバラして再構築する必要があります。そこに大きな抵抗を感じる人がいるような気がします。むしろ、未経験者に教えるより難しいこともあります。だいたい言語の回りにいる(言語なんかに興味を持つ)人は、パラダイムが壊されることに快感を感じるような面があるので、この問題にあまり注意が行かない。
私の経験では、ある言語に習熟してそれを使いこなしている人の中に、想像を絶するような頭の固さの人がかなりの割合で存在しています。よくできた言語のコミュニティの中では、そういう層が存在することへの認識、危機感が薄いような気がします。
私は、幸か不幸か、COBOL→C、VB→C++、Java→Rubyという形で、そういうギャップに直面して戸惑うという経験をたくさんしています。「前の言語でこれくらいのことができる人だから、新しい言語でも当然これくらいのことをするできるだろう」と思うのですが、これがなかなかうまく進まない。もちろん経験者ですから、手取り足取り教えなくても、それなりに動くものは作るのですが、「こんな書き方をするなら、言語を変えない方がよほどよかった」と思わざるを得ない結果になってしまうのです。
別の言い方で言えば、「その言語が嫌いな人がどの程度その言語を使いこなせるか」ということになるかもしれません。
最初の記事の背景として、そういう問題意識が漠然とありました。「『この思考形態』の中と外」という言い方もそこから来ています。
私がRubyを評価するひとつの理由は、このギャップを一番うまく乗りこえられる言語だということです。つまり、初心者やその言語が好きになれる人に対しては、もっと教えやすい言語がたくさんあると思いますが、経験者に再教育しやすい「よくできた言語」は、Rubyであるということです。
と思いながらも、自分自身でJava経験者にRubyのさわりを教えて、かなりの拒否反応を持たれるという経験もしてます。「教え方が悪かったんだ」と自分ではそれを合理化していますが、どうなんでしょうね。
この評価軸で、感覚的に「どの言語が優れているか」という論争をしても水掛け論になってしまうと思います。それよりはむしろ、「優れた言語」を使っているプログラマの間で、この問題を共有して、それをのりこえる方法を、一緒に考えていくことが必要ですね。
VisualBasicとHyperCardの違いを見てなんとなく感じることなのですが、マイクロソフトがこのあたりにひとつのマジックを持っているような気がします。不思議と、どういうバックグラウンドであってもVBを受けつけない人はほとんどいないんですね。