こんにちは、CTOの山岡(@hiro_y)です。
エンジニアをやっている皆さんなら、プログラミングはバグが付きものであることがおわかりかと思います。バグがゼロであることはあり得ないし、もしゼロという結果が出たなら、その結果の方を疑ってかかった方がよいとされているぐらいです(全くないとは言いませんが、極めてまれです…)。
これは言ってみれば、失敗を最初から想定し、許容する態度だとも言えます。必ず失敗するので、失敗に気が付ける仕組みを最初から用意しておく。そのために各種テストプロセスがあります。単体テスト、結合テスト、システムテスト。その他にもプロセスが用意されていることも少なくありません。
Webエンジニアの皆さんであれば、ユニットテストや継続的インテグレーション(CI)が一番身近な失敗検知の仕組みになるでしょう。実装するプログラムのテストを自分で用意しておく。場合によっては(テスト駆動開発など)、実装する前からユニットテストを書いて最初に失敗を発生させることもあります。
小さな失敗を繰り返し、そしてそれを克服することで、より失敗しないような、高品質なプログラムを作ることができます。大きな失敗を後でするより、小さな失敗のうちに解消できた方がよいに決まっていますよね。失敗は練習できるのです。
最初から失敗を許容し、準備しておくことはプログラミングに限らず賢明な態度なのではないでしょうか。どんなことでも、きちんと準備したつもりでいても見落としや考慮漏れがあるものです。だからそのつもりで余裕を持って(気落ちも計画も)取り組まないと、いざというときに慌ててしまいます。不意に失敗をして慌てるよりも、想定通り、ぐらいの余裕を持っておきたいところです。
人間である以上、完璧などあり得ません。もちろん完璧を求められることもありますが、100%は無理なのです。だからあらかじめ失敗を許容し、失敗する準備をしておきましょう。そうすれば、後からリカバリーできるようにしておくことができます。その準備を含めて、物事を進められればと思います。