Как должен выглядеть мой «пример кода»? [закрыто]

24

Я только что провел довольно хорошее телефонное интервью (для должности, связанной с CakePHP, не то, чтобы это было особенно важно для вопроса). Интервьюер, казалось, был впечатлен моим резюме и личностью. Однако в конце он попросил меня прислать ему по электронной почте пример кода из моего существующего рабочего проекта: «Чтобы убедиться, что вы не тайный ужасный программист, ха-ха!»

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

Все идеи или предложения приветствуются!

thesunneversets
источник
2
Были ли какие-либо требования к образцу кода для отправки? Кажется довольно бессмысленным, любой может скопировать / вставить красивый код из Интернета. Если они не пытаются отсеять людей, которые даже не могут сделать это правильно ...
FrustratedWithFormsDesigner
5
Просто для удовольствия, вы можете отправить Perl-скрипт в форме его / ее имени ...;)
FrustratedWithFormsDesigner
2
@thesunneversets: Так что я думаю, что абсолютно великолепный исходный код из ваших личных проектов вышел ...;) Серьезно, это можно легко подделать. И согласен ли ваш нынешний работодатель с предоставлением вам типичного образца вашего исходного кода? Это нормально, если какой -то код был написан коллегой (возможно, файл перешёл туда-сюда между несколькими людьми с течением времени)?
FrustratedWithFormsDesigner
2
Этические последствия немного волнуют ... но только немного. Я не думаю, что попал в ловушку промышленного шпионажа. Что касается коллег, увы, только два человека когда-либо получили в свои руки эту кодовую базу, и код другого парня был большим беспорядком, так что я в значительной степени сам по себе! :)
thesunneversets
4
@thesunneversets, предоставление кода ваших работодателей не просто неэтично, во многих местах это незаконно. Не делай этого.
HLGEM

Ответы:

17

Я хотел бы увидеть чистый код :

Чистый код : программный код, который отформатирован правильно и организованно, чтобы другой кодировщик мог легко его прочитать или изменить.

Это означает:

  • Функциональность - некоторые простые функциональные возможности, которые нетривиальны (группа получателей / установщиков не показала бы, что вы что-то знаете)
  • Последовательный, чистый стиль - популярные или, по крайней мере, распространенные стили корпусов, отступов, интервалов и скобок
  • Хорошее наименование - качественные имена - не используйте, iесли это не единственное значение приращения. Не используйте бессмысленные имена переменных.
  • Другие атрибуты чистого кода. Хорошие методы проверки ошибок, условий, циклов, удобных методов или служебных методов, а также хорошее разделение проблем (между методами). И это хорошее время для 100% СУХОГО - без повторений!

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

Некоторые из приведенных выше комментариев, похоже, касаются того, насколько легко это можно подделать. * Если вы хотите защититься от этого, возможно, отправьте краткое описание цели и историю кода в электронном письме.


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

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

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

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

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

И наконец:

  • Решать их стоит просто ради удовольствия, и это хорошая практика.
как зовут
источник
Это отличное решение. Я собираюсь сделать это. Были ли какие-то конкретные вопросы, которые вам понравились больше всего?
zkent
1
Как комментарий от меня, я думаю, что иметь образец кода из одного файла не обязательно хорошая идея, если вы не претендуете на должность для оптимизации кода или алгоритмов. Код, конечно, не должен быть огромным, но он должен в некоторой степени представлять то, что вы на самом деле можете выполнить (например, если вы можете написать хороший ОО-код и разумно разделить код на модули, это должно продемонстрировать это).
15:00
6
  • Он должен компилировать / интерпретировать ошибки и предупреждения на самом высоком уровне строгости.
  • Это не должен быть стандартный код, который вы пишете каждый день. Сделайте его уникальным и интересным, чтобы было очевидно, что вы его не копировали / вставляли.
  • В нем должны быть интересные дизайнерские решения с комментариями, объясняющими, как / почему вы их сделали.
  • Цель не более 2-3 страниц распечатаны.
  • Это должно быть на том языке, на который вы претендуете.
  • Мой мозг не должен болеть, когда я читаю его в первый раз. Попросите друга просмотреть его или опубликовать на codereview.
Карл Билефельдт
источник
3

Ну, если бы я брал у тебя интервью, я бы хотел увидеть твой код.

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

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

Просто доверься себе и своим способностям кодирования . Если вы действительно не знаете своего интервьюера, вы не можете предвидеть, что он ожидает от вашего стиля / навыков кодирования.

Мачадо
источник
10
Мне нравится, что вы не думаете, что ботаники могут танцевать, но вы уверены в их сексуальном мастерстве! : D
thesunneversets
Нет, я только что видел слишком много бедствий сам ... :)
Мачадо
В моей школе единственными людьми, которые приходят на уроки танцев / бальные танцы, являются инженерные специальности.
Ева
Чтобы быть более точным, вы должны заменить секс на какую-нибудь игровую ссылку :)
zkent
2

Также будьте очень осторожны, так как это НЕ код вашего нынешнего работодателя (им он принадлежит, а вам, я гарантирую, он вам не понравится). Возьмите то, чем вы гордитесь, и переделайте это самостоятельно, чтобы не привязываться к работодателю (избавьтесь от любых ссылок на их таблицы базы данных или имена серверов и т. Д.). Что бы вы ни делали, вы не отправляете код с ошибками или плохой техникой для того типа кода, который есть (возможно, я бы отверг кого-то, кто отправил курсор, когда операция на основе набора будет проще и лучше при просмотре кода SQL). Существуют аналогичные методы для других языков, которые существуют для решения одной относительно редкой проблемы, которую можно использовать для решения других, более распространенных проблем, но которые не являются лучшим выбором для этих других проблем. Имеет ли это предложение смысл?)

HLGEM
источник
Я согласен, полностью переработать его, чтобы он больше не содержал никакой информации о работодателе, кажется хорошей идеей. Этика важна - спасибо за совет!
thesunneversets
0

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

Крис Найт
источник
0

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

  1. Идентичность : вкус кода. Если вы выставляете себя как UI / HCI-кодировщик, я хочу увидеть, как что-то визуально выглядит при запуске. Если вы разработчик БД, я хочу увидеть что-то интересное с представлением или анализом данных. Образец должен быть чем-то, чем вы гордитесь . Если у вас нет хотя бы одного из них, у вас нет личности.
  2. Зрелость : Вы меняете стратегии для разных проблем? Вы решаете интересные проблемы? Будет ли код или подход легко распространяться на аналогичную проблему? Наоборот, я чувствую, что я смотрю на члена коммуны грузового культа?
  3. Коммуникация : легко ли код объясняет, что он делает и почему? Это не означает, что код должен быть простым. На самом деле, это бонус для того, чтобы сделать сложный код легким для понимания.

Низкоуровневые аспекты проще:

  1. Стиль : код должен быть чистым, последовательным (следует некоторым установленным рекомендациям) и хорошо документированным.
  2. Упаковка : должно быть как минимум краткое readme, работоспособная версия и работоспособные тесты. В файле readme должно быть указано, как запустить последние два, а также почему вы демонстрируете этот конкретный пример кода.
  3. Язык (и) : Обычно я спрашиваю у кого-нибудь образец языка на должность, а также тот, на котором он чувствует себя сильнее всего. Дает хорошее представление о текущих потолках человека.

Для хорошего кандидата я ожидаю, что образец будет либо: A) Пуленепробиваемый маленький образец, либо B) Хорошая часть более крупного интересного проекта (например, модуль из личного репозитория Github). Я ожидаю, что это будут личные проекты или академические проекты. Если они отправят один из платного проекта, я ожидаю, что им будет дано разрешение на его использование. Если я не получу эту записку, я буду вырезать их из кандидатов (слабый кандидат) или спросить их об этом во время собеседования (сильный кандидат). Отсутствие разрешения будет большим красным флагом (вероятно, непреодолимым). Для продвинутого кандидата я ожидаю отказа от ответственности, отмечая, что некоторые из их лучших исходных образцов не могут быть показаны, потому что это было сделано как часть их работы. Тем не менее, я ожидаю мимолетного свидетельства о том, почему они гордятся этим невероятным дизайном и как они любят его, как ребенка.

Наконец, хотя некоторые люди упрекают, что «О, кто-то может просто получить пример кода из Интернета», контраргумент в том, что большинство людей, которые не понимают хорошего кода производственного качества, также не понимают его, когда видят его , Кроме того, всегда можно Google отличительную черту для кода, чтобы проверить. Кроме того, в лучшем случае кража кода приведет кандидата на собеседование, где они смущаются («Так почему же вы так поступили ...?»).

Как последнее примечание по коду от предыдущей работы: просто не надо. С точки зрения HR, запрос кода от предыдущей работы неуместен и красный знак о компании. Вы оба несете юридическую ответственность (то есть на вас обоих могут подать иск), и это показывает, что они понятия не имеют, что они делают. Код, сделанный для предыдущего работодателя, никогда не должен предоставляться, если код уже общедоступен или у вас нет явного разрешения от этого работодателя. Хуже того, в большой компании ваш непосредственный начальник может не иметь полномочий давать вам разрешение, так что в таком случае повеселитесь с юридическим отделом? Я уверен, что они будут очень рады выставить свой IP для бывшего сотрудника.

Namey
источник
Также отмечу, что в полном раскрытии я предоставил образец кода в лабораторию аспирантуры, где меня приняли в качестве кандидата наук. Этот пример кода был полным кодом для автономного робота (5-10 тыс. Строк), с выделенными тремя конкретными файлами. Документация была респектабельной, но не нетронутой. Если бы мне пришлось делать это снова, я бы, вероятно, не принесла бы печатную версию кода на собеседование на месте (могла бы принести 100 страниц с надписью «ROOKIE MISTAKE» большими буквами). Я получил полную стипендию, так что это было не так уж и сложно. Мораль: слишком много> = слишком мало.
Namey