Уточка программиста

lose-up of a yellow rubber duck with big eyes and an orange beak on a blue background.

У программистов есть метод поиска ошибок, который называется „метод резиновой уточки“ (rubber duck debugging).

Широко известным он стал благодаря книге Эндрю Ханта и Дэвида Томаса “Программист-прагматик“ (The Pragmatic Programmer), вышедшей в 1999 году. Идея очень простая: если код не работает и никак не получается понять почему, программист ставит рядом резиновую уточку и начинает объяснять ей свой код. Что происходит в каждой строке, откуда берётся значение, куда оно передаётся и что должно произойти дальше.

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

Уточка при этом, конечно, ничего не сказала.

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

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

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

И дело даже не обязательно в иностранном языке. Уточке можно впервые сказать: “Я хотела бы поговорить о повышении моей зарплаты“ - и послушать, как это вообще звучит. Потом сказать ещё раз, понять, что именно так я никогда в жизни не скажу, подобрать другую фразу и попробовать её.

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

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

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

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

Иногда это уже довольно много.

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

Говорить всё, что приходит в голову на эту тему. Можно перескакивать с одного на другое, повторяться, возвращаться назад, замолчать посреди предложения. Можно сказать что-нибудь и тут же понять: “Нет, вообще-то я так не думаю“.

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

В когнитивной психологии есть понятие „самообъяснение“ (self-explanation). Его исследуют уже несколько десятилетий. В классической работе Michelene Chi и её коллег изучалось, как студенты разбирают готовые решения задач по физике. Более успешные студенты чаще не просто читали решение, а объясняли себе, почему сделан тот или иной шаг, связывали его с уже известными принципами и лучше замечали места, которых на самом деле не понимали.

Позже этот эффект изучался и в других исследованиях. Есть и метаанализы, показывающие, что самообъяснение может помогать в понимании и обучении. При этом простое проговаривание всего, что происходит в голове, и попытка что-то объяснить - не совсем одно и то же. В метаанализе исследований “мышления вслух“ (think aloud) Mark Fox, K. Anders Ericsson и Ryan Best обнаружили, что простое озвучивание текущих мыслей само по себе в среднем не улучшало точность выполнения задач. А когда человека просили описывать или объяснять свои мысли и действия, процесс выполнения задачи уже менялся.

Поэтому я бы с уточкой всё-таки разговаривала. Вслух или хотя бы вполголоса.

Например: “Уточка, я не могу решить, чем хочу сегодня заняться. Я собиралась пойти в зал, но вообще не хочу. Хотя мне надо двигаться, я в последнее время мало двигаюсь. Можно побегать. Нет, бегать я тоже не хочу. Я вообще ничего не хочу? Нет. Дома сидеть я тоже не хочу. Я хочу выйти. Просто я не хочу сегодня никуда ехать и не хочу людей. А гулять хочу. Можно вообще просто долго погулять. Почему я решила, что физическая активность обязательно должна быть тренировкой?“

Начали с того, что я никак не могу заставить себя выбрать тренировку, а закончили тем, что я, оказывается, вполне знаю, чего хочу.

Так происходит не обязательно. Можно десять минут рассказывать уточке о своей жизни и не прийти ни к одному открытию. Всё-таки это уточка. Но мне здесь нравится сам процесс.

Внутри головы очень легко оставить мысль в сокращённом виде: “не хочу“, “надо“, “страшно“, “не знаю“. Когда рассказываешь кому-то, даже резиновому, сокращение приходится понемногу раскрывать: “Не хочу, потому что...“, “Мне надо, потому что...“, “Я боюсь, что...“, “Я не знаю, но знаю вот это...“. И иногда собственное продолжение оказывается неожиданным.

Наверное, в этом для меня и состоит главное достоинство уточки. Она ничего не решает за человека, не даёт советов, не задаёт правильных вопросов и не пытается привести к полезному выводу. С ней можно репетировать, ей можно читать, петь, жаловаться, ругаться, рассказывать то, что никак не получается уложить в голове. И просто слушать, что ты сама при этом говоришь.

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

Источники

Hunt, A., Thomas, D. (1999). The Pragmatic Programmer: From Journeyman to Master. Addison-Wesley Professional.
https://books.google.com/books?id=5wBQEp6ruIAC

Chi, M. T. H., Bassok, M., Lewis, M. W., Reimann, P., Glaser, R. (1989). Self-Explanations: How Students Study and Use Examples in Learning to Solve Problems. Cognitive Science, 13(2), 145-182.
https://onlinelibrary.wiley.com/doi/10.1207/s15516709cog1302_1

Bisra, K., Liu, Q., Nesbit, J. C., Salimi, F., Winne, P. H. (2018). Inducing Self-Explanation: A Meta-Analysis. Educational Psychology Review, 30, 703-725.
https://doi.org/10.1007/s10648-018-9434-x

Fox, M. C., Ericsson, K. A., Best, R. (2011). Do Procedures for Verbal Reporting of Thinking Have to Be Reactive? A Meta-Analysis and Recommendations for Best Reporting Methods. Psychological Bulletin, 137(2), 316-344.
https://pubmed.ncbi.nlm.nih.gov/21090887/

Previous
Previous

Темпл Грандин - женщина, которая думает картинками

Next
Next

Что происходит с заботой, когда человек становится близким