カーゴカルト

ちょっと直にプログラムでない話題を。

CやJavaといった言語は静的で文法も厳しいので、大体コードがなにを意味しているか理解しないとやっていけないと思います。そして文法が厳しいというのはどの人が書いてもあまりコードが変わらないというのがあります。しかしTIMTOWTDIといわれるくらいのPerlです。ものすごいいい加減に書いても動いちゃってくれます。よく言えば自由ですが悪く言えばわけのわからないコードができる可能性がある訳です。10人いて全員が違うコードでも普通なのがPerlです

たとえば

$def = "abcdefg";
($  abc = $     def) =~ s/abc//;
print $abc

こんなんでも

defg

こう出力してくれます。なんだか優秀だかバカだかわからない気もしてきます。


さて前振りはこれくらいにして。題目へ。
カーゴカルトという言葉があります。簡単に説明すると、戦時に軍事飛行場があったところがありまして、そこは物資が豊かでした。しかし戦争が終わって飛行場がなくなると当然物資も来なくなります。しかし現地の人々は物資を望むあまり飛行場のようなものを自分たちで作り飛行機が来るのを待っていたそうです。人ではなく積んでくる荷物を待ち望み、信仰していたので荷物=カーゴ、ゆえにカーゴカルトです。

この単語はプログラムの世界にもありまして、「他人のソースを真似てみて、なんだかよく意味がわからないけれどうまく動いているからこれでいっか」というコードを指します。ちょっと軽蔑の意味合いが強いみたいですけれど。

たとえば

package Date;
use overload
  '""' => &as_string;

  sub as_string {...}

 #以下コード

みたいなクラスがあったとして

my $date = new Date

インスタンスを作ってその値を変数へ代入したいと考えます。普通の人なら

my $new = $date->as_string

と明示的にメソッドを呼んでもいいですが

my $new = "$date"

という表記でも、""がoverloadされているので有効な構文だったりします。
「オレはいま出来るだけタイプをしたくないんだ!」
というハッカーさんなら止めませんけれども

「あれ?ダブルクオートとったら分けわからない文字列だな・・まぁいっかダブルクオートつけておけば・・」
こういうのがカーゴカルトです。

いまいち何が言いたかったのか自分でもわかんないですけれども、自分でコードを使うからにはどう動いているのかわかっていないといいプログラマさんではないですよ、ということです。


カーゴカルトをちょっと調べようと思ってぐぐってみたらこんなページが出てきました。
http://plaza.rakuten.co.jp/sendatte/diary/200512260000/
なんだかこの本面白そうですね。