卵と牛乳問題
ある妻がプログラマの夫に「買い物にいって牛乳を1つ買ってきてちょうだい。卵があったら6つお願い」と言った。
夫はしばらくして、牛乳を6パック買ってきた。
妻は聞いた「なんで牛乳を6パックも買ってきたのよ!」
夫いわく「だって、卵があったから……」
妻側
code:javascript
牛乳を1つ買ってきて;
もし 卵があったら {
卵を6つ買ってきて;
}
夫側
code:javascript
もし 卵があったら {
// ここの主語が曖昧だった
(牛乳を) 6つ 買ってきて;
} そうじゃなかったら {
牛乳を 1つ 買ってきて;
}
koushisa.icon
依頼する側は「普通に考えて牛乳を6つ買わないでしょ」という先入観がある 人間同士のコミュニケーションなら文脈である程度察することはできる
機械はこのような文脈を持っていない
このような目的語の欠如や読み間違えがプログラムにバグを生むきっかけとなる
仕事でプログラムを書く場合に必要なこと
言葉の裏にある暗黙的な要件定義、環境などの前提条件を明らかにする 読み違えが起きづらい正確でわかりやすい仕様定義を行う なぜ牛乳と卵が必要なのでしょうか?何に使いますか?
本当に必要なのでしょうか?