Здравствуйте, уважаемые хабровчане! Хотел бы поделиться мыслями и впечатлениями по поводу только что завершённого Google foobar code challenge. Многие, наверняка, слышали как, после очередного поискового запроса по программистской тематике, страничка поисковика Google интригующе раздваивается и появляется предложение порешать задачки. Почти месяц назад экран раздвоился и передо мной.  С этим явлением связаны некоторие слухи и легенды и, чтобы помочь будущим участникам вызова Google максимально эффективно использовать подвернувшийся случай для своего развития, хотелось бы поделиться своими мыслями и впечатлениями по горячим следам. Если подытожить кратко, то этот вызов — подарок судьбы, инструмент для личного и профессионального саморазвития, этап профессионального роста. Но это ни в коем случае не повод для "фаллометрии" и для демонстрации своего превосходства. Google foobar challenge — это для себя. Первое, что хочется отметить: этот вызов — удача, которой ещё нужно правильно воспользоваться. Каким образом система выбирает кандидата — неизвестно. Точнее, примерно понятно, что по истории поисковых запросов. Но, также, понятно, что подбор очень нетривиальный, высокоинтеллектуальный, и, вполне вероятно, что с вмешательством живых людей. Не стоит ожидать что удастся схитрить. Да, можно пытаться заставить систему выбрать именно вас, открывая в десятке браузеров сотни вкладок со stackoverflow, но, разумнее, не спешить, просто жить своей обычной жизнью, работать и ждать когда это случится само, когда вселенная решит, что время пришло. Второе — когда вызов получен, то не нужно спешить. Имеет смысл остановиться и задуматься. Это не тот случай когда нужно на всех парах торопиться представить первое работающее решение. Времени даётся с избытком. Примерно, с десятикратным запасом, несколько дней, а то и недель на задачу. Да ещё и начало отсчёта можно выбирать по своему усмотрению. Можно начать с утра выходного дня, когда накоплен заряд бодрости и энергии и есть свободный день впереди, а можно и вечером, чтобы поразмышлять во сне. Вообще, имеет смысл освободить себе время (от овертаймов/отпусков/посадок картошки на даче...) на две-три недели вперёд и настроиться на длительные раздумья.  И даже если удалось решить задачку сразу, сходу, имеет смысл потратить дополнительное время на красивое оформление кода, на комментарии и описание идеи. Ведь, не исключено, что, в рамках собеседования, придётся защищать своё решение. А если и не придётся, то хотя бы из самоуважения и любви и уважения к красоте. В данном случае, красоте оформления результата своего интеллектуального труда.  Также, имеет смысл отбросить тревогу что "не успею", "не смогу", "не справлюсь", "не достоин решить самостоятельно". Такие мысли обязательно будут приходить по ходу решения, и нужно учиться их преодолевать. Даже если сейчас и нет понимания что делать вообще, или что именно не так с моим "зуб даю стопроцентно верным" решением, почему не проходит последний тест, то имеет смысл потратить время на дополнительные размышления, взглянуть на задачу и свои попытки под другим углом, попытаться переосмыслить происходящее. Обратить внимание на производительность. Возможно, даже поискать профильную литературу и прочитать книгу. Таким образом и будет происходить личный и профессиональный рост - когда ты учишься преодолевать то, что ещё вчера было для тебя невозможно. И тот момент, когда преодоление происходит — он очень ценен, он стоит всех тревог и волнений, потраченных усилий и времени. Это и есть — развитие! Не стоит тревожиться что "нужно заработать ещё один инвайт" (а в foobar challenge за пройденные второй и четвёртый уровни дают по инвайту, с помощью которого можно пригласить знакомого принять этот вызов) или что необходимо во что бы то ни стало пройти третий уровень, чтобы отослать резюме в Google.  Переживать не стоит, ну хотя бы потому, что все задачи есть в интернете в свободном поиске. Так что вы точно пройдёте этот вызов. Вопрос лишь только какой ценой и что вы для себя из этого вынесете. Кстати, именно поэтому нет никакого смысла хвастаться этим своим достижением и сравнивать себя с другими. Потому что только вы сами знаете чего на самом деле стоят ваши успехи: пары кликов мышкой или кропотливого интеллектуального труда и озарения.  И только если время подходит к концу, а найти решение/ошибку не получилось (всякое бывает, можно на автомате прописать i++ вместо ++i или в цикле на автомате прописать строгое неравенство вместо нестрогого и потом долго удивляться почему в предельных случаях ответ не сходится в шестом знаке после запятой), то можно поискать подсказки. Но, даже в этом случае, лучше не искать готовые решения (самый плохой вариант) и даже не идеи. Можно, к примеру, поискать новые тесты с правильными ответами, которые способны дать новую информацию и уточнить область для поисков.  Также правдой является то, что задачи нельзя назвать сложными. Скорее - интересными. Честное слово, со школьных времён, пожалуй, это самые интересные задачки, что мне встречались.  Здесь нет нужды использовать мощные библиотеки и хитрые встроенные алгоритмы. Скорее, наоборот. К примеру, к своему удивлению обнаружил, что дефолтная реализация множества в Java: HashSet, раз в двести медленнее (на моих масштабах), чем самостоятельная реализация множества на базе массива. Вот такая плата за удобство! Здесь нет нужды выгрызать биты и миллисекунды, вместо этого нужно понять идею (иногда, несколько идей), и после этого понимания всё становится на свои места.  Практически все задачки имеют решение, умещающееся на одном экране. Подводя итог: Гугл — молодцы! Отличная идея и великолепная реализация. Вызов не предназначен чтобы вас утопить, унизить, победить. Точно также, он не предназначен чтобы с его помощью кого-то топить, унижать, побеждать. Вместо этого, он предназначен, чтобы научить вас чему-то новому, провести через серию нетривиальных, но посильных вызовов и сделать сильнее и мудрее, чем вы были ранее. Он не соперник, а, скорее, старший товарищ и наставник. Настоящий результат вызова — это не новые инвайты, не галочка в резюме, и даже не собеседование в Гугл.  Настоящий результат — это рост и развитие, которые тем более существенны, чем ответственнее и честнее было ваше отношение к вызову.  Хочется пожелать всем читающим дождаться своего вызова (а если он уже был, то поздравить и порадоваться за них!) и по максимуму его использовать!