とりあえず落ち着こう
- 深呼吸しよう
- エラーを見て「間違った」とか焦らなくて良いよ
- トイレに行く
- コンビニに行ってみる
- 他の人に聞く前に下記確認してみよう
- 聞く時は下記情報をもとに聞いてみよう
問題の切り分けはした?
- 問題はどの領域で起きている?
- 問題発生している領域がわからない時はナローイング(絞り込み)してみよう
- 正常に動いているコードとの差分は?
- 差分抽出ツールを使ってみよう
- 目の前の問題を単純化してみよう
- 複数問題がある場合はひとつひとつ原因をつぶしていこう。(一度に対応しようとしない)
- むやみに手を動かす前に、問題解決の戦略、手順をつくってみよう
- 漠然とデバッグ、を一番避けよう
- 思考が9割、コーディングは1割
推測するな 計測せよ
- エラー文はどんなのが表示されてる?
- エラー文でググったらどんなサイトが出てくる?
- エラーの種類は?
- エラーの発生した時のタイムスタンプは?
- エラーが発生しているファイルとその行数は?
- エラーが発生するまでの経路は?
エラー文を公式ドキュメントで参照してみよう
logは確認した?
logが出ない時はその前の経路はどうなっている?
logでググったらどんなサイトが出てくる?
ハマってる時は全体を把握できていない時
- 全体像は把握できている? 細部ばかり見ていない?
- コードリーディングはしている?自分が書いたコードだけ見てない?
- 図を書いてみよう
- シーケンス図
- クラス図
- ER図
- 図のなかで問題が起きているのはどこ?
- 使用している技術に理解していない部分はある?
- 前提知識がないと根本的な解決はできない
- 急がば回れ、前提知識を身につけよう
変数の中は確認した?
-
console.log
binding.pry
var_dump
print
- 変数の中身はなんだった?
- 返り値はなに?
- 返り値のクラスは?
- つかってる関数、メソッドはどんなの?
- 引数はなに?
- レシーバーはなに?
- 副作用はある?
問題解決の手段は一つではないよ
- 実現したいことはなに?
- そもそもそれはなぜ実現したい?目的は?
- 目的実現のためにはどんな手段がある?
- 今やろうとしていたこととの違いは?
その他
- 誤字脱字はない?
- 読んでるファイルが間違ってない?
- 見てるurlが間違ってない?
- 見てる環境が違ってない?
補遺
自ら問題解決ができるようになっていくには構造化していく能力が必要
→ 図にすることができる、言語化して説明ができる
・なぜなのか
・原理はなにか
・自分が「わかった気になっていること」をなくす
・全体のつながり、構成を意識できる
問題を構造化できないと陥る問題
「何が問題なのかわからない」
「調べられない」
「聞けない」
「同じ問題を繰り返す」
「状況が変わると対応できない」
ドキュメントを正しく読む
・自分の抱えている課題は、大枠でとらえると、◯◯という項目の中のはずだ。
・◯◯の項目は、◯◯という機能の章に含まれているのではないか。
・では、自分の求めている事柄は、ドキュメントのこのあたりに書いてあるはずだ。「作業の目的」から離れない
自分がやっている作業が、プロジェクト全体のどこに位置しているのか?
×「とりあえず自分が今やっていること」だけにフォーカスが行ってしまい、それ以外のことは忘れてしまう
○全体から細部を落とし込む知識を構造化しよう
「暗記」にとどまっている知識を、「理解」へ
「理解」を定義しよう
→ 1から10まで言語化して説明出来ること
用語を正しく使って説明しよう
基本は奥義
応用は基本の組み合わせ