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

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

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

Эти типы проблем не являются репрезентативными для моей работы как разработчика. Конечно, я ежедневно решаю десятки «тривиальных» задач, но это не основная часть моей работы. Возможность сделать это — это «столовые ставки». То, как этот код работает с другим кодом в общем замысле, как он решает более крупную спецификацию проблемы и как он удовлетворяет требованиям UX, является настоящей проблемой. Написание функции для переворачивания строки не скажет вам, смогу ли я это сделать. Он не скажет вам, есть ли у меня упорная решимость копаться в проблеме неделями, чтобы найти одну крошечную ошибку, которая вызывает сбой каждый раз, когда пользователь из Милуоки входит в систему. Он не скажет вам, смогу ли я возьмите требования от множества различных заинтересованных сторон и скомпонуйте их во что-то, что работает.

Мое резюме говорит вам об этом. Это показывает 25 лет программирования, и я все еще здесь, оттачиваю свое мастерство и не пытаюсь быть менеджером по персоналу. Если вы спросите меня, я расскажу вам о первых программах, которые я написал, когда мне было 8 лет, на компьютере Commodore PET, который мой отец позаимствовал в школе. Вы можете наблюдать, как загораются мои глаза, и слышать, как я взволнован, чтобы рассказать вам о какой-то сумасшедшей сложной технической задаче, которую я когда-то решил, или услышать о том, как иногда вечером я захожу на Leet Code и решаю пару задач ради развлечения.

Но у вас есть свои процессы, и вы решили, что вам нужно пройти тест на кодирование. Позвольте мне рассказать вам, как это заставляет меня чувствовать. Я ненавижу это. Я ненавижу это до глубины души, и я собираюсь сделать мужественное лицо и сделать все, что в моих силах, но потом я буду несчастен и буду чувствовать себя плохо. Я собираюсь провести следующие два дня, коря себя за то, что написал не самый лучший код, который мог бы иметь, и думая о еще одном пограничном условии или ошибках, которые я мог внести. Все это время я буду в стрессе и дискомфорте, потому что программирование для меня — ритуал, требующий тишины и концентрации. Делая это перед кем-то, пытаясь объяснить, что я делаю, я не могу достичь такого потока, который делает меня хорошим разработчиком. Мой процесс включает поиск многих вещей по ходу дела, а не полагаясь на свою память. Мой процесс вращается вокруг быстрого прототипирования и частого использования отладчика, чтобы увидеть, как работает код. Мой процесс заключается в написании модульных тестов на ранней стадии, чтобы понять, как «чувствуют себя» мои API, прежде чем я начну их реализовывать. Это не то, что происходит в короткой викторине по программированию.

Может быть, это не имеет для вас значения или вы не можете придумать лучшего способа выяснить, действительно ли кто-то хороший кодер, но я говорю вам, задавая правильные вопросы и разговаривая с кем-то расскажет вам все, что вам нужно знать. Хороший программист будет гордиться тем, что он сделал, и будет более чем счастлив объяснить это в мельчайших подробностях. Если вам действительно нужно, чтобы я написал код, просто дайте мне задание и уходите. Я верну его, когда буду доволен.