Игорь Савчук - Отъявленный программист: лайфхакинг из первых рук
struct foo { char a; char* b; };
Следующий пример — объясните, почему работает такой код:
#include <cstdlib>
#include <iostream>
using namespace std;
int main (int argc, char** argv)
{
cout << argv[argc-1] << endl << argc[argv-1] << endl;
return EXIT_SUCCESS;
}
Третий типичный вопрос на общую сообразительность а-ля Google: Может ли функция возвращать итоговое значение чаще, чем была вызвана?
Хорошо, предположим, мы прошли все испытания и собеседования, отмеренные нам судьбой, и вот мы в ожидании окончательного вердикта. Я знаю, иногда вместо «апрува» присылают некий «Request for evidence». Что это такое и как это влияет на вероятность одобрения? Не нужно паниковать, это стандартная процедура. Какие-то данные из вашего резюме хотят проверить, это лишний повод изначально писать там правду и только правду. Например, если у вас запросили выслать копию диплома — сделайте это. Как правило, это заключительная стадия вашего «апрува», а это значит, что процедура близка к завершению.Впрочем, мне известен по крайней мере один случай, когда в Google отказали человеку, вроде бы успешно прошедшему собеседование, после того как увидели выписку из диплома с его оценками, которую попросили выслать в рамках этой процедуры. Но повторю еще раз: в наше время такие ситуации скорее исключения из правил, качество собеседования, как правило, перевешивает все остальные факторы. Смысл этой истории: не нужно своими громкими утверждениями в резюме привлекать к себе внимание и провоцировать подозрительность. Всегда лучше сосредоточиться на качестве своего кодинга и реальных возможностях/достижениях, нежели на неуемно гипертрофированных фактах своей биографии. Кстати, что насчет выбора языков для кодирования в рамках собеседования как на стадии телефонного интервью, так и на очном собеседовании? Как правило, ведущие рекомендуют самим участникам заранее выбрать наиболее комфортный для себя язык программирования для прохождения всех заданий интервью. Но, конечно, экзотика при этом не всегда приемлема, ведь проводящий интервью также должен владеть этим языком. Здесь нужно иметь в виду, что в самой компании Google основными (стандартными для большинства проектов) являются языки C++/С#, Java и Python — в своем выборе лучше отталкиваться именно от них. И еще: интервью не место для импровизаций, постарайтесь выбрать действительно наиболее знакомый для себя язык программирования. Поверьте мне на слово, это очень важно, даже если он не входит в эту тройку. Я считаю, что выбрать для прокачки в качестве основного языка для интервью лучше Python — основами алгоритмизации легче овладевать на высокоуровневом языке, не отвлекаясь лишний раз на низкоуровневые детали. Опять же, здесь меньше шансов ошибиться в режиме быстрого написания кода… Этот выбор субъективен для каждого. Я бы, наоборот, сделал ставку на С++. Да, он сложнее чем Python, но дает большее понимание того, что именно делает компьютер, когда исполняет твой код. К примеру, за время собеседований я видел много молодых программистов, которые не понимали, как работают указатели, ну а указатель на указатель для таких ребят был просто какой-то трещиной в их вселенной. Потому я считаю, что подобные вещи, характерные именно для С++, стоит разобрать как можно раньше в своей карьере. Как минимум советую сделать это до интервью в Google. (Смеется.) Поймите меня правильно, мне очень нравится Python, но современный программист просто обязан знать несколько мейнстримовых языков. Поэтому считаю, что в вашем случае переход в изучении основного для себя языка в последовательности Python > CC++ JavaC# станет для новичка настоящим адом, в то время как естественный апгрейд уровня абстракции CC++ > JavaC#PythonPerl будет вызывать приятное чувство типа «о, как тут все просто и понятно». Иными словами, десертом полезней заедать, предварительно отведав первое и второе, а не наоборот (хотя дети будут против такой последовательности и с ними придется долго спорить!). Какой вы можете дать практичный и доступный всем нашим читателям совет, чтобы повысить шансы получить оффер? Есть много способов, например, я уже говорил об институте рефералов. Хороший и неравнодушный к вам реферал — очень важное подспорье. Но не будем повторяться, поэтому предлагаю умышленно расширять базу своей компетенции. Что это значит? Очень часто, когда человек показал средние результаты интервью и в чем-то недотягивает на свою первоначальную позицию, но его потенциал всем очевиден, ему могут предложить альтернативные позиции, перенаправив его заявку к другому рекрутеру (с согласия кандидата). На самом деле всю мою бытность работы рекрутером я всегда ценил стоящих людей, пытаясь дать им второй шанс (и так поступают очень многие в Google), даже если по каким-то причинам кто-то и «закрыт» для текущей позиции. В качестве примера могу привести собственную историю: я сам программист, но меня интересуют Unix-системы в качестве серьезного хобби, что привело к неожиданному встречному предложению (уже в процессе собеседований на должность SWE) — попробовать себя в качестве SRE. Итак, умышленно расширяйте свою область компетенции на уровне резюме, но заклинаю еще раз — избегайте откровенного вранья и приукрашивания фактов своей биографии. Выделите главные навыки в основной блок резюме и отдельно подчеркните, что есть менее освоенные вами темы и специализации, которые, однако, вам очень интересны. Хм, это может привести к тому, что человек попадет на нелюбимую для себя позицию. Стоит ли Google таких жертв? Каждому решать самому, как по мне — стоит. Нужно иметь в виду, что в Google можно поменять проект по своему желанию, причем сделать это крайне радикально, к примеру вместо С++ начать вдруг писать на HTML/JS/CSS. Далее, можно из программиста переделаться в HR или продуктового менеджера (что многие и делают после достижения болезненного для немалого числа программистов возрастного порога в 35–40 лет). Можно переехать в другой офис и страну, подав заявку на подходящие вакансии у соседей, — нет проблем. Вариантов очень много, если речь идет о таком международном гиганте, как Google. Кстати, там существует собственная внутренняя сеть Moma, в которой находятся сведения по всем проектам, их требованиям и вакансиям. Также в ней хранятся цели и задачи каждого сотрудника компании по отдельности, подкрепляющиеся их отчетами и прочей справочной информацией как о людях, так и о проектах. Выбирать новые позиции легко и приятно. Главное — попасть внутрь, после чего все возможности для маневра открыты. Ради этого многие используют гораздо более сложные схемы, чем описанная мною двухходовка. Например, какие? Например, устраиваются в фирмы типа Infosys — это большая фирма«бодишопер», завозящая на американский рынок вагоны дешевых сотрудников по H1B, которые затем работают на рабских условиях (например, по контрактам на внутренний аутсорс, которые заключает Infosys). Из уже изначально невысокой зарплаты Infosys будет забирать еще и свою долю. Хитрость такого «заезда» в том, что потом можно сделать трансфер H1B-визы в другую компанию (это достаточно простая процедура). Очень многие из подобных беглецов изначально метят именно в Google, для которой претендент в качестве президента США имеет гораздо больше проходных шансов на трудоустройство, чем бедолага, живущий за тридевять земель. В таком подходе есть множество других плюсов, которые я не буду перечислять здесь. Кстати, мы обещали вернуться к визам. Настало время сдержать обещание. Говоря кратко, это большая проблема. Для многих виза становится даже большей проблемой, чем само трудоустройство в Google, если речь идет о США. Но давайте попробуем последовательно разобраться, что там к чему. На данный момент ситуация такова, что даже наличие оффера и острое желание могущественной компании типа Google взять вас к себе на борт не гарантирует получение рабочей визы. [1 Речь идет о первой половине 2014 года.] H1B — это сложный вариант, как ни крути. Сейчас на этот тип визы существует квота в 65 000 человек в год, а количество желающих ее получить растет с непропорционально большой скоростью. По сути, вам придется участвовать в лотерее за место в квоте. Например, в 2013 году было подано 120 000 заявок, а в текущем году — уже 170 000. Соответственно, шанс «выиграть визу» в 2013-м был равен 50 %, а в 2014-м — 33 %. Если в этой динамике ничего не изменится, то в 2015 году этот шанс будет составлять 20 %. Весь топ компаний, получающих H1B-визы, создающих это столпотворение и давку, занимают индийские «бодишоперы». Общий вал заявок формируется преимущественно ими. Крупные работодатели, такие как Google, Facebook и Microsoft, очень недовольны данной ситуацией и пытаются лоббировать закон, который поднимет размер квоты для рабочих виз. Правительство США согласно с ними, Обама уже два года обещает провести так называемую иммиграционную реформу, но пока безуспешно. Есть мнение, что до следующих выборов ничего не изменится. На данный момент новые правила H1B — пока открытый вопрос. Впрочем, большие компании, в том числе Google, решают этот больной вопрос с помощью следующего маневра — те, кто не получил визу (большинство), отправляются в их офисы в Канаде или Европе. Там они работают год, а потом приезжают в Штаты по визе L1. Вид на жительство можно делать и с L1, так что тут все нормально. Единственное «но» — с H1B работу поменять можно, а с L1 — нельзя. Но есть и обратная сторона — супруг(а) держателя визы L1 может работать наравне с ним, а супруг(а) держателя H1B — нет. Следующий этап после попадания в Google для «нуглера» — закрепиться в стране. [1 От слов new + googler, то есть работник-новичок в Google] Нужно сразу подаваться на гринкард (GC), что Google делает достаточно эффективно. [2 Каждого своего работника Google классифицирует как сотрудника с «особыми способностями», что дает ему право на получение вида на жительства в США (green card)] По моим оценкам, шанс получить GC при желании и настойчивости (требуются периодический контроль и напоминания юристам, обычно заваленным работой, в которой вы можете просто потеряться) стремится к 90 %. Если фирма не спешит, если весь процесс пустить на самотек, то реально получить ВНЖ примерно за 3 года. Если активно контролировать этот процесс, можно успеть сделать все за 2 года. Подводя итог, можно сказать, что Европа — это черный ход для американской части Google. Не самый плохой вариант какое-то время поработать в европейских отделениях этой компании. Что бы вы сказали об этих филиалах в сравнении с их американскими аналогами? Да, европейские позиции — отличная точка входа в компанию, хотя бы учитывая американские визовые сложности. Что касается сравнения, то я работал в цюрихском отделении Google, равно как и в американских отделениях. Если просуммировать свои субъективные впечатления, то в Калифорнии режим работы намного насыщеннее, чем в том же Цюрихе. Трудоголический менталитет американцев, центральные большие проекты, большое количество местных звезд программирования, на которых можно равняться, а также высокая концентрация выпускников лучших ИT-университетов мира — все это создает определенный климат в американской части Google. По моим ощущениям, Америка дает намного больше (знаний, денег и навыков), но и больше отбирает (времени и сил).