それはプログラマーにとっての悪夢。
しかし分子生物学者が格闘しているゲノムという怪物は、まさにこのスパゲッティコードなのだ。
かつて分子生物学者は遺伝子の実体としてのDNAを見出し、
DNAがATGCという4進数で書かれたバイナリコードであることを知った。
さらにDNA配列の解読が可能になったとき、学者達はこれで遺伝子の機能解析が大きく進むと考えた。
程なくしてゲノムという未知の言語で書かれたプログラムの文法が徐々に解明されだし
いくつかのファンクションの解明が進んだことで人々はその確信を強めた。
さらにDNA解析の技術が発達し、ゲノム全体を読むことが可能になると、
これで生命機能の解明はなったようなものだという声すら聞かれた。
しかしその考えは甘すぎた。
ゲノムの森に分け入った分子生物学者は、
すぐに遺伝子と生化学的機能の関係が1対1であることは少なく
その多くが複数の遺伝子と遺伝子以外の因子が複雑に絡み合ったものであることに気が付いた。
そう、ちょうどスパゲッティコードのように。
IT用語辞典 e-Words : スパゲッティコードとは 【スパゲッティプログラム】より
別名 : spaghetti program, spaghetti code
処理の流れや構造を把握しにくく、修正や機能の追加が困難なプログラム。
むやみに制御を(GOTO文などで)他の部分に飛ばしたり、変数の有効範囲を必要以上に広げたりすると、後からプログラムのごく一部を修正したい場合でも、プログラム全体を読み直さないと構造が理解できないという事態に陥る。この様子を、麺が複雑に絡み合い、たった数本の麺を引っ張り出そうとしても全体がついてくる、スパゲッティに例えたのがこの言葉である。
それでも人間のゲノムの麺の本数(機能領域)は3万もないと判り、
頑張れば何とかなるかもと思っていたら、
今度はこれまで機能がないと思われていた部分が実は機能を持っていることが判明。
ncRNAというタンパク質に翻訳されないRNAが、さらに5万以上もあるとか。
こいつ等はどうやら関数実行の判定文的な役割を担っているようだ。
調べなきゃならない範囲は一気に増えたが、それでも研究者はめげずにやっている。
どうにかこうにか単機能関数をかなりいじれるようにはなったが
複数の関数が関わる機能についてはまだ当分お手上げだろう。
もしもインテリジェントデザイナーが存在するのだとしたらそいつはものすごく面倒くさがりで
新しい機能が必要になったときは適当にその辺の関数を書き換えたり、
あるいは他所からコピペで持ってきたり、
コードの保守性なんて全くお構いなしに、
動けばいいや程度の意識でDNAをいじくり回していたことは確実だ。
おかげでDNAはあちこちコピペやたらいまわしの痕跡が残っているし、
使われなくなった関数も消されないからあちこちに残っている。
派生系統が違えばコピペすら出来ず、同じ機能なのに生物種ごとに一から設計しなおすなど日常茶飯事だ。
きっと開発チームごとの連携がまったく取れていないのだろう。
コードの保守性が最悪だから、
かつて侵入したウイルスの断片すら消されずに残っている始末である。
全くもって無駄だらけだ。
しかしそのスパゲッティコード性ゆえに開発者達以外は迂闊にいじることも出来ない。
おまけにDNAのファイルシステムには欠陥があって、コピー時に時々エラーが生じる。
インテリジェントデザイナーもさすがにエラー補正システムにはそれなりに気を遣ったみたいだが
それでも全てのエラー回避には程遠い。
既に使われなくなった部分に起きたエラーならまだいいのだが
重要な関数に致命的なエラーが起こったらご愁傷様でしたということで、
その顧客との付き合いはそれっきり。
それでも日々新しい顧客が増えるので、今のところ客に困ることはないようだ。
もっとも環境の変化にコードの改修速度が追いつかず、
顧客が全滅して閉鎖の憂き目に会ったチームも少なからず存在するようだが。
もしもインテリジェントデザイナーが存在するなら、
そいつらはこんな存在なんだが、これってどうよ?
少なくとも私なら、自分のコード管理をこんな連中に任せるのは勘弁願いたい。
それに分子生物学にも少し首を突っ込んだことをやっている身としては、
どうしてもっと明瞭簡潔なコードを書いてくれなかったのかと声を大にして主張したい。
このソースコードはあまりにも…
<2007/02/24 改訂>
◆関連記事
・インテリジェント・デザイン論(ID論)関連記事を振り返る
◆関連書籍
・反・進化論講座―空飛ぶスパゲッティ・モンスターの福音書 (単行本)
『スパゲティモンスターの創造した人間』という非科学的な神話は人間をより高貴なものへと発展させる自覚と責任をわれわれに与えるので、スパゲティモンスターが日本人を作ったというロマンを教えるべきだ。
初めてお邪魔するのにこれです・・・もうしませんゆるしてください
と、声を大にして感謝したい。
ここ最近、だからこそ僕みたいのに食い込む隙が残ってるのかな、などと。
http://www.geocities.co.jp/Technopolis/8931/index10.html#・火星人のプログラミングスキルを推定せよ−人間の遺伝子プログラムの似非科学
http://www.geocities.co.jp/Technopolis/8931/index12.html#・土星人のプログラミングスキルは?-遺伝子コンパイラの似非科学
私は何となくこの火星人と土星人が好きです。
ところで聖書によると神は(ry
無限の記憶能力と思考能力を持っている存在なら、そう言い切れるのですが、実際にはソースコードを綺麗に書くのは、未来に自分で見たときに理解できるようにするためでもあります。特にメンテナンスを続けていくようなプログラムの場合は、そうですね。
やはり、神は納期に追われt……うわなにをするやめr
え?詳細設計書?ドキュメント費用は別枠ですよ。
…しょうがないなぁ概要設計書(聖書)だけ残しとくから後はなんとかしてね。
かくして引継ぎ担当は十字架にかけられましたとさ。
ひょっとしてだんだんぐちゃんぐちゃんになってしまって、投げ出しちゃったんじゃないかと思うと、ちょっと神に見放されたみたいでさびしいですね。
「納期を厳守せよ」と。
かくして人はコードを持った。
バイナリ - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA
>バイナリ (binary) とは2進数のことであるが、コンピュータが処理・記憶するために2進化されたファイル(バイナリファイル)
>またはその内部表現の形式(バイナリデータ、バイナリ形式)のことを指して用いられることが多い。