本番だけでバグが発生し、ローカルでは再現できないか発現しない。
バグの発生確率が低いが、無視できるほどではない。
バグの原因が、高負荷時にのみ起こる競合状態に影響される。
バグの原因がわからない。
バグの原因になるコードを書いたのは自分ではないが、修正する責任がある立場にいる。コードを書いた人間は退職して会社にいない。
バグの原因となる問題が、99.9%の信頼性を持つどこかのライブラリーで、それだけに最後に確認するところだった。
多数の人間がデバッグしようと何年も頑張ったが、誰も成功しなかった。
何年にもわたって実行した後にのみ起こる論理的エラー。
デバッグには自分の何も知らない分野での経験が必要。
バグの修正のスケジュールに余裕がない。
自分の首がかかっているのでバグを無視できない。
Stack Overflowがダウンしている!
Stack Overflowに行って自分が答えが欲しいと思っているのと全く同じ質問を発見。1年前に質問が投稿され、いまだに答えが付いていない。(xkcd: Wisdom of the Ancients)
セミコロンキーが壊れている。
見事にうまくいってるプロジェクトでコメントされていないコードを1年後に発見し、修正しながら叫ぶ。「俺はいったいなんでこんなことしたんだ?」「本当にこのコード書いたの俺かよ?」自分の家の中で迷子になった気分。
ドキュメントのないライブラリー。
要求仕様変更、再び。
==
の代わりに=
を使ってしまう。うぬぼれ。準備不足。見積が甘い。共感ではなく怒り。
Stack Overflowの質問数の限界に達する。
Internet Explorer (Web開発者の場合)
GitHubのマージがコンフリクトする。
意図したのと違うディレクトリで
rm -rf *
をタイプしてしまう。THE END. :(「このコードは動くよ。なんでか知らんけど」
コミュニケーション不足 : プログラマーは自分が何を作っているか、それがどう使われるかを理解するべき。コンテキストを作る必要がある。これは、何かを作る場合には判断を下す必要のある時が100は存在するから。コンテキストを理解していれば判断が下せる。
コミュニケーションの取り過ぎ : 会議、会議、会議...会議はプログラマーを殺してしまう。
何かを明確にするのに1日かかる。「クライアント」が違うタイムゾーンにいるなど。
ドキュメントがないか、さらに悪いのはドキュメントが使い物にならない(例、明白なことが書いてある、コードについて記述がない)
インデントがぐちゃぐちゃで、合理的でない構造なのでデバッグができない。