初心者が「仕事で貢献する」ためにする質問の方法

# 概要

自分がエンジニアを始めたときに、

- 一度調べてから質問して！
- ググれ！
- 調べたら出るじゃん！
- で？結局何がわからないんだっけ？

って言われたことがある人いるのではないでしょうか？
自分も言われたことがある勢です。

でもどうやって調べていいかわからないので、迷いました。
数年エンジニアとして働いてみて、こう調べてみれば、質問前にも良いし、
何がわからないか明確になりやすいなと思ったことをまとめます。

ちなみにそれに悩みすぎて泣いた当時のことを語ったLTもあります。
https://docs.google.com/presentation/d/1aUusdto9wfY_g8eR57xI4SsHhtItLtfHIUIO_ZFydcQ/edit#slide=id.g61275e9f8e_0_116

# 目次

1. 前提
2. 誰向けの記事か
3. そもそもなぜ質問するのか
4. 紹介した状況を踏まえて、「質問の仕方」

# 前提

勉強というよりは、仕事をしたり、インターンをする上でのお話になります。
個人で勉強する際にするオンライン上で質問とニュアンスが異なる可能性があります。
ただし、仕事でする質問を前提に個人開発の質問もすると解像度が上がるので、オススメだと考えています。

# 誰向けの記事か

1. エンジニアになりたい！これから何か作るぞ！といった方
2. エンジニアになるためにプログラミング勉強を始めたのだけど、エラーでてもう無理。。。となった方
3. インターン飛び込んだけど、ひとまず全部わからない

# そもそもなぜ質問をするのか

✖︎ 自分がわからないことを解決するため
◯ わからないところを解決し、仕事として貢献するため

前者は、自分が勉強するだけであれば、良いのですが、仕事でやる場合は、一手足りません。
お金いただいて仕事をしている以上、事業の利益に貢献する必要があります。
ただし、自分のやったことがないことやスキル上知見がなさすぎることというのは調べることすらできないということが多いです。
その状況を脱出し、事業に貢献できるようになるために質問をするということが **「仕事やインターンをやる上でのエンジニアの質問」** になります

# 質問をする時に陥る状況とポイント

わからないことが出た時に初心者が質問したいことはだいたい以下の通りです。

1. エラーがでた
2. 実装してみたが、思い通りに実装されていない
3. そもそも実装をどうやっていいのか全くイメージできない

この状況になった時にだいたい以下の条件でパターンが決まると個人的には考えています。

1. いつ質問するのか
2. どうやって調べるのか

## エラーが出た

### いつ質問するのか

エラーが出た場合は、15分調べてもわからない場合に質問します。
15分に根拠はありませんが、だいたい調べるのに十分な時間かつ、長すぎない時間がオススメです。
いくつかインターンや仕事をやってきたり、オンラインで調べたりしてみた結果、私の場合は、15分がよく聞く質問までの時間だと感じています。

### どうやって調べるのか

1. エラーの全体を貼り付けない
2. エラーコードで調べる
3. エラーの内容を英語でしっかりと読み切る

例えば、PHPの実例を出すと以下のようなエラー文が出ることがあります。

```
Warning: Missing argument 2 for wpdb::prepare(), called in /public_html/wp-content/plugins/rockhoist-badges/rh-badges.php on line 342 and defined in /public_html/wp-includes/wp-db.php on line 990
```

この中で、検索に必要な個所は `Warning: Missing argument 2 for wpdb::prepare()` のみだと分かる方は大丈夫かと思います。
初心者がやりがちなのは、上記のエラー文を全て貼り付けることです。

それでたまたまうまく検索されることはありますが、そうでない時も多いため、言語ごとに必要なエラー文の調べる個所というのを抑えると良いです。
それぞれの言語のエラーコードやエラーの内容を公式ドキュメントにも読みに行く姿勢が数年後のアウトプットの質を上げるために大切です。

## 実装してみたが、思い通りに実装されていない

### 1. いつ質問するのか

実装が思った通りにされない状態になり、そのやり方を調べる時間が15分になったら。
これも、調べる時間15分という点については変わりありません。

### 2. どうやって調べるのか

実装したい機能の一般的な名前と自分が実装している言語やフレームワークの名前をセットで検索します。

実例としては、Vue.jsで検索機能を実装したい場合は

「Vue.js　検索」

といったワードで検索します。もし、日本語の情報で足りない場合は英語でも検索してみましょう。
ここで注意が必要なのは、実装したい機能のイメージはわかるものの、検索するワードがわからない場合です。
例えばですが、CSSでアニメーションを取り入れたい場合に、アニメーション自体の名前がわからないと行った場合には、
わかる人に、このアニメーションの名前はなんですか？と行った質問を先回りして質問しておくことで、
自分で調べられるようになるので、覚えておくと良いです！


## そもそも実装をどうやっていいのか全くイメージできない

この状況に落ちいったらそもそもどう質問するのかとかありません。
タスクを依頼された時点で、何もイメージできていないことを先に伝えましょう。
ただ、これで全部やってもらうと力にならないので、以下をちゃんと質問します。

1. どういうワードで調べれば良いのか
2. 何をわかっていれば、お願いされたタスクの実装ができるようになるのか

これを聞いておくと、今後どうやって調べていいのかがわかるため、同様の分野の派生系のタスクについては、自走できるようになります。

# 紹介した状況を踏まえて、「質問の仕方」

調べてみても解決しなかった場合は、質問をします。
質問された側が欲しい情報は以下の通りです。

1. 何を機能として実現したいのか
2. どういうエラーが発生しているのか（全文）
3. エラーを解決するためにやってみたことは何か
4. エラーを解決するために調べた情報は何か、その情報ソースは何か（URLなどを提供）
5. 調べてみた結果何がわからなかったのか

私が初心者の時にやったのは、いきなりこういうエラー文が出てきたんですが、どうしたら良いですか？と質問に行ってました。
エスパーではないので、これでは、質問された側はなんのこっちゃわかりません。
前提の共有が必要なので、上記5つは共有するように心がけると良いです。
特にチャットで質問する場合は押さえておかないと、何回かチャットでのラリーが必要になりますので注意が必要です。

# まとめ

これは最近常に自分も言われて意識していることですが、**「相手の立場に立って、物事を考える」**というのがこの記事で書いたことの本質です。
自分が質問する相手が何をわかっていれば、自分の疑問に答えるための材料が揃うのか。これを考えて質問するというのが大切なことなのかなと考えます。
自分もまだまだ足りないところがたくさんですので、この記事を戒めにして頑張りたい所存です。