Если вы являетесь программистом, то на все 100% можно утверждать, невзирая на опыт за плечами: на какой-нибудь проблеме вы точно застрянете.
В независимости от того, будет ли человек опытным разработчиком или накопленный опыт не так велик, найдется существующая проблема, над которой можно погрязнуть часами и днями, не находя подходящего решения или причин ошибки.
Уточка спешит на помощь
И вопрос в том - как выбраться из данной ситуации? И ответом может стать метод "резиновой уточки" или по английски rubber duck debugging. В чем суть?
Вы работаете над кодом, упираетесь в какую-то проблему.
Решаете отвлечься, идете по холлу или выходите на кухню. Предположим, у вас есть возможность обратиться к коллеге по цеху.
Вы обращаетесь к этому человеку и просите совета:
- эй, приятель, я застрял в решении проблемы, может ты сможешь подсказать?
- да, попробуем, в чем дело?
И Вы начинаете объяснять с самого начала, последовательно описывая весь алгоритм по шагам.
- Тут такие объекты, они оборачиваются в DTO, передаются из системы А в систему Б, при перехвате запроса в посреднике и попытке сериализации ... рассказываете-рассказываете. И на каком-то шаге происходит щелчок.
Вы останавливаете свой рассказ и, кажется, что понимание проблематики проясняется в голове.
Ваш собеседник возможно даже не успел дать какие-то наводящие вопросы или они были незначительны, но Вы уже можете предположить решение.
И парадокс в том, что не обязательно отвлекать коллег, тратить их время, с тем же самым успехом можно описать проблему неодушевленному предмету - хоть резиновой уточке для ванны. Эффект сохранится и большой разницы не будет.
Почему же это работает?
Почему, если отвлечься от монитора, немного прогуляться и попробовать пересказать проблему - это сработает эффективнее, чем тратить часы/дни, уткнувшись в монитор?
И кажется, что ответ достаточно прост. Если нам нужно раскрыть проблему другому человеку или даже предмету, сперва нам нужно начать с общего контекста, обрамляющего нашу задачу. Если вы объясняете проблему уточке, то она ничего не знает о задаче, над которой Вы работаете, и всю проблему следует тщательно разжевать по шагам, начиная с верхнего уровня, спускаясь-ниже и ниже.
Находясь непосредственно за монитором, наш мозг отбрасывает большую часть контекста программного кода и в своем условном буфере памяти мы держим лишь какой-то кусочек информации. Обычно тем лучше программист, чем больший контекст он может держать единовременно у себя в голове.
Лучшие идеи приходят нам, когда мы даже не находимся за компьютером, а идем куда-то или выполняем некое механическое действие, но отвлеченное от процесса кодинга - например, принимаем душ.
Резюмируя
Применяя rubber duck debugging, мы замедляемся, наш мозг способен в более низком темпе прокрутить проблему в голове и найти решение.
Также и преподавание. Когда мы объясняем какие-то концепции или принципы другому человеку - мы сами начинаем лучше разбираться в них, открывать для себя какие-то новые нюансы.
Не думайте, что это какая-то смешная и глупая техника - она может стать неплохим арсеналом в повседневной рутине. И данная техника, хоть и получила распространения, в мире программной разработки, но с успехом может применяться во многих других отраслях, требующих концентрации.