
『肉じゃがとカレー』
とある夕飯の出来事、その日のメニューは肉じゃがでした。
いつも美味しい料理を作ってくれる妻に対して
「肉じゃが美味しいねー」
と、感謝の意を述べる。
その翌日の夕飯の出来事。
メニューはカレーでした。
これまた美味しいカレーを作ってくれる妻に対して
「カレー旨いねー」
と、敬意を表する。
ここで妻が一言。
「肉じゃがもカレーも、材料と作り方ほとんど同じなんだけどね。」
…
そうなんですか、気付かなかったなぁ。
出来上がった料理の味は全く違うのに、作る工程はほとんど同じだなんて。
と、中学の家庭科の授業で得意料理を「冷凍みかん」と答えた私は思うのでした。
さて、私はシステムを創ることを生業としておりますが、
仕事をする上で気を付けていることがあります。
それは
「一見違うように見える複数の事象の中に共通点を見つけ出す」
ということと
「一見同じように見える複数の事象の中に異なる点を見つけ出す」
ということです。
【一見違うように見える複数の事象の中に共通点を見つけ出す】
先ほどの肉じゃがとカレーでの話しに戻りますが、
・じゃがいもの皮をむき、適当な大きさに切る
・にんじんの皮をむき、適当な大きさに切る
(カレーの具は口の中でゴロゴロする位主張している方が好きです)
・玉ねぎをスライスする
・鍋に油を引き、材料を炒める
・灰汁が出てきたら丁寧に除去する
など、共通のタスクが多いです。
例え話なので少し現実味に欠けますが、これをプログラムのコードで表した時に、
cookNikujaga()
cookCurry()
という二つのコードそれぞれに実装してしまうと、
「玉ねぎの真ん中に発癌性物質が発見されました。」(もちろん仮説です、誰も信じないと思うけど…)
という新事実が発生した時に、
cookNikujaga()
cookCurry()
双方のコードで玉ねぎの真ん中を撤去する修正が必要になってしまいます。
ややもすると、cookCurry()の修正を忘れてカレーを食べるたびに発癌性物質が蓄積されることになってしまいます。
現実のシステム開発では、このような新事実(仕様変更)はかなりの頻度で発生します。
お客様の要件に柔軟に対応するため、またバグを出しにくくするために
共通の処理は1箇所にコーディングすることが重要です。
また共通の処理を探し出す努力を惜しまないことが大切です。
壊すのは容易いが、修復するのは難しい。
処理を分けるのは容易いが、後から同じにするのは難しいのです。
【一見同じように見える複数の事象の中に異なる点を見つけ出す】
こちらは共通点を見つけ出すことのアンチテーゼです。
これを疎かにするとお客様の詳細な要求を取りこぼすことになります。
行き過ぎた抽象化は何にも当てはまらなくなってしまう。
「何でも出来る」は「何にも出来ない」のです。
医者の薬もさじ加減。
肉じゃがはお箸で食べますが、カレーはスプーンですよね!
以上、私が仕事をしながら常に気にかけている2つの事柄でした。
皆様も「あれ」と「これ」のどこが同じで、どこが違うのか、
日常の生活であれこれ考えてみては如何でしょうか?
頭の体操になりますよ!!
hogehoge
hugahuga
7月 312009
システム創造事業部
河村 康爾