Отладка - это то, чем разработчик занимается изо дня в день. Обычно я могу отследить ошибку и найти причину с помощью журналов или инструментов разработчика. Однако я становлюсь параноиком с ошибками, которые, кажется, не имеют смысла. например нажатие клавиши Enter меняет состояние в компоненте, когда к компоненту не прикреплен обработчик нажатия клавиши ...

Эффективная отладка состоит из двух основных частей: 1. ясность ума 2. систематический способ проследить первопричину. Здесь я поделюсь тремя мантрами, которые считаю полезными при проведении систематической отладки, и объясню, почему так важна ясность ума.

Мантра отладки

Мантра №1: Почему вы думаете, что так будет работать?

Этому учил Hack Reactor. Он работает аналогично технике отладки резиновой утки, когда нас поощряют объяснять проблему построчно, что помогает нам определять области, которые мы упустили.

Во время одного пугающего путешествия по отладке, когда я был озадачен, как

  • почему блок try…catch не улавливает ошибку
  • почему нажатие клавиши Enter удаляет состояния в моем компоненте React, когда нет обработчика событий keyDown
  • почему отправленное действие не достигает редуктора, когда состояния моего хранилища Redux никоим образом не изменяются ...

«В этом нет смысла!» Я боялся увидеть подобные ошибки, поскольку было неочевидно, где исследовать первопричину. Постепенно я разработал Debug Mantra, которая помогает мне систематически выполнять отладку в режиме паники.

Я рассуждал так: поскольку в этой строке кода возникает ошибка, она должна быть обнаружена блоком try…catch. Если нет, может быть, проблема в том, как я использую try…catch block? После некоторого поиска stackoverflow я ничего не нашел ...

В этот момент вопрос, почему блок try…catch не обнаруживает мою ошибку, не очень помогает. Пора сделать перерыв (чтобы сохранить ясный ум) и вернуться, используя вторую мантру.

Мантра №2: Что, по моему мнению, может быть неправильным?

Запишите последовательность действий программы и проверьте правильность каждого утверждения. Следуя предыдущему примеру, я полагал, что ошибка возникла в блоке try, но что, если это не так? Если предположить, что я ошибался, как я мог отследить код, чтобы узнать, где возникает ошибка? Этот вопрос открывает новое направление для исследования! Когда что-то почти само собой разумеющееся перестает работать, формирование гипотезы сначала помогает разделить / победить ошибку.

Мантра № 3: Каковы гипотезы такого поведения?

«Я думаю, что ошибка может быть связана с этой другой областью, потому что…» Формирование гипотезы помогает нам лучше понять программу, поскольку мы, естественно, будем проверять нашу гипотезу, чтобы подтвердить другие случаи, когда ожидается, что программа будет работать / не работать, исходя из нашего восприятия.

Установив точки останова и ведя журнал в других областях, которые я смог исследовать в других направлениях. Я был похож на детектива, который, наконец, смог покинуть нынешнюю тупиковую долину и продолжить путешествие, чтобы снова найти виновника ошибки, новые новые улики в руках.

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

Почему была важна ясность ума?

Ошибка, вызывающая панику, - непростая, обычная. Часто важно и неясно, что ставит на карту ваше работающее программное обеспечение. Подобные хитрые ошибки обычно требуют от нас нестандартного мышления, чтобы избежать кроличьих нор и быстро выявить первопричину.

Режим фокусировки и рассеянный режим

В знаменитом курсе Coursera «Обучение обучению» профессор Барб Оукли представила 2 режима мышления: сфокусированный режим и рассеянный режим. В сфокусированном режиме человек намеренно концентрируется и пытается решить проблемы, связанные с чем-то знакомым, отслеживая знакомые шаблоны мышления в мозгу. С другой стороны, человек в рассеянном режиме может видеть с другой точки зрения, связывая вместе разные поля мыслей и создавая новые идеи, подходы к решению проблемы. Перед лицом сложной ошибки, для решения которой у вас нет предыдущего опыта, не паникуйте. Также не погружайтесь и не меняйте код вслепую, сохраняйте спокойствие и помогайте себе приспособиться к рассеянному режиму с ясным умом, чтобы придумать другую гипотезу относительно первопричины.

Управляйте ожиданиями

Чтобы приспособиться к рассеянному режиму и сохранять ясный ум, важно устранить любые нереалистичные временные ограничения на решение этой проблемы. Ограничение по времени - одна из причин, по которой люди будут вслепую менять код. Если вы обнаружите эту критическую сложную ошибку в 16:00, а решение должно быть выпущено в 17:00, важно сначала четко сообщить заинтересованным сторонам о влиянии проблемы. Обсудите с ними серьезность и вероятность проблемы и сообщите им, что вам нужно время, чтобы должным образом исследовать основную причину и внедрить решение или смягчение. Управление ожиданиями поможет освободиться от немедленной нехватки времени - это еще одна ключевая часть, позволяющая освоиться в рассеянном режиме и исследовать сложную ошибку с разных точек зрения.

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

Другой способ уменьшить стресс - разделить его с другими людьми. (Делиться заботой!) Обсуждение проблемы с коллегами и обсуждение их свежих взглядов определенно помогут!

Нижняя линия

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