Почему иногда размышления об ошибке не помогают вам ее решить? [закрыто]

12

Вчера я провел большую часть дня, пытаясь исправить ошибку, которую я считал тривиальной. Я ходил кругами, понятия не имел, что случилось. Переписывание больших частей кода. Проверка на ТА. Все еще нет радости.

Поэтому я пошел домой, выгуливал собаку, смотрел маленький телевизор и перед тем, как лечь спать, в бинго я осознал очевидную ошибку, которую я совершил. Сегодня утром это заняло около 10 минут.

Пока я был дома, я не думал об этой проблеме. И все же выход из ситуации позволил мне ее решить.

Это происходит не впервые, и я знаю, что это довольно распространенный способ решения проблемы программирования. Я даже слышал о людях, мечтающих об ответах.

Почему это работает?

Возможно, что еще более важно, есть ли хорошее руководство относительно того, когда вы должны сделать перерыв в решении проблемы, как долго должен быть перерыв, и после того, как долго выход из проблемы перестанет быть эффективным?

Я полагаю, я пытаюсь решить, как оптимизировать эту подсознательную обработку (или что-то еще происходит)

Джереми Френч
источник
3
Я не уверен, что это относится исключительно к программированию, вы можете задать этот же вопрос во многих областях.
Оз
1
Если бы только обмен стеками когнитивной науки был в бета-версии!
Мэтт Эллен
1
Потому что мышление - загадочный процесс.
davidk01
4
Этот вопрос, кажется, не по теме, потому что он касается мыслительного процесса решения общих проблем и не уникален для областей программирования или технологий.

Ответы:

22

Слишком сосредоточенная на проблеме мешает вам сделать шаг назад. Когда вы отлаживаете свой код, вы склонны без необходимости повторять одни и те же тесты.

Чем больше вы пытаетесь, тем больше вы терпите неудачу, и вы очень расстраиваетесь. Повышенный стресс и разочарование ухудшают положение.

Вот почему довольно часто коллега может случайно взглянуть через плечо и указать на проблему (и решение) в течение нескольких секунд.

Они находятся не в том же психическом состоянии, что и вы.

Я часто пытаюсь перестать смотреть через определенный период времени и возвращаюсь с более спокойным умом через несколько часов.

Но самая мощная техника - просто ... просить помощи .

Вальтер
источник
9
+1, когда вы просите о помощи, вы склонны определять проблему в терминах, которые другие могут понять, следовательно, в этом процессе вы получаете больше понимания. например, когда вы сразу же публикуете тему на сайте вопросов и ответов или на форумах, вы получаете представление о том, что делать дальше ..
Адитья П
1
+1 и +1 для @AdityaGameProgrammer, а также: описание проблемы настолько полезно, что даже описание ее воображаемому человеку - или фигуре действия, или растению, - и тому подобному - часто вызывает такое же новое мышление (как это описывают многие) ,
Мэтью Фредерик
6

Если вы работали над проблемой в течение некоторого времени, ваш разум следует шаблонам, которые вы установили во время разработки. Другими словами, вы развиваете временные «черные пятна» для вещей, находящихся за пределами установленной вами ментальной структуры.

Отвлечение внимания от проблемы на некоторое время помогает удалить этот фильтр и позволяет размышлять без фильтра.

Что часто помогало мне в подобных случаях, так это объяснять кому-то еще, почему это должно работать (если это не так) - обычно в середине вашего объяснения вы поймете, где вы ошиблись в своих рассуждениях или какой шаг вы пропустили.

Помимо разработки ментального фильтра во время разработки, ваш мозг является многопоточным и часто продолжает преодолевать проблемы как часть бессознательных процессов. Иногда я использую это, изучая все, что могу, о проблеме днем, а затем оставляю проблему на один или два дня, прежде чем приступить к решению.

RSP
источник
1
Я читал об одном профессоре, который держал бы плюшевого мишку на столе возле своего кабинета. Прежде чем студенты попросили его о помощи, они должны были сначала объяснить свою проблему медведю.
Майкл К
Выглядит очень похоже на то, что Джефф Этвуд написал в своем блоге здесь: blog.codinghorror.com/rubber-duck-problem-solving . Я действительно думаю, что это может очень помочь. Сколько раз у вас был наполовину письменный вопрос для SO, а затем вы нашли ответ? Я имел это довольно много раз :)
Rémi
5

Я не психолог, но когда вы слишком сосредоточены на одной проблеме (обнаружении ошибки), вы склонны терять представление о более крупной системе. Но часто ответом является не «там, где вы сейчас ищете», а в другом месте, которое вы не сможете увидеть в этот момент.

Так что вам действительно нужно выйти из окопов и начать смотреть на всю систему с более общей точки зрения - снова. Кто-то склонен игнорировать этот факт, думая: «Я действительно знаю, что это прямо здесь, я просто еще не нашел его». Это происходит со всеми нами, все время. Я даже добраться до точки , где я знаю , «я не могу найти ошибку , используя хорошую отладку техники , так что есть где - то еще» , и до сих пор не принимают правильные вещи и сделать перерыв - человеческий мозг таким Забавная вещь.

Тем не менее, это действительно не так важно, что вы делаете - идет ли он в ванную, разговаривает с коллегой или выгуливает собаку. Я ходил в ближайший магазин, чтобы купить конфеты, когда застрял, и как только я надел куртку с раствором, вонзился в мою голову - почти каждый раз. Также может быть полезно пить много воды во время программирования. Это заставляет вас делать перерыв время от времени, чтобы посетить ванную и зап, есть причина, которая заставляет вас вырываться из окопов.

perdian
источник
4

Исходя из моего личного опыта и того, что я видел в младших разработчиках, которых я обучаю, мы все подходим к проблеме с предположениями и ожиданиями. Мы предполагаем, что функция x выполняет задачу y для получения результата z. Так было всегда, так почему это должно измениться? Поскольку мы все больше и больше фокусируемся на проблеме, мы предполагаем, что мы охватили основы, и проблема действительно должна быть намного более сложной, чем когда мы ее первоначально рассматривали. Принесите усталость к растущему списку вещей, которые мы считаем правдой, но на самом деле не подтвердили, и вы настроите себя на полный момент «WTF» позже.

Только позже, когда вы отсоединились от проблемы, предположения могут быть отброшены и восстановлены. Кроме того, мы обычно решаем проблему на другой стороне, которую мы только что решили. Я исправил A, но он сломал B, теперь я должен исправить B. Таким образом, у нас уже есть импульс и направление, в котором мы движемся (что делает наши предположения еще труднее разобщать). Когда вы возвращаетесь к решению проблемы B, проблема A больше не является свежей в вашем уме, блокируя потенциальные возможности. Вы можете решить проблему без предвзятых мнений, и это открывает новые пути мышления и новые ракурсы взгляда на проблему.

Теперь, когда младший просит меня о помощи, они знают, что первый вопрос, на который они должны ответить, - «Каковы ваши предположения?». Даже попытка ответить на эту проблему может помочь убрать вас из ваших ментальных блоков.

Джоэл Этертон
источник
3

Я думаю, ваш мозг, как мышцы, устает. Перерыв позволяет ему отдохнуть, долить кислород / топливо и т. Д. И снова начать работать.

Ходить пешком или делать зарядку - это хороший подход, когда вы действительно застряли в чем-то. Даже если у вас нет момента «эврика», он часто позволяет вам вернуться и по-новому взглянуть на проблему.

Стив
источник
3

Мне нравится называть это временем инкубации идей и проблем.

Ваше подсознание все еще продолжает обрабатывать проблему из вашей осведомленности в нелинейном подходе. Это очень похоже на то, что происходит, когда вы узнаете что-то новое, прежде чем вздремнуть. У вашего ума есть время, чтобы «дефрагментировать» информацию так, чтобы к ней можно было подходить с большей гибкостью.

Кроме того, еще один полезный совет для преодоления застревания на ошибке называется конфессиональное устранение ошибок . Здесь вы подходите к другому человеку, который не знает проблемы, и вы начинаете объяснять проблему. Чаще всего я нахожу, что, просто сказав вслух проблему, приходит решение.

проверить эти психические ссылки: советы по творчеству и проблемы врасплох

Adamizer
источник
2

«Мы все иногда укушаемся розой . К сожалению, когда мы так сильно концентрируемся на боли, мы забываем о красоте розы».

Темная ночь
источник
2

Я исправил несколько критических ошибок в моей карьере во время принятия душа.

Я не психолог, но я думаю, что разница в следующем:

  • сидя перед компьютером, я вижу исходники, точки останова, printfвыводы ...

  • в ванной, коды бегают в моей голове.

ohho
источник
1

Я испытал то же самое явление и объяснил это тем, что смотрю на проблему с другой точки зрения, поскольку я провожу время вдали от нее (больше времени подразумевает более отдаленную перспективу, приблизительно).

Но есть еще один трюк, который, как я обнаружил, в большинстве случаев выполняет одно и то же: объясняет код сотруднику. Это не для них, чтобы поймать вашу ошибку, хотя они могут; это заставит вас сделать шаг назад и объяснить логику кода на всех соответствующих уровнях. Я никогда (хотя и справедливо предупреждаю - размер выборки ограничен) не смог подсознательно устранить ошибку, которая ускользнула от этого метода описания сотруднику.

Рекс Керр
источник
1

Я недавно использовал технику pomodoro благодаря предложению кого-то на этом сайте, и думаю, что он дает хороший ответ на ваш вопрос о сроках и продолжительности перерывов. В основном, вы работаете над проблемой в течение 25 минут, после чего следует короткий перерыв 3-5 минут, а затем более продолжительный перерыв после каждых 4 циклов. Они ссылаются на некоторые исследования, чтобы подтвердить это, но я считаю, что эти интервалы очень эффективны.

Я думал, что 25-минутные промежутки не позволят мне попасть «в зону», что, как утверждают люди, занимает около 15 минут. Наоборот, с такими сроками я попал в зону практически сразу. Я думаю, это потому, что намного легче удержать себя от отвлечения внимания, когда я знаю, что мне нужно держать это только в течение 25 минут. Также проще отложить внешние прерывания всего на 25 минут. Раньше было очень трудно, когда я пытался согнуться за 4 часа работы до обеда.

Карл Билефельдт
источник