質問できなかった新人プログラマの反省会

はじめに

プログラマとして働き始めてから、先輩プログラマから「わからないところがあったら質問してね」と何度か声をかけてもらった。「はい!わかりました!」と威勢よく返事をしたものの、いざとなったら質問できない自分がいて「それはなんでだろう」と考えたのでそのことについてまとめる。

質問できなくなるまでの過程

まずは、「わからなかったら質問してね」「はい!」からどうして「質問したいけど、できない」状況になるのかを振り返ってみる。

1. 作業に取り掛かる

最初に任された仕事に取り掛かる。レポジトリをクローンして、動作確認をして、自分の担当する箇所のコードを確認する。それからいざ修正なり、新機能なりを実装するためのコードを書き始める。この時点では質問しづらいも何もないので質問しづらい度ゲージは0%。

質問しづらい度ゲージ 0% □□□□□□□□□□

(`・ω・´)「なにかあったらすぐ質問します!」

2. 問題に直面する

しばらくすると、たいていの場合は何かしらの問題に直面する。ひょっとしたら1.の中の動作確認で問題を発見するかもしれない。そういう時まずは自力で解決を試みる。

3. 解決案を探す

  • エラーの原因であろう技術のドキュメントを読む
  • Stackoverflowなどの質問サイトや、Qiitaなど技術系の記事を見る
  • Githubに同様のissueがないか探す

これらのサイトを巡ればたいてい何かしらの解決案が見つかる。これで解決すればめでたく次の作業に移行できる。しかし、以下のようなパターンもありえる。

  • 解決案を試してみたのに同じエラーが発生する
  • 解決案を試したら違うエラーがでてきた!

ここが運命の分かれ道。同じエラーが発生したなら、コードや環境を保ったまま次の解決案を探せる。しかし、もし違うエラーがでてきたら!次の解決案を探しはじめてしまうのだ。

この時点で自分にしかわからない理由でコードや環境が変更されているので、質問をするときの説明が最初よりも複雑になる。説明が複雑になれば質問を受けた側の人も質問に答えたいのに、前提が理解できず質問の答えようがなくなってしまう。それを質問できないプログラマも悟って、「なんだか質問しづらい状況」が少しずつ少しずつ作られていく。

質問しづらい度ゲージ 40% ■■■■□□□□□□

(´・ω・`)「あの、質問が…あ…解決しました……あ…(と思ったら違うエラーでてきた)」

4. 更に解決案を探す

質問しづらいゲージが徐々にたまり始めましたが、ここからが地獄です。ドツボにハマったプログラマはStackoverflowやGithubのissueに翻弄されならが、コードを変更したり元に戻したり、バージョンを変更してみたりして必死に解決しようとします。その変更の過程でまた違う種類のエラーに遭遇したり、また前のエラーに戻ったりを繰り返して、自分でも自分が辿った道のりがわからなくなってしまいます。こうなるともう、自分でもワケが分からなくなってしまいます。更にはなんとかして質問してみたものの、返答が来た頃には違うエラーに直面していたりしたら最悪です。

質問しづらい度ゲージ 100% ■■■■■■■■■■

(´;ω;`)「もうなにがなんだかわからないお……過去に戻りたいお……」

5. 質問したいけど……

かくして、いつのまにか「はい!質問します!」と言っていた威勢のいい新人プログラマは、質問ができず何時間もエラーに時間を費やしたそうな。。。。

解決策

今回の場合、一番のポイントは質問しづらい状況を自分が作っていたということ。原因は「自分でもこれまで自分が試してみたこと」「どういう過程を経て現状なのか」を説明できないから。何かエラーを見つけて、そこから更に状況が変わりそうなら、ちゃんとメモることが大事だと気が付きました。実際にメモっていたのは以下のような情報。

エラー内容: hoge Error
- 該当するモジュール名とそのバージョン1
- 該当するモジュール名とそのバージョン2
- 該当するモジュール名とそのバージョン3

解決策
hogeクラスをfugaクラスに変える
参考にしたサイトのURL: fuge.com

こういう風にまとめることで、自分がためした事とその時の環境がひと目でわかるし、これをそのまま質問する時にも使える。また、エラー情報をこういう風にまとめて俯瞰することで見えてくることもあった。「このモジュールのこのバージョンのときだけエラーでてない?」とかとか。

おわりに

かくして、わたしはちゃんとエラーのログをちゃんと取り始めました。とても大事ですね。プライベートでだらだらと無責任にやっていただけじゃ身につかなかった感覚だとおもいました。日々精進です。最後に、shimizukawaさんにまとめてもらった言葉を借りておわりにします。

  1. ログを取れ : ログがないと誰も問題を解決できない
  2. 共有しろ : 経験者はログから重要なキーワードに気づきやすい
  3. 試行錯誤は15分まで : それ以上は深みにハマるだけなので、15分でダメなら質問しよう。質問するための情報整理をしよう。情報整理の時間も15分に含めよう