プログラミングの正しい質問の仕方とは?プロが体系的に徹底解説

プログラミング初心者の方は、いざ勉強を始めてみると必ず分からないことが出てきますよね。特にこんな疑問を感じたことはありませんか?

エラーがどうやっても解決できない
詳しい人に聞きたいけど質問の仕方が分からない
正しい質問方法を身につけたい

実は、プログラミング学習において「質問すること」はとても重要なスキルなのです。しかし、ほとんどの方がどのように質問したら良いのか、分からないまま無駄な時間を過ごしているのです。

そこで、本記事ではプログラミング学習における「正しい質問の仕方」を身につける方法について、具体的な解説をしていきます。

質問する側・質問される側の双方で余計な誤解をなくし、無駄な時間を省略することでお互いの工数削減にも繋がります。エンジニア歴10年以上の筆者が、これまで得た経験則の中から正しい質問の仕方についてご紹介します。

※今すぐ質問方法を知りたい方は「テンプレート」の項目をチェックしてみてください。

プログラミングにおける「質問」に対する心構え


質問に対する心構え

まず最初に【質問する】という行為の心構えについて考えてみましょう。

初心者の方がプログラミングで疑問に感じたことを質問しようと考えた時に、まず最初に「怖い」というイメージが先行してしまうケースがよくあります。

理由として多いのは以下のようなパターンでしょう。

  • 初歩的な質問なので恥ずかしい
  • どのように説明したら伝わるのか不安
  • 相手に嫌がられたらどうしよう

実を言うとプロのエンジニアでも分からないことは毎日のように存在しており、それを解消するために質問することはよくある事です。しかも上記のような不安も、少なからず持っています。

重要なのは「質問する」という行為が初心者だけにあるわけではなく、エンジニアなら誰でも起こりえる普通のことなのです。

質問をすることで問題が解消できるだけでなく、質問された側も新しい発見や学びがあるので、お互いに知見を広められてスキルの向上に繋がります。そのため質問は決して恥ずかしいことではなく、むしろどんどん質問&解答を繰り返すことで、業界全体のリテラシーを高められます。

簡潔で分かりやすく、相手が解答しやすいように質問を工夫して双方の生産性を向上できるように正しい方法を学んでいきましょう。

質問が下手なエンジニア = 仕事ができないエンジニア


質問が下手なエンジニア = 仕事ができないエンジニア

質問が「上手い人」「下手な人」を比べると、エンジニアとしての成長スピードやプロジェクトの進捗具合が大きく異なってきます。

「質問をする」ということが実務において、どのくらい重要な要素なのかをもう少し詳しく見ていきましょう。

現場では最速で問題を解決することが求められている

多くの現役エンジニアは「質問」を正しく行う習慣が自然と身についています。これは質問が上手いと問題を効率よく解決して、仕事を円滑に進められることを経験から知っているのです。

エンジニアの世界は、初心者でもプロであってもとにかく分からないことが次から次へとやってきます。その都度、問題を解決できなかったり解消するのに時間が掛かっていると、いつまでたっても仕事は前に進みません。

そのため、問題解決能力は最速で解決できるほど評価される傾向にあります。

これを実現するためにも、初心者の方はいきなり答えを求めるのではなく、問題を解消するための方法や手順を積極的に学ぶようにしましょう。すると、似たような問題が発生した時でも自然に自分で解決できるようになります。

15分わからなかったら質問するのが暗黙のルール

プログラミングの世界では「15分ルール」というものがあります。

これは問題が発生した時に、最初の15分は自分でさまざまな方法を試してみて、それでも解決できない場合はすぐに第三者へ質問するというルールです。

このルールはGoogleの人工知能を研究する部門でも実際に取り入れられており、重要なポイントが以下のように2つあります。

  • 他人の時間を無駄にしない
  • 自分の時間を無駄にしない

15分は自分で試行錯誤することで解決できる場合もあるし、出来なかったとしても何をどのように試してダメだったかを明確にできます。

これを踏まえて、第三者に質問することで相手も理解しやすいだけでなく問題解決を短時間で済ませることができるわけです。

プログラミングで正しい質問の仕方を身につけるメリットとは

質問するスキルをアップさせることが、どのようなメリットに繋がるのかをより具体的な例を見ながら確認してみましょう。

単純に学習効率を上げるだけでなく、エンジニアとしてのスキル向上にも繋がることを意識しながら参考にしてみてください。

工数削減につながる


工数削減につながる

インターネットの発達によって、気軽に質問ができるサービスや手段が増えたのは良いのですが、回答する側はただじっと待っているわけではありません。

本業をメインに仕事をしながら、空いた時間で回答をしてくれる人がほとんどです。それなのに分かりにくい質問が多いと、回答者は要点を掴むために質問をもう一度しなければいけません。

つまり、質問を質問で返し、また質問するという悪循環に繋がります。

簡潔で分かりやすく正しい質問を身につけていれば、お互いの工数削減になるので学習の進み方も早くなるわけです。

挫折しにくい


挫折しにくい

「質問する」というスキルが身についていれば、プログラミング学習においてこれほど頼りになるものはありません。

そもそもプログラムは、数学のように答えが1つではありません。その用途や目的によってさまざまに変化するため、詳しい人に質問することが学習を効率よく進める鍵となります。

逆に質問ができないと、どんどん分からないことが積み重なって途中で挫折する大きな要因になるわけです。スムーズに質問ができるようになれば、プログラミングの学習はきっと楽しいものに変化していきます。

問題解決能力が上がる


問題解決能力が上がる

正しい質問ができるようになってくると、さまざまなエラーパターンを自分で解決できるようになっていきます。

すると自分の中で、エラーの解決パターンが蓄積されていくので、似たような現象で悩まなくなってきます。これはプログラミングの学習が効率化するだけでなく、自身の技術レベルも向上していることを意味するわけです。

このようなスキルは、実際にエンジニアとして就職したあとでも非常に有効で、論理的で正しい質問ができる存在として周りから評価されることに繋がります。

プログラミングの質問をする前にやるべきこと

正しい質問をするためには、その前にやるべきことを行い下準備をしておく必要があります。そこで、質問をする前にやっておくべき具体的な事例について解説をしておきますので参考にしてみてください。

正しくググる

何か分からないことや疑問に感じることがあった場合に、いきなり誰かに質問するのはNGです。質問する前に、まず最初にやるべきことがあります。

それは「Google検索で調べる」ことです。

俗に言う「ググる」というワードがありますが、ひとまず自分でネットから答えを導き出せるかを試してみることは重要です。インターネット上には膨大な情報が溢れているので、正しく検索できればすぐに問題が解消できることもあります。

正しくググるポイントはいくつかありますが、重要なのは以下のとおりです。

  • ①正確なキーワードを使う
  • ②日本語より英語
  • ③記事の日付を確認する
  • ④エラーをコピペして検索する

各ポイントの詳細について解説しておきます。

①JavaScriptについて検索しようとしているのに「java」とか「ジャバスクリプト」のようにキーワードが変化してしまうと、関係ない情報が一緒に検索結果に表示されてしまいます。

②日本語と英語の記事では比較にならないほど情報量が違います。そのため、検索キーワードには英単語だけを使って、あとはGoogle翻訳などを併用していくのがオススメです。(最初のうちは日本語を使ってもOK)

記事がいつ公開されたか?は重要な情報です。プログラミングの世界は変化の激しい業界なので、すぐに仕様が変わったりします。そのため、可能な限り最新の記事を選択するようにしましょう。

④エラーが起きた時に「エラーメッセージ」などをコピペして検索すると大抵の場合は解決方法が書かれた記事がヒットします。なぜならすでに多くの人が同じエラーで困った経験があるためです。

試行錯誤する

正しくググることで、いくつかの有力な情報を発見することになります。

特によくヒットするのが「teratail」や「Stack Overflow」で、情報の質も高いので参考になります。teratailは国産サービスなので日本語情報が豊富ですが、Stack Overflowの場合は海外サービスなので英語がメインになります。しかし、頑張って英語を読んでみたりGoogle翻訳で理解しようとするが姿勢が重要です。

また、プログラムは情報を見ただけではなかなか判断しにくい部分があります。そこで、ひとまず見つけた情報を頼りにしてまずは自分でプログラミングしてみることが重要です。

つまり、ヒントを頼りにして「実行した結果がどのようになるのか?」を確認することです。

もしかすると問題が一瞬で解消されるかもしれないし、変化しないかもしれません。その場合は、別のヒントを頼りに再チャレンジを繰り返します。このような試行錯誤は、確実に自身のプログラミングスキルを向上してくれるので必ず行うようにしましょう。

良い質問例と悪い質問例


良い質問例と悪い質問例

それでは、具体的な質問例を交えて「悪い質問」と「良い質問」を比較してみましょう。

サンプル例として、ある機能を実装したいがエラーが発生して解決できなくなったというパターンで質問文を作ってみます。

悪い質問例

まずは「悪い質問」の例です。


◯◯◯という機能を実現したいのですが、エラーが出てしまいどうやっても解消できません。どのようにプログラミングすれば実現できるのでしょうか?

この質問だと起きた結果だけを報告しているので、回答する側からすると「どんなエラーが出たのか?」「どのようなコードを書いたのか?」「何を試してダメだったのか?」などの情報が完全に抜けています。

そのため、これらの情報を得るために何度か質問をやり取りすることになるため、お互いに無駄な時間を過ごすことになるわけです。

良い質問例

次に「良い質問」の例を見てみましょう。


◯◯◯という機能を実現するための方法について教えて下さい。

本来なら◯◯◯をすれば◯◯◯という機能が正常に実行されるはずなのですが、以下のようなエラーメッセージが表示されます。

【エラーメッセージ(スクリーンショットでも可)】

該当のソースコードは以下のとおりです。

【ソースコード(GitHubなどのリンクでも可)】

エラー内容から推測するにソースコードの◯行目あたりが原因かと思い、以下のような手順で模索してみました。

・ネットで◯◯◯を調べてみる
・◯◯◯をヒントにする
・ソースコードを◯◯◯のように変えてみた
・現象に変化がないことを確認

上記以降、どのように進めたら良いのか分からなくなってしまったので、何かアドバイスを頂けると助かります。

この質問のポイントは以下のとおりです。

  • 解決したいことが冒頭の1行で分かる
  • 期待する動作が2行目で把握できる
  • エラーの内容やコードが分かる
  • 試した内容・手順の詳細が書かれている

これらの情報があらかじめ添えられていると、回答する側はすぐに判断して解決方法を検討することができるわけです。

3つの質問テンプレート

誰でも正しい質問ができるように3つの用途に分けたテンプレートをご紹介します。それぞれのテンプレートは雛形を提供しており、利用するためのポイントも一緒に掲載しているのでぜひ活用してみてください。

具体的なエラーが出てる時に使えるテンプレート

テンプレート雛形


1,タイトル
(1行で簡潔に分かる内容を記載)
 
2,期待する動作
(何をしたいのかを箇条書きで分かりやすく記載)
 
3,エラーの内容
(エラーメッセージを添える)
 
4,該当箇所
(関連するソースコードを記載)
 
5,試したこと
(自分で試したことを時系列で記載)

テンプレート活用例

【タイトル】
解決したいことを1行で簡潔にまとめる。Q&Aサイトなどであれば、このタイトルだけを見て回答するかどうかを判断することが多いので、できるだけ具体的なキーワードを入れるようにする。

【期待する動作】
どのような動作ができれば質問が解決したことになるのかを記述する。つまり、質問に対しての回答のゴールを明確にしておくことで、回答者が検討しやすくするわけです。

【エラーの内容】
発生したエラーメッセージや、不具合のスクリーンショットなどを添付する。テキストで上手く表現出来ない場合は、画面のスクリーンショットを撮影して画像ファイルとしてアップロードするのが簡単です。

【該当箇所】
関連するソースコードの全文、もしくはGitHubなどにアップロードしている関連リンクのURLなどを掲載する。可能な限り生のソースコードを見てもらう方が、回答する側も状況を把握しやすくなります。

【試したこと】
エラーが起きたあとに、自分で何を試してどのようにダメだったのかを時系列で箇条書きにする。不具合のケースによっては、実行した順番によっても状況が変化することがあるので、時系列にまとめておくことは重要です。

基本何にでも使えるテンプレート

テンプレート雛形


1,タイトル
(1行で簡潔に内容が分かるように記述)
 
2,目的
(何をするための質問なのかを示す)
 
3,ゴール
(どうなれば解決できるかを示す)
 
4,わからないこと・問題発生箇所
(時系列で問題になっていることを解説)
 
5,調べたこと
(自分で試したことの概要を紹介)

テンプレート活用例

【タイトル】
回答者がタイトルだけを見て回答するかどうかを判断できるのが理想です。そのため無駄な文章はできるだけ省略するのと、質問文を書いたあとに要約したものをタイトルにするのが最適です。

【目的】
質問する箇所というのはかなり限定的な範囲になるのが一般的です。そのため、質問者が最終的に何をしたいのかを回答者が理解できることが重要です。そうすれば質問者が考えていなかった解決方法を導ける可能性も高まります。

【ゴール】
質問に対して素早く解決するためにも、何ができたら問題を解消できるのかを明確にしておく必要があります。ここがブレていると、いつまでもダラダラと質問が続くだけでなく、回答者の時間も無駄にしてしまいます。

【わからないこと・問題発生箇所】
回答者が問題をイメージしやすいように、どのような経緯で問題が発生したのかを時系列で箇条書きに説明しておくと分かりやすいです。そもそも質問者の手順が間違っている場合もありますし、5W1Hが明確になっていることもポイントです。

【調べたこと】
質問をするまえに自分で解決するために試したことや調べたことを、できるだけ詳しく説明しておきましょう。これは回答者が同じことを試して時間を無駄にしないためにも必要となります。

何がわからないのかわからない時に使えるテンプレート

テンプレート雛形


1,タイトル
(1行で簡潔に説明する)
 
2,目的
(何をしたいのかを明確にする)
 
3,ゴール
(どのような状態になりたいのか)
 
4,わからないこと・悩み
(問題点を明確にする)

テンプレート活用例

【タイトル】
自分が伝えたいことが明確になるように重要なキーワードを意識して簡潔に作成しましょう。「ちょっと教えて欲しいのですが……」とか「自分は初心者なので……」のような無駄な文章は書かないようにするのがポイントです。

【目的】
何をするための質問なのかを明確にしましょう。自分がやりたいこと、実現したいことを回答者が理解できることがポイントです。「何がわからないのかが分からない」というケースでは、そもそも質問の方向性が間違っていることも多いのです。

【ゴール】
質問することだけでなく、何が実現できればこの質問が完了するのかを1セットで説明することが重要です。これを明確にしていなければ、回答者もどのように回答すれば良いのか迷ってしまうからです。

【わからないこと・悩み】
「何がわからないのか分からない」というケースにおいて、質問したいことを伝えることがそもそも難しい場合があります。

しかし、このような状況でも基本的には以下の3つの状態のいずれかに当てはまります。

  • 状態1:何かをする前
  • 状態2:何かをしている時
  • 状態3:何かをした後

まずはどの状態にいるのかだけでも明確にすることは重要です。

状態を明確にしたうえで、今自分がやろうとしていることを出来るだけ細かく分解してリストアップしてみましょう。そして、ひとまずどの箇所で躓いておりどんな問題があるのかを説明できるようにしてみましょう。

ポイントは、1回の質問ですべてを解決しようとしないことです。1つずつ問題を解決していくことで、最終的に大きな問題を解消していくようにしましょう。

おすすめの質問サイト

正しい質問の仕方を理解できたら、実際に疑問点を質問してみましょう。

初心者も含めて国内のエンジニア同士が、質問や回答を気軽に行えるプラットフォームとして以下のようなサービスが人気です。

引用元:teratail https://teratail.com/

teratail」は現役のエンジニアが多く利用しているQ&Aプラットフォームです。

2020年4月時点の回答率は89.4%を誇っており、質問をすればすぐに誰かがコメントをしてくれるのでプログラミング学習には最適です。

しかも国産サービスなので、すべて日本語でやり取りできるのもメリットは大きいでしょう。また、質問者や回答者には活動履歴に応じてスコアが加算されるようになっており、ユーザーランキングなどが可視化される面白い仕組みも取り入れています。

その他、プログラミング学習に最適なQ&Aサイトについては、以下の記事で詳しく取り上げているのでぜひ合わせて参考にしてみてください。

悩める初心者の味方!プログラミング質問サイト厳選5選
更新日 : 2020年4月29日

これぞ「いい質問」という事例10選


これぞ「いい質問」という事例10選

この章では、実際のQ&Aサイトにおいて「いい質問」だと客観的に感じる事例をいくつか厳選してご紹介します。

実際の事例をいくつか確認することで「いい質問」の傾向や書き方などを参考にしてみてください。

【C言語基礎】入力させた配列の要素から、偶数だけを全て取り出して出力したい


引用元:teratail

最終的に実現したいことが明確で、実際の出力結果がこのようになって欲しいという擬似的な結果も一緒に記載されているので解決しやすい。

どのようなプログラムで悩んでいて、質問者がどこまで把握しているのかも明確である点もポイント高いです。

Rubyで複数の変数をハッシュに格納したいです


引用元:teratail

実現したいことや問題が起きた理由が明確に記述されているので分かりやすいです。また、最終的にどのような結果を表示したいか詳しく記載されているので、回答する側としてはどのような解決方法があるか模索しやすいのもポイントでしょう。

forループを使ってリストのstringを大文字にする際に、新たなリストは必要ですか?


引用元:StackOverflow

問題の明確化という意味で、上手くいったソースコードと自分がやりたいことが出来なかったソースコードを比較している点が分かりやすいです。

このような単純な問題はプログラムを実際に確認できれば、すぐに解決へと導けるので問題点を明確にできるように工夫すると良いでしょう。

railsでサーバーが立ち上がらず、sassc でエラーが出る


引用元:StackOverflow

自分が試したことを時系列で説明しており、疑問点に関してはスクリーンショットを添えて分かりやすく伝えられているのはポイント高いです。

複雑な質問になりそうな場合は問題点を視覚的に伝える工夫は重要です。また、新たな疑問点があっても質問を別で投稿している点も優れています。

別々の関数でそれぞれ使用しているローカル変数のidが一致する理由・意味合いを知りたいです。


引用元:teratail

実現したいことや問題のソースコード・自身の環境について明確に掲載されているのは分かりやすくて良いですね。

また、なぜ質問することになったのかの背景について言及されており、回答する側としても補足情報として参考にできるのはポイント高いです。

nth-childで奇数列のテキスト入力欄の色を変更したい


引用元:teratail

問題点や実現したいことが明確になっているので、回答しやすいのが良いですね。

また、この質問のようにDOM操作における問題については、エラーメッセージが表示されないケースが多いので、スクリーンショットを添えるのは重要です。これにより回答者も現在の状態を把握しやすくなります。

Python 初めてのスクレイピング、手順の紹介サイトからコピペしたが何も得られない。


引用元:teratail

質問したいこと、またその背景について詳しく説明があるので分かりやすいです。

また、特筆すべきは質問者の状況が変化するたびに質問を「追記」という形で記載されている点です。これにより状況が分かりやすいだけでなく、他の回答者も情報を参考にできます。

Microsoft Edgeにてtextareaの改行コードの扱いが不正


引用元:StackOverflow

自身で実際に試したこと、どのような時に問題が起きるのかを明確にしているので分かりやすいです。

また、正常に実行できるケースがある場合にその旨も記載しているのはポイント高いです。これにより問題の切り分けがしやすくなり、素早い回答に繋がります。

大量のメモリを使用するプログラムからコマンドを実行する方法


引用元:StackOverflow

質問をすることになった背景が詳しく記載されており、質問内容も非常に明確なので回答者が理解しやすい構成になっています。

また、自身で問題を解決するための方法がいくつか示されており、それぞれの概要や欠点が細かく記載されています。そして、現状どの解決方法を試していてどんな問題が起きているかまで説明されているので優れています。

このように自分が試したことは、できるだけ詳細に記述してあると回答者が同じことを試して重複するようなケースが避けられます。

ファイル名の置換スクリプト


引用元:teratail

現在の状態と実現したいことの最終結果が明確に記載されているので回答しやすいですね。

また、この質問のように内容に変更があった時でも「追加情報」として追記することは重要です。他の回答者が誤った情報を伝えてしまうようなケースを避けられます。

まとめ

今回はプログラミング学習における正しい質問の仕方について、具体的な事例を盛り込みながら解説を致しました。

もう一度ポイントをおさらいしておきましょう。

  • 質問することは決して恥ずかしいことではなくごく普通のこと
  • 正しい質問方法を覚えることで質問者・回答者の双方にメリットがある
  • まずは質問テンプレートを活用することで慣れていくようにしよう

上記内容を踏まえて、ぜひプログラミングの学習効率を高める意味も込めて質問スキルを向上できるように頑張りましょう。

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

侍ブログ編集部

侍ブログ編集部

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。プログラミングに役立つ情報や有用な情報を発信していきます。
サービスページはこちら
ツイッターはこちら
フェイスブックはこちら

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習やキャリアのお悩み、お気軽にご相談ください。