カテゴリー : 2012年 1月4日

Cocoaのバグ?そんなものはあり得ない


アプリの完成を目指してガシガシとプログラミングをしているとき。順調に進んでるなーと思ってたら、なんてないところでバグにつまずくことがある。小さなバグなら無視して他のところやっちゃうんだけど、たまにこれを解決しないとどこも進める事ができないよ、ってのが出てくる。

関係しそうなソースコードを、ここかなあそこかなと、ためつすがめつ検討しても、原因が分からない。こんなところで時間とられている場合じゃないのに、早く他の箇所の実装にとりかからないといけないのに、と気持ちばかりが焦る。

こんなときにしばしば導きだされる結論は、「これはCocoaのバグだな!」というもの。「だってどう考えたってこのAPIを呼び出すと動きがおかしくなるんだよ」と。いやいや、それはあり得ない。自信を持って断言するけど、ほぼ確実にあり得ない。

「Cocoaのバグだな!」と言い出したとき、結論は次の3つのどれかになる。

  1. 自分のバグでした。ごめんなさい。
  2. APIの使い方を間違っていました。または、適切な使い方じゃありませんでした。
  3. ほんとにバグだったよ!

いままでの経験からいうと、98%くらいは1.ですな。残りは2.。3.は見た事ないい。特に経験のあるプログラマほどこの罠に陥りやすい。これ絶対Cocoaのバグだよ、これだからAppleは信用できないよ、MacもiPhoneも不安定だよ、とどなりちらす人のところに行って、どれどれとソースコードを見てみると、えーっとこの変数って初期化されてないんじゃない?とかいうのが、サクっと見つかったりする。

これは別にその人が不注意だ、という話じゃない。自分がバグを埋め込む可能性と、Cocoaにバグがある可能性を比べてみよう、ってことだ。たったいま自分が書き上げたに過ぎないものと、過去十数年に渡って何十万人というプログラマの目にさらされてきたものがあったとき、どっちを信用する?そりゃ後者だよね。

ソースコードにとって大切なものは、経験値だ。どんなに名前の通った人や会社が作ったものでも、新しいものは弱い。リリースしてユーザの手に触れて、バージョンアップを繰り返す事でのみ、強くなる。経験値を積んだソースコードこそが財産だ。

えっと結論としては、Cocoaを信用して自分を疑おうよということと、自分たちのソースコードも経験を積ませて強くしようよ、ってことかな。