Для того, чтобы проверить навыки кандидата, на собеседовании ему часто дают тестовое задание (домой или прямо в офисе). Есть и другие варианты, когда, например, человека берут с собой на сессию парного программирования или же проводят устное собеседование, без какого-либо написания кода. Разве что попросят нацарапать пару блок-схем а-ля «схематическое решение».
Тестовое задание и трёп — две крайности, у каждой из которых есть свои преимущества и недостатки. Задание требует времени и усилий, чем может отпугнуть в меру ленивого кандидата (или того, который ценит свое время), тогда как трёп позволяет в лучшем случае составить общее представление о кандидате и понадеяться, что код он пишет не хуже, чем об этом говорит.
Покажите, пожалуйста, ваш код
Чтобы не впадать в эти две крайности, был придуман срединный вариант — «Пришлите ссылку на github» или «Покажите нам свой код, который вы уже когда-то написали». Или же, как мне сказали в одной французской конторе: «Show us the code which you are particularly proud of» — работодатель, вероятно, хотел не только посмотреть на «сливки», но и убедиться в том, что ты кодер от бога, у тебя есть любимые куски кода, которые ты бережно хранишь и смотришь на них, когда всё плохо.
Это честный вариант — ты не тратишь время на высосанные из пальца тестовые задания, да и твою репутацию не подвергают сомнениям. В этом ключе можно понять опытных и уверенных в своих силах разработчиков, которые игнорят те предложения о работе, где требуется выполнить тестовое задание или решить пару идиотских головоломок, которые не имеют ничего общего ни с работой, ни даже с жизнью. Но и у этого способа проверить квалификацию кандидата есть свои минусы.
Во-первых, не у каждого разработчика хранится код, который, к тому же, не стыдно показать. Даже не у всех есть Github. Во-вторых, не всегда по куску кода можно понять уровень разработчика — вдруг ему кто-нибудь помогал? Что если он потратил на написание вагон времени? В-третьих, вполне может быть, что человек соблюдает work-life balance и работает только в рабочее время, а в остальное занимается вещами, не связанными с написанием кода (допустим, если для него кодинг — не хобби). Что ему показывать?
Нарушьте, пожалуйста, NDA
Если домашнего кода нет, остается одно — показать тот, над которым трудился (или трудишься) на работе. Часто это значит нарушить соглашение о неразглашении (aka NDA), которое нередко действует ещё
Таким поведением они не только подталкивают человека к нарушению договора (пускай и гипотетически), но и могут подставить третьих лиц. Был у меня случай, когда бывший сотрудник после увольнения «спохватился» и попросил переслать ему кусок написанного им контроллера. На вопрос «зачем» ответил, что ему нужно показать его для трудоустройства. Выходит, если я пересылаю ему этот код, то отвечаем уже мы оба: я — как действующий сотрудник, он — как бывший, но не дождавшийся истечения срока действия NDA.
Стоит ли игра свеч? Или есть смысл попридержать перо, да не подписывать NDA, как это, например, делает разработчик и CEO Маркус Пави, объясняяэто тем, что:
Historically, ideas haven’t counted for much in the grand scheme of things, it is execution that matters. [...] Most NDAs in are harmful to my business and most importantly bad for my clients.
Тем самым намекает, что ничего страшного не случится, если поделиться с кем-то всего лишь идеей. При этом лишняя бюрократия наверняка усложнит жизнь обеим сторонам.
Ущербность большинства NDA
Во-первых, нужно хорошо постараться, чтобы доказать, что была разглашена именно коммерческая тайна. Например, есть нюансы, связанные с тем, что не каждый тип информации можно считать конфиденциальным. Да и подобная информация должна иметь «защиту от дурака» — чтоб какая-нибудь уборщица не могла прийти с флешкой и выкачать её. В противном случае это как бы и не коммерческая тайна.
Во-вторых, в NDA порой указываются практически невыполнимые вещи вроде «не использовать полученные на проекте знания на проектах других компаний в течении пяти последующих лет» или «не рассказывать о проекте третьим лицам». Вы там атомную бомбу изобретаете, или очередную «уникальную» соцсеть для питомцев?
Да и что такого ужасного случится, если конкуренты увидят один класс из вашего проекта? Придумают бизнес-план, привлекут инвестора, допишут остальные 99% проекта, запустят кампанию по продвижению и поднимут невиданную прибыль? Вряд ли. (Если же им это удастся, то дайте им денег! Хоть кто-то у нас умеет работать).
Что касается кражи идей, то Facebook не был первой соцсетью, как и Windows не был первой операционной системой. Едва ли не весь путь Apple и Microsoft — история взаимного воровства, от которой выиграл конечный потребитель. В конце концов, и многие разработчики — бессовестные воры, которые «крадут» решения из книг, бложиков и форумцов. Только это называется обмен знаниями, чему как раз и противоречат принципы NDA.
Одной идеи для создания чего-либо — мало. Один «засвеченный» при трудоустройстве файл — ничто. Поэтому есть смысл если не полностью отказаться от соглашений о неразглашении, то хотя бы предельно ограничить сферу их применения, оставив пространство на случай нужды продемонстрировать свой код.
В конце концов, если я написал кусок кода, то хочу иметь право показывать его кому угодно. В этом есть своя доля радости для разработчика. Если же код своруют (используют в своём проекте), то пусть за это отвечают они, а не я. Тем более, что теоретически всегда можно попытаться выкрутиться, представив код в виде текстового файла, который как бы и не является кодом, пока не работает в проекте.
Что делать работодателю и HR’ам
Предлагайте кандидатам больше вариантов. Не хотите показывать код? Держите тестовое задание. Не хотите заданий? Приезжайте к нам сделать code-review или поработать в паре с нашим разработчиком. Не хотите никуда ехать? Давайте по Skype. Тошнит от кода? Вот-с логические задачки.
Если человек отказывает вам на основании того, что подписал NDA, то наоборот заслуживает большего уважения, так как соблюдает соглашения. Значит, наверное, и работая на вас он будет вести себя так же корректно.
Поэтому остаётся молиться, чтобы NDA канул в небытие, как условность-атавизм, ограничивающий свободу выражения личности. И держим курс на Элона Маска, который щедропожертвовал в open-sourceвсе патенты Tesla Motors. Пусть будут публичными не только хорошие идеи, но и код, который не стыдно показать. Ведь всё равно никто с ним, скорее всего, ничего толкового не сделает (как это обычно бывает с «идеями на миллион»). Why so serious?