プログラミングの質問をする際のガイドラインとテンプレート

Udemy

こんにちは、教育系エンジニアのひらまつ(@hiramatsuu)です。

ひらまつの簡単な自己紹介

書籍「ゼロからわかる Linuxコマンド200本ノック(技術評論社)」の著者。Udemy受講者5万人。
プログラミング教育をメインに活動するエンジニアとして、動画教材の作成・技術書の執筆・教育アプリの開発などを行なっています(詳しくはこちら)。


突然ですが、あなたは「質問」を正しく利用できていますか?

プログラミングの初心者が、先輩などに質問をする際には、細心の注意が必要です。なぜなら質問を正しく利用しないと、むしろ自らの成長を阻害してしまう可能性があるからです。また、マナーなどを何も知らずに質問をしてしまうと、先輩に迷惑をかけたり、恥をさらすことになりかねません。

ですので本記事では、プログラミングに関する質問をする上での注意点について書きたいと思います。これから質問をしようと思っていた方や、過去に質問をしたときに先輩や先生に嫌な顔をされた方にとって、役立つ記事になっているはずです。

※ちなみに、私が公開しているUdemyのコース上で質問をする際には、こちらの記事を読了していることが必須の条件になりますので、該当する方は必ず目を通しておいてください。

前提:安易な質問は、プログラミングスキルの向上を妨げる

まず、このテーマに関する大前提として、

安易な質問は、プログラミングスキルの向上を妨げる

と私は考えています。なぜかというと、以下のような理由があります。

  • 検索力が育たない
  • 問題解決力が育たない
  • 先輩や先生から嫌われる

検索力が育たない

検索力とは「手に入れたい情報を検索エンジンなどから発見するスキル」のことです。このスキルは、プログラミングにおける最も重要なスキルと言っても過言ではありません。なぜなら、ソフトウェア開発における重要な情報のほとんどは、適切な検索によって手に入れることができるからです。

例えば、発生したエラーを解消するための情報はもちろんですし、最新の技術をキャッチアップするための情報なども、検索力さえあれば、いくらでも手に入れることができます。欲しい情報を確実に手に入れることができると、問題解決も早くなる上に、開発に役立つ知識もどんどん身につけられるようになります。

また、ソフトウェア開発に必要な知識は膨大なので、すべてを頭の中に入れることは到底できません。どんなに優秀なエンジニアでも、足りない情報をその都度検索して、デバッグや実装・設計などの問題解決を行なっています。その結果として、ソフトウェアエンジニアの仕事時間の多くは、検索エンジンなどで必要な情報を探す時間になります。ですので、どれだけの検索力があるかによって、仕事の生産性が大きく変わってくるのです。

そのため、安易な質問をして、検索の練習の機会を放棄してしまうのは、悪手言わざるを得ません。エラーなどの問題に出くわしたら、デバッグの時間を無駄な時間と捉えるのではなく、「これは検索力を向上させるトレーニングの良い機会だ!」と思うようにすると良いでしょう。

問題解決力が育たない

検索力と近いところがありますが、安易に質問を行うと問題解決力の向上の機会も失ってしまいます。

ソフトウェアエンジニアの仕事は、問題解決の連続です。デバッグや設計、実装方法やパフォーマンスチューニング、コストの最適化など、エンジニアが解決すべき問題は山のようにあり、かつ非常にバラエティに富んでいます。そういったさまざまな問題を、一つずつ解決していくのが、エンジニアリングのプロセスに他なりません。

名著「リーダブルコード」の中にも、以下のような文があります。

エンジニアリングとは、大きな問題を小さな問題に分割して、それぞれの解決策を組み立てることに他ならない。

リーダブルコードより

リーダブルコードをまだ読んでいないという方は、一読をおすすめします。

Google検索でエラーなどの問題を解決することは、検索力のトレーニングであると同時に、問題解決力のトレーニングでもあります。問題解決こそが、エンジニアリングの本質ですから、問題解決力も日々鍛えていく必要があり、安易に質問をしてしまうことは、問題解決のトレーニングの機会の損失になってしまいます。

先輩や先生から嫌われる

身も蓋もなくて恐縮ですが、質問の相手も人間なので、安易な質問をすると嫌われる可能性が高いです。本来なら先輩や先生は、あなたの成長を加速してくれる存在ですが、彼・彼女らに嫌われてしまえば、その後はサポートを受けられなくなってしまい、その結果として成長スピードが鈍化してしまうでしょう。

ですので、質問の回答者も「回答してよかった」と思えるような、洗練された質問を投げる必要があります。例えば、回答者にも学びがあったり、後輩や生徒の成長を見れて嬉しかったり、感謝されて嬉しかったり、など、回答者にもメリットがあるように配慮する必要があります。これは、後ほど紹介するフォーマット通りに回答することで実現できるはずです。

安易な質問をどうしても投げたいという方は、人間ではなくて、ChatGPTなどのAIに投げるようにしましょう

ではどうすれば良いのか

質問を、質問者と回答者の両者にとって有意義なものにするためには、質問者が以下の手順を踏む必要があると私は考えています。

  1. 検索の方法について学ぶ
  2. 学んだ検索の知識をフル活用して、発生した問題の解決を試みる
  3. どうしても解決できないなら、適切なテンプレートに沿って質問する

検索の方法について学ぶ

まずは、検索の方法について学ぶ必要があります。

なんとも不思議なことですが、検索のスキルを学ぶプログラミング初心者は非常に少ないです。ソフトウェアエンジニアの仕事において、検索力はかなり重要なスキルのはずなのですが、数多くあるプログラミングスクールのカリキュラムにも、検索力のコースが含まれているものは見たことがありません。

あまり知られていませんが、Webや書籍などを利用した検索の方法は、図書館情報学という学問で体系化されています。図書館情報学について学ぶことで、ソフトウェア開発のための検索の効率を、素早く効率的に高めることができるでしょう。

この後に紹介するおすすめの教材を使って、まずは検索について学ぶことから始めましょう。検索について学んでいない人に、質問をする権利はありません。

学んだ検索の知識をフル活用して、発生した問題の解決を試みる

図書館情報学の知識をインプットしたら、その知識をフル活用して、発生した問題の解決を試みます。

デバッグなどの問題解決の時間を、無駄な時間に感じる方もいると思いますが、検索について学んでおくと、この時間は検索力を高めるトレーニングの時間になります。本や動画で学んだ知識を、実践する場になるのです。

図書館情報学の知識をフル活用できたならば、ほとんどの問題は自力で、検索によって解決できるはずです。本に書かれていたことを実践できているか?を確認しながら、ひたすらにトレーニングを積みます。すると、ぐんぐん検索力が伸びて、得たい情報を、より早く得られるようになっていくことを実感できるはずです。

安易な質問は、この貴重なトレーニングの題材を、自ら手放してしまうことになります。まずは、自分の知識で解決を試みましょう。

どうしても解決できないなら、適切なテンプレートに沿って質問する

学んだ知識を駆使しても、どうしても解決できない場合には、質問をしても良いと思います。ただし、質問をする際には、いくつか守るべきルールがあります

例えば、以下のようなものです。

  • 事前に自分であらゆる解決策を試みる
  • 回答に必要な時間を最小化するために、できる限り多くの情報を回答者に提供する
  • 検索手順へのフィードバックができるように、使用した検索式などの詳細な情報を共有する
  • 事前に感謝を述べる

こういったいくつかのルールを自然と守れるように、質問のテンプレートをこの後に用意しています。テンプレートの項目に回答していけば、質問者にも回答者にも学びがあるような質問が仕上がりますので、ぜひ利用してみてください。

そもそも、なぜ自力でエラーなどを解決できないのかというと、検索力・問題解決力・検索にかける時間のいずれかが不足しているからに他なりません。このうちのどれが不足しているのかを、自他(質問者と回答者)ともにわかりやすくするために、テンプレートの各項目に、詳細な情報を記入していく必要があります。

上記の手順だけでは、少し抽象的すぎるかと思うので、ここからはより具体的に取り組み方を紹介していきましょう。

検索力向上のためのおすすめ教材

まずは、検索力を向上させるための教材を紹介したいと思います。安易な質問をせずに、自力で検索を行うことで、検索力のトレーニングを行うことができますが、前提となる知識なしにトレーニングをしても、あまり意味がありません。最低でも1つ以上の教材をインプットして、検索の基本の知識を頭に入れてからトレーニングを行いましょう。

以下では、私が実際に読んだ本の中でも、特に役立った書籍だけをいくつか紹介していきます。

検索力を鍛えるおすすめ本・動画

「検索戦略」入門【欲しい情報を最短時間で入手しよう!Google・GitHub 検索などで使える4つの戦略プロセスとは】

手前味噌で恐縮ですが、私がUdemyで公開しているコースです。たった2時間半で検索のスキルを学べるので、最初の教材としてぴったりだと思います。

「検索戦略」入門【欲しい情報を最短時間で入手しよう!Google・GitHub 検索などで使える4つの戦略プロセスとは】
あなたの検索に「戦略」はありますか?元塾講師エンジニアが教える、「検索戦略」入門!技術の習得・デバッグ・ソースコード検索に役立つ、エンジニアの最重要スキル「検索力」を高める4プロセスを紹介!欲しい情報を素早く入手する「戦略」を手に入れよう。

以下のようなレビューをいただいています。

日常のほぼ全ての活動に関連する検索戦略について、要点を絞って簡潔に解説されています。生活の質の向上に間違い無く役立つものであり、星5つを付けさせていただきました。マインドマップに要点が簡潔にまとめられているのも良いところだと思いました。

「検索戦略」入門【欲しい情報を最短時間で入手しよう!Google・GitHub 検索などで使える4つの戦略プロセスとは】のレビュー

効率よく目的の情報に辿り着くために必要なスキルを身に付けるのにとても役立つ講座でした。

今までを振り返ると、検索戦略の4つの要素の内、3番目の「検索式をつくる」ばかり意識していましたが、検索を始める前段階の思考がとても大切なのだと気づかされました。

ひらまつ講師の他の講座と同様、マインドマップを使用して説明がされており、常に当初の目的と今学んでいる点の結び付きを意識しやすい点も理解度を深めるのに役立ったと感じました。

検索を含め、普段の思考でも事あるごとに原点(目的)を意識して進めて行けるように少しずづ訓練しようと思いました。

「検索戦略」入門【欲しい情報を最短時間で入手しよう!Google・GitHub 検索などで使える4つの戦略プロセスとは】のレビュー

情報検索を行う際、それがどのような要素で成り立っているかの説明がされている。その要素の中で、自分も「検索目的の明確化」をしない状態で検索を行い、「検索」ではなく、「徘徊」している状態になっている事が多かった。

本講座の内容を活かして、より自分の情報を得やすい検索の仕方を身に付けられればと思う。

「検索戦略」入門【欲しい情報を最短時間で入手しよう!Google・GitHub 検索などで使える4つの戦略プロセスとは】のレビュー

スキルアップ! 情報検索―基本と実践 新訂第2版

続いて紹介するのは、検索戦略の概要を知りたい方におすすめの本「スキルアップ! 情報検索―基本と実践 新訂第2版」です。良くも悪くも教科書的なので、好みが分かれると思いますが、役に立つ情報が満載です。「まずは1冊だけ学びたい」という条件なら、本書を薦めます

図書館のプロが教える“調べるコツ”―誰でも使えるレファレンス・サービス事例集

最後におすすめするのは「図書館のプロが教える“調べるコツ”―誰でも使えるレファレンス・サービス事例集」という本です。情報検索のプロである図書館司書の方が、テーマごとに検索のプロセスを丁寧に紹介している本です。検索の理論だけを学んでも、「どうやって活用すれば良いんだっけ?」となりがちですが、本書は理論と実践の橋渡しをしてくれるような本になっています。個人的に1番おすすめの本です。上記2つと併せて活用すると良いと思います。

おまけ:問題解決力を鍛えるおすすめ本

いちおう、問題解決力を向上させる書籍についても、いくつか紹介しておきます。問題解決力は、さまざまな要素から構成されていますが、重要(かつトレーニングが可能)なものとしては、メタ認知クリティカルシンキングだと思いますので、このテーマのおすすめ書籍を何冊か紹介します。

メタ認知

プログラミング のキャリアを失敗させない科学的な方法【安定・自由・やりがいを手に入れる!プログラミング 超効率的上達術】
どうすれば、「幸せなキャリア」を築けるでしょうか?スキルアップで「安定・自由・やりがい」の全てが手に入る!プログラミング・英語・タイピング・プレゼンなど、あらゆるスキルに使える「超効率的上達術」を身につけましょう!

クリティカルシンキング


これらの教材を使って、まずは検索(と問題解決)について学びましょう。

何分間は自力で検索した方が良いか?

質問をする前には必ず、自分自身で解決を試みることが必要ですが、何分間・何時間ほど自力で取り組めば良いのでしょうか?

「15分検索してもわからなかったら質問する」は本当か?

よく言われる数字は、15分間です。15分という数字は、プログラミング質問サイトのteratailの以下のキャッチコピー、

15分調べてもわからないことは、質問しよう!

teratail

にも書かれていますし、そのほかにGoogleの15分ルールというものもあります。

これは、Googleの人工知能研究のチームGoogle Brainで採用されている(らしい)ルールで、まとめると、

何か問題が発生した際には、

  • 最初の15分は自分自身で解決を試みる
  • 15分経っても解決していなかったら必ず人に聞く

前者を守らないと他人の時間を無駄にし、後者を守らないと自分の時間を無駄にする。

15 min rule

というようなものになります。Googleが提唱しているということもあって、非常に説得力がありますね。

適切な時間は状況によって異なる

しかし、私の考えとしては、この15分という数字を鵜呑みにしてしまうのは危険だと思っています。なぜなら、状況によって、自力の検索に必要な時間は大きく異なると思っているからです。

まず、検索スキルがどの程度のレベルなのか?によって、必要な検索時間は変わってきます。検索のトレーニングを始めたての、検索初心者であれば、たった15分の検索時間では、ほとんど何も学びが得られないでしょうし、トレーニング時間としてもまったく足りていないと思います。

また、仕事か?勉強か?によっても変わってくるでしょう。仕事であれば、しっかりと成果を時間内に出す必要がありますから、Googleの15分ルールにもある通り、長時間悩み続けるのは得策でありません。ですが、仕事ではなく、勉強時間なのであれば、検索トレーニングのせっかくの機会ですから、自分でできることはやり尽くしたと思えるくらいに、時間をかけても良いでしょう。

仕事においての方針は、各企業の定めに従うのが良いと思いますので、本記事では触れないとして、

  • 検索スキルの低い人が、
  • 勉強の時間に行う

検索である、と仮定した場合、私の個人的な考えとしては、最低で90分は自分で考えた方が良いと思っています。すでに検索力が上限近くに達している人からすれば、90分もの検索は無駄な時間かもしれませんが、検索の初心者にとっては、必要なトレーニング時間です。上記で紹介した検索の教材で学んだことを実践しながら検索を行えば、意外とすぐに時間が経ちますし、無駄な時間にはなりません。

注意点として、この90分というのはあくまでも目安であり、学んだ検索の方法をすべて実践できたか?が最も重要な判断基準です。万策尽きたと思えるまで、学んだ知識を活用して解決を試みてください。

そして、90分ぶっ通しで検索するのではなく、25分+5分休憩を1セットとして、3セットに分けて行うようにするとより効果的です。いわゆるポモドーロテクニックですが、ポモドーロテクニックは情報検索と非常に相性が良いのでおすすめです(その理由はこちらのコースで話している「停止ルール」を参照してください)。

質問する際に守るべきテンプレート

上記の手続きを行なった上でも、まだ問題が解決できていないという場合は、仕方がないので質問をしましょう。質問をする際には、以下のようなテンプレートのすべての項目を記入する必要があります。

  • すでに学んだ検索方法の教材:検索の方法についてインプットしていない人には、質問をする権利はありません。最低でも本1冊レベルの検索の知識を身につけてから質問を行うようにしましょう。上で紹介した教材の中から気に入ったものを1つ以上選び、熟読してください。
  • 質問のタイトル:簡潔で具体的なタイトルを設定しましょう。タイトルでは、問題の概要を端的に伝える必要があります。「〇〇をすると××というエラー」「〇〇において××の部分が理解できない」など。
  • あなたのスキルレベル:技術の使用歴や、講座の内容をどこまで理解できているかなど、あなたがすでにどれくらいの知識を蓄えているのかがわかる情報を提供してください。質問者のスキルレベルがわかることで、どこにつまづいているのかを回答者が想像しやすくなります。
  • 実現したいこと:問題を解決して、どのような結果が得られることを期待しているかを、初めに説明してください。
  • 発生している問題:どのような問題が発生しているかを、できる限り詳しく説明してください。エラーメッセージがある場合は、必ず回答者に共有する必要があります。
  • 問題が発生するまでの手順:上記の問題が発生するまでに行った手順を詳細に記述してください。回答者の環境でも再現できるほどに詳細に記述しましょう。この項目には、あなたの想像や期待ではなく、実際に発生した事実だけを書くようにしましょう。
  • 使用環境:使用言語、アプリケーション、フレームワーク、ライブラリ、バージョン情報、OS、マシンのスペックなど、問題が発生した環境に関する包括的な情報を提供してください。
  • 試した解決策:自分が思いつく限りの解決策をすべて試した上で質問するようにしてください。数個しか試していないならば、まだ質問をするべきタイミングではありません。ChatGPTなどのAIを活用することも有用でしょう。
  • 問題を解決するために作った検索式:少なくとも5つの検索式は試す必要があるでしょう。単純なAND検索だけでなく、OR検索やNOT検索も使っているか、類義語をどれだけ試したか、ノイズを取り除く工夫はされているか、英語でも検索しているか、などがわかるようにすると、検索方法をしっかり学び、実践していることがわかりやすくなります。
  • 問題の解決のために参照したソース:問題を解決する情報があることを期待して、参照したWeb記事や書籍などを、回答者が特定できるような形で記述してください。Web記事であればURL、書籍であればISBNを共有します。そのソースに辿り着いた検索式も併せて共有してください。
  • 事前の感謝:質問の段階で感謝の気持ちを伝えておくのがおすすめです。もちろん、回答が返ってきた時にも、感謝のメッセージを忘れないようにしましょう。

ひらまつのUdemyのコースで質問を行う場合は、上記のテンプレート通りの質問でない場合は、回答できないことに注意してください。よく練られていない質問は、質問者にも回答者にもメリットがないからです。

逆に、上記のテンプレートを丁寧に埋めていただいた方の質問は、100%回答させていただきます。1人で運営していることもあり、回答に時間がかかることもありますので、その点はご了承いただければ幸いです。

ただし、講座内容の誤りや不備に関するご指摘は例外です。もし講座内容でお気づきの点がありましたら、お気軽にご連絡ください。

以下、ひらまつのUdemyコースで質問する際の、その他の注意点です。

  • テンプレートにおいて、省略する項目がある場合は、省略できるもっともな理由を添えて省略してください。
  • Udemyのコース内容に関する質問にのみ回答します。業務やご自身のプロジェクトでの問題に関する質問は、回答できません。

というわけで

安易な質問は、質問者にも回答者にもメリットがないから、検索の方法について一度学んだ上で、自分でできる限りの試行錯誤をしよう!どうしても解決できないなら、テンプレートを丁寧に記入した上で質問しよう!

という話をさせていただきました。

長い記事になってしまいましたが、質問は慎重に使用しないと、成長を妨げたり、人に嫌われてしまったりして、とても危険です。本記事が良い質問をするきっかけになれば幸いです。

参考文献

本記事を執筆するのに参考にした文献です。これらの記事も併せて読むと良いでしょう。

タイトルとURLをコピーしました