Я бы еще включил специализированное ПО, используемое специалистами по безопасности: например от команды Bugtraq (Bugtroid, Black Widow), Kali Linux от Offensive Security. Последний достаточно популярен на западе, на секьюрити конференциях можно зачастую его увидеть.
Еще есть интересные блоги, как например этот: Cатсн²² (in)sесuяitу К сожалению, сейчас я особо не слежу за этой областью, так что отписался от многих.
Еще важна форма ответа. По себе знаю, что нормальные интервьюверы прекрасно понимают что люди меняют работу, потому что их что-то не устраивает, и они не поставят крест, если кандидат скажет, что на предыдущем месте работы все плохо. Однако форма ответа важна. К сожалению, русский язык накладывает свой отпечаток на построение фраз и то, что мы думаем является нормальным ответом, для них звучит очень грубо. То же самое касается акцента — он также звучит весьма грубо. Так что когда они слышат неправильно построенные фразы, да еще и с акцентом, да и еще и про то, что на предыдущей работе все было плохо, они просто думают — да ну его, с таким связываться.
К сожалению, трудно что-то посоветовать в этой области, кроме того, чтобы пожить в англоязычной стране и активно практиковать английский. Так что согласен с автором — надо просто быть готовым к таким вопросам. Можно легко нагуглить возможные универсальные варианты ответов, но лично мне они особо не нравятся и я еще думаю, что бы ответил (потому что сам тоже подумываю о поиске новой работы). Пока остановился на «My current company organization process is a little bit disorganized, and being a perfectionist I'm slightly discouraged to develop a code in a form of workarounds and last minute patches.»
Код-то небольшой, но автор статьи ожидает, что кандидаты найдут все ошибки без каких-либо подсказок. Я бы все-таки сгруппировал задачи и использовал несколько примеров.
Простой вопрос — сколько ошибок в строчке «printf(»%s", str);"? Формально это нормальный код, но в разном контексте он может содержать кучу ошибок — NULL указатель (что может быть как валидно, так и не валидно, glibc может печатать "(null)" в качестве вывода), есть ли терминальный нуль, указывает ли на доступную область памяти, работа с юникодом, экспейпинг вывода если печатает в HTML. Многое зависит от контекста, и зачастую вопрос «найди мне все что тут неправильно» просто некорректен, особенно если интервью сильно ограничено по времени.
Я практически стопроцентно уверен, что провалил бы такое интервью, и все с кем я это обсуждал думают так же. Когда большой опыт за плечами ищещь подвох в любой строчке кода (особенно, когда знаешь какие сюрпризы могут подносить стандартные библиотеки, помню неприятный опыт с ошибками в .NET библиотеке), и это сказывается на скорости анализа.
Или даже пример из статьи. Что, если лог потом просматривается через веб-сайт и пишется в HTML как есть? Тогда например, я смогу себе сделать App.CurrentUser.Name, которое будет содержать XSS (если это возможно в программе). Слишком много нюансов, для 20-ти минут — это явный перебор.
Советую посмотреть на другие области. Перфекционизм нужен, просто на фоне ширпотребных продуктов вокруг тяжело заметить его надобность. Просто приведу пример, Arista Networks vs Cisco. Казалось бы последняя компания контролирует большую часть сетевого оборудования на рынке и тягаться с ними бесполезно. Но в Arista основатели покинули Cisco и организовали этот стартап, потому что они перфекционисты. Они поставили перед собой цель сделать максимально быстрые маршрутизаторы на рынке (и в этом достаточно хорошо преуспевают). И им нужны знания алгоритмов, вычисления O и разработка новых алгоритмов, потому что несмотря на существование RIP и BGP, и других протоколов распределения трафика, расчет Spanning Tree и транспортные задачи могут решаться разными способами, особенно если решать их на уровне ASIC.
Надо что-то менять, это однозначно, но это не означает менять шило на мыло. Посмотрите на тренды, области, которые вас интересуют, рынки альтернативных платформ (смартфоны, железячные и гибридные решения, adruino и т.п.). Или просто возможно стоит взять перерыв в работе, и собраться с мыслями на курортах Карибского моря. Признаться честно, у меня самого такого рода проблемы, поэтому я сейчас ищу работу получше и интереснее, и попутно занимаюсь разработкой мобильных приложений (вначале для самого себя, а потом возможно и что-то выпущу).
Слишком большой код, собеседование — это всегда стресс, и давать только 20 минут на то, чтобы найти все ошибки в одном большом фрагменте (надо понять, что он делает и что он должен делать — это может быть большая разница, просмотреть синтаксические, логические и архитектурные ошибки) просто несправедливо. Кадидат может быть очень талантлив, но при это быть немного медленным в разностороннем анализе. Я бы лучше предложит несколько задач, содержащие разные типы ошибок, тогда будет проще сконцентроваться (найдите все синтаксические ошибки в этом фрагменте, какие test-case-ы были пропущены для другого фрагмента, какие входные данные могут создать проблемы в третьем фрагменте и т.п.)
Поддерживаю автора, но обычно я давал такие задания кандидатам на дом, неделя максимум, потом собеседовал по написанному коду. Очень помогает отсеивать некомпетентных разработчиков. Единственное, я немного не согласен с тем, что надо давать большое приложение — у многих уже есть работа, а если еще есть дети или другие интересы, очень сложно выкроить время. На Западе на это вообще смотрят очень категорично, и отказываются делать задание, если оно в сумме отнимет много времени на разработку. Так что для себя я выбрал критерий — если я смог бы это сделать менее чем за 8 часов, тогда можно давать — сутки кандидат сможет выкроить.
Еще бы я добавил в задание немного методологических нюансов, как например, потребовать чтобы кандидат залил свой проект на DVCS-хостинг (github, bitbucket etc), и чтобы было покрытие юнит-тестами (не обязательно 100%, но как минимум backend-функционал). Если это библиотека, можно потребовать автогенерируемую документацию. Т.е. посмотреть, насколько качественно умеет кандидат делать приложения, не только внутренний код, но и другие вещи, являющиеся атрибутами хорошо разработанного продукта.
Потому что могут происходить разные вычеты — налог зависит от зарплаты, оплата стоянки или общественного транспорта, вычет для ESPP (акции), RRSP (пенсия) и т.п. Например, у нас зарплата варьируется в течение года — в начале они вычитают больше для уплаты налогов по акциям (если ты участвуешь в ESPP), а к концу-середине года зарплата опять стабилизируется. Налоговую декларацию тоже надо самому заполнять и отправлять каждый год. Короче, головняка тоже хватает, это какая-то фишка Северной Америки — все финансы сделать как можно запутанней под предлогом, что правительство о тебе заботится, и может сделать возврат после уплаты налогов. По мне нервы дороже.
Рекрутинговые компании есть везде, и это вполне нормально взаимодействовать с ними. Обычно не надо ничего им платить, они просто добавляют вас в базу, и ищут работу. Дальше уже в зависимости от договора — либо работодатель им платит фиксированную сумму, когда вас примут на работу, либо идут какие-то отчисления в течение года после устройства на работу.
Думаю, я был бы осторожен, если бы они просили какие-то деньги за услуги с меня заранее, и наверное просто отказался бы и нашел другое. Я работал только с одним агенством и ничего им не платил. Но в целом их эффективность не особо высокая — они используют те же самые БД в Интернете, которые может найти в гугле. Единственное — они могут помочь какими-то советами, например, только они смогли мне внятно объяснить, почему зарплаты в объявлениях указываются до налогов.
Хорошие админы и сетевики тоже на вес золота, но у них ситуация неоднозначная — некоторые говорят, что найти работу просто, другие — что наоборот. Думаю, хорошая квалификация и предварительная подготовка пригодится для любой профессии, но к сожалению, достоверных сведений про рынок труда у меня нет. Скажу только, что у меня есть один знакомый админ, и он постоянно сидит на контрактах. Что в принципе, не так уж и плохо, учитывая, что платят больше чем при постоянке, однако нет никаких социальных льгот (страховка и больничные только за свой счет, отпуска — только если отпустят и опять-таки за свой счет), и контракт могут разорвать только потому, что директор встал не с той ноги. Однако в целом, все не так плохо — хорошие специалисты ценятся везде.
Мне хотелось жить в Канаде, и я тут живу. До этого я удаленно работал 2 года — тоска смертная, хотелось живого человеческого общения. Так что пока работаю в офисе, но думаю, что уже скоро буду опять менять работу, чтобы иметь более свободный выбор между удаленной и офисной работой (менее консервативные компании в отличие от моей текущей, позволяют так делать, как раз сейчас в процессе собеседования с ними).
Что касается фриланса — чтобы более или менее комфортно себя ощущать, в Северной Америке надо где-то получать от 4-5 тыс. долларов в месяц. Фриланс это покрывает с трудом, приходится все-равно либо быть контрактником, либо наниматься, либо иметь свой бизнес. Но соглашусь, что есть хорошие контракты на удаленную работу, знаю весьма хорошие примеры. Мой знакомый работал удаленно по контракту с Oracle, и получал больше 5 тыс. долларов на руки живя в России-не-Москве.
Добавил ссылки, спасибо. Для меня наиболее продуктивным был сайт T-Net British Columbia (http://www.bctechnology.com/), но он узкоспециализированный для одного географического положения. В целом приходится изрядно стараться, зачастую лучше просто искать компании в регионе, и заходить на их сайты, смотреть Career/Job Positions.
Некоторые компании обеспечивают расходы по переезду и обеспечивают жильем на первое время. Но надо сильно постараться, чтобы их заинтересовать. В целом, с финансовой точки зрения компания не так уж сильно теряет (например, по канадским законам идет возврат части денег потраченных на переезд, это касается и физических лиц), просто это все-равно некоторый головняк.
Лично я не соглашался на средний вариант, но у меня был некоторый запас денег и подработки. Все зависит от ситуации. Но надо быть морально готовым к тому, что придется потратить несколько месяцев на поиск подходящей работы (я потратил 4 месяца).
Категорически обязательно. Обычно в объявлениях указывают какие технологии надо знать, поэтому лучше их упомянуть в резюме (но не врать, как это любят делать индусы, и указывать только то, что реально знаешь и использовал). Также иногда указывают знания каких-то методологий, типа Agile, Continuous Integration, Unit-testing и т.п., так что если вы в своей работе что-то такое использовали, лучше это тоже указать.
Но хочу предупредить об одном нюансе (это распространенная ошибка у многих русских, резюме которых мы рассматривали) — не делайте резюме слишком длинным. 2 страницы — это практически стандарт. 3 страницы могут в крайнем случае, если у вас опыт работы больше 20 лет, и вы поменяли много компаний, но и тогда лучше пропустить то, что не особо релевантно для искомой позиции.
И естественно, надо менять порядок в перечислениях технологий, навыков и опыта. Для примера, если вы идете в embedded development, то первоначальной порядок (например, хронологический) типа «BASIC, Pascal, C, Perl, Python» лучше поменять на «C, Python, Perl» (Pascal можно удалить, т.к. он практически неизвестен на западе, ну и BASIC лучше тоже удалить, чтобы народ не смешить).
Это весьма больной вопрос для большинства кандидатов. Если смотреть изнутри, то причина этого явления весьма проста — компании хотят сэкономить, и заставить кандидата согласиться на меньшую сумму, чем он того заслуживает. Следствие из этого — негласная политика неразглашения своей зарплаты, чтобы не получилось ситуации, когда более ленивый сотрудник получает больше трудяги только потому что указал повыше требования к зарплате.
По сути, так и получается что приходится посылать резюме наугад. В нормальных компаниях есть определенные рамки зарплаты под должность, так что даже если кандидат указал сильно заниженную зарплату, ему предложат нормальную. Если завышенную, то будет «торг» — предложат пониже, и кандидат уже сам будет решать, хочет он этого или нет. Для примера, помню случаи, когда в резюме было указано N, а предложили (N + 10) тыс., и наоборот, когда был торг, и из изначальных M, кандидат согласился на (M — 15) тыс. условных единиц.
В целом, я рекомендую использовать ресурс www.glassdoor.com/ — это наиболее популярный источник информации о зарплатах и компаниях на западе. Прежде чем устраиваться на работу, просто поищите на этом сайте зарплаты в этой или похожей компании. Единственное, не забудьте учесть регион (если glassdoor имеет информацию о региональных офисах), потому что зарплаты в Нью-Йорке и Пало-Альто не сравнимы с зарплатами в других регионах даже в рамках одной компании.
100 в день — это общее количество резюме на разные вакансии (вакансии для США, Канады, Индии, Франции и т.п. все проходят через единую БД, и это не только программисты конечно).
Несколько лет назад у меня была долгая и упорная переписка с разработчиками Джанго насчет проблем их админки. Не помню точно деталей, но вроде дело было в том, что можно было удалить любой объект без прямого доступа, если использовать специально сконструированный URL. Патч они не захотели принимать, т.к. дизайн админки не предполагал особой секьюрити и разграничение прав — если человек имеет доступ к админке, значит он бог и царь. Более того, админка — это всего лишь contrib-приложение, reference implementation, так что если надо, каждый затачивает ее под себя как хочет и добавляет любые разграничение доступа.
Насколько я знаю, эту конкретную проблему они все-таки решили потом. Оказалось что народ использует админку, не особо озадачиваясь вопросами безопасности, и вот как-то получается (сюрприз, сюрприз), что из взламывают. Однако прежнее отношение осталось: админка — это просто contrib-приложение, хотите большего — пишете сами. В принципе, после супермагии RoR я с ними согласен, любое магическое приложение имеет свои недостатки, и найти универсальное решение зачастую проблематично. Так что надо просто снизить ожидания, и написать свою админку (благо что возможностей хватает), если вас что-то не устраивает в существующей.
Пароль от почты? Вы наверное имеете в виду импорт контактов? Это совершенно необязательный шаг (и думаю, это началось с фейсбука, в нем тоже такое есть). Так что про «требует» — это слишком громко сказано.
Никто и не ищет идеальных специалистов, то что я описывал относится именно к поиску средненьких специалистов. Если удается найти идеального — хорошо, но если середнячок, тоже неплохо. Учить придется в любом случае, однако лучше минимизировать усилия. Причина — текучка кадров, спрос на хороших ИТ-специалистов всегда очень высокий, и удержать не всегда возможно. Всегда найдется какой-нибудь стартап, предлагающий 200 тысяч и больше долларов в год, и конечно же, народ валит.
К сожалению, среднестатистический житель Северной Америки не настолько умен. Я помню кандидатов, у которых в фейсбуке был полный бардак (да что там говорить, некоторые резюме приходят с пунктом «прошлый опыт — работал в макдональдсе»). Конечно, такие же сразу отсеиваются.
Далее, устройство на работу — это умение продать. Фейсбук в принципе мало показателен, т.к. люди скрывают свои личные фотки, но вот Linked In и другие профильные социальные медиа могут дать весьма хорошую картинку. И никто естественно, не делает глубокий поиск, если только это не требуется корпоративными правилами. Вас же надеюсь не удивляет, что при приеме на работу в ФБР они проверяют кандидатов на детекторе лжи?
И еще один момент — личная информация позволяет определить как будет человек работать в будущем. Никто не спрашивает личную информацию во время интервью (это незаконно), и только Интернет позволяет это узнать. Есть маленькие дети — скорей всего ему придется брать PTO (paid time-off). Нетрадиционная сексуальная ориентация — выгодно для компании. Ездит на феррари — скорей всего будут завышенные запросы и т.д. Выводы могут быть разные, и они не отражают мою точку зрения, однако это факторы, которые надо учитывать.
Еще есть интересные блоги, как например этот: Cатсн²² (in)sесuяitу К сожалению, сейчас я особо не слежу за этой областью, так что отписался от многих.
К сожалению, трудно что-то посоветовать в этой области, кроме того, чтобы пожить в англоязычной стране и активно практиковать английский. Так что согласен с автором — надо просто быть готовым к таким вопросам. Можно легко нагуглить возможные универсальные варианты ответов, но лично мне они особо не нравятся и я еще думаю, что бы ответил (потому что сам тоже подумываю о поиске новой работы). Пока остановился на «My current company organization process is a little bit disorganized, and being a perfectionist I'm slightly discouraged to develop a code in a form of workarounds and last minute patches.»
Простой вопрос — сколько ошибок в строчке «printf(»%s", str);"? Формально это нормальный код, но в разном контексте он может содержать кучу ошибок — NULL указатель (что может быть как валидно, так и не валидно, glibc может печатать "(null)" в качестве вывода), есть ли терминальный нуль, указывает ли на доступную область памяти, работа с юникодом, экспейпинг вывода если печатает в HTML. Многое зависит от контекста, и зачастую вопрос «найди мне все что тут неправильно» просто некорректен, особенно если интервью сильно ограничено по времени.
Я практически стопроцентно уверен, что провалил бы такое интервью, и все с кем я это обсуждал думают так же. Когда большой опыт за плечами ищещь подвох в любой строчке кода (особенно, когда знаешь какие сюрпризы могут подносить стандартные библиотеки, помню неприятный опыт с ошибками в .NET библиотеке), и это сказывается на скорости анализа.
Или даже пример из статьи. Что, если лог потом просматривается через веб-сайт и пишется в HTML как есть? Тогда например, я смогу себе сделать App.CurrentUser.Name, которое будет содержать XSS (если это возможно в программе). Слишком много нюансов, для 20-ти минут — это явный перебор.
Надо что-то менять, это однозначно, но это не означает менять шило на мыло. Посмотрите на тренды, области, которые вас интересуют, рынки альтернативных платформ (смартфоны, железячные и гибридные решения, adruino и т.п.). Или просто возможно стоит взять перерыв в работе, и собраться с мыслями на курортах Карибского моря. Признаться честно, у меня самого такого рода проблемы, поэтому я сейчас ищу работу получше и интереснее, и попутно занимаюсь разработкой мобильных приложений (вначале для самого себя, а потом возможно и что-то выпущу).
Еще бы я добавил в задание немного методологических нюансов, как например, потребовать чтобы кандидат залил свой проект на DVCS-хостинг (github, bitbucket etc), и чтобы было покрытие юнит-тестами (не обязательно 100%, но как минимум backend-функционал). Если это библиотека, можно потребовать автогенерируемую документацию. Т.е. посмотреть, насколько качественно умеет кандидат делать приложения, не только внутренний код, но и другие вещи, являющиеся атрибутами хорошо разработанного продукта.
Думаю, я был бы осторожен, если бы они просили какие-то деньги за услуги с меня заранее, и наверное просто отказался бы и нашел другое. Я работал только с одним агенством и ничего им не платил. Но в целом их эффективность не особо высокая — они используют те же самые БД в Интернете, которые может найти в гугле. Единственное — они могут помочь какими-то советами, например, только они смогли мне внятно объяснить, почему зарплаты в объявлениях указываются до налогов.
Что касается фриланса — чтобы более или менее комфортно себя ощущать, в Северной Америке надо где-то получать от 4-5 тыс. долларов в месяц. Фриланс это покрывает с трудом, приходится все-равно либо быть контрактником, либо наниматься, либо иметь свой бизнес. Но соглашусь, что есть хорошие контракты на удаленную работу, знаю весьма хорошие примеры. Мой знакомый работал удаленно по контракту с Oracle, и получал больше 5 тыс. долларов на руки живя в России-не-Москве.
Лично я не соглашался на средний вариант, но у меня был некоторый запас денег и подработки. Все зависит от ситуации. Но надо быть морально готовым к тому, что придется потратить несколько месяцев на поиск подходящей работы (я потратил 4 месяца).
Но хочу предупредить об одном нюансе (это распространенная ошибка у многих русских, резюме которых мы рассматривали) — не делайте резюме слишком длинным. 2 страницы — это практически стандарт. 3 страницы могут в крайнем случае, если у вас опыт работы больше 20 лет, и вы поменяли много компаний, но и тогда лучше пропустить то, что не особо релевантно для искомой позиции.
И естественно, надо менять порядок в перечислениях технологий, навыков и опыта. Для примера, если вы идете в embedded development, то первоначальной порядок (например, хронологический) типа «BASIC, Pascal, C, Perl, Python» лучше поменять на «C, Python, Perl» (Pascal можно удалить, т.к. он практически неизвестен на западе, ну и BASIC лучше тоже удалить, чтобы народ не смешить).
По сути, так и получается что приходится посылать резюме наугад. В нормальных компаниях есть определенные рамки зарплаты под должность, так что даже если кандидат указал сильно заниженную зарплату, ему предложат нормальную. Если завышенную, то будет «торг» — предложат пониже, и кандидат уже сам будет решать, хочет он этого или нет. Для примера, помню случаи, когда в резюме было указано N, а предложили (N + 10) тыс., и наоборот, когда был торг, и из изначальных M, кандидат согласился на (M — 15) тыс. условных единиц.
В целом, я рекомендую использовать ресурс www.glassdoor.com/ — это наиболее популярный источник информации о зарплатах и компаниях на западе. Прежде чем устраиваться на работу, просто поищите на этом сайте зарплаты в этой или похожей компании. Единственное, не забудьте учесть регион (если glassdoor имеет информацию о региональных офисах), потому что зарплаты в Нью-Йорке и Пало-Альто не сравнимы с зарплатами в других регионах даже в рамках одной компании.
Насколько я знаю, эту конкретную проблему они все-таки решили потом. Оказалось что народ использует админку, не особо озадачиваясь вопросами безопасности, и вот как-то получается (сюрприз, сюрприз), что из взламывают. Однако прежнее отношение осталось: админка — это просто contrib-приложение, хотите большего — пишете сами. В принципе, после супермагии RoR я с ними согласен, любое магическое приложение имеет свои недостатки, и найти универсальное решение зачастую проблематично. Так что надо просто снизить ожидания, и написать свою админку (благо что возможностей хватает), если вас что-то не устраивает в существующей.
Далее, устройство на работу — это умение продать. Фейсбук в принципе мало показателен, т.к. люди скрывают свои личные фотки, но вот Linked In и другие профильные социальные медиа могут дать весьма хорошую картинку. И никто естественно, не делает глубокий поиск, если только это не требуется корпоративными правилами. Вас же надеюсь не удивляет, что при приеме на работу в ФБР они проверяют кандидатов на детекторе лжи?
И еще один момент — личная информация позволяет определить как будет человек работать в будущем. Никто не спрашивает личную информацию во время интервью (это незаконно), и только Интернет позволяет это узнать. Есть маленькие дети — скорей всего ему придется брать PTO (paid time-off). Нетрадиционная сексуальная ориентация — выгодно для компании. Ездит на феррари — скорей всего будут завышенные запросы и т.д. Выводы могут быть разные, и они не отражают мою точку зрения, однако это факторы, которые надо учитывать.