なんでこんなことがわからんのや!

うちの会社が間接的に面倒を見ているとある会社の人から、「星10個のときpaddingが18で、星50個のときpaddingが90になっているCSSファイルがあってだな(詳しいことは割愛)、星20個のときはpaddingはいくつですか?」みたいな質問が来ていた。


他の例からして、どう見てもpaddingは星の数×1.8になっているっぽいのだけど、「そもそもそのCSS書いたのうちの会社じゃなくて、あんたのところが頼んだデザイナーであって、んなもんこっちに振ってくんな」「これ線形補間って見てわからんか」「なんで自分で試さない」「HTMLもCSSも知らん人間をWeb担当にすんな」など思うところはいろいろあるのだが、問題解決能力は極めて低く、しかし他人に頼るスキルにだけは長けているタイプの人とお付き合いするのはとても疲れる。


ちょっとそのへんを掘り下げながらだらだら書いていく。

中学生でも出来るとは言うけども…


だいたいにして、中学生でも出来るレベルのことが出来ない社会人が多すぎると思うわけだ。
しかし、「中学生でも出来る」と言っても中学生のうちの全員が出来るわけではない。


実際は「20%の中学生が出来る」程度のことだとしよう。
ということは、それが出来る社会人はおそらく20%よりは多いはずだけど、問題解決能力などは年齢とともに向上するとは限らないので社会人でもそれが出来る人の割合というのはまあせいぜい30%ぐらいでしかない。


そして、その30%の人たちはそこそこ優秀なので、そこそこいい大学を出るはずで、そこそこいい会社に就職するので、ゲテモノ業界(?)にはやってこないわけである。
つまりは、ゲテモノ業界においては「(20%の)中学生でも出来る」ことが出来ない底辺社会人ばかりで構成されてしまうのである。

うわっ…私の問題解決能力、低すぎ…?


ひなた先生が教えるデバッグが256倍速くなるテクニック (Software Design Books)



こんな質問も来た。


「データを100行追加で入力したらこんなエラーメッセージが出た。原因を教えて欲しい。」
というものだ。


もちろん、入力されたデータに問題があるわけだが、100行でエラーが出たのなら、その追加で入力した50行をまず入力してエラーが出るかどうか見ればいいのではなかろうか。


その50行でエラーが出たなら、その50行のうちその半分である25行を入力してエラーが出るかどうか見ればいいのではなかろうか。
そうやって二分法でやっていけばエラーの原因部分を特定することぐらいたやすいわけで、なぜそれくらいのことを自分でしないのか。


ちなみにこの二分法で調べるという手法は、拙著「デバッグが256倍速くなるテクニック」の最初のほうに書いてある。
プログラマにはおなじみの手法だろう。


さらに言えば、この拙著、アマゾンでのレビューはあまりよろしくない。プログラマーならば知っていて当たり前、みたいな内容を多く含むからだと思う。
ところが、じゃあ、現実的にこういう問題に出くわしたときに二分法できちんとこうやって原因を特定することの出来る社会人はどれくらいいるかと言うと、プログラマー以外では皆無だと私は思う。


プログラマーには当たり前の方法かも知れないが、プログラマーでない人には当たり前ではないのだろう。
だから、「デバッグが256倍速くなるテクニック」はプログラマー以外の人にも読んでみて欲しいと思う。

問題解決能力は組織内で伝播する


さきほど書いた二分法で原因を特定する方法だが、会社組織内にそれが出来る人間が一人でもいれば、その人は「こうやればいいっすよ」みたいな感じでまわりに言いふらすので、他の人もそれが出来るようになる。


あるいは、私が上司であるなら、部下がそんな糞みたいなメールを社外に出していたら「二分法でまず原因を特定してからにしろ。社外に迷惑かけんな。」と注意する。


このように、組織内に一人でも問題解決能力が高い人間がいれば、その手法が組織内で広まる。


逆に、問題解決能力が低い人がいる会社というのは、(よほど大きな会社でない限り)その会社全体が問題解決能力の低い人たちで構成されている可能性が極めて高い。


私の経験上、渉外担当者が糞みたいな問題解決能力しかない場合、その会社全体が糞みたいな問題解決能力しか保有していない。
それは、糞みたいな人だから糞みたいな会社に就職せざるを得なかったわけでは決してなく、その会社の誰一人としてその糞みたいな問題解決能力を向上させる能力者がいなかったから、全体が糞にならざるを得なかったわけである。

デバッグは論理訓練である


複雑なプログラムをしているとデバッグにもそれ相応に時間がかかるようになる。
しかし、(設計能力が同程度だとしても)デバッグに要する時間というのは非常に個人差があり、やはり長年プログラミングをしている人のほうが速いということは言えると思う。


それはつまり、デバッグの手法自体をいろいろ知っているというのもあるが、それにもまして、問題を切り分ける能力や、分析能力に長けているからである。
デバッグ作業の過程でそれらの能力は培われるので、プログラマーは日々鍛錬していることになる。


だからプログラマーから見て、世間の人が論理性を欠いているように見えるのは当たり前であって、世間の人はそういう訓練をする機会に恵まれていないので仕方ないのである。


ゆえにプログラマーは論理性を問うようなタイプの知能テストで高い点数が出る[要出典]のも当たり前であり、(その結果を信じるなら)高いIQを持っていると言える。

プログラマーの悲劇


上に書いたことがすべて正しいとすると次のことが導かれる。


すなわちプログラマーは日々の鍛錬により問題分析力や問題解決能力に優れるが、ゲテモノ業界においてはお付き合いする会社の人たちは一様に問題解決能力に乏しく、そのことをプログラマーは嘆き続けなければならない。


「なんでうちの取引先って、馬鹿ばっかりなんだろう!」とあなたは思うかも知れないが、それは極めて正常なことであり、そう思わないプログラマーがいるとしたら、その人は日々の鍛錬を怠っている未熟なプログラマーであるか、さもなくばよほどの聖人君子なわけである。