Найти тему
Еще один

Метод резиновой уточки: программистам и не только

Оглавление

Если вы являетесь программистом, то на все 100% можно утверждать, невзирая на опыт за плечами: на какой-нибудь проблеме вы точно застрянете.

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

Уточка спешит на помощь

И вопрос в том - как выбраться из данной ситуации? И ответом может стать метод "резиновой уточки" или по английски rubber duck debugging. В чем суть?

Вы работаете над кодом, упираетесь в какую-то проблему.

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

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

- эй, приятель, я застрял в решении проблемы, может ты сможешь подсказать?

- да, попробуем, в чем дело?

И Вы начинаете объяснять с самого начала, последовательно описывая весь алгоритм по шагам.

- Тут такие объекты, они оборачиваются в DTO, передаются из системы А в систему Б, при перехвате запроса в посреднике и попытке сериализации ... рассказываете-рассказываете. И на каком-то шаге происходит щелчок.

Вы останавливаете свой рассказ и, кажется, что понимание проблематики проясняется в голове.

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

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

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

Почему, если отвлечься от монитора, немного прогуляться и попробовать пересказать проблему - это сработает эффективнее, чем тратить часы/дни, уткнувшись в монитор?

И кажется, что ответ достаточно прост. Если нам нужно раскрыть проблему другому человеку или даже предмету, сперва нам нужно начать с общего контекста, обрамляющего нашу задачу. Если вы объясняете проблему уточке, то она ничего не знает о задаче, над которой Вы работаете, и всю проблему следует тщательно разжевать по шагам, начиная с верхнего уровня, спускаясь-ниже и ниже.

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

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

Резюмируя

Применяя rubber duck debugging, мы замедляемся, наш мозг способен в более низком темпе прокрутить проблему в голове и найти решение.

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

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