正しい試行錯誤は難しい

今日読み直した記事

今日、Twitterで流れてきて、前に読んでたけど読み直した。前に読んだ時も何かまとめたいと思ったけど、考えがまとまらずそのままだった。

今日読み直して思ったのは、この記事で書かれている試行錯誤という言葉がさすものが何かについて、ある程度のスキルがある人じゃないと正しく理解できないんじゃないかということ。記事では以下のように表現されている。

 そのためには、試行錯誤ではなく、立ち止まって、科学的な方法、もしくは、経験者の話を聞いて、問題を一つ一つ狭めることが重要だ。科学的な方法は、基本的に「こうちゃうか?」ではなくて、「事実」を積み重ねる。変に想像するのではなく、コードを読む、書く、ツールを使って分析する、ログや、エラーメッセージをしっかり読んで理解する、分析する。
試行錯誤するぐらいなら、コードやドキュメントを読んだり、達人に聞いたり、ツールを使って1レイヤづつ分析するほうが、「再現可能性」が高くなり、「技術力が向上」する。

この事実を積み重ねるというのはググるのとは違うというのが大事なポイントだと思う。この引用で触れられている、レイヤや達人の助言などとググってやってみたこととは何が違うのか。

大きな違いは状況の構造化ではないかと思う。トラブルシューティングする際にどこに問題があるか、要因ごとに分ける作業を指して、切り分ける、という。この切り分ける切り口には、そもそも論、あるべき論、後はトラブル事象の1つ1つの事実がある。そもそも論は例えばプロトコル、フレームワーク、言語の提供する機能や手順を指す。あるべき論は、このように実装されるべき、このようにふるまうべきという想定のことを指す。そして、そもそも論や、あるべき論で対象がいくつかに絞り込まれるので、それぞれについてトラブル事象の該当部分を1つずつ確認していく。

私も何年たってもなかなかこのメタの部分にうまくアプローチできていないように思う。問題が起きたら、短絡的に解決策で使われるであろうキーワードでググって解決しようとすることが多く、これはそもそも論やあるべき論が間違っていた場合はいくらググっても無駄となってしまう。

で、この前提となる部分を見直して解決を図ろうとするのがダブルループ学習という取り組み方である。ダブルループ学習は問題の認識自体の誤りを気付かせることを目標とするため、より状況に合わせた問題解決を行うことができる。

ここまで考えてきたところで、プログラミングで、適切な知識がなく、メンターもいない場合に、どうやってダブルループ学習ができるか、という点について考えてみたい。

プログラミングで問題にはまるときはとことんはまるし、人に聞くには遅いように感じてしまうことがある。私はあったし、それでさらに自分と周りの状況を悪くした。

これを解決するためにどうしたらいいか。とりあえず現時点での解決案は以下の通り。

・問題がどんな問題か表現する
・その中のキーワードを使って、ググる
・キーワードが思いつかない場合は、フレームワーク、言語などのドキュメントを読み込む、またはより詳しい人にここまでの自分の調査状況を共有してアドバイスを仰ぐ
・ググったらどのような情報がありそうか予測をする
・ググった結果同じような問題が見当たらない場合は、本当に新出か、認識が間違っているかのどちらか
・問題の捉え方が間違ってそうなら、もう少し問題の分け方のレベルを高くしてみる

この記事が気に入ったらサポートをしてみませんか?