Предоставляется неограниченное время для решения технической задачи дома и разрешено пользоваться Интернетом, для собеседования

Я новичок в профессиональной разработке программного обеспечения для компании. У меня было собеседование, и оно прошло хорошо. Они отправили мне по электронной почте техническую задачу с несколькими различными частями. Они сказали, что ограничений по времени нет, это открытая книга, и я могу пользоваться Интернетом. У меня есть склонность слишком много думать, и мне было интересно, теоретически это означает, что я могу узнать все, чего не знаю, чтобы я мог полностью и правильно отвечать на вопросы. Правильно ли я смотрю на это?

Один из вопросов заключался в реализации адаптивной горизонтальной панели навигации для веб-сайта. Я не могу сделать это, не консультируясь со ссылками. Но нетрудно найти полностью проработанные примеры и их исходный код в Интернете. Я бы подумал о том, чтобы просто скопировать их с помощью читерства, но действительно ли это имеет значение, если я пойму их, а затем скопирую код? Очевидно, что я бы не стал заставлять кого-то делать это за меня и использовал бы только существующие примеры на веб-сайтах, таких как W3Schools.

Это ужасно похоже на бесплатную маскировку в качестве технического теста... Будьте осторожны
@HorusKol: Если в сети уже есть проработанные примеры, это похоже на типичное академическое упражнение. Во всяком случае, это будет слишком пресно и основано на теории, чтобы иметь прямое отношение к работе.
@HorusKol разве ты не можешь защитить себя, пока ничего не подписал? С юридической точки зрения код принадлежит вам, независимо от контекста.
Просто убедитесь, что вы не берете месяц, чтобы сделать. Был аналогичный вопрос некоторое время назад, я почти уверен, что они никогда не связывались с кандидатом, когда он потратил месяц, чтобы сделать это красиво.
@PierreArlaud да, но тогда вам придется нанять адвоката и заявить о своем праве собственности в суде. Компания, которая использует «тесты» для работы, рассчитывала бы на то, что вы просто уйдете с поля боя. Но я не говорю, что это так, просто будьте осторожны.
Тогда важен подход. Выбирайте инструменты с умом и будьте готовы объяснить свой выбор.
Почему бы не спросить у компании?
Основная причина, по которой я не стал бы просто копировать рабочий пример, заключается в том, что на последующем собеседовании вас могут попросить просто « изменить то, что вы делали на прошлой неделе », чтобы добавить функцию, или попросить вас объяснить, как это работает.
На работе наши лучшие специалисты используют такие фразы, как «Google/StackOverflow — мой наставник». Это наши лучшие люди. Можно было бы ожидать, что менее опытный человек сделает то же самое, не пытаясь быть выше этого и делать это самостоятельно.
@Иво Недев Согласен. Если бы я устанавливал это, я бы оценивал качество ответа по сравнению с затраченным временем и выбирал лучшую комбинацию. SO OP НЕ должен слишком много думать - им нужно получить хороший ответ в течение очень короткого времени (не более дня или двух) - через неделю я буду оценивать ответы и делать предложение.
Так в целом работают разработчики программного обеспечения. Так что это звучит как разумный способ оценить вашу способность выполнять работу. Хотя, как уже отмечалось, это звучит как бесплатная работа, поэтому будьте осторожны с масштабом. Если это больше недели работы, просто скажите им прямо, что это похоже на мошенничество, и уходите.
Редактирование, похоже, удалило вопрос из заголовка, оставив только контекст ... это, на мой взгляд, серьезный регресс.
@HorusKol, я всегда нахожу это мнение о «бесплатной работе» в отношении интервью претенциозным. Как человек, который проводил собеседования с кандидатами, я знаю, что их ответ не будет достойным производства. Я не ожидаю, что это будет. У кандидата нет контекста, он может нервничать, не имеет доступа к системе управления версиями, не может просматривать другой код, который может помочь, и не может работать с пользователями для тестирования кода. Если я даю кандидату домашнее задание, а он ведет себя так, будто я прошу его «работать бесплатно», это говорит мне о том, что он не знает о SDLC. Это тревожный сигнал, учитывая, что я нанимаю кого-то в состав SDLC.
@user2023861 user2023861 Я нахожу расширенные «домашние» тесты, подобные этому, претенциозными — либо они являются тривиальной чепухой, которая не может показать ничего, что может сделать хорошее техническое обсуждение в личной беседе, либо они чрезмерно сложны и являются пустой тратой времени. время для кандидата и работодателя (особенно для сотрудника, который должен проверить работу). Если вы хотите знать, как разработчик вписывается в ваш SDLC, либо пригласите его на неделю или две (оплачивается), либо сделайте ему предложение с испытательным сроком.
@HorusKol, ни одно из ваших решений не является приемлемым. Если я хочу провести собеседование с четырьмя сотрудниками, ваш подход займет 1-2 месяца только для того, чтобы определить кандидата. Если я проведу собеседование со всеми четырьмя и решу предложить первого, я должен надеяться, что этот кандидат не принимал никаких предложений в предыдущие 0,5-1,5 месяца. Скорее всего, если я захочу нанять этого кандидата, это сделает и кто-то другой. Не говоря уже о том, что я все время буду получать работу нового сотрудника. Я уверен, что пользователям и руководителям групп понравится объяснять бизнес-логику новым разработчикам каждые 1-2 недели.
@AJFaraday, «если это больше недели работы»? Если это займет неделю, он определенно не должен этого делать. На самом деле было бы неразумно требовать от компании более 2-3 часов его времени, поскольку у него нет гарантии, что он получит работу. Компания должна разработать тест таким образом, чтобы его можно было пройти за короткое время, при этом позволяя ему продемонстрировать свои навыки.
Мне нужно было бы увидеть настоящие вопросы, чтобы узнать, выглядят ли они подозрительно или нет, но похоже, что они, вероятно, проверяют вашу способность найти решение с учетом онлайн-ресурсов. Очевидно, что есть ограничение по времени, даже если это не указано, потому что они не собираются слишком долго ждать ответа. По моему опыту, значительную часть разработки составляют онлайн-исследования, не менее важные, чем написание кода и тестирование.
@user2023861 user2023861 извините, я совсем не это имею в виду - я говорю, что тест «домашнее задание» бессмысленен - ​​вы должны быть в состоянии получить хорошую оценку их технических способностей посредством обсуждения на личном собеседовании. . Если нет, то вы неправильно проводите собеседование. И даже если они «сдали» домашнюю проверку, вам все равно придется поставить кандидата на испытательный срок, чтобы убедиться, что он работает в вашей команде — так что же дает проверка? - извините, комментарии - не лучший форум для подробностей ... возможно, сделайте это вопросом (хотя я боюсь, что ответы будут основаны на мнении)

Ответы (8)

Если бы я дал разработчику такую ​​задачу, как «Создать отзывчивую горизонтальную панель навигации», я был бы очень разочарован, если бы они потратили часы на ее создание с нуля, когда уже существует так много жизнеспособных и правильных решений. У вас нет времени в реальном мире каждый раз создавать идеальное решение,

Я согласен, возможно, прокомментируйте это, чтобы они могли видеть, что вы понимаете все аспекты
Если я поставлю задачу «создать Х», а вместо этого вы просто скопируете и вставите и вставите чужой Х, почему бы мне не разочароваться?
@Brandin, потому что это больше не средняя школа. Копирование — это неплохо (если вы следуете лицензиям). Кто-то, кто берет что-то из сети и модифицирует ее, чтобы делать то, что нужно, вместо того, чтобы тратить в 10 раз больше времени на попытки «изобрести велосипед», более эффективен с точки зрения затрат компаний.
@Snowlockk: я хотел бы отметить: копирование - это нормально, если у вас есть минимальное понимание того, как это работает . В частности, о том, как правильно его использовать, каковы его крайние случаи (если есть) и т. д. Помните, что как только он появится в вашей кодовой базе, вы несете ответственность за его обслуживание.
@MatthieuM. По моему опыту, в сети очень редко можно скопировать, вставить и забыть. В большинстве случаев вам нужно изменить его, чтобы он соответствовал тому, что вы хотите. В ходе этого вы должны понять это.
@Snowlockk Согласен, если лицензия соблюдается и все согласны с этим. Но фраза «копировать и вставить» может игнорировать это.
@Snowlockk: Это и мой опыт. Однако ОП начал свой вопрос с «Я новичок в профессиональной разработке программного обеспечения», поэтому их уровень опыта неизвестен, и поэтому я предпочел бы ошибиться в совете с осторожностью; лучше уточнить слишком много, чем позволить недоразумениям закрасться.
Для приведенного примера мои ожидания будут такими же, как у @Brandin для «Создайте адаптивную горизонтальную панель навигации», но совпадают с вашими для «Создайте страницу с адаптивной горизонтальной панелью навигации». Для меня первое читается как явный запрос на создание навигационной панели, а не просто на поиск и повторное использование чего-то из других мест.
Я думаю, что это сильно зависит от того, какова была цель упражнения. Хотели ли они проверить, может ли он реализовать панель, или они хотели проверить, может ли он закодировать функционирующую панель? Эти два навыка показывают очень разные вещи и могут быть использованы по разным причинам.
  1. Притворись, что делаешь это ради настоящей работы.
  2. Будьте законны (т.е. осведомлены о том, когда необходима атрибуция и соблюдайте лицензии)

Это, естественно, потребует довольно агрессивного поиска в Интернете и адаптации полных решений. Полная копия/вставка редко работает в реальном мире, даже если это хорошее начало.

«Нет ограничений по времени» может быть даже намеком на форму: «это займет у вас очень много времени, если вы будете создавать что-то с нуля, и всего несколько минут, если вы используете StackOverflow».

пункт 2 важен
ИМО, «неограниченное время» также является намеком на то, что «мы собираемся спросить, как работает то, что вы выбрали, изучите это».
Хотя это хороший совет, я считаю, что он слишком силен для мира разработки программного обеспечения — использование источников из Интернета является довольно распространенной практикой — пока это не копируется напрямую, проблем не должно быть. При этом это также зависит от того, как интервьюер «оценивает» этот проект, поэтому я не собираюсь минусовать его на том основании, что кто-то, проводящий интервью с небольшим техническим опытом, может увидеть проблему с прямым копированием (и действительно , в любом случае его не следует полностью копировать). Так что я бы сказал, просто будьте осторожны.
«Без ограничения по времени» также может быть частью теста. Вы что-то находите, проводите рефакторинг, возможно, добавляете несколько тестов и предоставляете хорошее решение за короткое время, или вы вручную скатываете позолоченное решение, которое понимаете только вы, и на его создание уходит несколько дней. Я знаю, кого бы я нанял.
@TheWanderingDevManager одна из этих вещей (короче/лучше) строго лучше другой, так что, конечно.
@Zibbobz Я почти никогда не копирую и не вставляю код напрямую, и даже когда я это делаю, я все равно часто в конечном итоге изменяю его позже; почти всегда есть некоторые имена переменных, которые я могу улучшить или внести другие незначительные изменения. Но для адаптированного кода или даже для метода, который я узнал из определенного источника (без фактического копирования и вставки какого-либо кода), я всегда указываю авторство, даже если это просто ссылка в комментарии к сообщению StackOverflow.
Что касается пункта 2. Лицензирование исходного кода чрезвычайно сложно. Я всегда оставляю ссылку на то, откуда я это нашел, и надеюсь, что это покроет меня. Я знаю, что рефлекторной реакцией является «проконсультируйтесь с юристом», но если рассмотреть эту ситуацию в контексте, то не имеет смысла платить юристу за то, чтобы он спросил, правильно ли вы приписываете код для одного вопроса в техническом интервью.
Это «Переполнение стека», а не «Переполнение стека» (последний раздел «Правильное использование имени Stack Exchange»). Пожалуйста, отредактируйте свой ответ.

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

Очевидно, проблема в том, как бы вы работали, если бы вас наняли. Будьте умны, будьте эффективны, модифицируйте существующее решение, но платите атрибуцию и смотрите на лицензию (GPL?).

«Если вам разрешено пользоваться Интернетом, вы также должны копировать и вставлять из существующих интернет-источников» — Нет.
По поводу лицензирования: это кошмар. Некоторые веб-сайты, на которых я нахожу код, имеют настолько сложные модели лицензий, что я не могу их понять. Не имеет смысла нанимать юриста каждый раз, когда вы находите код в Интернете, так что же делать? Я всегда ссылаюсь на то, где я это нашел, и надеюсь, что это покроет меня.
Просто найдите то, что использует лицензии Apache, bsd или MIT, и избегайте GNU, как чумы. Работает для большинства ситуаций. Кроме того, большинство «открытых» лицензий гораздо более удобны, если вы просто «используете» их, а не копаетесь в коде и настраиваете его. Современные вклады SO - MIT: meta.stackexchange.com/questions/271080/…
@Jeutnarg Или используйте что-то под лицензией GPL (не LGPL) специально , чтобы компания не использовала это в своем коммерческом / проприетарном продукте ...

Если компания, проводящая тест, не имеет ни малейшего представления, а после этого вас вызовут на другое собеседование, вам будут заданы подробные вопросы о вашей работе и, вполне возможно, о внесении в нее изменений.

Так что да, вы можете и, вероятно, должны использовать источники в Интернете, просто убедитесь, что вы понимаете, как это работает (например, можете объяснить каждую строку, если это необходимо) и что атрибуция/лицензирование в порядке.

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

Здесь верна старая пословица: « Быстро, дешево или хорошо — выберите два ». Они хотят знать, кто из вас двоих.

Если бы я был на вашем месте, я бы попытался перестать думать об этом и не стеснялся использовать любые ресурсы сообщества и фрагменты кода. Это то, что происходит с настоящими разработчиками на реальных работах, и тот факт, что это собеседование, не должен влиять на вашу методологию. Пока вы понимаете код, решение работает, и вы не делаете ничего неуместного, незаконного или аморального, лично я не вижу проблемы.

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

Привет, Флит, просто заглянул в очередь на рассмотрение сообщества. Добро пожаловать в Workplace SE! Хотя я думаю, что ваш ответ представляет собой хорошую основу для вашего ответа, я лично прочитал бы его потом и подумал: «Итак, я до сих пор не знаю, какие два выбрать». Не сказать, что вы должны диктовать выбор спрашивающему, но, возможно, дать OP варианты, которые вы бы выбрали / выбрали в прошлом, чтобы помочь привнести в свой ответ некоторую эмпирическую мудрость? Или, если вы чувствуете, что это слишком личное, возможно, плюсы и минусы комбинаций? (Продолжение)
(Продолжение) Но это всего лишь мои пять копеек как часть очереди на рассмотрение сообщества, поэтому не стесняйтесь полностью игнорировать мои комментарии. Мы просто рады вашей помощи :). Спасибо!
Если он не сможет найти правильный вариант сам, я не собираюсь его нанимать ;) но, кроме шуток, это справедливое замечание. Я обновлю свой ответ, включив в него некоторые личные комментарии о том, каким путем я бы пошел.
@TeacherKSHuang: этот ответ указывает на то, что это личность, которую менеджер хочет определить с помощью теста. Я бы не согласился с этим и сказал, что прилагательное «отзывчивый» говорит ОП, каким он должен быть.
Я проголосовал за ваш комментарий, но это просто текстовая обратная связь, хорошее обновление!
@ user3644640: не уверен, что понимаю вас, прилагательное «отзывчивый» говорит ОП, каким оно должно быть — насколько я могу судить, в вопросе ОП «отзывчивый» относится к деталям реализации (отзывчивый дизайн, который изменяется в зависимости от размера области просмотра браузера , например), а не любой аспект личности разработчика.
@flith: Слово «отзывчивый» говорит о том, что оно должно работать так, как вы сказали, но также и о том, что оно должно минимизировать использование ресурсов. Также неограниченное время является подсказкой для того, чтобы это было сделано хорошо. Я могу слишком много думать, и именно так говорит менеджер, но я вижу намерение проверить, замечает ли ОП эти мелочи и реализует реализацию на их основе.
@ user3644640 «отзывчивый» — это технический термин в веб-разработке.

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

Большинство ответов, которые вы найдете в Интернете, будут только технически правильными.

Например, если у вас есть вопрос о том, как сделать X, скорее всего, есть несколько способов сделать это независимо от того, какой язык или фреймворки вы используете. Некоторые из них будут масштабируемыми, некоторые нет. Некоторые будут использовать методы, которые справедливо осуждаются (Eval!), а некоторые нет. Некоторые из них устареют для современных языков программирования, а некоторые — нет.

Большинство ответов НЕ будут работать в реальной ситуации. Это быстрые решения? Да, но они обычно быстрые по какой-то причине.

Имея более одного способа сделать что-то, у вас есть шанс продемонстрировать мастерство, а не просто понимание.

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

«Вы не сказали, предназначен ли этот код для повторного использования, я обычно предполагаю возможность повторного использования, но быстрый пример здесь. Однако, если бы я ожидал повторного использования этого кода, я бы структурировал его как так."

Если вы можете найти решение в Google, ожидайте, что интервьюер сможет это сделать.

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

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

Интервьюеры должны больше интересоваться вашим мыслительным процессом, чем вашими техническими навыками.

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

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

Демонстрация и объяснение нескольких подходов показывает, что вы потратили время на изучение проекта, не стреляли с ходу и уделяли внимание и внимание даже самой незначительной работе, которую вы выполняете.

Это невозможно переоценить — как менеджер по найму я хочу, чтобы кандидаты знали то, чего они не знают, и могли учиться. И как кандидат, я хочу работу, где лишняя миля будет признана и будет что-то значить. Особое внимание, предоставление дополнительной информации и образцов кода показывает, что компания хочет видеть именно такого кандидата, которым вы являетесь, И дает вам возможность почувствовать, какой компанией они хотят быть.

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

Как странно, что два нижних ответа (на момент написания этой статьи), на мой взгляд, самые полезные.

Здесь немного другой фон, но, надеюсь, что-то совпадает с вашей ситуацией. Тип теста, который мы даем кандидатам, несложный, но вы также вряд ли найдете ответ в Интернете, поскольку для получения определенного числа требуется определенная серия вычислений. Получить правильный ответ — это здорово, но настоящая проблема — продемонстрировать, что вы можете применять передовой опыт (на языке по вашему выбору). С точки зрения кода нет правильного ответа. У нас есть определенные общие ожидания, но мы также прекрасно понимаем, что есть разработчики лучше нас.

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

Вещи, которые мы хотели бы видеть:

  • правильное понимание проблемы и простое ее решение,
  • тесты (системные, модульные, даже ручные тесты лучше, чем ничего),
  • Комментарии,
  • согласованные соглашения о кодировании (именование, отступы, фигурные скобки),
  • создание настраиваемых значений вместо жесткого кодирования,
  • нет неиспользованного кода,
  • проверка входных данных,
  • полезная обработка ошибок,
  • минимальное повторение,
  • инкапсуляция и другие приятные вещи ООП (но только тогда, когда они действительно полезны в данной ситуации).

Бонусы:

  • Документация,
  • Пользовательский интерфейс (а также командная строка),
  • поддержка отладки,
  • подробный вывод за пределами конкретного запрошенного значения.

У некоторых крупных организаций есть технические проблемы, которые заключаются не только в том, чтобы получить работу бесплатно. Я знаю, что компания Sky из Великобритании поставила перед разработчиками задачу (как я прошел через их процесс).

Обычно, однако, есть крайний срок (хотя и свободный). Меня попросили разместить код на github, затем они проверили код, и на собеседовании эта работа была подробно рассмотрена. Задача заняла около 8 часов или около того (но это было в основном потому, что я добавил навороты, чтобы хорошо выглядеть).

Все, начиная от названия, структуры проекта и заканчивая комментариями к регистрации и дополнительными вещами (пользовательский интерфейс и т. д.), было прокомментировано.

Вы должны подумать: «Почему они заставляют меня это делать?». Это может быть 2-битная компания, которая хочет работать бесплатно, но это также может быть компания, которая хочет увидеть, как вы подходите к проблеме и как вы выполняете свою работу.

Вы должны убедиться, что отправляете код, который вас устраивает (поэтому вам нужно понимание) и отражает то, как вы работаете. Когда вы отправляете код, добавляйте комментарии, даже отправьте краткое объяснение вашего подхода и почему вы сделали это, используя X вместо Y. Это хороший способ (для вас) продемонстрировать знания, не находясь под давлением собеседования, поэтому вы следует расценивать это как положительное.