「プログラマーって普通に会話していても性格悪いと感じる人が多いんだけど、なんで?」と言っている人をたまに見る。
プログラマーのなかには、相手の言葉尻を捕らえて、細かいことを言って、難癖をつけてくる人がいる、私はプログラマーではないんですが、とっつきにくいし、変なこと言うと怒られそうで怖いです、という指摘。
その質問への回答としては、この2つの説明ができる。
- 日常会話、RFC説(日常会話の文章をRFCだと思って読んでいる)
- 日常会話、ソースコード説(日常会話をソースコードだと思って話を聞くと例外が気になる)
日常会話、RFC説
お近くのプログラマーに好きなRFCを聞くと、好きな数字が返ってくる。僕は9535。
コンピュータ同士がやりとりするうえでは、約束ごとを決める必要があって、RFCは、ジャンルごとにルールが集まったもの。
RFCでは、「〇〇しなければならない」と言ったら絶対で、それを守らないと、RFCを満たしていない、ということになる。
子どもが居ると、「食べたら歯磨きしなければならないよ!」とか言って注意するのだけど、べつに歯磨きしなくても、ただちに死にはしない。ただの、歯磨きしてくれ!という願い。
RFCの場合は、しなければならない、という説明を守らないと、相手のコンピュータと通信できなくなったり、意図しないデータとして解釈されてしまったりする。
「クエリを実行するときにエラーを作成してはなりません」と書いてあるとして、日常生活なら、調子が悪いならエラーすることもあるよね、今日はゆっくりましょう、とか言いそうだけど、RFC的には、構文的に有効なセグメントなら、絶対にエラーにしてはいけない、そんなことをしては誰もそのプログラムを使わなくなることでしょう、ということ。
なんでもない、一般的な文章も、RFCのニュアンスで絶対度を確認する習慣がある。お近くのプログラマーに、あとでゴミ袋買ってきてよ、ってお願いしたら、「それってMUSTですか?SHOULDですか?」って聞き返される。
雨だから行きたくないよ、というときに、MUSTなら雨の中でも買いに行かなければならないし、SHOULDなら、雨がやんだら行こうかな、という気分になる。
日常会話、ソースコード説
「〇〇の場合はこうなる」というのはプログラミング的にはif文に相当する。ifがあればelseというのがあり、「一方、〇〇でない場合はこうなる」というのがセットで出てくる。
このelse側を想定していないと、プログラムがおかしなことになる。
預金残高引き出しの場合、引き出し額だけ引き算する、というものを作るとして、300なら300円引き出せる。このとき、引き出し額としてマイナス300円を与えてしまうと、-(-300)で+300になり、300円残高が増えてしまう、という不具合になる。
プログラマーが俳句を見ると、「閑さや 岩にしみ入る 蝉の声」には、ひと目で、静かでない場合がどうなるか未定義、失格!という評価になる。
if (静けさがある) { 蝉の声が岩にしみ入るように感じる } else { ??? }
一休さん的には、橋の端を渡らず、真ん中を通ればいい、ということになっていたけど、真ん中を通った場合の定義は未定義なので、宇宙が崩壊する可能性も秘めている、ということ。
自然な日常の会話であっても、言及されていない、else側が気になって、いろいろとつっこみや質問をしてしまう、という習慣がある。
書いてあるけど書いてあるとおりに読まず、こういう解釈です、が苦手
どんな文章でも自明な意味とか一つの解釈を求めてしまうので、書いてあるとおりのルールではなくて、こういう意味なんです、という状態の文章を扱うのが苦手。
これは、書いた人の心境を読み取って、こういうことだろう、という落とし所を探る苦労をしていない、放漫な立場とも言えるけど、ペアプロやモブプロ、と言って、チームで一緒に作業することが多いので、誰が見ても自明で、一意な結果になる解釈がある状態を良しとしている、という背景がある。
なので、日常会話で、言葉尻を捕らえて、「こういう反例をみつけました」とか言い出して、あなたと私で異なる解釈ができました、と表明する、というのは、仕事の習慣から反射的にでてしまうことで、決して性格が悪いわけではないんです。
こういったツッコミは、古来には「マサカリを飛ばす」や「椅子を投げる」と表現されていたけど、近年は「謙虚、尊敬、信頼」や、「心理的安全性」の考えのほうが人気があって、ここまで立ち返るとあなたに共感します、というところまで議論を遡って、そこから議論を続けるスタイルが推奨されている。なので、いきなり、日常会話でも、それってSHOULDですか?とか言い出す人の数は減ってきていると思う。