Отличия соревновательного и «real-life» программирования
Среда, 2 октября 2013

Не очень давно мне на Quorа попался вопрос об отличиях «real-life» и соревновательного программирования. Самый популярный ответ мне так понравился, что не могу не привести его тут, конечно, в моем корявом приблизительном переводе.

Вы в джунглях. У вас есть карманный нож. Кто-то просит вас убить горного льва. Кто угодно, кроме программиста, спросит: «Какого черта горный лев делает в джунглях?» Но спрашивать — это не то, что вас учили делать в качестве программиста. Вы здесь, чтобы решать проблемы, а не задавать вопросы.

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

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

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

Это «real-life» программирование.

В соревновательном программировании, вы начинаете с теми же ресурсами (складной нож), только у вас есть 2 минуты, чтобы убить льва.

Будучи новичком, вы уставитесь на льва и ничего не сможете сделать.

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

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

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

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

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

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

Anthony Moh, Over-generalizer

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

← Музыка по воскресеньям — 9Bench Games 2013 →

Хочется что-то добавить или сказать? Я всегда рад обсудить. Пишите на me@dikmax.name.