私は現役のエンジニアであり、後輩エンジニアに対してメンターとして教えることがあります。
また、プログラミングスクールの講師であるため、数百人のエンジニア志望者に対して目指す方にもメンターとして指導をしてきました。
そして、多くの受講生や新人エンジニアから「質問の仕方がわからない」「質問するのが怖い」という悩みを耳にします。
今回の記事では、私の経験をもとに、質問の際の悩みとその解決策、そして質問の仕方のコツについて共有させていただきます。
エンジニアの質問でよくある悩みと解決策
これまで多くの受講生や後輩から、質問に関する悩みを聞いてきました。
その中でよくある悩みと、その解決策を紹介します。
質問するのが怖い
リモートでのやり取りが多い昨今ではメンターとのコミュニケーションが難しくなっています。
そのため、質問するのが怖いと感じることもあるでしょう。
例えば、以下のような反応が返ってくるのではないかと不安になるかもしれません。
- 「そんなこともわからないのか」
- 「調べれば分かるでしょう」
- 「ちゃんと自分で考えてみて」
- 「いま忙しい」
しかし、メンターはあなたの成長をサポートするために存在しています。
大事なのは「サポートもメンターの仕事の一つ」だということです。
そのため、メンターはあなたの質問を歓迎しているということを忘れないでください!
ただし、質問の仕方を間違えると上記のような反応が返ってくる可能性があります。
この記事の後半では、質問の仕方のコツを紹介しますので、ぜひ参考にしてください。
質問のタイミングがわからない
「今質問してもいいのか?」という不安を抱えることは自然です。
特にリモートでのやり取りが多い昨今では、メンターの状況がわかりにくいため、質問のタイミングがわからないと感じることもあるでしょう。
そんな時は、以下のようなジャブを打ってみましょう。
- 「今質問してもいいですか?」
- 「今、忙しいですか?」
- 「お手隙の時にxxxについてお聞きしたいです」
特に最近だとチャットでやり取りできるので、上記のようなジャブだけ打っておいて、あとはメンターの返信を待つだけでOKです。
メンターの時間をとってしまうのが申し訳ない
質問をすることで、メンターの時間をとってしまうのが申し訳ないと感じるかもしれません。
実際、質問内容を読んだり、一緒に考えたりする時間はメンターの数分〜数十分を消費することは間違いありません
しかし、質問を通し、メンターはあなたの技術レベルや疑問点を知ることができます。
その結果、次の成長に繋がるアドバイスを受けることができます。
また、あなたが早く問題を解決することは、プロジェクトの進行をスムーズにすることにつながります。
一時的に時間をとってしまうのですが、長期的に見ればメンターの時間を節約することにつながりますので、申し訳ないと感じる必要はありません。
基礎的な質問をするのが恥ずかしい
自分が投げかけようとしている質問が基礎的な内容であると感じ、低レベルな質問をするのが恥ずかしいと感じることもあるでしょう。
しかし、基礎的な質問をすることは恥ずかしいことではありません。
基礎的な質問だったとしても、メンターはあなたの技術レベルを把握することができ、あなたのレベルに合わせたアドバイスをすることができます。
むしろ、最初ほど基礎的な質問をするべきだと私は考えています。
なぜなら、後になればなるほど基礎的な質問をしにくくなり、結果的に自分の成長を妨げてしまうからです。
そのため、基礎的な質問をすることは恥ずかしいことではなく、むしろ自分の成長のために必要なことだと考えてください。
質問の仕方がわからない
初心者にとって質問は大事ですが、効果的な質問をすることは非常に難しいと思っています。
例えばエラーが出た時の質問と、知識に関する質問、そしてコードレビューに関する質問では質問の仕方が異なりますよね。
このように、その時々に応じた質問をしなければならないため、実は質問は簡単ではないのです。
しかし、質問の仕方を間違えると、メンターが答えにくい質問になってしまったり、メンターの時間を無駄にしてしまったりします。
そのため、質問の仕方を学ぶことは非常に重要です。
この記事の後半で正しく、効果的な質問の仕方を紹介しますので、ぜひ参考にしてください。
新人エンジニアが質問することの7つのメリット
質問をすることのメリットを知ることで、質問をする意欲が高まるでしょう。
以下に、新人エンジニアが質問することのメリットを紹介します。
1. 時間を効率的に使えるようになる
新人エンジニアが質問する最大の利点は、確実に時間を節約できることです。
困難な問題に直面した際に、メンターに質問することで解決策が迅速に見つかります。
独力で情報を探し出すよりも高速で、その結果として他の重要なタスクにも多くの時間を割けます。
新人エンジニアが時間を効率的に使えるようになるためにも、質問をすることは重要なのです。
2. 自分の考えを明確にする
新人エンジニアが質問をすると、それによって自分の考えや疑問が明確になります。
質問を形にする過程で、自分自身の不明点や疑問点が浮かび上がることがあります。
また、メンターからの回答やフィードバックは、これらの疑問を解消し、自分の考えを整理する良い機会になるでしょう。
3. 問題解決能力が高まる
質問を繰り返すことで、新人エンジニア自身の問題解決能力が向上します。
質問はトレーニングにもなりますので将来どんな状況にも適応できる問題解決スキルを身につけることができます。
4. 知識が深まる
メンターからの回答は、しばしば専門的な知識や経験に基づいています。
新人エンジニアは、これによって自分の理解を深め、広げることができます。
質問をすることで、一時的な解決だけでなく、その背後にある理論や原則についても学ぶことができるのです。
独力でその場だけでの解決を目指すよりも、長期的に必要な知識を身につけることを目指しましょう!
5. 有用なアドバイスがもらいやすくなる
質問を通じて、新人エンジニアのスキルレベルや疑問点がメンターに明らかになります。
これが、より具体的かつ有用なアドバイスをもらいやすくします。
新人エンジニアはこのフィードバックを活かすことで、成長速度を高めることが可能です。
6. メンターとの良好な関係を築く
質問をすることは、新人エンジニアとメンターとの間でのコミュニケーションを促進します。
これにより、双方の信頼関係が深まり、より良い指導を受けられる環境が整います。
質問は、ただの情報交換以上に、人間関係においても重要な要素です。
7. プロジェクトがスムーズに進む
新人エンジニアが質問をすることで、個々の問題が速やかに解決され、これがプロジェクト全体にも好影響を与えます。
具体的には、各問題が解消されると、一つひとつのタスクが順調に進むようになります。
結果として、プロジェクトが前に進むことになりますので、メンターを含めチームや会社にとってのメリットも大きいです。
やってはいけない質問の仕方(NG集)
プログラミング学習において、適切な質問の仕方は極めて重要です。
しかし、質問の方法を誤ると、メンターや教師が回答しづらい状況を作ってしまう可能性があります。
その結果、学習プロセスにおいて大きな成長を阻害する恐れがあります。
ここでは、質問をする際に避けるべき方法について説明します。
1.「やり方を教えてください」という投げやりな質問
エンジニアリングは問題解決の能力が求められる職種です。
したがって、自分で考える姿勢は非常に重要です。
この種の質問をすると、メンターから見ても自分で考えようという意欲が感じられないため、答えることをためらう可能性が高いです。
さらに、ただやり方を教えてもらうだけでは、その方法が正確なのかどうか、自分で判断する能力が身につきません。
これは、長期的な視点で見てもあなたの成長につながるものではありません。
2.「どうしたらいいですか?」という曖昧な質問
この質問には具体性が欠けています。
問題の状況や自分が何を試みたのかが明確でないと、具体的なアドバイスはできません。
質問をする前に、自分が何を目指しているのか、どのような状況で困っているのかを明確にしましょう。
3.「うまくいきません」という不明瞭な表現
このような表現では、何が問題でどこでつまづいているのかが分かりません。
具体的な状況やエラーメッセージを共有しないと、対処の仕方がわかりません。
4.「エラーが出ています」という不完全な情報
エラーが出た場合、どのようなエラーメッセージが表示されたのか、それにどう対応したのかを明記する必要があります。
ただ「エラーが出ています」とだけ言うと、そのエラーに対する解決策を見つけるためのクレジットを一切使っていないように見えます。
5.「コードを見てください」という丸投げ
ソースコードをそのまま渡すだけでは、メンターにとっては負担が大きいです。
そして、そのような質問ではあなた自身のスキル向上にもつながりません。
代わりに、具体的な問題点を指摘し、その解決のために何を試したかを明示する質問が効果的です。
以上が、避けるべき質問のパターンです。
これらを意識するだけで、質問がスムーズになり、より多くの知識とスキルを身につけることができるでしょう。
おすすめの質問テンプレート
質問のスキルを高めるための第一歩は、よく整理された質問をすることです。
以下に、質問をする際のおすすめのテンプレートを紹介します。
[実現したいこと]
xxxx
[自分で試したこと]
xxxx
[試した結果はどうなったのか]
xxxx
[試した結果と期待する結果の違いは何か]
xxxx
[調べたことは何か]
xxxx
[仮説とその根拠]
xxxx
[関連するコードやエラーメッセージ]
xxxx
このようなテンプレートを用いることで、質問が整理され、かつ回答を得やすくなるでしょう。
また、質問する前にこのテンプレートに沿って情報を整理する習慣をつけると、自分の考えを整理することができ、より効果的な質問ができるようになります。
場合によっては情報を整理しているうちに、自分で問題を解決できることもあります。
ではそれぞれ、どのような内容を書けばいいのかを見ていきましょう。
実現したいこと
この部分は質問の目的を明確にする場所です。
何を達成したいのか、どんな機能を実装したいのかを簡潔に述べます。
この部分が明確であれば、回答者も的確なアドバイスがしやすくなります。
自分で試したこと
ここでは、問題に対する自分自身の取り組みを書きます。
自分が何を試してきたのかを説明することで、無駄な手段を避けるとともに、回答者の負担を減らせます。
試した結果はどうなったのか
自分が何を試したかに続いて、その結果を説明します。
これがあると、問題解決の糸口を見つけるための重要な手がかりになります。
試した結果と期待する結果の違いは何か
こちらは、試した結果と期待していた結果がどのように異なるのかを書く部分です。
これにより、問題点が明確になり、より速やかに解決へと導かれます。
調べたことは何か
あらかじめ調べたこと、参考にした情報源などをこちらに記します。
この情報があると、回答者が同じ情報を繰り返す手間を省けます。
仮説とその根拠
もし何か仮説があれば、それとその根拠を書きます。
これによって、問題解決の方向性を見つける手助けになるでしょう。
関連するコードやエラーメッセージ
問題に関連するコードやエラーメッセージがあれば、最後にそれを記載します。
これがあることで、問題を具体的に把握しやすく、解決に繋がる可能性が高くなります。
テンプレート使用例: Railsでのエラー
それでは、ここまで学んだ内容をもとに、実際の質問の例を見ていきましょう。
ここでは、Railsでのエラーについての質問を例にとります。
[実現したいこと]
Railsでhttp://localhost:3000/articlesにアクセスしたとき、Articleの一覧を表示したい。
[自分で試したこと]
- localhost:3000/articlesにアクセスを試みた。
- app/views/articles/index.html.erbに誤りがないか見直した。
- <% @articles.each do |article| %>のブロック全体をコメントアウトしてみた。
[試した結果はどうなったのか]
- エラーが発生し、「NoMethod Error in Articles#index」と「undefined method 'each' for nil:NilClass」と表示された。
- コメントアウトした場合、エラーは出なかった。
[試した結果と期待する結果の違いは何か]
エラーが発生してしまい、Articleの一覧が表示されなかった。
エラーが発生せず、Articleの一覧が表示されることを期待していた。
[調べたことは何か]
- エラーメッセージについてGoogleで調べたが、解決法が見つからなかった。
- app/views/articles/index.html.erbに誤りがないか確認した。
[仮説とその根拠]
app/views/articles/index.html.erbの<% @articles.each do |article| %> という行が問題である可能性が高い。
エラーメッセージがこの部分を指しているから。さらに、この部分をコメントアウトするとエラーが出なくなる。
[関連するコードやエラーメッセージ]
エラーメッセージ: NoMethod Error in Articles#index, undefined method 'each' for nil:NilClass
関連するコード: app/views/articles/index.html.erb の <% @articles.each do |article| %>
このようにして質問の文脈が明確になり、助けを求める際も、自分と相手双方にとって理解しやすくなります。
具体的な手法やエラーメッセージをしっかりと記載することで、問題解決の効率が格段に上がるでしょう。