プログラミングをしている中で、一番辛いところ。
それはよくわからないエラーに遭遇した時だと思います。
ホトカミエンジニアの小沼です。
今回はエラーとどう向き合うべきなのか。
自分の考えを共有したいと思います。
思いつく限りやってみる
まずは一番大事な普通のことを挙げてみます。
1. エラーの種類をよく確認する
エラーが起きたとき、しっかり出力されたエラーの内容を確認していますか。
自分や自分の周りをよく観察してみると、意外とエラーがでるとすぐに自分の書いたコードやエラーの現象を見にいってしまい、肝心のエラーの出力をちょっと見ただけで知ったつもりになってしまうことがよくあります。
エラーの出力は英語で難解であることも多いです。
エラーが出たときは焦らずにまずエラーの出力をよく観察してヒントを探してみましょう。
2. いつものパターンだと感じたらいつものを試す
いつもやっちゃうちょっとしたエラーってありますよね。
閉じかっこ忘れとかCとかだと行の最後に「;」忘れたりとか。
そういうのはサクッといつもの方法で直してしまいましょう。
3. ソースコードにちょいミスがないか調べる
前述のいつものパターンとかぶってしまうところも多いですが、ソースコード全体をにらんでちょっとしたスペルミスや構文エラーのようなものがないかもう一度確認しましょう。
人にコードを見てもらうのも良いことです。
4. printのような関数やコメントアウトを活用してエラーの原因となるコードを定める
たいていのプログラミング環境でprintのような変数の内容を出力する関数が用意されているはずです。
変数が途中でおかしな値になってないか確認しましょう。
それからコードをコメントアウトしながら動作テストをして、挙動を確かめソースコードのうちから問題のありそうなコードを特定しましょう。
これらの方法は2分探索とエンジニアの直感を組み合わせたアルゴリズムでやるといいと思います。
5. 検索エンジンでエラーを検索する
普段使っている検索エンジンは人それぞれだと思いますが、
僕はMicrosoftの検索エンジン「Bing」を愛用しているので、まず「Bing」で検索します。
「まずググれ」ならぬ「まずBingれ」です。
いろんなワードの組み合わせで調べます。
あんまりいいヒントが得られなかったら、普段使わない検索エンジンに切り替えるというのもよいです。
僕の場合はメインがBingなのでサブはGoogleですね。
英語の情報しかないときもあるので、英語のサイトもしっかり確認しましょう。
6. 再起動する
僕のようなWindows好きの間では
「Windowsは再起動するとなんだか知らんがうまくいく」
ということわざがあるくらいです。
僕はWindows以外にもさまざまなソフトウェアで、このような現象に遭遇したことがあります。
原因がわからないという点であまりよくないですが、再起動という手段も常に念頭に入れときましょう。
7 だれかに聞く
だれかできそうな人がいれば聞いてみるとうまくいくときもあります。
まわりにその技術に関して詳しくて、聞きやすい人がいないとどうしようもないですが…
逆に、聞かれときにはなるべく優しく対応して、聞きやすい人と思われとくとプロジェクト全体がうまく進みます。
精神的コントロールの仕方
さてここまで抜けもあると思いますが、思いつくところで一般的なバグフィックスの方法を挙げていきました。
しかし、このように思いつく限り、やれることをやっても、うまくいかないことがあるのが現実です。
そういう時にどうしたらいいのか。
私の考えを書いていきます。
1. コンピュータのいうことを聞く
コンピューターにたいして人間が思い通りに命令する。
普通の人間のスタンスは一般的にこれです。
しかしある程度経験を積んだエンジニアならば、自分勝手に書いたプログラムに対して、いつもコンピュータ-がいいように理解してくれるなんて思ってもないはずです。
それはプログラマーがなぜ上手く書けたコードに「美しさ」を感じるのかということにつながりがあります。
美とはなにか。
さまざまな思想が世の中にあると思いますが、私の見解からすると美は「意図的なもの」からは生まれず、本質的なものに対する強い観察意識によって生まれるものだと思います。
一度自分が意図した動作をコンピューターがしてくれることを夢見ることから離れて、
コンピューターがどう動きたいのか?
ということをコンピューターの気持ちになって考えてみましょう。
そこから何か本質的なものに触れるチャンスがあって、ひょっとしたらうまく動く美しいコードが生まれるかもしれません。
2. 自分を再起動する
憎たらしいErrorがあるときに再起動すべきは、システムだけではありません。
自分を再起動してみましょう。
とりあえずコンピューターから離れる。
できるならどこかへ逃げる。
YouTubeで面白いビデオを見る。
そんなこんなして、Errorに対する負の感情をリセットしたら、もう一度パソコンの前に座りましょう。
きっとうまくいくはずです。
3. プログラムを寝かせる
Errorが発生している仕事をとりあえずほっといて、何か別の仕事をしましょう。
なにかしらほかに進められることがあるはずです。
そのErrorで自分の仕事の全体がつまづいていても、とりあえずできたことにしたり、Errorの発生しているプログラムをうまく利用しないようにすれば、ほかの部分を進められるはずです。
頭のなかに入れときながらも、ほかの仕事を進めましょう。
通勤中などに、スマホでなんとなく情報収集したら、解決につながるヒントが見つかることがあります。
4. チームメンバーにつまづいていることを伝えておく
チームメンバーにErrorを解決してくれそうな人がいなくても、つまづいていることは伝えておいた方がいいと思います。
「正直にうまくいってないことを言うなんてプライドが傷つく」
「自分一人で最後まで突き抜けたい」
ということもあるかもしれませんがしかし、
それでもErrorについて真剣に取り組んでいることを伝えておくと、周りの人はそれを実際手伝うことができなくても、ちょっとだけでも気持ちの共有ができます。
気持ちの共有は、チームのメンバーがいい人であれば、人間のよい心の働きによって、きっといい作用を生むはずです。
5. 時間をかける
Error解決後、理解したあとから考えてみると、しょうもないなー。もっと短い時間で修正できたはず。と思うことがきっとあると思います。
しかし、それはその問題が解決し、理解した自分になったからそう思えるのです。
ちょっとしたバグでも修正するのに、時間がかかるときはかかるもの。
Errorに遭遇してしまったら、時間をそのために捻出し、しっかりと時間をかけましょう。
時間をかけて解決したものが、もし、しょうもないバグだったとしても、自分をそこまで悩ませたバグは、ある意味すごいバグです。
よく観察して、どうしてつまずいたのか原因を調べて、いい思い出として胸にしまっておきましょう。
6. 今が踏ん張りどき
なんだかよくわからないErrorに遭遇した。
けどこのプログラムの完成期限が迫っている。
そんなときは、今が踏ん張りどきだと決心して、解決すると信じて、なんとかして解くしかないです。
僕もコンパイル中に祈ったことはたびたびあります。
そして、うまくいったときもあれば、うまくいかなかったときもあります。
しかし踏ん張りどきに最後まであきらめずやり切ったことは、いま考えるとすべてきっとよかったことだったと思います。
踏ん張りどき、ここぞというときにはいつもの数倍の力を出すつもりで頑張ってみましょう。
※ただし、いつもいつも踏ん張りどきなんて無理です。
なので、日常にはそのときに備えて体力を温存しておきましょう。
またふだんから、自分のやっていることの周辺技術に勉強しておくことは、いざというときすごく役に立つと思います。
いざというときには、じっくり勉強する時間がないためです。
まとめ
Errorとの向き合い方は、人それぞれだと思います。
最終的には一番いいのは、自分にあったやり方になるはずです。
それでも今回、自分のErrorとの向き合い方を共有したかったのは、
- プログラミングの大事なところなのに、あんまり人のErrorとの向き合い方を見聞きする機会がないなーと感じていたから
- 自分はErrorを出すのがうまく、さらに平均よりErrorと向き合う時間が長い気がしていて、経験の豊富さからErrorとの向き合い方語れそうな気がしていたから
です。
もしこのブログのどこかが、参考になったらうれしいです。
それから、ほかの人のErrorとの向き合い方も気になります。
もしよければ、あなたのブログのエントリーのテーマにしてみてください。