[Перевод] Программирование — это скучная магия
Есть один карточный трюк, который запомнился мне навсегда. Вот его краткое описание: доброволец выбирает карту и запечатывает её в конверт. Затем фокусник предлагает добровольцу выбрать чай. У него есть десятки коробок чая, и все они упакованы в пластик. Доброволец выбирает одну из коробок, срывает обёртку и выбирает один из упакованных пакетиков с чаем. Потом он вскрывает упаковку, и… внутри оказывается его карта.
Если вы не хотите знать, в чём хитрость этого трюка, то дальше не читайте.
Секрет трюка прозаичен, но меня он привёл в восторг. К выбору карты добровольца подталкивают. Однако выбор из этих десятков коробок с чаем на самом деле свободный, и выбор чайного пакетика внутри коробки тоже делается свободно. Здесь нет никакой ловкости рук: фокусник не касается коробок или выбранного добровольцем чайного пакетика. Карта на самом деле находится внутри этой упаковки чайного пакетика.
Вся хитрость заключается в подготовке. Перед выполнением фокуса фокусник покупает десятки коробок чая, вскрывает каждую и разворачивает каждую упаковку с чайным пакетиком. Кладёт в каждую упаковку тройку крестей. Снова запечатывает упаковку. Возвращает упаковки обратно в коробку. Снова запечатывает каждую коробку. И повторяет так сотни раз. На это уходят часы, может быть, даже дни.
«Фокусом» это является именно потому, что такая подготовка выглядит настолько скучной, настолько невозможно монотонной, что когда мы видим трюк, то не можем представить, что кто-то проделал бы столь скучную работу, чтобы добиться такого простого эффекта.
Теллер рассказывает об этом в статье о семи секретах магии:
Вас обманет фокус, если в него нужно вложить больше времени, денег и труда, чем захотели бы вложить в него вы (или любой другой здравомыслящий зритель). Мы с моим напарником Пенном однажды достали 500 живых тараканов из цилиндра, стоявшего на столе шоу Дэвида Леттермана. На подготовку этого трюка мы потратили несколько недель. Мы наняли энтомолога, предоставившего нам медленно движущихся тараканов, которые хорошо бы смотрелись на камеру (те, которые живут в наших домах, не будут ждать, пока оператор успеет взять крупный план). Энтомолог научил нас, как доставать насекомых, не вереща при этом, как девятилетние девочки. Затем мы изготовили из пенопласта потайную перегородку (это один из тех немногочисленных материалов, за которые не могут уцепиться тараканы) и придумали хитрую процедуру установки перегородки в шляпу. Вы считаете, что здесь больше возни, чем того стоит фокус? Для вас — возможно, но не для фокусников.
[То самое видео про тараканов с таймкодом, начало трюка на 7:23]
Новички в технической отрасли часто спрашивают меня, в чём секреты успеха в ней. На самом деле их не так много, однако этот секрет — готовность делать нечто столь ужасно монотонное, что это покажется магией — работает и с технологиями.
Наша отрасль одержима автоматизацией, упрощением процессов и эффективностью. В одном из фундаментальных для инженерной культуры текстов Ларри Уолла «Достоинства программиста» упоминается и лень:
Лень: качество, заставляющее вас предпринимать огромные усилия для снижения суммарных затрат энергии. Она заставляет вас писать облегчающие труд программы, которые оказываются полезными для других людей, и документировать написанное вами, чтобы не пришлось отвечать на слишком много вопросов.
Я не могу не согласиться: возможность перекладывать монотонные задачи на программу — одна из лучших особенностей знания кодинга. Однако иногда проблемы нельзя решить автоматизированием. Если ты готов к скучной, однообразной работе, то в глазах других ты будешь выглядеть волшебником.
Например, однажды я пришёл в команду, которая поддерживала утопавшую в багах систему. У них было что-то около двух тысяч открытых баг-репортов. У багов не было никаких меток, категорий и приоритетов. Команда не могла прийти к договорённости о том, какие проблемы нужно устранять первым делом. В результате они, по сути, выбирали баги случайным образом, но было непонятно, важна ли каждая отдельная проблема. Новые баг-репорты невозможно было обрабатывать эффективно, потому что поиск дубликатов оставался практически невозможным. Поэтому количество открытых тикетов продолжало увеличиваться. Команда месяцами буксовала на месте. Передо мной поставили задачу решения этой проблемы: снять команду с мели, обратить тренд количества открытых тикетов, найти способ постепенно снизить его до нуля.
И я использовал тот же трюк, что и фокусник, то есть трюка никакого и не было: я занялся работой. Я распечатал все проблемы — по одной странице на каждую проблему. Я прочитал каждую страницу. Я занял огромный кабинет и начал раскладывать на полу стопки листов. Я писал на стикерах метки и приклеивал их к стопкам. Я перемещал страницы из одной стопки в другую. Я записывал на маркерной доске длинные столбцы номеров тикетов; я представлял себя героем Бена Аффлека из фильма «Расплата». Я провёл в этом кабинете почти три недели, и вышел из него тогда, когда просмотрел, пометил, категоризировал и приоритезировал каждый баг.
Сразу после этого тренд пошёл в обратную сторону: мы мгновенно смогли закрыть несколько сотен тикетов как дубликаты, а на оценку новых репортов теперь требовались считанные минуты, а не целый день. Если не ошибаюсь, чтобы снизить количество до нуля, понадобился год или больше, но процесс был достаточно спокойным. Люди говорили, что я совершил невозможное, но они ошибались: я просто сделал нечто столь скучное, что никто другой не хотел этим заниматься.
Иногда программирование кажется магией: ты произносишь какое-то таинственное заклинание, и армия роботов исполняет твою волю. Но иногда магия рутинна. Если ты готов и желаешь заниматься скучной работой, то сможешь выполнить невозможное.
Наша компания предлагает облачные серверы для любых задач и на любой операционной системе. Создавайте собственные конфигурации в течение минуты, минимальный тариф — всего 6.5 рублей в день!
Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!