N高Slackから学ぶ質問アンチパターン

# はじめに

この記事は[N高等学校 (1) Advent Calendar 2020](https://qiita.com/advent-calendar/2020/n-highschool)の22日目の記事となります。

## あなたは誰？

N高2年の人です。
普段はWebプログラマのインターンとして働いています。

## なぜこのような記事を書くに至ったか

この記事はN高のSlackで質問している人を馬鹿にしているわけではありません。

質問すること自体は悪いことではありませんし、僕もよく質問します。
ですが、質問の仕方によって見る人や回答者に不快の思いをさせてしまったり、やり取りが増えて解決までの時間が長引いてしまったりします。
僕自身インターンやプログラマコミュニティでよくない質問の仕方をしてしまった経験が多くあります。

N高Slackではそういった質問が散見されており、かつ(僕が把握している範囲内では)それを指摘する人もいません。
個人的にそういった状況は良くないと思ったのでこういった記事を書くに至りました。

偉そうに書いていますが、僕もまだまだ未熟なので間違っているところなどあればコメントや[Twitter](https://twitter.com/re_yuzuy)で指摘していただけると幸いです。

# ぼくのかんがえたさいきょうの質問の仕方

この記事では私的質問ベタープラクティスを紹介し、それを踏まえた上でアンチパターンを紹介していきます。

下記の要素を入れ込んだり、意識したりするだけで、回答しやすい質問をすることができると思います。

## 開発環境の明記

質問者の開発環境によって解決策が異なる場合が多いです。

- OSの種類/バージョン
- 言語/フレームワークのバージョン
- ライブラリのバージョン

等が明記されていると回答しやすいと思います。

## エラーメッセージ、ソースコードの明記

ソースコードやエラーメッセージを明記しないと、多くの場合回答者もどのような原因で動いていないのかわかりません。
さらに、その場合だと回答者が原因を予測しなくてはならなくなり、無駄な労力をかけさせてしまうことになります。

ソースコードの共有はGitHubやGitHub Gist等のサービスやその言語のPlaygroundを用いるとよいと思います。
Slackのメッセージに直接書くのは、短いコードであればよいのですが、長いとログが追いづらくなってしまうためあまりよくないと思います。

## 何をしたいのか、何をしてそうなったのかを明記

「このAPIが動かない！」や「この機能が使えない！」ということだけを言っても回答者を困惑させてしまうだけです。

何がしたくて、どこまでは動いていて、どういう値(コード)を入れたら動かなくなったのかを明記すると、回答者が質問者と同じような前提を持つことができ、より素早く的確な回答ができるようになるはずです。

## 質問する前に自ら解決しようと色々試すこと。そして試したことの明記

上記に似たようなものですが、自分で解決しようともせずに他人に答えを求めるのは自分の成長的にも、回答者にかけてしまう労力的にもよくないです。

質問する前に必ず自分で解決しようと試みてください。

公式ドキュメントを読む(最強)。日本語、英語でググる。色々な値を入れて試してみる。ログをいっぱい吐かせる。etc...

たとえそれで解決しなくとも、多くの情報を得られるはずです。
その情報を上記のものと組み合わせて回答者に提供すればもっとよい質問へ生まれ変わるはずです。

## 回答者への敬意を持つこと

そして最後に一番大切なこと。
回答者には敬意を持ちましょう。

想像してみてください。

もし親しい間柄でもないのにタメ口で返信されたら？
もし問題が解決してもお礼の一つも言わず立ち去っていったら？

そんな質問者には進んで回答したいとは思わないでしょう？

# アンチパターン

さて、ようやく本記事の本題であるアンチパターンの紹介に移っていきます。

名前や具体的な質問内容は載せておらず、あくまでたまたまN高Slackで見かけたよくない質問の仕方をアンチパターンとして取り上げているのであしからず。

## ソースコード全文(複数ファイル)をスクリーンショットで送る

とても見づらく、かつ動作確認もしにくいです。

複数のファイルを共有するときはGitHubを使うとよいと思います。
もっというとローカルにファイルをダウンロードするのも面倒なので、ブラウザ上で動作確認できるPlaygroundだとなおよしです。

HTML&DOM JSの質問が多いのですが、その場合は[CodePen](https://codepen.io/)というPlaygroundがおすすめです。
(Goの場合は[Go Playground](https://play.golang.org)をおすすめします！)

## 「〇〇したいんですがどうすればいいですか？」

一回自分で調べて、から質問したほうが自分のためになります。
もし調べてもわからなかった結果こういった質問をした場合でも回答者には自分で調べるのが面倒臭くて質問してきた人、という風に映ると思います。

調べて具体的に何をしたのかを書き加えるとよいと思います。

## 「こんなエラーが出たのですがどうすればいいのかわかりません」

エラーメッセージが英語だからといってはなから理解するのを諦めないようにしましょう。

コピペしてDeepLかGoogle翻訳に投げとけば大抵理解できます。
日本語になっても解決法がわからないときはエラーメッセージをそのままググれば大抵Stack OverflowのQ&AやGitHubのIssueがヒットするのでそれらを参考にしましょう。

99.99%くらいの確率で自分が遭遇したエラーは先人たちも遭遇しているので、まずは彼らの苦しんだ痕跡を探しましょう。

それでも解決しない場合はその文脈を追加した上で質問をしましょう。

## 回答に対する返信がない

回答者の回答によって解決したのか、しなかったのか、どちらにせよ返信するのが礼儀です。
解決したのであればお礼を言いましょう。

無礼な質問者には回答したいとは思いませんし、回答に対する返信がない質問を見ると少し悲しい気持ちになります。

# まとめ

ざっとN高Slackのよくない質問についてまとめてみました。
あまり時間がなくて書けなかったので、もしかしたらもう少し加筆するかもしれません。

N高Slackの質問者は全体的に自分で調べる能力が低いように感じました。
質問できる人が身近にいると飛びつきたくなる気持ちもわかりますが、調べる力は沢山調べないと身につかないのでぜひ質問する前に調べることを習慣付けて欲しいと思います。

個人的にプログラミングで一番楽しいところは、「なにもわからん」から自分で調べて試してもがいて「完全理解した」モードに突入するところだと思っているのでぜひそこを味わってほしいです。

よりよい質問の仕方については下記参考記事を参照していただくか、ググるのが一番かと思います。

それでは良いお年を！

# 参考記事

- [質問は恥ではないし役に立つ](https://qiita.com/seki_uk/items/4001423b3cd3db0dada7)
- [【脱！質問ベタ】エンジニアに向けた質問の6つのコツ](https://www.walker.co.jp/how_to_questions/)