Андрей Савченко. Взгляд изнутри на Google Summer of Code

Взгляд изнутри на Google Summer of Code

Как устроена программа Google Summer of Code (GSoC)? В статье даны практические рекомендации по участию в программе как для организаций, так и для студентов

Программа Google Summer of Code [1] (GSoC) существует уже 15-й год и является хорошим способом для студентов присоединиться к разработке разнообразных свободных проектов, получить богатый технический и социальный опыт. Проекты, в свою очередь, получают новых разработчиков и решение своих задач.

Главная идея GSoC заключается в предоставлении студентам возможности заняться летом разработкой свободного программного обеспечения (СПО) за разумную стипендию вместо иных сезонных подработок. При этом уделяется внимание предоставлению всем участникам равных возможностей.

Основные цели программы:

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

В программе есть две основных сущности:

    организация – группа разработчиков свободного проекта или группы проектов, готовая уделять необходимое время для кураторства студентов в ходе программы и имеющая подходящие задачи,
    студент – любой учащийся вузов, включая аспирантов, желающий участвовать в разработке СПО в течение лета и готовый выделять на это 30-40 часов в неделю.

Заявки

Заявки подают как организации, так и студенты. Сроки подачи заявок и публикации результатов их рассмотрения регламентируются расписанием программы [2].

Для всех участников очень важно соблюдать установленные сроки подачи заявок и отчетов. Они известны заранее еще до начала GSoC [2]. При несоблюдении сроков заявка или отчет приниматься не будет со всеми вытекающими последствиями. Исключений нет ни для кого ни при каких условиях и ни по каким причинам. Поэтому настоятельно рекомендуется подавать все документы заранее: всегда возможен технический сбой, проблемы с интернетом или иные неприятности в последний момент.

Заявки организаций

Принять участие в качестве организации может любой активно развиваемый СПО проект, имеющий в наличии хотя бы двух менторов (разработчиков, готовых быть наставниками для студентов, участвующих в организации) и двух администраторов (один и тот же участник может совмещать роли ментора и администратора). Проект должен иметь релизы и достаточную активность разработки (обычно это оценивается по коммитам в git или иной VCS).

Программа GSoC нацелена на диверсификацию участников: ежегодно количество участвующих организаций возрастает. При этом никому не гарантируется ежегодное участие: даже организацию-ветерана могут не взять, чтоб дать возможность поучаствовать другим – например, Mozilla не приняли в 2015 году.

Если нет желания или возможности принять участие в качестве самостоятельной организации, можно попроситься в одну из зотничнных организаций, берущих под свое крыло различные проекты по определенным тематикам. Доступен неофициальный список таких организаций за 2018 год [3]. Зонтичными могут быть как организации по широкому спектру направлений, например Debian и Linux Foundation, так и специализированные в определенной области, например OpenAstronomy, OpenChemistry.

Каждая организация подготавливает идеи работ для студентов и наставников студентов для данных работ. Важно подготовить и качественно оформить хорошо проработанные идеи на сайте организации: если они будут оформлены в виде «ищите задачи на нашей вики или багзилле», велика вероятность того, что организация не пройдет конкурс.

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

С другой стороны, идея должна быть достаточной по объему для трех месяцев работы исходя из 30-40 часов в неделю.

Допускаются к участию только проекты по написанию кода ПО: нельзя делать основной темой работы улучшение документации или дизайна, переводы и т.п., но, разумеется, они могут быть вспомогательной частью работы. Полезно ознакомиться с принятыми проектами за прошлые годы [4] и пользоваться их примером.

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

Список принятых организаций 2019 года будет доступен 26 февраля.

Заявки студентов

Студенты могут подавать заявки с 25 марта по 9 апреля. Рекомендуется заранее связываться с проектами, в которых студент заинтересован, для того, чтобы освоиться с проектом, его сообществом, инфраструктурой.

Участвовать могут любые совершеннолетние учащиеся высших учебных заведений – как студенты, так и аспиранты, являющиеся таковыми на день публикации результатов отбора, который будет 6 мая в 2019 году. В том числе допускаются учащиеся зачисленные, но еще не начавшие фактическое обучение, и выпускники, которые на 6 мая еще являются студентами (или аспирантами), но заканчивают обучение до окончания программы GSoC.

Важно своевременно предоставить Google документы, подтверждающие факт обучения в вузе, до 6 мая, а лучше вместе с подачей заявки. Обычно достаточно взять справку из деканата, сделать ее нотариально заверенный перевод на английский и загрузить отсканированные документы. К сожалению, ежегодно имеют место случаи, когда студенты не допускаются к программе из-за не предоставленных вовремя документов.

Каждый студент может участвовать в программе не больше двух раз (речь идет про пройденный отбор и фактическое участие в программе). Подавать заявки можно в несколько разных проектов, но не более трех. Подготовка заявки – ответственный и трудоемкий процесс.

Отбор студентов осуществляется организациями на конкурсной основе. Обычной практикой в дополнение к рассмотрению заявки студента являются небольшие задания. Традиционно большинство проектов просят исправить несколько простых багов. Главная цель подобных задач – убедиться в том, что кандидат обладает необходимыми навыками для работы с инструментарием и кодовой базой проекта, владеет необходимыми знаниями языков программирования. Речь не идет про совершенное владение ими, но студент должен уметь писать код на уровне, приемлемом для решения поставленных задач. Владения языком на уровне «Hello, World!» будет явно недостаточно.

Вполне разумно указать в заявке ссылки на СПО проектов кандидата или проекты с его вкладом, если таковые есть, дать ссылку на публичные репозитории, например на GitHub, чтобы организация могла ознакомиться с реальными навыками и опытом кандидата. Разумеется, это должен быть код, который не стыдно показать другим.

Самая важная часть студенческой заявки – это детально проработанный план работ. Именно по нему проводится экспертиза соответствия студента и проекта, именно этот план будет лежать в основе ежемесячной оценки работы студента. Желательно, чтоб план содержал понедельный список планируемой работы.

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

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

Также важно указывать контакты, часы доступности (поскольку разные участники проекта обычно из разных временных зон) и дни планируемого отсутствия (например, экзамены). Важно честно указывать всю имеющуюся информацию, особенно о планируемом отсутствии, поскольку оно допустимо программой в течение одной-двух недель. В ряде случаев возможен индивидуальный подход: например, студент по согласованию с организацией начинает работу раньше, но отсутствует дольше, к примеру, из-за экзаменационной сессии. В то же время, если планируемое отсутствие было скрыто на этапе подачи заявки, такой студент может ибудет изгнан из программы.

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

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

Конкурсный отбор

Место, выделяемое организации под проект и студента, называется слотом в терминологии GSoC.

Каждая организация запрашивает интервал [min. . max] слотов и самостоятельно распределяет по ним желаемые студенческие заявки, где min – минимальное число слотов, которое организация хотела бы получить для лучших кандидатов, а max – максимальное число мест, которое организация готова обеспечить сильными студентами, в успешности проектов которых есть полная уверенность.

Google старается предоставить хотя бы min слотов каждой организации (при условии разумности запрошенного значения), но новые организации обычно получают в первый год только один слот, изредка два.

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

Google не назначает принятых студентов, а лишь выделяет места, которые организации самостоятельно распределяют, но может отклонить назначенную организацией заявку. Обычно это происходит из-за проблем с документами, например если студент не предоставил документы, что он является студентом на момент объявления результатов конкурсного отбора (в 2019 году это будет 6 мая).

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

Следует обратить внимание, что организациям категорически запрещено под угрозой дисквалификации сообщать студентам заранее – до официального оглашения результатов 6 мая 18:00 UTC – о том, берет их организация или нет. Поэтому студентам не следует задавать такие вопросы своим менторам или администраторам.

На рис. 1 приведена статистика по числу студентов, менторов и организаций за все годы проведения GSoC на основе официальных данных [5]. Прослеживается общая тенденция на увеличение числа студентов и небольшой рост числа организаций. Учитывая принцип отсутствия гарантий дальнейшего участия даже для проектов-ветеранов, эта зависимость наглядно демонстрирует практически осуществимую возможность попадания в программу для новых участников, как студентов, так и организаций.

Участие

Официально период написания кода начинается 27 мая и длится до 26 августа. По обоюдному согласию между организацией, наставником и студентом возможно начать работу раньше, например, для компенсации времени, выпадающего из-за сдачи экзаменов.

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

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

От студента ожидается полноценная работа (30-40 часов) 5 дней в неделю с обязательными еженедельными отчетами о проделанной работе, кроме того, многие организации практикуют краткие ежедневные отчеты: итоги за день и план на завтра.

Затраты времени наставника сильно варьируются в зависимости от уровня подготовки и самостоятельности студента (поэтому не следует брать слабых студентов!), но обычно находится в интервале от 4 до 10 часов в неделю. Поэтому редко когда наставник может вести двух и более студентов.

С педагогической точки зрения GSoC похож на дипломную работу: ментору требуется помогать преодолевать студенту возникающие сложности, направлять общее развитие проекта, корректировать задачи и цели с учетом обстоятельств, но не предполагается обучение базовым навыкам программирования или смежных задач; также важно, чтоб код студентом писался самостоятельно.

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

Финансирование

Организации имеют право свободно распоряжаться полученными средствами по своему усмотрению для любых целей, но Google их выделяет из расчета трат на определенные цели, таким образом, выполнение этих целей приветствуется, но не требуется. Каждая организация получает $2200 для участия двух менторов или администраторов в ежегодном саммите GSoC, который проходит после завершения программы; еще $500 выделяется на участие студента в мероприятиях организации и по $500 за каждого студента независимо от успешности его работы (таким образом, организация может спокойно исключать неуспевающих студентов без негативных последствий для себя).

Следует отметить, что если ментор вовремя не выполняет ежемесячную оценку работы студента, этот ментор лишается права посетить саммит менторов в этом году и организация теряет $1100 за каждый не сданный вовремя отчет (пока не израсходуются $2200). Как мы видим в очередной раз, Google очень серьезно относится к установленным срокам.

До 2016 года включительно все студенты получали $5000 в случае успешного выполнения программы. Затем на очередном GSoC Mentor Summit сообщество решило, что это несправедливо, поскольку стоимость жизни в разных странах существенным образом различается.

Поэтому начиная с 2017 года сумма зависит от страны и рассчитывается по паритету покупательской способности этой страны изначально с вилкой $2400-6600, которая изменилась на $3000-6600 с 2019 года.

Сумма выплат для студентов из России с 2017 года составляла $3600, в 2019 году будет $3000. Это неприятное для наших студентов изменение, но, пожалуй, справедливое по отношению к остальным участникам.

Следует отметить, что в РФ следует уплачивать подоходный налог с получаемой стипендии, поскольку на основании ст. 217 Налогового кодекса РФ и письма Минфина РФ от 26.07.2016 № 03-04-06/43564 установлен ограниченный перечень стипендий, не облагаемых налогом, к которым стипендии Google не относятся.
Результаты работы

В результате выполнения работ должен быть сформирован репозиторий с созданным кодом под СПО лицензией, а также документация по его использованию. Организация не обязана принимать его в основной репозиторий, но это рекомендуется. Всячески приветствуется закрепление студентов в проектах и продолжение их вклада в будущем – в этом основная цель программы.

Большинство принятых заявок оказались успешными (и они составляют чуть больше четверти от общего числа поданных заявок), и часть этих студентов закрепилась в сообществе Gentoo, в том числе в активной разработке. Таким образом, удалось достичь главной цели проекта – привлечь новых разработчиков в сообщество.

Итак, программа GSoC вполне доступна для всех желающих, как студентов, так и организаций, и дает вполне осязаемый вклад в развитие СПО проектов, не говоря о потрясающем практическом опыте, который получают студенты в ходе выполнения работы. Новые участники всегда приветствуются. Удачи!