Что такое отладка Rubber Duck?
Мало что может быть хуже, чем запускать вашу программу в сотый раз только для того, чтобы узнать, что она все равно не запускается. Даже лучшие программисты знают, на что это похоже.
Вы смотрите на блок кода, над которым работали часами. Этот синтаксис выглядит правильным, ваш интервал согласован, вы правильно назвали свои переменные … и что дает?
Возможно, вам нужен новый метод отладки. И вы были бы удивлены, обнаружив, что один из проверенных способов сделать это, как ни странно, включает в себя игрушку в виде ванны.
Что такое отладка Rubber Duck?
Лучше всего это объяснить в небольшом рассказе. Представьте себе это: вы программист, работающий с командой людей. Вы делаете свою повседневную работу, кодируете все, что вам нужно для кодирования, а затем сталкиваетесь с проблемой. По какой-то причине программа работает не так, как должна.
Итак, вы решаете пройти по коридору и сказать своему коллеге, что имеете дело с устойчивой ошибкой. Они соглашаются помочь вам и спрашивают, что именно не так. Вы начинаете подробно объяснять проблему и обнаруживаете, что в середине своего объяснения вы нашли решение.
На самом деле это происходит в реальном мире чаще, чем вы думаете. Вам может быть интересно, какое отношение все это имеет к резиновым уткам. Что ж, вы могли бы довериться пластиковому желтому приятелю (или любому неодушевленному предмету), вместо того, чтобы беспокоить кого-то еще.
Лучшая часть? Вы можете найти утешение, зная, что ваша утка не будет судить вас за вашу многословную болтовню. Если вам нужно часто отлаживать, просмотрите этот список наиболее распространенных ошибок программирования и кодирования .
Откуда взялся термин «отладка резиновой утки»?
«Отладка резиновой утки» – это отсылка к истории из книги Эндрю Ханта и Дэвида Томаса «Прагматичный программист: от подмастерья к мастеру». В нем программист будет носить с собой резинового утенка и отлаживать свой код, заставляя себя объяснять его построчно.
Почему работает отладка Rubber Duck?
Часто при описании того, что должен делать код, вы наблюдаете, что он на самом деле делает, и впоследствии находите, где вещи не совпадают. Вот почему говорят, что преподавание предмета – один из лучших способов его изучить. Вы должны оценивать проблемы с разных точек зрения, чтобы помочь кому-то понять, а это поможет вам понять.
Самая важная часть использования этого метода – это ваша приверженность ему. Да, может показаться крайне глупым вести такой обстоятельный односторонний разговор. Но вложить столько усилий в то, чтобы пройти через вашу проблему с другим человеком (реальным, воображаемым или сделанным из резины), – это именно то, что заставит проблему, казалось бы, решить сама себя.
Этот метод работает так хорошо, потому что большинство ошибок в коде вызвано отсутствием предоставления явной информации и инструкций для программного обеспечения. Компьютеры не понимают расплывчатых инструкций. Предполагая, что ваша утка вообще ничего не знает о вашей проблеме, вы вынуждены описывать все мельчайшие детали. Оказывается, вы не все поняли так хорошо, как думали.
Как использовать метод резиновой утки?
Есть всего три простых шага к резиновому нырянию:
- Предположим, утка абсолютно ничего не знает о вашей проблеме. Сформулируйте проблему, как обстоят дела в данный момент и чего вы вместо этого пытаетесь достичь.
- Объясните течение вещей. Что случилось? Просмотрите каждый шаг процесса, не упуская ни одной детали.
- Приходите к прозрению.
Применение метода к реальной проблеме
Этот удобный метод был изобретен программистами, но его определенно можно применить к задачам, выходящим за рамки программирования. Как? Давайте построим еще один воображаемый сценарий: вы только что купили новый холодильник для своего дома.
Вы получаете новый холодильник к себе домой и ставите его на свое место на кухне. Вы переносите все товары из старого холодильника в новый и избавляетесь от старого. День заканчивается, и вы ложитесь спать. Проснувшись на следующее утро, вы открываете дверцу холодильника и обнаруживаете, что вся ваша еда испортилась за ночь!
Вы, конечно, в ярости и начинаете высказываться перед членом семьи. «Как такое могло случиться? Я заплатил за это, принес обратно и переместил все внутри этой штуки, которая при включении должна иметь невероятный температурный контроль…»
Ой. Вы забыли воткнуть эту чертову штуку в розетку.
Это немного смущает, но, по крайней мере, теперь вы знаете проблему. Это потому, что вы нашли время, чтобы обдумать всю ситуацию от начала до конца. Иногда, когда вы так глубоко и хорошо знакомы с процессом, вы не замечаете, что самые очевидные проблемы подкрадываются прямо к вам.
Применение метода к коду
Например, мы рассмотрим пример кода Python. Однако, как мы продемонстрировали, вы можете использовать свою верную резиновую утку для решения самых разных проблем. Этот метод можно применить к любому языку программирования, на котором вы работаете.
Мы хотим вывести числа от одного до пяти. Итак, вы набираете весь этот код:
for x in range(5):
print(x, end=" ")
Output: 0 1 2 3 4
Ага. Это странно. Вы попросили компилятор вывести диапазон из пяти чисел. В чем проблема? Давайте рассмотрим все возможности. Ваш синтаксис правильный, поскольку код работал без ошибок. Дело не в том, что вам не хватает каких-либо аргументов, потому что аргументы start и step необязательны …
Подожди. Функция диапазона возвращает последовательность чисел с приращением на единицу (по умолчанию) и останавливается перед установленным вами верхним пределом. Но где начинаются диапазоны? В Python диапазоны начинаются с нуля, если не указано иное.
Теперь вы знаете, что должны писать.
for x in range(5):
print(x+1, end=" ")
Output: 1 2 3 4 5
Ваш неожиданный приятель по программированию
Хотя резиновые утки не могут просто сказать вам, где именно вы ошиблись в своем коде, они повсюду помогают программистам. В следующий раз, когда вы столкнетесь с ошибкой при программировании, попробуйте схватить резиновую утку (или другой объект или человека, который будет действовать как единое целое) и посмотрите, подойдет ли вам этот метод решения проблем.
Кто бы мог подумать, что резиновые утки могут быть чем-то большим, чем просто игрушкой для ванны?