Алина Ерохина — студентка четвёртого курса бакалаврской программы «Прикладная математика и информатика» в НИУ ВШЭ — Санкт-Петербург. Сейчас Алина пишет диплом по направлению «машинное обучение», а до этого три года подряд проводила лето на стажировках в Google: в Цюрихе, Лондоне и Кремниевой долине. Алина рассказала, как начала заниматься программированием, по каким критериям выбирала вуз и чему научилась на стажировках.
Физмат, кружки по программированию и Летняя компьютерная школа
До восьмого класса я училась в общеобразовательной школе, а в восьмой класс поступила в физико-математический лицей № 30 в Санкт-Петербурге. Благодаря учёбе в «тридцатке» я и увлеклась программированием: стала заниматься в кружке у приходящего преподавателя. Через год пошла в кружок при СПбГУ, а после — при ИТМО. В кружке при ИТМО преподавал Андрей Станкевич, и со мной учились ребята, которые занимали первые и призовые места в олимпиадах. Было много практики, мне там очень нравилось.
После восьмого класса я каждый год ездила в Летнюю компьютерную школу на летние и зимние смены. По будням занятия каждый день: сначала теория, потом — практика, где нужно решить набор задач («контест») на пройденную тему. Участвовать в ЛКШ могут школьники со всей России и из-за рубежа, нужно заранее подать заявку и написать вступительную работу. В ней проверяют знание математики, основ алгоритмов, структур данных и комбинаторики, а также умение программировать.
В школе я участвовала во Всероссийской олимпиаде и в других личных и командных соревнованиях, и сборы перед олимпиадам тоже многому научили. Обычно сборы длятся неделю или две, на это время освобождают от школы, и вместо уроков каждый день приходишь на занятия. Формат примерно такой же, как в ЛКШ, но в более учебном режиме, без развлечений.
Олимпиады дают возможность поступить в вуз без вступительных испытаний. Я поступала именно так, потому что в одиннадцатом классе стала призёром Всероссийской олимпиады по информатике.
Как начать заниматься олимпиадным программированием в школе
Под руководством
Мне нравилось ходить на кружки, ездить в ЛКШ и участвовать в сборах, потому что вокруг собирались энтузиасты, которые хотят заниматься программированием, это очень мотивировало. К тому же мне проще, когда есть контроль извне: объясняют теорию, дают задания и могут указать на возможные ошибки, если что-то не получается.
При выборе кружка можно обратить внимание на следующее:
- В нём занимаются сильные студенты: призёры и победители Всероссийской олимпиады, олимпиад первого уровня из перечня РСОШ.
- Занятия проходят регулярно, есть обратная связь от преподавателей.
- Руководители кружка знают о личных и командных олимпиадах, которые сейчас проходят, и рекомендуют в них участвовать.
- Соответствующее образование преподавателя, его опыт и интерес к сфере олимпиадного программирования. Например, преподаватель — студент или выпускник сильной образовательной программы в сфере IT, имеет призовые места школьных и студенческих всероссийских или международных олимпиад.
- Можно заниматься с репетитором — лично или по скайпу. В этом случае стоит обращать внимание на те же пункты.
Самостоятельно
Самостоятельно изучать программирование тоже можно. У меня есть знакомый, который начал заниматься в начале одиннадцатого класса, а к концу года занял призовое место во Всероссийской олимпиаде.
Есть сайты с архивами задач, такие как Timus Online Judge и «Дистанционная подготовка по информатике», справочник по алгоритмам с готовыми реализациями MAXimal или сайт CodeForces, где регулярно проводятся соревнования и олимпиады.
Такой подход часто используют ребята, у которых не очень большая нагрузка в школе и есть время на самостоятельную работу. Можно достичь высоких результатов, решая задачи самостоятельно, но здесь важна внутренняя мотивация и дисциплина.
Выбор вуза и учёба
Я поступала в вуз без вступительных испытаний как призёр Всероссийской олимпиады. Выбрала программу «Прикладная математика и информатика» в СПбАУ (РАН), она сейчас переехала в питерскую Вышку. Там учились многие знакомые мне сильные олимпиадники, работали преподаватели из ЛКШ, например Сергей Копелиович — золотой медалист международных олимпиад по информатике, и я знала, что программа будет сложной и современной. Мне было важно, чтобы программа была актуальной: технологии в сфере IT развиваются очень быстро.
Хорошо, когда есть возможность учиться у сотрудников компаний — у нас преподают сотрудники JetBrains, «Яндекса» и не только
На первом и втором курсах в основном дают необходимую базу. Много математики — курс алгебры, математический анализ, дискретная математика, математическая логика и теория вероятности. Кроме того — программирование: годовой курс С++, годовой курс по Java, Unix, Python, функциональное программирование и Haskell, операционные системы и сильный курс алгоритмов. С третьего курса студенты выбирают индивидуальные образовательные траектории, я выбрала трек «Машинное обучение и анализ данных». Сначала на нём изучают необходимые подготовительные дисциплины, затем — методы машинного обучения и его применение в разных областях.
Эти знания помогли и во время собеседований, и на стажировках. Задачи на собеседованиях были проще, чем те, что мы решали на курсе алгоритмов. На стажировках задания требовали знаний в разных областях, но даже читая чужой код, я понимала его быстрее, потому что разбиралась в паттернах проектирования.
Если чувствуете, что нагрузка в университете не очень большая и не хватает новых знаний, я бы советовала самостоятельно проходить онлайн-курсы на Stepik, Coursera или заниматься очно в «Школе анализа данных» «Яндекса» и Computer Science Center. Это поможет следить за развитием технологий и избавит от необходимости учиться всему заново на работе.
Программа стажировок Google STEP
Большинство студентов нашей программы уже после второго курса стажируются в IT-компаниях, я начала на первом. После успешной стажировки вполне реально получить от компании приглашение на работу и воспользоваться им после выпуска.
Осенью первого курса я подала заявку на программу Google STEP. Она позволяет участвовать в стажировках студентам младших курсов, не имеющим достаточного опыта в разработке, но увлечённым Computer Science. Существуют и классические стажировки Google для студентов бакалавриата, магистратуры и аспирантуры. Найти информацию о программах и подать заявку можно через сайт Google Careers или — если есть возможность — через знакомого сотрудника компании.
Google советует добавлять в резюме стажёра информацию о ваших проектах, в том числе школьных и курсовых, об опыте волонтёрства или работы с частичной занятостью и особенно подчёркивать знания и навыки, которые соответствуют описанию вакансии. Я в своём первом резюме могла указать только успехи в спортивном программировании: обучение и преподавание в Летней компьютерной школе, а также призовые места на Всероссийской и нескольких других олимпиадах по информатике.
Нужно будет также заполнить анкету и подробнее рассказать в ней о своём опыте, предпочтительных сферах программирования и выбрать несколько городов, где хотелось бы стажироваться. Если заявка заинтересует рекрутёра, кандидату могут предложить пройти контест на HackerRank — решить несколько алгоритмических задач за ограниченное время — или пройти Triplebyte Quiz с вопросами по алгоритмам, разработке программного обеспечения и устройству низкоуровневых систем. На следующем этапе нужно пройти несколько технических собеседований, и, если собеседования прошли хорошо, начинается стадия подбора проекта.
Первая стажировка: офис Google в Цюрихе
Во время первой стажировки я работала в команде Search Infrastructure в офисе Google в Цюрихе. Эта команда работает над отладкой процесса поиска. Я справилась с задачами, которые ставили мне на время стажировки, а также освоила внутренние инструменты для разработчиков и поняла, каково это — работать в большой компании.
Поначалу из-за языкового барьера было очень тяжело: раньше я использовала английский только в рамках занятий в школе и в университете. Проходить собеседования и разговаривать о проекте было проще: там сухой технический язык, и все необходимые термины я знала.
А вот во время разговоров за кофе в первый рабочий день я чуть не расплакалась, потому что понимала только ключевые слова и не могла выразить то, что хотела
Офис Google действительно такой, как о нём говорят: уютное рабочее пространство, комнаты с развлечениями, места для отдыха, спортзал, столовая с трёхразовым питанием, микрокухни с напитками и закусками на каждом этаже. Во время работы можно сделать перерыв на кофе или на сеанс массажа, а можно сходить на занятие йогой прямо в офисе.
Цюрихский офисСтажировки оплачиваются, и зарплата в Google Zurich считается самой высокой среди офисов Google в Европе. Компания напрямую не занимается поиском жилья для стажёров, но связывает с теми, кто может помочь, и выплачивает единоразовый бонус (relocation bonus). Он равен примерно двум зарплатам, и предполагается, что стажёр потратит эти деньги на жильё и транспорт.
Цюрихский офисЛетние каникулы в университете длятся два месяца, а стажировка — три, поэтому в сентябре мне приходилось совмещать работу и учёбу. Лекции на нашем курсе снимают на видео, и это помогало быть в курсе происходящего, но смотреть их полностью и сдавать домашние задания в срок я не успевала. Часто приходилось сидеть над домашними заданиями до трёх часов ночи и все выходные, хотя со многими преподавателями удалось договориться об отсрочке. Тогда я поняла, что с преподавателями необходимо договариваться в любом случае, и в будущем старалась делать это заранее.
Стажировки в офисах Google в Лондоне и Калифорнии
Если получить хорошие отзывы после стажировки, на следующую удаётся попасть без дополнительных собеседований. Летом после второго курса я поехала в Лондон, а на следующий год — в Калифорнию.
В Лондоне я работала в команде, которая была частью Google Play, и создавала прототип системы, в реальном времени показывающей разработчикам приложений различные метрики — количество скачиваний, удалений или сбоев приложения. Многие инструменты были уже знакомы после первой стажировки, и я смогла очень быстро влиться в работу. В целом я чувствовала себя намного более уверенно и уже не боялась отдохнуть во время рабочего дня или отойти на микрокухню, как это было в первый раз. Для работы над front-end частью проекта мне пришлось выучить язык Dart. Изучение и использование нового языка во время стажировки — обычная практика. С таким сталкивалась и я, и многие мои знакомые, не стоит бояться или отклонять из-за этого проект.
Лондонский офисВ лондонском офисе часто проводят мероприятия и вечеринки. Например, каждую пятницу — вечеринка TGIF (Thank Google it’s Friday), которая обычно привязана к какой-то теме или событию: день рождения Google, 80’s party, Pride. Есть сервис для коротких встреч со случайными сотрудниками: можно каждую неделю обедать с новым человеком и подтягивать свой уровень английского.
В Калифорнии я работала внутри команды Core и занималась инфраструктурой для обработки личных данных, соблюдающей политику конфиденциальности. Во время этой стажировки я писала много кода на С++ и работала над более сложными и ответственными задачами, чем раньше. Я сама разрабатывала архитектуру новой системы и принимала design decisions, консультируясь с менеджером. Вместо того чтобы дать готовый ответ, обычно он спрашивал: «А как бы ты сделала это сама?» — и я могла на равных придумывать и обсуждать с ним плюсы и минусы возможных решений.
Калифорнийский офисС техническими навыками у меня не было проблем, но мне рекомендовали развивать communication skills (навыки общения) как не менее важный компонент успешной работы в команде. Однажды менеджер сказал: «За неделю тебе нужно обратиться с вопросом минимум к трём людям из команды», — и я выдумывала вопросы, чтобы выполнить задание.
Калифорнийский офисВ другой статье я подробно рассказала, как проходит процесс собеседований, чем я занималась на стажировках и чем офисы отличаются друг от друга.
Планы на будущее
Стажёры с хорошими отзывами могут получить предложение о постоянной работе в Google («сконвертиться»). Во время третьей стажировки я начала Conversion Process, и мне разрешили не участвовать в дополнительных собеседованиях, но я всё-таки отказалась от продолжения. Вместо работы я думаю поехать на стажировку, например, в Нью-Йорк: образ жизни и работа там наверняка будут отличаться от той же Калифорнии.
Стажировки позволили мне побывать в разных странах и получить разнообразный опыт: рабочие процессы, инструменты и коммуникация различаются от команды к команде. Однако сейчас мне не хотелось бы переезжать за границу — скорее всего, пока останусь в России и пойду учиться в магистратуру. Параллельно планирую работать, а летом продолжать ездить на стажировки. В более далёкой перспективе хотелось бы устроиться на фултайм в Google в Европе, лучше всего — в Швейцарии.