Archive for 5月, 2011

プログラマーを超えるプログラム

http://twitter.com/ruripeco
自作の乱作文生成bot の「るりぺこさん。」が稼働して1年半近くにもなる。ここ半年はプログラムの更新を行っておらず特に目立ったアルゴリズムの更新もないため、ほとんど放置状態なのだけれどもそれでも毎日『おっ、これはなかなか』と思わせる珍文章をつぶやいているため作った本人が割と楽しく眺めている。
まあ、乱数作文なので意味が通らない文章ばかりなのだけれども、それでもなんとなく意味があるようでないようなところとか面白いと感じる部分はあるように思う。
しかし、この「作者が見て面白い」というのはずいぶんと奇妙な構図にも思える。
プログラマーがプログラムを作った以上、それを作ったプログラマが意図する範囲でしかコードは動けないものなのではないだろうか。作者が作成して意図しない動きをした場合それはバグと呼ばれる物なのではないか。
本当にプログラムがプログラマーの意図を超えて動作するなんてことはあるのだろうか。

作成したプログラムがプログラマーの意図通りに動かない、予想を超えて動くという状況にはどのようなものがあるだろう。

    ・意図した動作をする様なコードが書けていなかった(コードのバグ)
    ・仕様に不備があり、特定のパターンが策定できていなかった(ロジックのバグ)
    ・仕様を超えた範囲で動作した(仕様の不具合)
    ・動作そのものは規定だが、入力と出力が任意である

上の3つはバグなりミスの範疇だが、最後のひとつはそうではなくソフトウェアとして正しい挙動となる。
例えばコンパイラなどでアプリケーションをコンパイルする作業はプログラムとして正しく動作しているものとなる。ただし、その結果できた素晴らしいアプリケーションはコンパイラのプログラマが意図したものではない。コンパイラのプログラマの成果でもないし、コンパイラに不備があったわけでもないが、ユーザーはコンパイラを使ってコンパイラの作者の想定を遥かにこえたアプリケーションを生みだすことができるだろう。
同じようにワープロソフトを使って直木賞作品が書かれたとしても、それはワープロソフトのプログラマの意図とは違ったものであろう。
これを全部ひっくるめてプログラムが引き起こした物と定義できるのなら、プログラムが作者の意図したとおりに動きつつ意図しない成果を世界に影響することができると言えるかもしれない。

プログラマーはしばしば、コンピューターやコードの中で自分が神にでもなったかのような幻想に酔いしれることがある。というかありがちな気がする。
問題をモデリングし、演算解決の道具であるコンピューター記述言語に落とし込み、おおよその事象を演算にまで分解して自分が意図した結果を表現してみせる。コンピューターはプログラムで記述した通りに動くから、プログラム自体がプログラマーの力量を表した物であり結果を導き出したのはプログラマーのおかげであるという。
まあそれは問題をモデリングした範疇では正しいかもしれない。
だからといってプログラマーが絶対かというとそういうわけではないだろう。あくまで限定された観測範囲でのお話で、そのへんは問題モデリングの専門である数学屋さんや物理屋さんと似通ったようなものかもしれない。

でもプログラムはミスひとつで経済を崩壊にまで追いやることができるし、死者を出す可能性もある。そこまで範囲が広がる可能性があるのなら、世界を変えることもできるかもしれない。
しかし、それにはプログラムが動作する仕様範囲と「それ以外」の認識が必要なのではないだろうか。
コンパイラの例がたぶん一番わかりやすいように思う。
プログラマーが作製したプログラム自体は規定の動作をするのだけれども、それに何をさせるかというソースを与えて結果を生み出すのがプログラマーではない他者であるという構図。プログラマー以外のものがソース提供をするといった関係性。それこそが、プログラマーを超える動作をさせるということの注視点なのだと思う。
なぜそのような事になるのかというと、コンピューターやプログラムが動いて成果を出すという流れがずいぶんと複雑になっていて関与する物がアルゴリズムやプログラムコードだけでなくなっているからである。
プログラミングも構造化して、オブジェクト指向化して、データ指向化して、今やコードはデータやデザインのおまけみたいになってしまった。アプリケーションという箱物が売れなくなり、大量の情報とネットワークがお金を生みプログラムはそれを支える仕様のひとつになってしまっている。

だからどうという悲観論とかそういった話ではなく、そのような沢山の人とデータを上手く取り入れるようにすることでプログラマーの技量以上の成果を出すプログラムを作れる様になるのではないかという見解を示したかった。
成長するプログラムというとなんだかまだSFの世界のお話みたいだけれども、SNSとかいったソーシャルアプリケーションサイトの発展というのはだいたいそういった視点なんじゃないかと思う。サイトデザインそのものは仕様のままなのだけれども、そこに集まった人たちが思い思いに利用を始めて驚くような展開と成長を始めたりする。
そこに自己成長といった視点を持ち込めば十分に人工知能的な世界を見いだせるのではないかと思う。いかにして人工知能的なスフィア空間を拡大させていくか、昨今のモノ作りにはそういった環境全てを包括した視点が必須となる。
別な見方をすれば、ネットワークと莫大なデータを与え続けることで大なり小なり成長するプログラムを作れるだろうし、それがやりやすい時代になってきている。
自分で作ったプログラムが成長して作者を楽しませてくれる、それはおしゃべり型botが見せてくれる本当に小さな成果だけれどもプログラマーを超えた何かに変貌したということを見せてくれる瞬間。
「るりぺこ。」さんはそんな世界をほんのちょっとだけ垣間見るための手習いなのです。




You can follow any responses to this entry through the RSS 2.0 feed. You can skip to the end and leave a response. Pinging is currently not allowed.