Я новичок в профессиональной разработке программного обеспечения для компании. У меня было собеседование, и оно прошло хорошо. Они отправили мне по электронной почте техническую задачу с несколькими различными частями. Они сказали, что ограничений по времени нет, это открытая книга, и я могу пользоваться Интернетом. У меня есть склонность слишком много думать, и мне было интересно, теоретически это означает, что я могу узнать все, чего не знаю, чтобы я мог полностью и правильно отвечать на вопросы. Правильно ли я смотрю на это?
Один из вопросов заключался в реализации адаптивной горизонтальной панели навигации для веб-сайта. Я не могу сделать это, не консультируясь со ссылками. Но нетрудно найти полностью проработанные примеры и их исходный код в Интернете. Я бы подумал о том, чтобы просто скопировать их с помощью читерства, но действительно ли это имеет значение, если я пойму их, а затем скопирую код? Очевидно, что я бы не стал заставлять кого-то делать это за меня и использовал бы только существующие примеры на веб-сайтах, таких как W3Schools.
Если бы я дал разработчику такую задачу, как «Создать отзывчивую горизонтальную панель навигации», я был бы очень разочарован, если бы они потратили часы на ее создание с нуля, когда уже существует так много жизнеспособных и правильных решений. У вас нет времени в реальном мире каждый раз создавать идеальное решение,
Это, естественно, потребует довольно агрессивного поиска в Интернете и адаптации полных решений. Полная копия/вставка редко работает в реальном мире, даже если это хорошее начало.
«Нет ограничений по времени» может быть даже намеком на форму: «это займет у вас очень много времени, если вы будете создавать что-то с нуля, и всего несколько минут, если вы используете StackOverflow».
Если вам разрешено пользоваться Интернетом, вы также должны копировать и вставлять данные из существующих интернет-источников. На самом деле, хорошо обученный инженер-программист — это еще и тот, кто может читать чужой исходный код и модифицировать его для собственного использования. Только неопытные инженеры будут начинать с нуля, когда есть хорошая существующая альтернатива.
Очевидно, проблема в том, как бы вы работали, если бы вас наняли. Будьте умны, будьте эффективны, модифицируйте существующее решение, но платите атрибуцию и смотрите на лицензию (GPL?).
Если компания, проводящая тест, не имеет ни малейшего представления, а после этого вас вызовут на другое собеседование, вам будут заданы подробные вопросы о вашей работе и, вполне возможно, о внесении в нее изменений.
Так что да, вы можете и, вероятно, должны использовать источники в Интернете, просто убедитесь, что вы понимаете, как это работает (например, можете объяснить каждую строку, если это необходимо) и что атрибуция/лицензирование в порядке.
Как ваш менеджер по найму, я, естественно, хочу оценить ваши навыки, в том числе вашу способность повторно использовать существующие решения, а также вашу способность думать на лету и учиться. Мне не нужны сотрудники, которые спешат уложиться в срок, но дают мне результат низкого качества, и, с другой стороны, мне не нужны сотрудники, которые делают потрясающие вещи, но делают это вечно. Мне нужно качество конечного пользователя и соблюдение разумных сроков, и это один из способов проверить, соответствуете ли вы обоим критериям. Если вы представляете хорошее решение в разумные сроки, независимо от метода, то вы представляете соотношение цены и качества как сотрудник.
Здесь верна старая пословица: « Быстро, дешево или хорошо — выберите два ». Они хотят знать, кто из вас двоих.
Если бы я был на вашем месте, я бы попытался перестать думать об этом и не стеснялся использовать любые ресурсы сообщества и фрагменты кода. Это то, что происходит с настоящими разработчиками на реальных работах, и тот факт, что это собеседование, не должен влиять на вашу методологию. Пока вы понимаете код, решение работает, и вы не делаете ничего неуместного, незаконного или аморального, лично я не вижу проблемы.
Что касается того, что является неуместным, незаконным или аморальным, отрасль, в которой вы подаете заявку, может иметь правила безопасности или этики, которые запрещают использование определенных типов кода. Демонстрация знаний об этих ограничениях и осознание морали использования общедоступных фрагментов кода только покажет вашему менеджеру по найму, какой вы вдумчивый и внимательный разработчик.
Всякий раз, когда меня просят пройти тест по техническому кодированию, я всегда ищу ответы в Интернете и читаю три или четыре примера. Затем я игнорирую все, что они делали, и пишу по-своему. Позвольте мне более подробно остановиться на том, почему это необходимо.
Большинство ответов, которые вы найдете в Интернете, будут только технически правильными.
Например, если у вас есть вопрос о том, как сделать X, скорее всего, есть несколько способов сделать это независимо от того, какой язык или фреймворки вы используете. Некоторые из них будут масштабируемыми, некоторые нет. Некоторые будут использовать методы, которые справедливо осуждаются (Eval!), а некоторые нет. Некоторые из них устареют для современных языков программирования, а некоторые — нет.
Большинство ответов НЕ будут работать в реальной ситуации. Это быстрые решения? Да, но они обычно быстрые по какой-то причине.
Имея более одного способа сделать что-то, у вас есть шанс продемонстрировать мастерство, а не просто понимание.
Это ваш шанс продемонстрировать конкретный опыт, который вы привносите, продемонстрировав, что вы понимаете различные подходы и когда какой из них использовать. Например, иногда я буду предоставлять ДВА разных решения с объяснением того, какое решение подходит для какой ситуации.
«Вы не сказали, предназначен ли этот код для повторного использования, я обычно предполагаю возможность повторного использования, но быстрый пример здесь. Однако, если бы я ожидал повторного использования этого кода, я бы структурировал его как так."
Если вы можете найти решение в Google, ожидайте, что интервьюер сможет это сделать.
Я знаю, что в прошлом, когда я просматривал образцы кода, представленные потенциальными сотрудниками, я помещал части их кода в Google, чтобы увидеть, не скопировали ли они его откуда-то. Обычно, если код представлен таким образом, без объяснений, я сразу отклоняю кандидата. Если они дают объяснения, хорошо на них.
Важно — если вы используете любой другой скопированный код или если вы используете фреймворк — объяснить, почему вы выбрали то, что вы сделали, а не просто включить их напрямую. В противном случае интервьюируемый просто решит, что вы гуглили, что было лучше, и не понимает нюансов того, что вы выбрали.
Интервьюеры должны больше интересоваться вашим мыслительным процессом, чем вашими техническими навыками.
Откровенно говоря, в наши дни каждый может нагуглить достаточно кода и с низким уровнем навыков собрать что-нибудь вместе. Действительно хорошие технические тесты потребуют от вас отправки истории репозитория вместе с вашим представлением, чтобы убедиться, что они могут следовать тому, как вы его разработали. Это гораздо сложнее подделать, и это дает гораздо лучшее представление о том, как кандидат пришел к решениям, к которым он пришел.
Копирование чужого кода не дает им никаких оснований нанимать именно вас, а не кого-то еще, и не позволяет понять, как работает ваш мозг и хорошо ли вы сочетаетесь с их существующей командой и корпоративной культурой.
Демонстрация и объяснение нескольких подходов показывает, что вы потратили время на изучение проекта, не стреляли с ходу и уделяли внимание и внимание даже самой незначительной работе, которую вы выполняете.
Это невозможно переоценить — как менеджер по найму я хочу, чтобы кандидаты знали то, чего они не знают, и могли учиться. И как кандидат, я хочу работу, где лишняя миля будет признана и будет что-то значить. Особое внимание, предоставление дополнительной информации и образцов кода показывает, что компания хочет видеть именно такого кандидата, которым вы являетесь, И дает вам возможность почувствовать, какой компанией они хотят быть.
Хотя копирование и вставка может быть быстрым решением - компании, которые принимают кандидатов, которые просто могут быстро и легко копировать и пропускать ответы на технические тесты, будут иметь гораздо более бедного базового программиста, чем компании, которые их отвергают, и, вероятно, не место вы собираетесь хотеть работать в течение очень долгого времени.
Здесь немного другой фон, но, надеюсь, что-то совпадает с вашей ситуацией. Тип теста, который мы даем кандидатам, несложный, но вы также вряд ли найдете ответ в Интернете, поскольку для получения определенного числа требуется определенная серия вычислений. Получить правильный ответ — это здорово, но настоящая проблема — продемонстрировать, что вы можете применять передовой опыт (на языке по вашему выбору). С точки зрения кода нет правильного ответа. У нас есть определенные общие ожидания, но мы также прекрасно понимаем, что есть разработчики лучше нас.
Все наши кандидаты умеют программировать, но не все предоставляют код, демонстрирующий серьезное отношение к приложению и предполагающий необходимость работы с командой разработчиков и тестировщиков или выполнение их кода конечными пользователями.
Вещи, которые мы хотели бы видеть:
Бонусы:
У некоторых крупных организаций есть технические проблемы, которые заключаются не только в том, чтобы получить работу бесплатно. Я знаю, что компания Sky из Великобритании поставила перед разработчиками задачу (как я прошел через их процесс).
Обычно, однако, есть крайний срок (хотя и свободный). Меня попросили разместить код на github, затем они проверили код, и на собеседовании эта работа была подробно рассмотрена. Задача заняла около 8 часов или около того (но это было в основном потому, что я добавил навороты, чтобы хорошо выглядеть).
Все, начиная от названия, структуры проекта и заканчивая комментариями к регистрации и дополнительными вещами (пользовательский интерфейс и т. д.), было прокомментировано.
Вы должны подумать: «Почему они заставляют меня это делать?». Это может быть 2-битная компания, которая хочет работать бесплатно, но это также может быть компания, которая хочет увидеть, как вы подходите к проблеме и как вы выполняете свою работу.
Вы должны убедиться, что отправляете код, который вас устраивает (поэтому вам нужно понимание) и отражает то, как вы работаете. Когда вы отправляете код, добавляйте комментарии, даже отправьте краткое объяснение вашего подхода и почему вы сделали это, используя X вместо Y. Это хороший способ (для вас) продемонстрировать знания, не находясь под давлением собеседования, поэтому вы следует расценивать это как положительное.
ХорусКол
Нил Слейтер
Пьер Арло
Иво Недев
ХорусКол
Лейманкс
Бен Ааронсон
TripeHound
длб
Макоттл
А. Дж. Фарадей
Джаспер
пользователь2023861
ХорусКол
пользователь2023861
Лоран
Омегакрон
ХорусКол