Jul 29, 2014

ソフトウェアのバグを見つけたときにやってはいけないこと

ソフトウェアのバグを見つけたときの対応には、プログラマとしてのセンスがけっこうあらわれると思っている。ぼくはセンスの無い人間の代表例みたいなものだから、ここにはぼくがよくやってしまう行動を思い返して書き、「ソフトウェアのバグを見つけたときにやってはいけないこと」とした。

バグを見つけたことを周囲に吹聴してはいけない

 

ソフトウェアにバグを見つけることや、ソフトウェアのバグを踏むことは、基本的に嫌なことだ。本当にそうだろうか。

有名なソフトウェアが不可解な挙動をするのを見たとき、周囲のひとびとをデスクに呼んで、

「いやー、このソフト、マジでクソですよ。こんなバグがあるんです。ほら、ひどいでしょ」

と毒づいているとき、ぼくは口を歪めながら、ある種のよろこびを感じている。それは、他者のプレゼンに対して不備を指摘するときのよろこびにとてもよく似ている。いうなれば「鬼の首を取ってやったぞ」という気分だ。

あら探しによろこびを感じるひとは少なくない。経験上、バグを見つけた側からそのことを周囲に吹聴するようなひとには、こうした傾向がある(ぼくがそうであるように)。そんなひとびとは「見つけたバグにどう対処するか」という生産的な思考がすぐにはできず、ソフトウェアの抱える不具合という「あら」につい矛先を向けてしまう。

これが悪化するとと、一度バグを踏んだだけで、だんだんそのソフトウェアを憎たらしく思えてくるようになってくる。ソフトウェアを敵視しがちになってしまう。しまいには、「俺の仕事がうまくいかないのも、全部このソフトのせいだ」なんていう被害妄想にすら発展することもある。

バグを見つけたと思ったら、周囲に話したくなる気持ちをぐっとこらえ、深呼吸をしよう。それでも収まりがつかないなら、テディベアにでも打ち明けてみればよい。

プログラマとしてのセンスとは、ソフトウェアを敵視しないことだ。

バグをすぐ直そうとしてはいけない 

 

バグを見つけたと思ったとき、「なんだよもう」 とぼやきながらソースコードをエディタで開き、問題のありそうな箇所にあたりをつけ、デバッグ文を仕込みーー。

それが、あなたのつくっているソフトウェアであって、時間が無尽蔵にあるのならばよい。しかし、そうではないのだとしたら。納期のある中、巨大なコードベースからなる著名なソフトウェアを前にしているのだとしたら。それは最善の選択ではないし、最悪の選択となってしまうことすらあるだろう。

もちろん、それが本当にバグだとわかったのなら、バグレポートを登録するぐらいは礼儀だと思う。しかし、ソースコードの修正までいくのは早計だ。ぼくらにとってバグを直すことは本来の目的ではない。

プログラマは手を動かし続けることが好きだから、ついつい問題が与えられると、それを解こうとしてしまう。目先の Yak-shaving に夢中になってしまう。Yak-shaving がどれだけ時間を奪うか、それを嫌というほど知っているにも関わらず、気がつけば Yak-shaving のなかにいる。

プログラマとしてのセンスとは、本来の目的を見失わないことだ。

バグを見つけたと思ってはいけない

 

そもそも、それはバグではないのかもしれない。

これまで、ぼくが「ソフトウェアにバグを見つけた」と思った経験のうち、実に半分以上は見事な思い違いだった。それは仕様だったり、ドキュメントを読んでいれば回避できる問題だったりした。「あのバグ、結局どうなった?」と同僚に聞かれ、勘違いだったとは言えずに赤面しながら言葉を濁した経験は枚挙に暇がない。

そんな恥をかかないためにも、まずバグを見つけたと思ったら、 そのことを疑ってみよう。ドキュメントをもう一度読んでみよう。そのソフトウェアに詳しいひとが周囲にいれば、恥ずかしがらずに聞いてみよう。こうした行為はもうひとつの視点を与えてくれ、それによって思い込みが正されることも少なくない。

プログラマとしてのセンスとは、思い込みを排除して、常に二つ以上の視点から問題に取り組むことだ。

免責

 

ぼくは残念ながらプログラミングを生業にすることができていない。趣味で十年近くプログラムは書いてきたが、いまだ上に書いたようなことをやらかしている。そういうわけで、この題材を選んだ。これは自戒の記事を出発点とするから、ごく個人的なことを、偉そうに一般化して書いてしまったきらいはある。許してください。

Jul 12, 2014

ひとと話をするとき、ぼくらが tf-idf に従っているということ

ぼくら技術者は基本的に技術の話が大好きなものだから、技術者同士で集まれば、ついつい技術の話をしがちだ。そんな調子で技術の話をはじめたとき、横で聞いていたひとりが、

「お前らは技術の話をやめろ。もっと一般のひとにもわかるような話をしろ」

と、諭すようにいって、はっとした。共通する話題は他にも多いのに、なぜぼくらは技術の話を選んだか。

帰り道、電車に揺られ名前も知らないひとびとの話にぼんやりと耳をかたむけているときふと思ったのは、

「ぼくらは tf-idf に従って話題を選んでいるのではないか」

ということだった。

tf-idf は情報検索の分野でよく知られた指標で、「ある文書における、ある単語の重要度」をはかる。その単語がその文書内に登場すればするほど重要度はあがり、その単語が他の文書に登場すればするほど重要度はさがる。ふたつめの点が面白いところで、これはつまり、「ある文書にとって、他のたくさんの文書に登場するようなありふれた単語は、あまり重要ではない」ということをいっている。

tf-idf で、文書をひとに、単語を話題に、置き換えてみる。すると tf-idf は、「あるひとにとって、ほかのたくさんのひとが持っているようなありふれた話題は、あまり重要ではない」ということを意味する指標に変化する。

技術を話題にできるひとは少ない。恋愛を話題にできるひとはそれよりも多い。天気を話題にできるひとはもっと多いことだろう。全世界あわせて71億人のなかのひとりと話すとき、71億人ができる話をしようと思うだろうか。貴重な話題を共にするひとに出会ったなら、せっかくの機会を活かそうとすることだろう。ぼくらは tf-idf に従っている。

そういう話を、どこか別の場所でした。ぼくはまだ技術から抜け出せそうにない。