困ったときの心得、質問する前に


背景

社内での質問に答えていた時に良く感じることをまとめておくことで
後輩や、新人教育時に、脳内Index構築用に見せられるといいな、と

Qiita の Q&A でもたまに感じることもあったり・・。
Q&A テンプレートは、ソラ、アメ、カサ を意識する良いツールだと思うんですけどね。

困ったときは

自身の勘に従って、対処法の引き出しから色々試す。

「勘」は、経験に基づいた瞬間的な脳からの解法の提示、だと考えています。
あとからその分析をし論理補完・構築をしていくことで、精度を上げられるんじゃないかな、と

故に、回答を得られたら、それが教えてもらったことでも、自身でまとめておくことがとても重要だと思います。
Input をすることよりも、Output が大切、と。

で、そのための引き出し

公式 Documents を見直す

当たり前ですが、一番正しい可能性が高い資料です。

ただ、当然これらにも間違いが潜んでいることはあるかも?という視点は必要。
だって人間なんですもの

Code Firstだったり、Java Doc だったり、が進んで冗長性の排除が進んでも人が介在すると厳しいんでしょうねぇ

ソースがあるなら、コード確認

使い方だったり、機能認識の勘違いがあったりします。

コードの勉強になったりもするので、何も関係がない時でも他人のソースを眺めて見るのもいいですよね。
たまに、他人のコードを見ていて、自身のコードのバグに気付いたり

問題を簡素化する

複雑な状態のまま「何故か動作がおかしいんです」って言われても、よくある間違いか、天才じゃないと分かりません。

慣れてくると、ああ、これでしょ?とかよくある話ではあるんですが・・

とはいえ、やっぱり原因の切り分けを頑張ってしましょう。

仮説検証をする為にも、仮説を単純化することはとても大切

検索する

誰かが考えたアイディアはすでに世の中にあるのと同じように
誰かが躓いた出来事は、既に他の人が経験している。
運が良ければ、公開してくれてる記事やQ&Aがどっかにある。

検索キーワードがこういう場合は大切になってくるので、検索技術を上げられるといいですね。
とはいえ、Google の MUM で検索など、今は単語、というより文章検索が主力になってきてるので、検索方法のパラダイムシフトについていくのもまた大変かも

そうそう、検索の際、日本語で検索して諦めず、必ず英語でも検索してみましょう。
英語圏の情報量の方が圧倒的ですので、最初から英語でって道も。
その為には、各種ツールも英語環境で使うようにすると、検索キーワードも英語で探せて便利だったりします。
日々検索していると、英語単語の語彙力も増えるし、英語圏での検索能力もあがるので、一石二鳥!

他ごとをする

解決の為には

  1. 集中して取り組む
  2. 時間をおいて、脳が勝手に働くのを待つ → 閃き

という Cycle も意外に重要だったりします。

個人的には、以下がお勧め

  • 家ならシャワー
  • トイレ休憩に行って、お茶を飲む。すると、一時間後ぐらいにはまたトイレに行きたくなるので無限ループで閃きタイミングがやってきます。しかも、喉を常に潤す事によって、風邪予防にもなるそうです(お医者さん談) :laughing:

デバッグが可能なら、当然デバッグで該当箇所の原因を調査

再現性が高いなら、これで簡単に終わる筈。

時間あるときに IDE のデバッグ機能を一通り試しておくのはお勧め

Visual Studio で感動した機能は、

  • ウォッチウィンドウで、LINQ がかける
  • 条件付きブレイクポイント

再現性を上げる。条件を明確にする

再現性が低い場合、デバッグも難しくなりますよね。
だからこそ、問題を簡素化するなり、特定の条件を見つけて再現性をあげていくことで、デバッグをしやすくして解決に導こうということ

こういう場合に Log はとても大切なので、Information Level から Verbose に引き上げて様子を見る、などの手も必要ですね。

よくある問題であれば、対処フローを用意してチャットボットで提供できれば、ユーザー自身に解決までしてもらえて便利なんで、学習時間確保の為にも、自動化はしたいところ・・。Q&A サイトから FAQ とチャットボット自動生成サービスを会社に入れたい・・。

有識者に相談する

日頃の人間関係がものを言います。
人脈なり、Twitter なり、Stack Overflow のような Q&A サイトなりで聞いてみる

但し、以下は必要かな、と。状況次第だと思いますが、以下をすることで、自身の力だけで解決すること意外にあります。その結果、自分で解決できた!という経験が、次からの自信に繋がって解決速度も上がってく感覚。

  1. 最低限の調査
    • FAQ や 過去ログ、Documents など事前試行を記述しようとすると、抜けていることが見えてきてその再調査の過程で解決することはざらにあります。そうなったら、Q&A から 対処法として公開すれば記事の出来上がり、ですね
  2. 分かりやすい説明
    • 半年後の自分が読んでわかるか?を意識。
    • 箇条書きで、事実と、解釈、試行(判断)を分離する。「ソラ、アメ、カサ」ですね。1
    • キャプチャー画像を入れると、意外に勘違いに気付くことも。画像は事実であり、自身の解釈とのズレが明確化される。

「ソラ、アメ、カサ」:事実、解釈、判断を明確にし認識齟齬を無くす