“プログラマ脳”って言葉があります。正確に定義されている訳ではありませんが、物事をロジック化(プログラム化)して認識するということに囚われすぎて意図が伝わならい人と言う皮肉です。
以下のような有名なお話があります。
妻「バター買ってきて、卵があったら6つね。」
夫はバターを6つ買って来た。
妻「なんでバターを6つも買って来たの?卵は?」
夫「卵があったのでバターを6つ買ってきた。」
これがプログラマ脳です。
下記の夫のプログラム脳は下記のようになります
Function バターを買う() as integer
{
if 卵がある{
バターを買う = 6
}
}
的なプログラムになるんですよね。(言語は適当です)
「なら卵がなかった場合は?」
ってなるんですよ。これも”そんなの1個じゃん!”ってな話になりますが、これがプログラムのバグの原因になるんですよ。
正しくは、
Function バターを買う() as integer
{
if 卵がある{
バターを買う = 6
else
バターを買う = 1
}
}
と書くと卵がない場合は1個買ってくることになります。
後、最初に妻が言った言葉をプログラムにすると、
Call バターを買う(1)
if 卵がある{
Call 卵を買う(6)
else
Call 卵を買う(0)
}
みたいな感じになります。
これが”日本語が難しい”、”仕様を正しく理解していない”となり、SIerの業界では、”顧客要件を正しく理解できないまま下流工程に流してしまった”と言うトラブルの原因になるんですよ。
馬鹿みたいな話だと思う人も多いと思います。
でもね、これはバターと卵だけですけれど、お客様の要件はもっと複雑なんですよ。
最初にあった妻をお客様だとすると、
お客様「バター買ってきて、卵があったら6つ」
SIer「バターは1個でよろしいですか?卵がなかった場合はどうしますか?」
お客様「卵がなかった場合は…」
:
:
みたいに話していく訳です。これを“仕様を詰める”と言います。
この工程をおざなりにしておくと最終的にプロジェクトが”炎上”するんですよね。
普通の会話ならニュアンスで伝わりますが、相手はコンピュータです。正しくプログラムを組むにはこう言う”日本語→プログラム(の仕様)”と言う作業が必要になるので、日々SIerは頑張っているのですよ、と言う話でした。