バグを考えないことが解決に役立つことがあるのはなぜですか?[閉まっている]


12

昨日、午後の大半をバグの修正に費やしましたが、これは些細なことだと思いました。何が間違っているのかわからないまま、私は輪になって回っていました。コードの大部分を書き換えます。SOの確認。まだ喜びはありません。

それで家に帰り、犬を散歩させ、小さなテレビを見て、寝る直前に、ビンゴは私が犯している明らかな間違いに気づきました。今朝、修正に約10分かかりました。

家にいる間、私は問題について積極的に考えていませんでした。しかし、状況から抜け出すことで解決できました。

それが起こったのは初めてではなく、プログラミングの問題を解決するためのかなり一般的な方法であることは知っています。答えを夢見ている人々のことさえ聞いたことがあります。

なぜこれが機能するのですか?

おそらくもっと重要なのは、いつ問題から休憩を取るべきか、どのくらい休憩をとるべきか、どのくらい後に問題を残すことが効果的でなくなるかについての良いガイドがありますか?

私はこの潜在意識処理を最適化する方法を考えていると思います


3
これがプログラミングだけに関係しているとは思いませんが、多くの分野で同じ質問をすることができます。
OZZ

1
認知科学スタック交換のみがベータ版であった場合!
マットエレン

1
思考は神秘的なプロセスだからです。
davidk01


4
この質問は、一般的な問題解決の思考プロセスに関するものであり、プログラミングや技術分野に固有のものではないため、トピック外のようです。

回答:


22

問題に集中しすぎると、一歩後退することができません。コードをデバッグするとき、同じテストを不必要に繰り返す傾向があります。

試行すればするほど失敗し、非常にイライラします。ストレスと欲求不満の増大は事態を悪化させます。

そのため、同僚が偶然に肩越しに見て、数秒で問題(および解決策)を指摘できることがよくあります。

彼らはあなたと同じ精神状態ではありません。

私はしばしば、一定の時間の面倒を見るのをやめ、数時間後に落ち着いた心で戻ってきます。

しかし、最も強力なテクニックはただ... 助けを求めることです


9
あなたが助けを求めているときに+1すると、他の人が理解できる用語で問題を定義する傾向があるため、そのプロセスでより多くの理解を得ることができます。あなたはQ&Aサイトやフォーラムにトピックを投稿するときのようにすぐにあなたはどのように次の続行する...アイデアを得る
アーディティヤP

1
@AdityaGameProgrammerの+1および+1:問題の説明は非常に有用であるため、想像上の人物(またはアクションフィギュアや植物など)に説明することでさえ、多くの場合、同じ新しい思考を引き起こします(多くの人が説明しています) 。
マシューフレデリック

6

しばらくの間、問題に取り組んできた場合、開発中に設定したパターンに従います。言い換えれば、あなたはあなたが設定した精神的な枠組みの外にあるもののために一時的な「黒い斑点」を開発します。

しばらく問題を気にしないと、このフィルターを削除するのに役立ち、フィルターを配置しなくても物事を覆すことができます。

このような場合にしばしば私を助けてくれたのは、他の誰かにそれがうまくいく理由を説明することです(うまくいかない場合)-通常、あなたの説明の途中で、あなたは推論のどこが間違っていたのか、どのステップを逃したかを理解します。

開発作業中にメンタルフィルターを開発することとは別に、あなたの脳は非常にマルチスレッド化されており、しばしば無意識のプロセスの一部として問題を乗り越え続けます。私は時々、午後に問題についてできることをすべて学び、それから解決策に取り組む前に1日か2日間問題を解決させることによってこれを使います。


1
テディベアをオフィスの外の机の上に置いているある教授について読んだ。学生が彼に助けを求める前に、彼らは最初に彼らの問題を熊に説明しなければなりませんでした。
マイケルK

Jeff Atwoodが彼のブログ(blog.codinghorror.com/rubber-duck-problem-solving)で書いたものと非常によく似ています。実際、これは非常に役立つと思います。SOについて書面で質問を半分書いた後、その答えに気付きましたか?私はこれをかなり
レミ14

5

私は心理学者ではありませんが、単一の問題(バグの発見)に集中しすぎると、より大きなシステムに対する見方を失う傾向があります。しかし、多くの場合、答えは現在探している「下」ではなく、他の場所で-その時点では見えないということです。

したがって、本当に必要なことは、溝から出て、システム全体をより一般的な観点から見始めることです-再び。この事実を無視する傾向があります。「ここにあることは本当にわかっているが、まだ見つけていない」。それは私たち全員に常に起こります。私も、私は「それはので、私は良いデバッグ技術を使用してバグを見つけることができません知っているポイントを得る持っている人間の脳は、aは-と、まだ正しいことを取ると、休憩を取ることはありませんどこか他のことを」面白いこと。

ただし、トイレに行くのか、同僚と話すのか、犬の散歩をするのかに関係なく、あなたがすることはそれほど重要ではありません。私は立ち往生しているときに近くの店に行ってキャンディーを買いに行っていましたが、ソリューションにジャケットを置くとすぐに頭に飛び出しました-ほぼ毎回。プログラミング中に大量の水を飲むことも良いことです。それはあなたが時々休憩を取ってからトイレとザップを訪れることを強制します、あなたがtrenchから抜け出すことを強制する理由があります。


4

私の個人的な経験と、私がトレーニングしているジュニア開発者で目撃したことから、私たちは皆、仮定と期待で問題に取り組んでいます。関数xがタスクyを実行して結果zを生成すると仮定します。それは常に持っているので、なぜそれを変える必要があるのですか?問題にますます焦点を当てるにつれて、基本をカバーし、問題は実際に最初に対処したときよりもはるかに複雑でなければならないことを前提としています。私たちが真実であると仮定しているが実際には検証されていないものの増加するリストに疲労を付けて、後ほど完全な「WTF」の瞬間のために自分自身を設定します。

問題から自分自身を切り離した後になって初めて、前提条件を捨てて再追跡することができます。さらに、通常、解決したばかりの別の問題の裏にある問題に取り組みます。Aを修正しましたが、Bを壊しました。Bを修正する必要があります。そのため、移動する方向性と方向性が既にあります(これにより、関連付けを解除するのがさらに難しくなります)。問題Bの解決に戻ったとき、問題Aが潜在的な可能性をブロックしてしまうことはありません。あなたは先入観なしに問題に対処することができます、そして、これは問題を見ることの新しい考え方と新しい角度を開きます。

さて、後輩が私に助けを求めるたびに、彼らは答えなければならない最初の質問が「あなたの仮定は何ですか?」であることを知っています。その問題に答えようとすることでさえ、あなたを精神的なブロックから取り除くのに役立ちます。


3

あなたの脳は、筋肉のように疲れます。休憩を取ると、休息し、酸素/燃料などを補充して、再び働き始めることができます。

あなたが本当に何かにこだわっているとき、散歩に行くか、運動をすることはしばしば良いアプローチです。「交響詩 "エウレカ」の瞬間がない場合でも、多くの場合、問題を解決するために戻って新しいアプローチを取ることができます。


3

私はそれをアイデアや問題の潜伏期と呼んでいます。

あなたの準良心は、非線形アプローチであなたの意識から問題を処理し続けます。これは、昼寝をする前に何か新しいことを学ぶときに起こることと非常に似ています。あなたの心には、情報を「デフラグ」して、より柔軟にアプローチできる方法があります。

また、バグで立ち往生することを克服するためのもう1つの役立つヒントは、告白デバグと呼ばれます。ここで、問題を知らない別の人にアプローチし、問題の説明を始めます。多くの場合、問題を声に出して言うだけで解決策が思い浮かびます。

これらのサイクリンクをチェックしてください: 創造性のヒント問題の昼寝


2

「私たちは皆で刺しますが上昇し 、時には。私たちはとき悲しいことに集中する 上でそんなに痛み私たちは忘れて美しさバラの。」


2

私はシャワーの時間中に私のキャリアのいくつかの重大なバグを修正しました。

私は心理学者ではありませんが、違いは次のとおりです。

  • コンピューターの前に座っていると、ソースコード、ブレークポイント、printf出力が表示されます...

  • バスルームでは、コードが実行されます。


1

私は同じ現象を経験しましたが、問題を別の視点で見ると、問題を遠ざけて見ることに起因します(離れるほど、遠ざかる程度になることを意味します)。

しかし、ほとんどの場合、同じことを達成できると思う別のトリックがあります。同僚にコードを説明することです。バグをキャッチすることはできませんが、バグをキャッチすることはできます。それは強制的にです、あなたをバックステップし、関連するすべてのレベルでのコードのロジックを説明します。私はこれまでに(公正な警告-サンプルサイズは限られていますが)この同僚への説明から逃れたバグを無意識のうちに解決することができませんでした。


1

私は最近、このサイトの誰かからの提案のおかげでポモドーロ技術を使用しいますが、それは休憩のタイミングと長さに関するあなたの質問に対する良い答えを提供すると思います。基本的に、25分間問題に焦点を合わせて作業し、その後3〜5分間の短い休憩をとり、その後4サイクルごとに長い休憩をとります。彼らはそれをバックアップするためのいくつかの研究を引用していますが、逸話的に私はそれらの間隔が非常に効果的であるとわかりました。

私は、25分のスパンが「ゾーン内」に入らないようにするだろうと考えていました。それどころか、このタイミングで私はほとんどすぐにゾーンに入ります。それは、25分間維持しなければならないことがわかっている場合、気を散らさないようにする方がずっと簡単だからだと思います。また、外部の中断を25分間だけ延期することも簡単です。昼食前に4時間仕事をしようとしていたときは、以前は非常に困難でした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.