Привет! Меня зовут Денис Александров, и помимо работы в качестве Android-разработчика, я уже более семи лет готовлю стажеров в разных компаниях и занимаюсь студенческими практиками. Мне приходилось и работать с перспективными студентами персонально, и проводить групповые стажировки с отсевом. Я собрал самые важные и полезные тонкости проведения стажировок для студентов, благодаря которым мы делаем наши стажировки максимально полезными и эффективными для всех ее участников.  Когда (и кого) начинать стажировать  Каждый работодатель хочет видеть в кандидате сотрудника, готового уже завтра полноценно приступить к работе. Но на практике даже опытным разработчикам требуется время для «акклиматизации». Что уж говорить о студентах или вчерашних выпускниках. Поэтому в случае набора студентов возникает выбор:  Не брать студентов, а дождаться их выпуска — с надеждой, что выпускники будут лучше подготовлены к рабочей деятельности.  Работать со студентами, но дать им возможность успешно закончить учебу.  Брать студентов в штат без учета их образовательной деятельности.  Мы стараемся придерживаться второго подхода, и на это есть несколько причин.   Во-первых, борьба за достойных кандидатов начинается в вузе. Крайне редко встречаются талантливые, но недооцененные студенты, которые не смогли найти себе работу еще в годы учебы.   Во-вторых, даже самый талантливый студент сначала попадает на стажировку. Ему еще только предстоит сопоставить теоретические знания и реальную работу.  В-третьих, многие студенты не могут сразу понять, чем же они хотят заниматься после учебы. С такими студентами очень важно наладить связь как можно раньше, а лучше вообще быть первым. Этот первый опыт работы во многом определяет дальнейшую судьбу айтишника (т. н. синдром утенка).   Студенты редко выбирают один из путей — учеба или стажировка — сознательно. Большинство все-таки хотят получить и диплом, и предложение работы. Конечно, бывают ситуации, когда приходится выбирать, но в действительности большинство стажеров совмещают работу и учебу на протяжении нескольких лет. Я поддерживаю этот выбор, и я стараюсь организовать стажировки для студентов с дальнейшим полным трудоустройством.  Я более 11 лет работаю в преподавании, и сейчас ребята, которых я готовил еще к ЕГЭ, уже работают в крупных компаниях. Я периодически пересекаюсь со своими бывшими студентами на хакатонах и олимпиадах, и ставлю себе мысленные заметки «вот студент, который прошел ожидаемый путь развития; было бы неплохо посмотреть, как он может применить опыт на проекте, где я сейчас работаю». Конечно, это очень долгосрочная и туманная по результатам работа, но в плане результатов игра стоит свеч.  Нашу работу со студентами можно разделить на 3 основных этапа:  Работа в вузе. Для того, чтобы заинтересовать самых перспективных студентов, мы начинаем работу не с рекламы собственного блога или группы в социальных сетях, а с онлайн и офлайн работы в вузе — лекции, семинары, участие в вузовских мероприятиях.   Студенческая практика. Это обязательная часть обучения в вузе, цель которой — закрепить полученные знания. Каждый учащийся должен «найти» себе место для практики и отчитаться о ней, так что со стороны студентов «спрос» всегда есть. Но бизнес заинтересован в том, что привлечь самых талантливых и мотивированных, и для этого мы так много работаем на 1 этапе.  Стажировка. Это не обязательная часть обучения, которую мы предлагаем лишь тем, кто хорошо себя показал на 2 этапе. Мы принимаем студента в штат компании и платим ему зарплату.  Сотрудничество с вузами  Вот что мы делаем для того, чтобы найти и привлечь лучших студентов:  Участие в университетских хакатонах, олимпиадах и дипломных работах в качестве экспертов.   Преподавание в вузе.  Открытые занятия и семинары на территории вуза.  Студенческая практика.  Конечные цели у вуза и у частных компаний, как правило, разные. Несмотря на это, я считаю, что из этого сотрудничества оба участника могут извлечь пользу.  Считается, что вуз должен полностью подготовить студентов к рабочей деятельности. Но это не совсем так. Со стороны Android-разработки могу сказать, что актуальность существующих технологий будет пересмотрена еще до окончания учебы сегодняшних первокурсников. И даже если обучать студентов самым трендовым технологиям, это не дает гарантии востребованности спустя 5 лет, потому что невозможно угадать, какие будут требования к разработчику через 4 года. Впрочем, это и не нужно.  В вузе студента стоит научить базовым вещам — языку C++, принципам ассемблирования и компиляции, способам организации памяти на «железном» уровне и др. Да, этого не будет в списке требований к Android-кандидату. Как, наверно, не будет и в 98% других вакансий. Вуз дает ту теоретическую базу, которая позволяет, например, видеть протекающие дыры в абстракциях (по выражению Джоэла Спольски, сформулировавшего Закон дырявых абстракций). А вот то, что наш студент увидит в вакансиях, когда станет кандидатом, постоянно меняется — каждый год появляются новые технологии, фреймворки, версии языков программирования и др. Программисты учатся постоянно, и для этого гораздо важнее широкий базовый технический профиль, чем знание модных фреймворков. Гораздо проще самостоятельно изучить платформенное API и документацию к фреймворку, чем наверстать пробелы в знании атомарных и битовых операций.   Со стороны промышленной разработки я могу точно сказать — какими бы полными ни были требования к разработчику, все равно придется учиться. Вообще самообразование для разработчика, на мой взгляд, самый важный навык. Практически все необходимые знания находятся парой кликов. И нам жизненно необходимо уметь находить и применять эти знания.  Но ту необходимую теоретическую базу, которую дает университет, нужно еще «привязать» к жизни. И это можно увидеть только там, где идет разработка настоящих проектов — в коммерческих компаниях. Еще до начала непосредственно практик и стажировок мы помогаем вузу с экспертизой и университетскими активностями — здесь взгляд со стороны бизнеса очень полезен.   Многие студенческие проекты страдают не столько от низкой степени технической проработки (как будто в большом бизнесе такое не встречается!), сколько от непонимания в целом — зачем и для кого предназначен объект исследования. Студентам всегда тяжело даются фреймворки, процессы разработки и прочие «бытовые» вещи в IT-разработке. Без практики знания о таких вещах сложно усваиваются. Мы стараемся помочь студентам разобраться в этих процессах — подсказываем, где применение фреймворка поможет сэкономить драгоценное на хакатоне время, проводим игровые занятия с разбором ролей в команде разработки и в бизнес-процессах.  В прошлом году я прочитал курс лекций по инструментам и технологиям разработки ПО для студентов последнего курса кафедры разработки ПО в Южном федеральном университете. В качестве практических примеров я всегда рассматриваю максимально прикладные задачи — то, с чем мне лично приходится сталкиваться. Спустя полгода часть студентов пришла к нам в компанию на практику. И общее понимание наших производственных процессов очень помогло мне выстроить обучение со студентами.  Важно не перегнуть палку — студенческий проект может быть не совсем продуман и в меру неряшлив. Гораздо важнее показать базовые принципы формирования требований к проектам и коду: почему важно понимать конечного пользователя, как делать систему гибкой и адаптивной под изменяющиеся требования, как учитывать юридические тонкости при работе с данными и т. п.  Вообще для бизнеса инвестиции в работу в вузах — одни из самых неоднозначных в плане результата. Все будет зависеть от заинтересованности преподавательского и управленческого состава и бюрократии, которая все активнее поглощает образовательные процессы. Это долгосрочные инвестиции, результаты которых можно увидеть только спустя много лет. Однако если ваша работа регулярная и вы планируете набирать сотрудников еще много лет, опыт работы с вузом будет очень полезен.  Студенческая практика  Я встречал множество способов организации студенческой практики — от «принеси диплом на подпись в последний день» до «вот тебе бизнес-фича в реальном проекте, у тебя как раз две недели, должен успеть».  Мы практикуем групповые студенческие работы. Во время прохождения такой практики студенты делают совместный проект под присмотром практикующего специалиста.  Пару раз в неделю мы организуем занятия, на которых разбираем текущий прогресс по работам либо изучаем необходимые материалы — архитектуру приложения, платформенные или языковые особенности и другие подобные вопросы.  Наш воркшоп QARATE. В нем приняли участие в том числе и мои стажеры.  Обязательное время в офисе и минимум часов мы не обозначаем. Посещать занятия тоже не обязательно — материалы можно изучить самостоятельно (хотя это и очень сложно).  Практика у разных курсов длится по-разному — от 2 до 10 недель. Но кроме этого мы периодически устраиваем расширенные практики с возможностью дальнейшей стажировки. В этом случае практика будет длиться в среднем 6-10 недель. Студенты могут завершить практику точно в срок, регламентированный вузом, получить необходимые документы и возвращаться к учебе. В случае же, если студент выберет, успешно завершит нашу «расширенную» практику и хорошо себя проявит — мы можем предложить ему дальнейшую стажировку.   Есть способ «обойти» практику. Если у студента уже есть неплохой проект, портфолио или опыт стажировки в другой компании, мы готовы рассмотреть вариант «перезачесть» практику.  В качестве дополнительного стимула к прохождению практики, по ее завершении студенты получают проекты в свое портфолио и персональные рекомендации от менторов. Мы не практикуем грамоты или сертификаты — только реальные результаты работы и персональные отзывы. Для меня главным критерием готовности человека к стажировке является умение быстро и в необходимой мере учиться. Так или иначе, стажировка — это процесс интеграции в реальные проекты и процессы компании. Здесь просто необходимо научиться учиться. Если студент проявляет все необходимые предпосылки, мы предлагаем ему стажировку.  Стажировка  Итак, если студент хорошо себя проявил, мы можем предложить ему стажировку. В нашем понимании стажировка студентов — процесс обучения необходимым процессам и технологиям для участия в «боевых» задачах. Очень важно дать начинающему разработчику полноценные знания о работе, научить разбираться коде, осваивать библиотеки.   Мы сформулировали несколько причин, почему стоит максимально отложить привлечение начинающих специалистов к боевым проектам:  Для начала нужно дать возможность ошибиться. Не все в разработке получается с первого раза, и возможность начать сначала — необходимость.  Поэтапное внедрение в процессы. Тяжело с ходу разобраться во всех особенностях работы в IT. Стажировка — один из способов поэтапного внедрения в компанию.  Нужно научить разработчика глубоко разбираться в проблеме. Не всегда боевые условия позволяют выделить необходимое для этого время.  У студентов иногда случается сессия, и в этот момент им лучше иметь возможность спокойно сдать ее. В случае с реальными проектами далеко не всегда удается безболезненно это сделать.  Стажировка и стресс  Стажирующиеся студенты неизбежно попадают в стрессовую ситуацию: нужно и на работу ходить, и про учебу не забывать. Так как работодатель является непосредственным участником этой ситуации, он может как содействовать, так и усугубить и без того нелегкое состояние студента.  Что мы делаем для поддержания студента:  Содействие в написании дипломной работы. Стараемся подобрать тему работы и стажировку таким образом, чтобы время, потраченное у нас в компании, помогло в написании и защите дипломной работы.  Свободный график, который определяет сам студент. Не совсем удобно для менторов, но загонять студента в невыполнимые сроки — пожалуй, худшее решение.  Учебные каникулы для сдачи сессии. Так как под стажировкой мы понимаем в первую очередь образовательный процесс, мы стараемся не задействовать стажеров в коммерческой разработке. Это позволит студенту безболезненно взять отпуск и сдать сессию или долги.  Возможность плавно наращивать темп. Есть лишь минимально необходимое количество часов, верхняя планка согласовывается по готовности с самим стажером.  Стажировка и оплата  Да, как правило, стажировки оплачиваются. Стажировка — это процесс подготовки сотрудника к работе — обучение, знакомство с компанией и командой и пр. Безусловно, основной интерес компании — это получить сотрудника для решения «боевых задач».   Все позиции стажеров у нас оплачиваются. Кроме этого, у всех стажеров регламентируется рабочее время и количество часов в неделю (в соответствии с принятой ставкой). Все «по-взрослому» — даже если сотрудник не сразу приступает к «боевым» проектам, процесс работы все равно соблюдается — код ревью, работа в команде и с менеджером.  Я считаю, что отсутствие хоть какой-то оплаты работы стажеров говорит лишь о том, что на него не делают серьезную ставку, либо попросту эксплуатируют. Если же компания готовит хороший кадр, в любом случае должна присутствовать компенсация временных затрат.  Что считается успешным завершением стажировки В первую очередь — полная интеграция в процессы компании. К счастью, студенты в большинстве случаев без проблем вливаются в новую компанию. Вторым, но не менее важным, критерием является самостоятельное обучение. Самое важное свойство Junior-разработчика — навык самостоятельно найти, изучить и применить технологию. Работа разработчика напрямую связана с этим. На следующей итерации, к уровню Middle, он будет учиться самостоятельно отфильтровывать необходимую информацию, но пока хватит и поиска.  В-третьих, это умение самостоятельной экспертизы собственного кода. Программисты не умеют писать идеальный код. И даже хороший код приходится переписывать по нескольку раз. Крайне важно владеть самокритикой для дальнейшего роста.  Ну и наконец, в-четвертых, это готовность (в первую очередь временнАя) к работе на реальном проекте. Здесь важно иметь необходимое для работы количество часов, а также возможность участия в плановых созвонах и совещаниях.   Что же касается широко распространённой во многих компаниях практики итогового тестирования стажёров, я категорически не одобряю различные тесты на знание именно языков программирования. Я встречал кандидатов на работу, буквально выучивших самые популярные вопросы по разработке. К сожалению, с реальным умением программировать это практически никак не связано.  И наконец, после того, как все критерии соблюдены, мы можем предложить стажеру позицию разработчика.  Что дальше? А дальше — «боевой» проект. Здесь начинающий разработчик сталкивается с суровыми буднями программиста. Например, узнает, что код далеко не всегда пишется по канонам. Узнает, как появляются костыли. Разбирается, почему рефакторинг — вещь нужная, но редко выполнимая. В общем, продолжает учебу, потому что на мой взгляд самое лучшее в разработке — вечное обучение.  Кроме этого, студент принимает участие в экспертизе других разработчиков (попросту code review). Я считаю, что для этого крайне важно привлекать специалистов разных уровней. Так и дилетантские ошибки найти проще (а опытные разработчики часто их пропускают), и вырасти команде разработки проще. В конце концов, Junior-разработчику тоже нужно разбираться в чужом коде, и лучше начинать это делать уже на этапе code review.  Вместо выводов  Я считаю, что ключевым и решающим фактором в успешности стажировки является мотивация и исполнительность стажера. Тем не менее, я как организатор могу подкрепить эту мотивацию и обеспечить условия для того, чтобы поставленные перед стажером задачи были выполнены в срок.  Для того, чтобы эти факторы сложились, очень важно еще на этапе планирования понимать, что хочет получить каждая сторона и как этих результатов достичь. Технические же детали в момент уже проведения стажировки практически всегда перекраиваются.  В апреле 2020 года мы были вынуждены целиком изменить формат практики и стажировки на онлайн. Само собой, это создало целый ворох проблем — от обеспеченности техникой до заключения договоров на стажировку.  Тем не менее, мы помогли группе студентов закрыть свои учебные обязательства и познакомиться с миром коммерческой разработки. А у нас появился новый стажер.  Полезные ссылки:  «Зачем студенту стажировка: 7 аргументов “за”» на hh.ru  «Рабочие будни программиста: ожидания и реальность» в блоге Mail.ru Group  «Топ-10 качество программиста. Мнение лучших работодателей» на geekbrains.ru  Android разработчик