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

Что такое Foobar?

Для тех из вас, кто не знаком с Google Foobar, это своего рода инструмент найма в Google. Чтобы присоединиться к Foobar, вы должны быть приглашены другом или иметь всплывающее окно при поиске определенных терминов CS в Google.

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

Когда вы запрашиваете вопрос, вам дается объяснение проблемы, один или два примера и несколько тестовых примеров. Затем вы редактируете файл Java или Python, чтобы решить проблему, и, как только вы думаете, что решили ее, вы можете проверить свой файл и проверить, прошел ли он все тестовые примеры.

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

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

Конечная цель в Foobar - достичь и завершить уровень 5. Но как только вы закончите уровень 3, вы можете попросить рекрутера Google проверить ваш код и, надеюсь, связаться с вами.

Мое путешествие в Foobar

Чтобы лучше понять мой опыт, вам следует узнать мой опыт программирования. Я кодил более 6 лет на многих языках, включая Java, Python, Javascript, C ++, C # и т. Д. В течение этих 6 лет я постоянно профессионально развивался.

Когда в конце августа мне предложили Foobar, я сразу же запросил свой первый вызов. На решение этой задачи мне дали 48 часов, и это было довольно просто. По сути, это было то, что давалось в любом курсе информатики на уровне колледжа, и на это требовалось совсем немного времени.

Как только я закончил первую задачу, меня повысили до уровня 2, и мне дали еще две задачи, на выполнение каждой из которых, я думаю, около 72 часов. Эти задачи уровня 2 были немного сложнее, чем первая задача, но все же не так уж и сложны. Они были переделаны под более сложные проблемы, которые можно встретить в воздухе.

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

Уровень 4 - вот где Foobar действительно начал проявлять интерес. Уровень 4 содержал две задачи с примерно двумя неделями на выполнение каждой задачи. Эти проблемы были, безусловно, самыми сложными из тех, что я когда-либо решал. Они взяли несколько сложных математических и программных концепций, в которых нужно было сначала понять проблему, а затем реализовать ее. Этот уровень был невероятно сложным, потому что они давали вам меньше тестовых примеров, а их объяснения проблем были намеренно расплывчатыми. Вам действительно нужно было понять проблему и иметь много предварительных знаний в области математики и компьютерной науки, чтобы решать проблемы. Я смог решить эти задачи, но мне потребовалась последняя минута, чтобы завершить и полностью оптимизировать.

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

Мне не было стыдно, что Фубар поставил меня в тупик; на самом деле, я был очень горд. Фубар многому меня научил, и улучшение от начала до конца было невероятным. Это был действительно один из лучших опытов программирования за мои 6+ лет программирования. И, как я уже сказал ранее, я счастлив, что это сделал.

Секреты и уловки

Теперь, когда вы услышали мою историю, я поделюсь некоторыми советами и приемами для будущих претендентов на Foobar.

Решение проблем

Чтобы преуспеть в Foobar, вы должны уметь решать проблемы. В этом разделе я объясню свои шаги по решению проблемы не только для Foobar, но и любой проблемы, с которой вы можете столкнуться (собеседование на доске).

Первый шаг к решению проблемы - это понимание проблемы. Это может показаться безумным, но такое случается. Вам не следует даже трогать какой-либо код, пока вы полностью не поймете поставленную проблему, и вы не поймете проблему достаточно, чтобы вы могли объяснить кому-то еще. Лучший способ понять проблему - это нарисовать картинку, которая поможет определить решение и лучше понять проблему. Ниже приведено изображение, которое я нарисовал для одной из задач на уровне 4. Без этого изображения, я уверен, я бы никогда не решил проблему.

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

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

Теперь, когда наша проблема прошла все заданные и скрытые тестовые примеры, оптимизируйте и очистите свой код. Убедитесь, что ваш код чистый, с хорошими именами переменных и комментариями, и убедитесь, что код оптимизирован, чтобы быть максимально быстрым и эффективным с наименьшим объемом требуемого места. Как только мы закончим этот шаг, мы наконец сможем отправить нашу проблему!

Отправив код, мы должны подумать о проблеме. Подумайте, что вы сделали правильно, что сделали неправильно и что можно было бы улучшить. Это значительно повысит качество вашей техники решения проблем в будущем и покажет, что вы знаете, над чем можно было бы работать, если бы у вас было больше времени.

Советы по освещению

Теперь, когда вы знаете, как решать проблемы, вот несколько простых, но эффективных советов.

  1. Одна вещь, которую мне не удалось сделать во время последних нескольких проблем с Foobar, - это убедиться, что у вас есть время посвятить свою проблему, прежде чем вы ее запросите. У Foobar есть замечательная функция, заключающаяся в том, что после решения одной проблемы у вас не возникает новая проблема, пока вы ее не запросите. Если вы похожи на меня и у вас есть несколько предыдущих обязательств, не запрашивайте новую проблему, пока не будете готовы. Причина номер один, по которой я не смог закончить последнюю задачу, заключается в том, что у меня было так много дел, и я поспешно запросил задачу перед одной из самых загруженных недель в году. Подождите, пока откроется ваш календарь, и отметьте время для каждого вопроса. Это избавит вас от лишнего стресса.
  2. Используйте все время, которое вам дается на каждый вопрос. На первых этапах вы можете решить проблему за несколько часов. Это здорово, но всегда есть способы оптимизировать код. Если вы отправляете проблему раньше, вы, черт возьми, должны иметь отличные имена переменных, комментарии и лучший алгоритм, который когда-либо видел мир. Вы всегда можете поэкспериментировать с тем, чтобы сделать свой код более эффективным и чище, и на самом деле нет причин, по которым вы должны сообщать о проблеме раньше. Сделайте больше тестовых примеров, упростите свой ответ, сделайте что угодно. Просто не задавайте вопросы за несколько дней до установленного срока.
  3. Многие люди, которые делают Foobar, делают это, чтобы получить работу в Google. Хотя это то, для чего он был создан, я не думаю, что вы должны так думать об этом. На мой взгляд, Foobar - один из лучших инструментов для улучшения ваших навыков программирования. Зайдите в Foobar, чтобы учиться, а не искать работу. Foobar отлично подходит для найма лучших талантов, но вход в Foobar только мысль о работе в Google может испортить ваше мышление, и когда вы столкнетесь с стеной, это будет похоже на жизнь или смерть.
  4. Совет номер один, который я даю людям по поводу Foobar: не запускайте Foobar, пока не будете готовы. Я знаю, что писать код для Google - это круто, но Foobar холоден и беспощаден. Если вы проиграете на первых нескольких уровнях, жизни не останется. Если вы потерпите неудачу, вы закончите и не сможете вернуться. На мой взгляд, не запускайте Foobar, пока не достигнете уровня инженера-программиста Google. Все просто: у вас есть шанс на Foobar. Не запускайте, пока не будете готовы!

Забрать

Оглядываясь на месяцы, проведенные в Foobar, я многому научился. Лично я думал, что Foobar был невероятно забавным, и если бы я мог сделать это снова, я бы сделал это.

Поскольку Foobar закончился, а у меня все еще есть вкус к решению сложных задач, я перешел в страну машинного обучения, чтобы утолить жажду. Если вы хотите узнать больше, подпишитесь на мой Medium, чтобы получать новости о моем новом путешествии, или ознакомьтесь с проектами, над которыми я работал. Вы также можете заглянуть в мой LinkedIn.