質問は恥ではないし役に立つ

一年半SEとして働いてきた中で、私自身が苦手だと思っており、他人からもそのように評価されていたのが「質問の仕方」でした。
それが先日、他人から「質問の仕方がうまいね」と褒められることがあり、ようやく一人前の質問の仕方ができるようになってきたので、どのようにして克服できたのか紹介したいと思います。

## 質問の基本形
私が入社したばかりの頃は、わからないことがあればすぐに先輩に質問していました。
そのときにしていた質問の内容はだいたいこんな感じです。
「環境構築を手順書通りにやったんですけど、○○のコマンドでエラーがでてしまいます！なんとかなりませんか？」
このような質問を受け取ったら、先輩は暇ならばエラーメッセージを見てくれ、エラーメッセージに書かれていることに対して調査してくれるかもしれませんが、忙しいときにはそんなことはしてもらえません。
こんな質問を繰り返しているうちに先輩からは「技術系メーリングリストで質問するときのパターン・ランゲージを100回よめ」と言われてしまいました。

### 技術系メーリングリストで質問するときのパターン・ランゲージ

結城先生の記事に[技術系メーリングリストで質問するときのパターン・ランゲージ](http://www.hyuki.com/writing/techask.html) というものがあります。かなり昔に書かれたもののようですが、今でも十分に通用し役に立つものだと思います。

以下引用です

```
【所属機関や自分の技能を表現する解説】の【氏名】です。

○○を実行すると、○○というエラーになる問題で困っています。
原因または解決策をご存知の方はいらっしゃいませんか。

私の行った手順は以下です。
(1)
(2)
(3)

すると、以下のような結果になりました。

【表示されたものをコピー＆ペーストする】

私は【予想結果】になると思いました。
なぜなら、【参考資料】には、
以下のように書かれているからです。

> 【適切な分量の引用】
> 【適切な分量の引用】
> 【適切な分量の引用】

原因を確かめるため、以下のようなテストを行ってみましたが、
問題の解決には至りませんでした。

(a) 入力を○○ではなく××にしてみた
→上記と同じ結果になった

(b) ソースプログラムの○○をやめて、××にした
→以下のようなコンパイルエラーになった

【エラーメッセージのコピー＆ペースト】

なお、私の環境は以下の通りです。
【マシン, メモリ量, 関連周辺機器, OS, 利用ソフト, バージョンなどを箇条書きに】

検索エンジンで○○、××、△△を検索しましたが、
◎◎に関するページばかりで、解決に役立つ情報は見つかりませんでした。
このメーリングリストの過去ログも調べましたが、
○○に関する話題は見つかりませんでした。

【個人を識別する適切な署名】
```

氏名や所属機関、マシンスペック、署名などは当然先輩に質問する場合は不要なので省いてしまって構いません。
自分がどこまで調べて、何がわからないと思っているのかとか、エラーメッセージを貼り付けるとか、最初のころに叱られていたことが全部対応されています。


## 質問のタイミング

結城先生のテンプレートを使えば、相手に伝わり、適切な回答が得られるような質問ができるようになりましたが、その質問をするのに時間がかかりすぎてしまうというのも課題としてありました。

そこで、いつ人に聞けばよいかの基準で、[15分ルール](http://tkybpp.hatenablog.com/entry/2016/08/16/173055)を採用してみています。

>問題が起きた時は
【1】最初の15分は自分自身で解決を試みる
【2】15分後も解決していなかったら必ず人に聞く
前者を守らないと他人の時間を無駄にし、後者を守らないと自分の時間を無駄にする。

この時に大事なのは完璧主義にならないことです。15分で調べてできるところまでが、今の自分の実力です。
15分経ってわからないことは、上述した質問の仕方に従って質問し、先輩がどのようなアプローチで解決するのか見て学びます。
そして徐々に15分でできることを増やしていきましょう。

## 質問のレベル

同じわからないことを質問するにしても、わからないことがわかっている状態とわからないことがわからない状態では、そのやり方を変えた方がよい、ということを学びました。

### Five Orders of Ignorance

[Five orders of Ignorance](http://la-acm.org/Archives/laacm0512-Article%2002%20The%205%20Orders%20of%20Ignorance%20OCT%202000.pdf)というペーパーで、無知のレベルには５つのレベルがあるとされています。

<dl>
  <dt>:satisfied: 0OI: 全部分かっている<dt>
  <dd>「答え」を持っている。あとは書き写すだけで完成する。</dd>
  <dt>:smile: 1OI: 分からないことが分かっている</dt>
  <dd>答えを得るための「質問」を持っている。</dd>
  <dt>:worried: 2OI: 分からないことが分からない</dt>
  <dd>「質問」を持たない状態。決定的な答えを引き出すための「質問」ができない。</dd>
  <dt>:weary: 3OI: 分からないことが分からない状況を何とかする術を知らない</dt>
  <dd>2OI→1OI→0OIと進んでいくためのプロセスがない状態です。</dd>
  <dt>:astonished: 4OI: 無知にレベルがあることを知らない</dt>
</dl>

質問する際はこの中で自分がどのステップに居るのか理解しておくことが重要です。

#### 3OIの場合

このレベルは、何を頼れば問題が解決できるか分からない状態です。なので、質の高い書籍やサイトを教えてもらうところから始めましょう。
例えばJavaに関することであれば、技術メモ御三家を知っておくのと知らないのでは大きな違いがあります。

- [ひしだま's 技術メモページ](http://www.ne.jp/asahi/hishidama/home/tech/java/index.html)
- [CLOVER](http://d.hatena.ne.jp/Kazuhira/)
- [opengl-8080さんのQiita](http://qiita.com/opengl-8080)


#### 2OIの場合

このレベルだと分からないことが分からないので、直接的に答えを引き出す質問ができません。なので、自分が何が分かっていないかを説明できないなと思ったら、以下を重点的に聞いてみます。

- How(何をすればよいか)ではなくてWhy(なぜそれを解決したいと考えるか)を重点的に説明する。
- 質問をするとすれば、「こういったケースではどういうことが原因の可能性がありますか?」のように、心当たりのある点をすべて列挙してもらうのも手です。
- 途中まで自分で調べたことがあると、それに固執してしまい、原点に立ち返って質問しなおすってことができなくなりがちです。特にデキる人に質問するときは、"そもそも"に立ち返ってみる勇気をもつと、よいヒントが多く得られます。

#### 1OIの場合

このレベルにいれば、ふつうに質問すれば、答えは得られるはずです。技術系メーリングリストで質問するときのパターン・ランゲージにそって質問をしてみましょう。

## 質問のアティテュード

### 「魚をくれ」じゃなくて「魚の釣り方」を教わるようにする
答えを教わるほうが、聞き手も答える側も手短に済みます。
しかしながらそれでは聞き手の成長には繋がらず、何度も似たような質問を繰り返すようになります。
知識がない領域については特に安易に答えを教えてもらいたくなりますが、なるべく自分の成長を考えて「○○をしていてエラーが出たのですが、××さんはこういうとき、どうやって原因探りますか?」ような質問をします。


### 圧倒的当事者意識(ATI)

私がお客様を持って仕事を始めてから、質問に対して「なぜそれを知りたいの？」と返される機会が増えました。
それに対して私は「お客様に言われたから」と返していたのですが、それは「圧倒的当事者意識が欠如している」と指摘されました。「『お客様に聞かれたため』、というのでは、1OIの状態でない限り本当の答えに辿り着ける可能性は低い。その状態では、まず質問する先はお客様だ」という指摘です。
なぜそれが必要かというと「お客様が本当に望んでいるもの」は「お客様の質問」からは得られない可能性があるからです。
「お客様が○○するために××が必要で、そのために必要です。」と言えるようにしましょう。

### 問題が解決したときには質問した人に報告する

質問に答えてもらったらお礼を言うのは当たり前というだけでなく、「どうやって解決したか」の顛末が、質問に答えてくれた人にとっても勉強になるからです。

### お土産を用意する

例えば弊社では「[リアクティブシステム](http://www.tis.jp/service_solution/goreactive/)」なるものを推進しています。これがどういうところで使えるか知りたいと思ったときに、単に「どういう事例があるんですか?」と聞くだけでは事例を紹介してもらう以上に話が広がるのは難しそうですが、これが「こういうシステムがあるんですが、リアクティブシステムを使うと、耐障害性が飛躍的にあがったりしますか?」のような質問をすれば、新しい適用事例につながる可能性もあるので、適用できそうかどうかを真剣に考えてもらえるし、そこからいろんな対話が産まれます。

## 実例

「Webアプリのデザインをどうしたらいいか」「セッションの管理方式をどうしたらいいか」など**どうすればいいのかわからない**という経験の無い仕事を任されたときの話です。

私は初め、この手の質問は「この部分のデザインをどうしたらいいですか？」と聞くしかないなと思っていた圧倒的当事者意識の欠如した状態だったのですが、そのように聞くと「お前に意思はないのか？お前の意見はどうなんだ」と言われてしまいました。

しかし、新人でデザインの知識など一切なかった私は反論します。
「私のデザインに関する知識では、何を調べればいいかもわからないし、意見を持つことすらできません。」
すると、先輩は「そういうときは、**世界のスタンダード**がどうなっているのかを調べればいい」と教えてくれました。
例えばショッピングサイトの画面レイアウトの構成を決めたいのであれば、Amazonを参考にして、「Amazonはどうしてこういうレイアウトにしているのだろう」と考えることが大事です。
そうすると以下の二点が言えるようになり、先輩としてもそれが良いのか、悪いのか判断をするだけでよくなります。

- 「自分はどうしたいのか」
- 「なぜそうするのがいいと思うのか」

「どうすればいいのかわからない状況では世界のスタンダードを調べる」という手法は、3OIから2OIへ進むためのものであり、デザインのみならず様々なところで役に立っています。

## まとめ

私の経験から得た質問の仕方についてのノウハウを紹介させていただきました。
質問の仕方が悪いとお悩みの皆様の参考にしていただければ幸いです。