Впереди новый сезон стажировок, и статья будет актуальна для тех, кто планирует начать карьеру в Яндексе.  Я Максим, iOS-разработчик в службе технического развития Яндекс Go. В декабре 2021 года завершил стажировку в команде и хочу поделиться опытом, полезными ссылками и выводами, которые я делал на протяжении работы. Надеюсь, они помогут вам быстрее адаптироваться в первые месяцы работы.  Знакомство с компанией началось еще в июне 2021, тогда я попал в Школу мобильной разработки от Академии Яндекса. Время было веселое и интересное. Рекомендую пройти Школу, если вы только погружаетесь в профессию. Подробнее можно почитать в этой серии статей: тык. Обучение закончилось, и логичным продолжением было пройти стажировку. Цель определена, можно приступать к реализации. Попасть на стажировку можно разными путями, мой лежал через Академию. Не буду расписывать, как проходит отбор и какие программы существуют, — для этого уже есть сайт, где подробно раскрыты все пункты. Welcome to Young&&Yandex. Формула простая, работает безотказно. В принципе, всем понятный этап, но есть нюансы. Лично мне повезло найти людей, которые тоже горели идеей попасть в Яндекс, с ними я познакомился на летнем обучении. Мы вместе готовились к собеседованиям, проводили пробные интервью, делились полезными материалами и разбирали непонятные темы. Иметь круг единомышленников — это возможность пройти путь быстрее, но есть шанс справиться и без них. Это были мои первые собесы в крупную IT-компанию. Я испытывал страх, и казалось, что он не уйдет никогда. Страх — это естественная эмоция, не нужно ее избегать.  Даже для опытных разработчиков собеседования — это стресс. Для успокоения и лучшего понимания предстоящих этапов я просматривал публичные собеседования на YouTube и проходил технические интервью в других компаниях. Это было отличным решением и помогло мне почувствовать себя увереннее. В целом, отбор проходит в три этапа: Платформа + язык Алгоритмы и структуры данных Финальное интервью с командой (может быть несколько) Раскрывать каждый этап подробно не буду, так как у всех они разные и учесть все подводные камни невозможно. Я дам вам свои удочки, а вы уже ловите рыбку.  Под катами добавил полезную информацию: Собеседования в Яндексе — link Распространенные ошибки — long link Готовимся к iOS-собеседованию — long long link  Публичные собесы (несколько примеров, остальное нагуглите) https://www.youtube.com/watch?v=ZIiwsgNpMo4&t=359s https://www.youtube.com/watch?v=3Wu_G9bIxVw&t=197s iOS: Как работают основные фреймворки платформы Как устроено управление памятью Как работать с многопоточностью Как работать с сетью Какие есть варианты хранилищ на устройстве Что такое жизненный цикл iOS-приложения Уметь верстать UI (желательно кодом) Что такое Autolayout и как он работает Необходимо знать синтаксис Swift и разбираться в: Reference vs Value type Optional Protocols (associated type) Generics Enum (associated value) Closure (capture list) Dispatching (Class, Protocols) Этот список не является исчерпывающим, тут собрано только самое необходимое. Этот этап у большинства вызывает панику, я — не исключение. Сам его завалил (переволновался), но уже по окончании стажировки сдал успешно. Для прохождения секции нужно следовать алгоритму: внимательно читать условие, задавать вопросы, пока не станет ясна суть задания; придумать алгоритм, озвучить его интервьюеру, оценить time&space complexity;  подумать о краевых случаях (выходы за пределы массива, неправильные входные данные и т. д.); реализовать идею кодом; накидать тест-кейсы и прогнать их через свою реализацию алгоритма; сообщить о готовности, сдать решение. Такие интервью проходят в онлайн-редакторе, и я настоятельно рекомендую проверить каждую строчку кода. Это поможет избежать грубых ошибок и выявить проблемные места в реализации. Полезные ссылки: Статья от Яндекса — https://habr.com/ru/company/yandex/blog/449890/ Тренировки по алгоритмам — https://yandex.ru/yaintern/algorithm-training leetcode.com — easy-, medium- и hard-задачи   На этом этапе вы общаетесь с командой, в которой предстоит пройти стажировку. Желательно узнать, с каким техническим стеком работает команда, как выглядит процесс погружения новичка в проект, какие задачи предстоит выполнять и т. д. Важно, чтобы ваши взгляды с командой совпали, поэтому не стесняйтесь и спрашивайте все необходимое. Если совсем нет идей, что спросить, поищите вопросы здесь.  Когда все отборочные этапы остались позади, я с нетерпением ждал момента выхода в офис. И вот он настал… Со мной связался будущий руководитель из команды Яндекс Go и рассказал о том, что необходимо сделать в первые дни. Влиться оказалось достаточно легко. В первую неделю проходит много мероприятий для новых сотрудников. На них узнаешь, как устроена работа в компании, какие плюшки она предоставляет, где просить помощи, если что-то пошло не так, и другую полезную информацию. Также во внутреннем трекере задач прилетит чек-лист для новичка. Он реально помогает не потеряться в обилии информации, которая сваливается в первую неделю. Нового и неизвестного действительно много, но меня спасал внутренний ресурс wiki-страниц. Если необходимо было что-то узнать, я забивал свой запрос на wiki, и, если ничего не находилось, только потом писал руководителю. Знакомство с командой прошло гладко, сначала меня представили на общем созвоне, затем я закинул небольшое intro про себя в чат. Ребята оказались классные, с первых минут общение было комфортным. На первой неделе я изучал внутреннюю документацию проекта, пробовал билдить таргеты и пытался разбираться в кодовой базе. Даже успел получить первую небольшую задачу, которая в скором времени пошла в прод (там было кода всего на 10 строчек, но все же). В общем и целом у меня не возникло проблем с адаптацией, все прошло комфортно. Их в принципе и не должно возникать, так как этот процесс постоянно улучшается на основании фидбека от сотрудников. Я думал, что на стажировке людей учат практически с нуля, но только не в Яндексе! Ее лучше рассматривать как возможность показать и подтянуть имеющиеся знания, а не как место, где всему научат. От кандидата ожидают, что он уже обладает всем необходимым для старта карьеры — и это справедливо. Тут все как на настоящей работе, только груз ответственности меньше. У тебя почти те же привилегии, как и у штатного сотрудника, разве что нет социального пакета. Меня бросало из стороны в сторону, синдром самозванца не покидал. Сложности, затуп с задачами, многое не получалось. Дальше я опишу важные, на мой взгляд, моменты стажировки. Если вы уже проходили этот этап в карьере, расскажите о своем опыте в комментариях. Если с чем-то не согласны, тоже пишите, подискутируем, ведь в споре рождается истина.  Погружение в проект Сервису Яндекс Go уже 10 лет, приложение большое, команда постоянно добавляет и обновляет документацию проекта. В ней описаны процессы, разработка, гайдлайны, присутствуют рассказы о проекте и много других полезных материалов. Также существует вводная страница в старт разработки, там описан необходимый минимум: жизненный цикл задач; нюансы сборки приложения; работа с Git; архитектура.  Этот Starter Pack существенно облегчил мне жизнь и помог влиться в проект. Синки, дейлики, митинги, стендапы (что-то на языке Agile) Помимо командных встреч в мой календарь прорастали и другие мероприятия, и из каждого нужно было вынести какую-то мысль, а не просто поприсутствовать. В начале понимал только предлоги, которые связывали непонятные мне слова. Я постоянно записывал новые термины и затем шел искать их на wiki-страницах или узнавать у коллег. Пару раз даже включал диктофон, чтобы после прослушать диалог и понять суть. Бояться здесь нечего, каждый член команды проходит через это. С каждой неделей все больше погружаешься в контекст, и темы на встречах перестают казаться китайской грамотой. Здравствуй, я твой джедай! Ты — мой падаван Команда Go большая, и поэтому есть возможность закреплять наставника для каждого нового сотрудника. Я благодарен своему наставнику, это была отличная школа жизни.  На один из первых пул-реквестов я получил 90 комментариев! Они касались Code Style и других улучшений кода. Казалось, я никогда не закрою свой ПР. Я составлял заметки из комментариев, чтобы запоминать, на что в будущем стоит обращать внимание. Наставник — это человек, который помогает извлечь максимальную пользу из процесса стажировки. Общайтесь с ним. Запрашивайте фидбек по задачам, задавайте вопросы по проекту и уточняйте, какие еще материалы вам стоит изучить.  Однако стоит уважать его время, обучать вас всему — не его основная работа. Если возникла проблема, стоит сначала постараться самостоятельно найти ответ, поискать на внутренних wiki-ресурсах, отправить запрос во вселенную Поиск Яндекса, подумать и только после этого, четко сформулировав проблему, спрашивать ментора. Помимо наставника, у вас есть коллеги. Ребята в команде дружные. Каждый открыт к диалогу и всегда готов помочь.  Глупых вопросов не бывает Страх показаться глупым — худшее, что вы можете себе позволить на карьерном пути. Он мешает развиваться и двигаться вверх и лишает уверенности в себе. Вопросы показывают вашу заинтересованность, они являются главным способом получения информации. Конечно, можно узнать, что будет, если наступить на грабли на практике. Но все-таки лучше спросить это у бывалых=) Я сам поначалу боялся задавать вопросы, однако это сильно мешало продвижению в задачах. Переломным моментом стал 5-минутный диалог, в котором я узнал решение проблемы. Ее я не мог решить в течение двух дней. Стоит явно проговорить с наставником, через сколько приходить к нему с вопросами, если самостоятельно разобраться не получается. И это касается не только задач. На созвонах или встречах вы будете сталкиваться с непонятными для вас вещами, и может показаться, что остальные прекрасно все понимают. Но это не так, кто-то тоже не имеет ни малейшего представления о происходящем, однако избегает вопроса, потому что не хочет показаться глупым. В своей профессиональной жизни вы неизбежно столкнетесь с ситуациями, когда вам придется задавать вопросы и рисковать показаться неопытными. Общение с руководителем В Яндексе я вообще не заметил иерархических проблем. Каждый может открыто высказывать свое мнение или конструктивную критику. Здесь людей не оценивают по их должности или регалиям, только по профессионализму. Все общаются на равных. Мое общение с руководителем было комфортным. Я хотел бы говорить с ним чаще, но это только моя ответственность. Сейчас я уже знаю, что в любой момент могу обратиться к нему с вопросом. Очень важно договориться о желаемом формате и частоте встреч с руководителем и ментором. Рабочие задачи В таких больших проектах, как Go, всегда есть чем заняться. Помимо продуктовых задач, имеются и технические, которые помогают улучшить приложение и уменьшить технический долг. Как и подобает падавану, сначала я фиксил баги. Кому-то это покажется скучным, но такие задачи помогают лучше познакомиться с проектом. Рекомендую часто просматривать возникающие баги и варианты их решения. Таким образом вы знакомитесь с тем, как работают разные части приложения, развиваете насмотренность и отмечаете варианты решения проблем. Затем я перешел к выполнению технических задач, которые плавно перетекли в мои постоянные обязанности. Моя основная задача (которой я и продолжаю заниматься)  — это модернизация сетевого слоя и избавление от RestKit. Хотя эффект такой задачи нельзя оценить визуально, она все-таки затрагивает важную часть приложения и напрямую влияет на скорость его работы. В команде большое количество разноплановых задач и ребята всегда открыты новому. Можно предложить свою идею по улучшению проекта или процесса в команде, доказать ее состоятельность и приступить к реализации.  Проактивность и взятие на себя ответственности — качество, которое ценят в Go, да и во всем Яндексе. Коллеги, помогите, тупняк напал! Сталкиваясь с чем-то новым, всегда есть риск застрять. Не волнуйтесь. Это происходит со всеми. У меня нет универсальных советов, как выходить из тупняка. Каждый это делает по-своему, лично мне помогал учет времени. Если я в течение X часов (зависит от сложности задачи) не мог найти решение, я обращался к наставнику или коллегам и просил помощи.  Также помогает смена контекста: переключиться на другую деятельность, прогуляться, подышать свежим воздухом. При смене деятельности мозг все равно продолжает решать проблему на background-очереди, и как только он ее решит, выдаст ответ в виде озарения. Сидеть и пытаться решать одну проблему в течение долгих часов — крайне не эффективная стратегия, особенно если вы не продвигаетесь ни на шаг. Работай с умом, а не до ночи Первый месяц стажировки я сидел в офисе с утра до вечера. Никто не требовал этого от меня, у задач не было горящих дедлайнов. Однако мне казалось, что я делаю все долго и медленно прогрессирую (это один из поинтов, почему стоит запрашивать фидбек по задачам у наставника).  Такая тактика не сулит ничего хорошего. Голова практически не отдыхает, не хватает времени на себя, хобби, обучение и т. д. Иногда можно задержаться на работе, но если делать это регулярно, вскоре наступит выгорание. Спустя месяц работы в таком режиме я начал налаживать Work-life balance. Опробовал много практик формата «Работай меньше, успевай больше», многое мне не подошло, но то, что прижилось, использую и по сей день. Оставлю список рекомендаций под катом. Здесь я собрал практики, которые помогают лично мне. Они несложные, но требуют стабильного выполнения. Распорядок рабочего дня Я разделил день на блоки: 4,5 часа пишу код, 2 часа выполняю остальные задачи и 1,5 часа обучаюсь.  Если вы писали код, то понимаете, что невозможно на протяжении 8 часов выдавать чистый вразумительный код. Уже через несколько часов внимание начинает рассеиваться и не получается сосредоточиться, поэтому какие-то простые вещи могут решаться очень долго и мучительно.  Писать осознанный код не более 5 часов в день было лучшим решением за эти месяцы, таким образом я четко выделяю время и не отвлекаюсь на другие дела. Пишу только код, зная, что дальше смогу выполнять другие задачи.  Я считаю честным тратить 1,5 часа рабочего времени на обучение, так как сфера постоянно развивается, нужно пополнять свои знания, чтобы использовать их для улучшения продукта и генерации свежих идей. Выбор главного Рабочий день начинается с выбора самой важной задачи. по критериям: срочность, удовлетворенность результатом, важность и уровень ответственности. Это позволяет сосредоточиться на одной важной задаче и приложить все усилия для ее выполнения. Таким образом не распыляешься на другие задачи и не чувствуешь, что день прошел впустую.  Выбор главного помог мне перестать работать в выходные, так как положил конец мыслям о невыполненной работе. Я завершаю пятницу с чувством полного удовлетворения. Инструменты, которые помогают поддерживать и контролировать вышеописанное Notion — как дашборд всей информации по работе. Декомпозирую задачу по пунктам, отмечаю по чек-листу ее ход, чтобы видеть процесс. Оставляю заметки, полезные ссылки и провожу ретроспективу, чтобы в будущем на похожую задачу тратить меньше времени. TickTick — для напоминаний, чтобы не держать в голове мелкие дела. Во время работы могут приходить навязчивые мысли о якобы важных делах, которые отвлекают. Вместо того, чтобы переключаться на них, я записываю их на листок или в ремайндер. Благодаря сделанным заметкам, остаюсь в моменте и твердо уверен, что животрепещущие дела зафиксированы для дальнейшего выполнения. Pulse.red — учет времени, потраченного на задачи. Если используете Safari, рекомендую добавить панель «Избранное» — подробнее в статье. Отвлекающие факторыВзял за правило переводить телефон в режим Не беспокоить и отключать интернет.  Поначалу было сложно, но при разделении рабочего дня на блоки понимаю, что выделил время и на прокрастинацию. Плюсом перевожу экран телефона в черно-белый режим, чтобы яркие и манящие иконки приложений не затмили мой разум. Тем, кому нужно быть всегда на связи, можно замьютить все, кроме рабочих чатов. Многие практики я почерпнул из книги «Найди время». Благодаря выстроенному режиму, я могу уходить с работы после 18:00 без угрызения совести.  Возможно, вы от кого-то слышали о переработках в Яндексе, что там живут днями и ночами, но это не совсем так. В большинстве случаев работают до ночи те, кто не может организовать свой день, например, как я на первых порах. Тут работают люди, которые действительно любят свой проект. Видно, что каждый горит своим делом и готов уделять ему время сутки напролет. Это показывает только то, насколько интересно работать в компании. Здесь не выжимают сотрудника просто ради успеха самого Яндекса. Офис Мне удобно работать в офисе. Дома меня отвлекают домашние дела, поэтому я решил укрыться от них на работе. Рабочее место можно обустроить под себя, заказав все необходимое — дополнительный монитор, тумбочку, лампу, подъемный стол, растение (за ним будут присматривать флористы) и многое другое. Кстати, самое нужное для работы можно заказать и домой, компания сама все организует и доставит по адресу. Еще один плюс офиса — это люди, всегда есть с кем обсудить текущую задачу, попросить помощи или сходить на обед. Ты находишься в кругу интересных, заряженных людей, а это всегда мотивирует развиваться. Дома воспроизвести такую атмосферу сложно. За время стажировки я научился: разбираться в чужом коде и понимать, куда вношу изменения (а не просто «лепить заплатку»); рассматривать несколько вариантов решения стандартных рабочих проблем, выбирать наиболее целесообразный; не повторять своих ошибок и развиваться; быть ответственным за результат и работать в команде; правильно планировать свое время. В заключительном акте расскажу больше о самой обстановке в офисе. Офис как место для отдыха Я работаю в офисе, который находится на территории «Москва-Сити» — в БЦ «Око». В «Око» все этажи Яндекса разного цвета и на каждом — своя особая лаунж-зона. Например, при входе в зону «Джунгли» попадаешь в тропический лес, а вот «Игровая» — это зал для игр в настолки, покер и приставку. Еще в офисе есть отличный спортзал и место для йоги. Нельзя не упомянуть захватывающий вид на Москву, не перестаю восхищаться невероятными закатами. Питание При трудоустройстве каждый сотрудник получает бейдж, по которому можно не только проходить в офис, но и расплачиваться за обеды. Ежедневно компания перечисляет на него определенную сумму, которую можно потратить на питание в корпоративных столовых или соседних кафе. Кроме того, на каждом этаже есть несколько кофе-пойнтов с чаем, кофе, сладостями, орехами и фруктами. Их ассортимент меняется в зависимости от сезона и пожеланий сотрудников. Миф про девочек В технической сфере сложилось так, что чаще на работу берут мальчиков. Сейчас эти рамки стираются, и Яндекс не исключение. Здесь отсутствует гендерная дискриминация, к каждому относятся с уважением и ценят независимо от пола. Девушки есть во всех командах и работают они на равных правах с остальными сотрудниками. Важно понимать, что стажировки в разных командах различаются и ваш опыт однозначно будет другим.  Еще раз подсвечу главные моменты: Не нужно стесняться говорить, что чего-то не знаешь — лучше так, чем потратить неделю на исследование и реализовать неправильное решение. Важно иметь представление о многих технологиях, но глубоко погружаться лишь в несколько. Исключение — Swift, его нужно знать хорошо. На стажировке зачастую важнее структурно рассуждать и уметь написать простой код (алгоритм), чем знать супер тонкости какой-то технологии. Я постарался по максимуму поделиться полезными выводами, чтобы вам было легче адаптироваться и совершить меньше ошибок. На стажировке не надейтесь, что будет легко. Вы станете работать не меньше остальных, а возможно, даже больше. Стажировка отличается от работы джуном лишь меньшим грузом ответственности, так что нужно выкладываться и показывать себя со всех сторон. Без сомнений, рекомендую попробовать стажировку в Яндексе, это колоссальный опыт, который даст вам ясное понимание, к чему стремиться. Откроет ваши новые грани и научит бороться с самим собой, становясь лучше с каждым днем. P.S. Если хотите пройти стажировку для мобильных разработчиков, оставить заявку можно по ссылке.  iOS Разработчик