問題に遭遇した時、自分一人でやること、質問する前にやること

新人さん向け。エラーメッセージやバグに遭遇して、どうしたらいいか分からない時、まず自分一人でやるべきことと、先輩上司に質問する際にやっておく必要があることをまとめておく。コレができないといつまでも迷惑な存在のまま燻るので、一刻も早く身に付けたい。

目次

問題に対して一人でやること

まずはエラーメッセージをきちんと読む・英語でも読む

エラーメッセージに遭遇したら、まずエラーメッセージをきちんと読もう。エラーメッセージが英語だろうと、まずは自分で読むこと。「英語が読めない」なんて小学生までしか言えないセリフなので、死ぬ気で勉強して読めるようになれ。

よくあるのが、エラーメッセージを読みながら自分の勝手な推測が混じってしまい、意味を誤解してしまうこと。あまり自分の頭の中でストーリーを広げず、目の前に表示されているメッセージ・事実だけを拾い集めること。

英語が分からない人はついつい機械翻訳に放り投げるだけで何か分かった気になることが多いが、今のところ機械翻訳の精度はまだイマイチで、プログラミングの文脈を理解して翻訳してくれはしないので、翻訳ツールなどは分からない単語や熟語の意味を調べる程度に留めること。翻訳した文章は原文ではないので、何の価値もない。鵜呑みにしないこと

問題・原因を切り分ける

例えば「PC に USB 接続した端末が認識されない」時に、どこに問題があるのか、色々なポイントが推測できる。

つまりコレだけ原因となりうる要素があるワケで、これらの問題を切り分けないと、何が問題なのか理解したことにはならない。

例えばこうした試行錯誤を行い、原因箇所を切り分ける必要がある。

同様のことはコーディング時のエラーにもいえる。あるメソッドを使ったことで計算結果がズレている、と勝手に思い込んでいたが、よくよく調べたら違う箇所が原因になっていた、といったことはよくある。プログラミングの場合は「Print デバッグ」など原始的な方法を使っても良いので、「この行までは正常」「この行の処理でおかしくなる」といった原因箇所をきちんと切り分けよう。できれば、同じ問題が発生する最小構成のコードを別途作ってみたりしても良いかも知れない。

エラーメッセージでググる

まず自分の手元で発生した問題が何を訴えているのか理解したら、その文言をそのまま Google 検索窓に入れてググろう。

プログラム関係のたいていの悩みは、過去に他の誰かが悩んでいて、すでに解決してます。

そうすると、大抵は GitHub Issues や StackOverflow の質問ページなどがヒットする。

特定のメッセージがない事象のググり方

特にエラーメッセージが出ないけど、なぜかこのライブラリが思った動作をしていない、といった場合は、検索キーワードを自分で考える。そのポイントは、筆者の視点で文言を考えること。

検索結果がイマイチ広すぎる場合は、「言語名 キーワード」とか「ライブラリ名 キーワード」といった形で AND 検索する。JavaScript の forEach に関する問題を調べたいのに、PHP の話が混じったりするなら、「JavaScript forEach -PHP」のように、除外検索を利用する。

まずは日本語で調べても良いが、分野によってはイマイチ日本語の文献が出てこない場合もある。そういう時は英語で検索する

何かが動かない時は「not working」、何かが不正な状態なら「invalid」、設定を書いたのに無視されていそうな時は「ignore」など、その状況を表す、よく使われる英語表現を交えて検索すると良いだろう。

ググり方に関しては、以下のような知識も事前に入れておくと良いだろう。

検索結果の最初の10件は全部読む

キーワードで検索したら、検索結果の最初の10件は何も考えずに全て別タブで開き、全てを熟読する、というのを習慣づけて欲しい。

「英語のページだから読みたくない」なんて論外。自分で解決できるスキルもないのに、「タイトルからするとあんまり関係なさそう?」なんて勝手な判断で検索結果を除外しないこと。

開いて全部きちんと読んでみてから、明らかに違うページは無視すれば良い。

文献を読む際は、そのページでターゲットとしているライブラリのバージョンや OS などの環境が、自分と同じかどうか確認すること。Mac 環境でのみ有効な対処法を Windows で試していたり、古いバージョンの文献で今となっては解決策にならない情報など、珠玉混在していることを念頭に置いて、いきなり鵜呑みにしないようにすること。その記事と自分の環境との差異を押さえておこう。

  • 読み飛ばさない
  • メモする

漏らさず読みながら、情報を整理していくのを忘れずに。

見つけた対処法はいきなり試さない

検索して何か対処法っぽいコードやコマンドが見つかっても、いきなり打ち込んで試さないこと。自分の環境に適さない誤った解決策だった場合、さらに余計な問題を生むことにもなりかねない。

解決策っぽい情報は、まずは検索結果の10件を読み終わるまで、メモ帳にでもキープしておく。全て読み終わったら、一番効果がありそうな手順から順に試してみる。その際、試した内容が間違っていた時に、元に戻せるようにしておくこと。元に戻せないような手順は試さないでおき、先輩上司に質問した方が良い。

公式サイトを読む

ググってそれっぽい答えが出てこなかった時も、出てきた時も、必ず公式サイトの API リファレンスやトラブルシューティングなどに目を通すことを忘れずに。

「機転を利かせる」とか、「応用して別の問題を解決する」とかいう能力は、インプット量が多くないとできない。まずはインプット量を増やそう。

それでもダメなら質問する準備を始める

こうした「発生事象 (エラーメッセージ) の内容把握」や「解決策の検索」は、5〜10分程度で終わるはずだし、終わらせる。それ以上は足りない自分の頭で考えても時間の無駄だ。それに、単に直接的な解法をググるだけでは解決できないような問題であることが多いので、総合的な知識力が乏しい人間には解決は難しいだろう。

新人エンジニアがこの記事の内容を意識しすぎてしまうと、自分で頑張りすぎて締め切りに間に合わないということもあり得えます。
そのため、新人エンジニアが自分で悩みすぎていないかを確認することも重要です。

そこで先輩や上司に質問しに行くワケだが、「何かエラーが出て〜、よく分かんないんですけど〜」なんて質問の仕方をした時にはカカト落としモンだ。相手が事象を把握し、解決策を導き出せるよう必要な情報をまとめて簡潔に共有するための準備をしよう。

人間ついつい「このぐらいは言わなくてもわかるでしょ」と話を省いてしまいがちですが、それは相手と文脈を共有できてることが前提です。
残念ながら、これからあなたが質問しようとしている相手はあなたと文脈を共有していませんので、しっかり整理して説明する必要があります。

先輩上司に質問する前にやること

質問する内容を整理する

これはつまり、「質問された側が答えを考えるために必要なこと」の裏返しである。何を提供すれば求める情報が返ってきそうか考えよう。

これらをまとめたら、初めて席を立ち、先輩上司に質問しよう。

なお、先輩上司に質問する時は、以下のことに注意する。

全般的に共通する心構え

以上、問題に遭遇した時にどのようにアプローチし、どのように人に頼れば良いかを話してきた。こうしたことは、言われなくても最初から出来る人か、どれだけ言われても一生できない人に二分されると思う。両者で決定的に違うのは、この一つの心構えがあるかないか、だと思う。

それはすなわち、見たものや聞いたものに自分の勝手な判断や推測を混ぜていないこと。事実と主観を明確に区別し、「自分はこう思うが、実際こうなっている」ということを常に正確に分析できているかどうかだ。

我の強いヤツや、あまりモノを知らない人間に限って、「自分はちゃんとやっているのに何故かこうなる」とか、「自分のコードに間違いはないはずなのに」とか言う。でも、99% はそいつ自身のやっていることが間違っているから問題が起こっている。

以下は立川談志の有名な言葉だが、エンジニアの問題解決に対する心構えとしても適用できるのではないかと思っている。

「よく覚えとけ。現実は正解なんだ。
時代が悪いの、世の中がおかしいと云ったところで仕方ない。
現実は事実だ。
そして現状を理解、分析してみろ。
そこにはきっと、何故そうなったかという原因があるんだ。
現状を認識して把握したら処理すりゃいいんだ。
その行動を起こせない奴を俺の基準で馬鹿と云う」

すなわち、「僕は悪くない」「合っているはずだ」などと言っても、エラーが出力されているなら、何かを変えて、その問題を解決しなきゃいけないのだ。

現状に対して自分の思いや主観は必要ない。正しく事実を事実として把握し、適切に処理することが求められる。

そのために意識しないといけないこと、エンジニアとしてやれないといけないことを語ってきた。ぜひともスムーズに、スマートに問題解決し、自分で自分の仕事を進めていけるように願っている。