Учился я как-то в физ-мат школе, и задали нам задачек по матанализу. Сидим мы значит с другом, пыхтим, и тут заходит его сестра, которая к тому времени была уже на втором курсе физфака, что ли. Бросает беглый взгляд на предел, а там запутанное такое выражение. И она говорит: тут будет е пополам. Я удивился: как? Тут, говорит, выражения довольно типичные. Спустя какое-то время начинаешь видеть, к чему все сведется. Мы с другом досчитали, и получилось, конечно, е пополам. А через два года универа и мы научились так же.
Вернемся в наши дни. Смотрю я стрим по программированию, там парень решает задачки с leetcode. Открывает первую, там нужно найти в списке два числа, сумма которых дает заданное. У меня в голове молния, что делать и как. За секунду все понятно. А он старался, пыхтел минут 40, пока не справился. Открывает вторую — связный список. Застрял еще на часик.
Я это не к тому, что «смотрите, какой тупой, ха-ха». Нет. Мне кажется это как раз нормально — если еще нет навыка решать «задачи с собеседований», они и не будут решаться. А вот если набраться опыта, «мяса», нащелкать сто, двести, тысячу похожих ситуаций, то и реализации начнут от пальцев отскакивать. В этом смысле это как раз хорошее упражнение, им нужно заниматься.
Зато мне кажется я понял, что за люди топят против задачек на кодирование на собеседованиях. У них просто нет этого навыка — сесть и написать код.
Вот прям так сходу, без раскачки и рассуждений: запустить редактор, вбить нужные буквы, запустить, отладить, через двадцать минут закончить, сделав ровно то, что просили, и пойти дальше.
Не рассуждать о том, как ты запустишь редактор, как бы ты решал эту задачу, или как тебе мешает стресс, или неудобный ноутбук, или доска с маркером, или «зачем это вообще», или «что это показывает», или «да это ничего не значит».
Значит. Это навык, демонстрирующий очень простую вещь: а работаешь ли ты с кодом на постоянной основе. Пишешь ли ты код своими собственными руками.
Потому что если ты программируешь регулярно, пишешь код хотя бы каждый день, для тебя подобные задачи вообще не вопрос. Это рутина, рефлекс, это то, что ты делаешь лучше всего в жизни, потому что больше всего практиковал именно это.
Это как повара попросить сварить макароны. Пьяный, уставший, на чужой кухне, с ложкой не той формы и солью не из того региона, под присмотром или без, макароны в любом случае окажутся в кастрюле. Потому что ну как иначе-то?
А вот если ты код не пишешь, то навык потихоньку теряется. Ты забываешь, в каком порядке объявлять переменные, из какой библиотеки импортировать функции, какие опции компилятора запускать, какой шорткат для expand selection. Да, ты знаешь, где подсмотреть, но спинно-мозгового рефлекса уже нет, и ты делаешь это в десять, в сто раз медленнее, чем мог на пике формы.
Что делает мозг в таких случаях? Правильно, ищет отмазки. Вместо того, чтобы сделать задачу, мозг начинает думать о том, как ее не делать, почему ее не стоит делать, в каких идеальных условиях он мог бы начать ее делать — ну, короче, беречь свое эго.
И это тоже нормальная защитная реакция, я не говорю что это плохо. Она у всех так работает, и у меня тоже. Главное тут понимать, откуда она исходит. Тот, кто может решить проблему, берет и решает. А кто не может — ну, тот упражняется в риторике и ораторстве.
Это могут быть очень успешные люди. DHH вон, признается, что не смог бы написать сортировку пузырьком. Боб Мартин 40 минут решал первую задачу из Project Euler. Чувак из Homebrew не смог развернуть дерево.
Они могут очень красиво говорить. Могут очень эффектно кидать понты. Но надо понимать, что платят им в таком случае совсем за другие навыки, чем за программирование. Потому что код они уже давно не пишут.
Опять же, хорошо это или плохо давайте оставим за рамками. Я бы не прочь оказаться на месте того же DHH. Утверждение очень простое: писать код на интервью тебе может быть тяжело только по одной причине: ты этого давно не делал.