2008年04月26日 14:00 [Edit]

スパゲッティ(コード)はなにがマズいのか

うまい! ざぶとん代わりにピザ1枚!

プログラム?おいしいに決まってんじゃん。 - $ dropdb 人生
素人が s/料理/プログラミング/g すると必ずスパゲティができるんですよ。

というだけならはてブでいいのだけど、この比喩のもう一つの意味に気がついてしまったのでentry。


ちなみにコードを知らない人のためにヤボな解説をすると、スパゲッティコード(spaghetti code)というのは、あちこちひっからまったコードのこと。実はたいていのスパゲッティが美味なように、スパゲッティコードで書かれたプログラムもマズいとは限らない。

毒が混入しなければ。

しかし、いったん毒が入るとえらいことになる。毒が入っていたのはスパゲッティなのか、それともソースなのか。特定するのは困難だ。

これがたとえばステーキだったら、毒が入っていても、毒が入ったのは肉なのかつけあわせなのかはすぐにわかる。

裏をかえせば、毒が入っていない限り、スパゲッティコードもまたOKということになる。が、毒はとにかく、虫(バグ)の混入を防ぐのは難しい。私は某ファーストフード店でカメムシが混入したハンバーガーを食したことがあるが、あまり思い出したくない思い出である。今だったらメディアスクラムになっていたかも知れないが、当時はのどかな時代だったので、店側は返金を申し出、私はそれを受け取り一件落着となった。

そうそう、ハンバーガーではなくバグの話。なぜスパゲッティコードがコーダーに嫌われるか、にも関わらず簡単にスパゲッティが出来上がってしまうかの根源的な理由が、そこにある。一人で味見している限り、気がつきにくいのだ。

実はスパゲッティコードは、「ふつうの人」よりも天才型の人の方が書きやすい。素人にはひっからまった混沌にしか見えないそれにも、彼らは一瞬にして秩序を見抜くのだから。散らかった机に例えてもよい。端から見て散らかっているように見えても、デスクのヌシにはヌシなりの秩序があるのだ。

よって、これを防ぐ一番の方法は、コードを晒し続けることとなる。実は素人か玄人かはあまり関係ないどころか、前述のようにコードを晒す機会が少ない玄人ほどスパゲッティ好きなのだ。

プログラム?おいしいに決まってんじゃん。 - $ dropdb 人生
PHPとPostgreSQLを使ったスパゲティコードをみせられたような覚えが……。」
だからプログラムはおいしいvこれが答えな!

というわけで、君のコードもそろそろ晒しましょう。コードと恥は、さらした数だけ奇麗になるよ!

Dan the Code Chef


この記事へのトラックバックURL

この記事へのトラックバック
プログラム?おいしいに決まってんじゃん。 - $ dropdb 人生 404 Blog Not Found:スパゲッティ(コード)はなにがマズいのか 「ヘイ、マイケル。なんでスパゲッティがプログラマに嫌われるかわかるかい?」 「そりゃ、ソース味で虫がまざってるスパゲッティなんて不味いに決ま
[ネタ]ソース味のスパゲッティは…たぶん不味い【飽きたら消すよ。】at 2008年04月28日 09:26
この記事へのコメント
> コードを晒し続ける

いやほんと、その通り。
誰もコードを読まなかったとしても、それでも充分効果がある。
Posted by a at 2008年04月28日 19:07
>Passer-by さん
レスありがとうございます。
dropdbさんを知らなかったのですが、「晒せば上達」の環境にいる人だったんですね。
純粋にうらやましいです。
Posted by やこく at 2008年04月27日 18:51
COBOL なんて書いたことも見たこともないような若い連中が、COBOL 臭のキツ〜い Java コードを量産している。そんな SIer に勤めています。連中の破壊力を甘く見ないほうがいい。

やこくさんへ。id:dropdb 氏はブログ界で有名人ですので、「晒せば上達」の法則は彼女に適用できると思います。
Posted by Passer-by at 2008年04月27日 10:57
oredocoさん

>いまどきの言語で、スパゲッティコードを作るほうが
>難しいと思います。

それがそうでもないんだな。世の中広いよ。

Posted by foo at 2008年04月27日 10:24
そう思っている時期に書いたプログラムは、2年後の自分が見直すと *全部が* スパゲティーコードだったりするものだ。
Posted by Kei at 2008年04月27日 10:06
いまどきの言語で、スパゲッティコードを作るほうが
難しいと思います。
Posted by oredoco at 2008年04月27日 03:29
>君のコードもそろそろ晒しましょう。コードと恥は、さらした数だけ奇麗になるよ!

これは間違いだと思いますよ。
最近はいろいろなブログを書くことで磨かれるような事をいっていますが、誰かが自分のブログを見てくれて、さらにレスを返してくれて初めて磨かれるのです。
blogを見に来る人がgoolelobotと自分だけという状態では、何の意味もないと思います。そして、自分のブログに対して反応がくるようにする最善の方法はOFFで有名になることだと思います。
Posted by やこく at 2008年04月26日 21:23
毒の発見が困難ということと、
再利用が難しいということがあると思います。
Posted by BLUEPIXY at 2008年04月26日 14:22