💡

質問サイトで回答するときに気をつけていること

2021/04/03に公開
2

κeenです。ちょくちょく質問サイトで回答をすることがあって、自分なりの回答のしかたが固まってきたので言語化してみます。

ここでいう質問サイトは質問者が技術的に困った内容を投稿し、回答者がその解決策を提示するようなものです。具体的にいうとStack Overflowやteratailなどですね。身近な疑問を投げ付けるようなサイト、例えばQuoraなどとはちょっと異なるかもしれません。

本当は質問サイト側でガイドラインが用意されていたらよかったんですが、心構え程度のものしか見当りませんでした。そこで他の回答者のガイドになればと思い、私なりのやり方や気をつけていることを記すことにします。気をつけているというのは言い換えると意識しておかないとやらかすという意味でもあります。いくつかは私も過去にやってしまって反省している内容を含みます。

私が回答するのは月に数度程度なので回答数でいうと私よりももっと多い人がたくさんいるでしょう。そういう方には是非自分なりの気をつけているところを共有して頂けたらなと思います。そういう呼び水になればという思いも込めて本記事を書いています。

ちょっとだけ前提を共有しておくと、私が主に回答するのはStack Overflow JAとteratailのrustタグのついた質問です。ある程度限定された状況なのでよく回答する質問やその質問者には多少偏りがあります。例えば処理系のインストール方法が分からないとかオブジェクト指向が分かりませんとかの質問はあまりなく、このコードのコンパイルが通りませんとかライフタイムの適切な設計が分かりませんとかそういった類のものが多いです。質問者もプログラミング未経験で最初にRustに触れたんだなという人はあまり見ず、一通りの問題は解決できる知識はあるけどRust固有の知識が足りないので正解に至ってないという人が多いかなという印象です。ライブリやツール、あるいはプログラミング言語でも初心者が最初に選びがちな言語のタグをウォッチしている方などとは事情が異なることもあるでしょう。そういった面を承知置きの上でご覧下さい。

それではいきます。

質問に答える

当たり前のように見えて案外難しいのが「質問にちゃんと答える」です。これは2つの意味を持ちます。

結論を先に書く

1つは最初に質問の答えを簡潔に書くという意味です。結論が先にきた方が分かりやすいですよね。具体例として分かりやすいのが「〜はできますか?」という質問に対して「はい、できます。」あるいは「いいえ、できません。」のように質問に対する直接的な答えから書き始めるやつですね。色々なサイトのFAQでもよく見るかと思います。逆にやってしまいがちなのが長々と説明だけして結局のところ結論が何なのか分からない回答をしてしまうやつです。結論がはっきりしない回答というのは周辺知識を説明しているだけで実際には回答になっていない場合や質問を勘違いして的外れな回答をしている場合が多々あります。質問にしっかり回答できているかを確認する意味でも最初に結論を書くのは有効です。

特に意識しないといけないのが簡単には「はい」か「いいえ」かで答えられない場合です。そういった場合でも「条件付きですが、できます」や「場合によって様々なので一概にはいえません」のように簡潔に答える方法はあります。ここは文章の要約力が試されるところなので他の回答を読むなどして便利な表現を覚えたりして訓練することになるでしょう。

無理筋な質問でもちゃんと回答する

質問者がやろうとしている内容が無理筋、あるいは推奨されないやり方としても回答の中に質問者が望んだ答えを入れるようにしています。これはXY問題でありがちな問答です。例えば「XをするためにYで実現しようとしてるんですがどうすればいいですか」という質問に対して「XするのにYを使うのは向いてないのでZを使いましょう」のような内容です。こういう内容のときに私はこのように回答しています:「それにはYよりもZを使った方がいいです。<Zを使って解決する方法の提示>。もし本当にYで解決する必要があるならこのようになります。<Yを使って解決する方法の提示>」。

Xを解決するために向いてない手段Yを使おうとしているということはその周辺に土地勘がない可能性が高いです。そういう人に向けては正しい方向だけでなく間違った方向も教えておいた方が独り歩きしやすいだろうという訳です。また、一般論としてはZを使う方が正しくても質問者の事情でZが使えなかったりどうしてもYを使う必要がある可能性もあるのでそのための保険という意味もあります。

あとは感情の話なのですが、自分のやろうとしていることを否定されるとあまり気持がいいものではありません。そういう感情のケアとして「ちゃんと話をきいてますよ」という姿勢を見せるためにも元々の質問に回答するようにしています。

説教しない

質問サイトでの回答は質問者の持っている問題を解決するために投稿します。質問者を叱り付けるためではないです。私もTwitterで話題になったのを知っている程度ですが極稀に質問サイトで質問者を説教している人もいるようです。

例えばこんな感じです:「ライブラリLでAするにはどうしたらいいですか?」「Aをする方法はライブラリLのドキュメントに載っています。そんなことで質問しないで下さい。」だとか「AするためにBで解決しようとしていますが、途中で分からなくなりました。どうしたらいいでしょう。」「AするためにBで解決することはできません。そもそもAをちゃんと理解していればBをしようなんて発想は湧かないはずです。勉強して出直してきて下さい。」だとか。ちょっと大袈裟かもしれませんがこんな具合に質問者の行動を否定したり、解決できない原因を質問者に帰したり、質問したことそのものを咎めたりする回答がたまーにあります。

説教しようとして説教している人は論外ですが、説教するつもりがなくてもよく読んだら説教とも受け取れる内容になっていることがあるので注意が必要です。特に注意が必要なのが質問(技術的内容)ではなく、質問者(人間)に言及するときですね。以下のことに気をつければいいのかなと思ってます。

  1. 人間と会話していることを忘れない
  2. 否定形でなく肯定形で伝える
  3. 相手にメリットのあるアドバイスという形で伝える

1の人間と会話していることを忘れない、については主に物言いの問題です。語尾だけ丁寧語になってるけど残りはちょときつい言い方になってるなんてことにならないように意識します。特に、なまじっか技術的には正しい内容だとそれだけで満足してしまって礼節を欠いてしまいがちです。

2の否定形でなく肯定形で伝えるは前節でも言及したように自分のやったことを否定されると良い気持がしません。また、ただ否定されただけだとどう改善したらいいのか分からないので恐怖しか生みません。「こうしないで下さい」ではなく「こうしてくれた方が回答がしやすいです」のように相手にやってほしいことを伝えた方がお互いのためになります。(ところでこの節のタイトルが「説教をしない」と否定形なのに気付きましたか?この節だけは私が普段気をつけていることというよりたまーに見る人に対して頼むからマジでやめてくれという説教的な意味合いが強い節になっています。)

3の相手にメリットのあるアドバイスという形で伝えるというのは2に関連するテクニックですね。1つにはこうするとで自然と内容が肯定文になります。もう1つには質問者の立場になって考えるという意味です。説教をするということは曲りなりにも相手のためを思って改めて欲しいことを伝えている訳です。それをもっと直接的に「こういうメリットがあるのでこうして下さい」と言った方が伝わりやすいですよね。先の例だと「ライブラリLのドキュメントにAをする方法が載っています。まずドキュメントを見ると質問するより速く問題が解決するのでおすすめです。」など。

相手に合わせて説明をする

質問者の持ってる知識をある程度想像して、その知識に合わせた説明をするようにしています。これはかなり難しいです。何か解決できない問題があるということは、問題の答えを知らないというだけでなく、何か足りない知識、ギャップがあるはずです。なので答えという点だけでなくそこに至るまで知識や思考という線も提示するように意識しています。よくあるのが解答を理解するのに必要な言語機能を公式ドキュメントとともに紹介する、などです。

するように意識していますとは言ったものの、実際にできているかは自信がないです。相手の現在の知識は推測で勝手に決めてしまいますし、知識の呪いがあるのでその知識から正解までのギャップがどのくらいあるのかも見誤りがちです。とはいえ質問の時点でどこまで問題を絞り込めているかや、回答が質問者の想定からどれくらい離れているかで必要な説明の量はある程度は予想がつきます。(できれば1回で済ませたいですが)1回しか回答できない訳でもないのでおおむね必要そうな内容を説明したあとは「分からないことがあったら質問して下さい」として相手の反応を見てもいいんじゃないでしょうか。

推測したことを伝える

質問に書かれていた内容では情報が不足していて正確な回答ができない場合に、他の情報から推測して埋めて回答することがあります。そのときに推測で情報を埋めたことを伝えるようにしています。よくあるのが処理系のバージョンやOSなどですね。「処理系のバージョンが書かれていないので現在の最新であるx.y.zであると仮定して回答します」とか。こうすることで質問者に確認する手間を省けるのと、質問者に回答にはその情報が必要なんだと伝えることができます。

尤も、これは私が質問サイトのヘビーユーザでないからやっているという面もあります。頻繁に質問サイトを確認する人なら質問者に「処理系のバージョンはいくつですか」などと質問すれば解決する話ではあります。ですが私はたまにしか見ないので、できれば1往復で問答が終わってほしいです。なので1往復で確認と回答ができるこのフォーマットを使っています。

起きている問題を正確に把握する

問題を解決する前にまずは問題を正確に把握するようにしています。冒頭でも言及したように私の場合だとコンパイルエラーの質問が多いので、提示されたコードを手元にもってきて実際にコンパイルエラーが起きるかを確認しています。問題を再現できればそれを元に回答ができますし、再現できなければコード以外に問題がある(か、提示されたコードが正しくない)はずなので解決のヒントになります。

客観的な証拠と一緒に回答する

質問をみたときに一見して「これで解決できるはずだ」と当りがつくことがあります。ですがそれだけでは回答せず、手元でコードを動かしたり仕様や実装を読んで本当にそうなっていることを確認してから回答するようようにしています。これは本当に問題を解決できているか確認するため、相手に納得してもらうため、相手の今後のためにソースを提示するための3つの意味があります。例えばコンパイルエラーに関する質問ならコンパイルが通るコードを提示すれば確実ですね。

これに関しては私は何度かやらかしたことがあります。「こうすれば解決できます」とコメントしたあとに実はそれでは解決できなかったと分かるケースが何度かありました。この反省から回答するときには裏をとるようにしています。

自信がないときは回答しない

頻繁に回答しているとやらかしがちですが、その方面に詳しくなくても回答をつけようとしてしまうことがあります。なので前節で説明したような裏をとれない質問には答えないように気をつけています。「多分これでできるはずです」のようなあやふやな回答をしそうになったら要注意ですね。

ただし難しいのは、中にはあやふやでも回答しておいた方がいい場合もある点ですね。明確に決まっていなくて世の中に正解を知っている人がいないようなケースでは集合知として色々な人の意見を参考にするのが適切なケースもあります。そういう明確な解答はないと自信を持てる場合はあやふやなまま回答することもあります。

まとめ

私が質問サイトで回答をするときに気をつけていることを書きました。内容を改めて書き連ねると、以下のことに気をつけているのでした。

  • 質問に答える
    • 結論を先に書く
    • 無理筋な質問でもちゃんと回答する
  • 説教しない
  • 相手に合わせて説明をする
  • 推測したことを伝える
  • 起きている問題を正確に把握する
  • 客観的な証拠と一緒に回答する
  • 自信がないときは回答しない

私が質問サイトで回答する際に特別気をつけていることなので、「マークダウンで文章を適切に構造化する」など質問サイト以外でも気をつけていることは入っていません。この記事が何か役に立つ人がいれば嬉しいです。

GitHubで編集を提案

Discussion

κeenκeen

はい、おっしゃるとおり書いたあとで調べたらそのようでした。直すのが面倒で放置してたのですが、これを気に直します。指摘ありがとうございます。