GSoC с Shogun: опыт и случайные мысли

Этим летом я занимался GSoC с shogun, библиотекой машинного обучения с открытым исходным кодом, написанной на C++. Я многому научился и получил от этого массу удовольствия. В этом сообщении в блоге я пишу о некоторых своих мыслях о событиях, которые я пережил этим летом.

Вовлечены

Это началось благодаря сообщениям в блоге, написанным предыдущим сёгуном GSoCer Shubham Shukla. Он не только заинтриговал меня проектом, чтобы клонировать его и начать с ним играть, но и написал гайд, который помог мне с моим первым пиаром. Получение отзывов от сообщества, безусловно, меня заинтересовало, а затем, что меня действительно зацепило и взорвало мой мозг, так это метапрограммирование шаблонов. В то время я понятия не имел об этой концепции, и все, что я знал о шаблонах, пришло в основном из Java (позже я обнаружил, что дженерики Java также полны по Тьюрингу!). Я специально потратил много времени, чтобы разобраться в этом файле, который упоминался в комментариях в том первом PR. Далее последовала типичная история принятия; то есть: внести небольшие исправления, представить предложение и поддерживать связь с наставниками.

Основные трудности периода кодирования

Я сообщил своим наставникам, что начну через неделю из-за экзаменов, и они не возражали (они классные!). И к началу периода кодинга я осознавал основные проблемы, с которыми столкнусь, и это не технические проблемы. Им не хватает дисциплины и нерегулярный режим сна. Я читал об опыте других людей в GSoC, и многие из них сказали, что работали по 8 часов в день, каждый день. Некоторые даже сообщали, что работали больше, почти с момента пробуждения до сна. Я думал, что у меня нет ни единого шанса, черт возьми, я мог бы сделать это. Я довольно хорошо себя знаю, и без веских причин что-то делать, я не буду этого делать, если только мне это не по душе. Веская причина будет в том, что через 8 часов будет экзамен или что-то подобное, а не в том, чтобы достичь далекой цели! Точно так же без веской причины мой режим сна переходит в ужасное состояние, когда я не сплю всю ночь и сплю по утрам. И, как я и ожидал, это действительно были главные препятствия, и я их не преодолел! На самом деле почти все недели я не работал по 8 часов в день, а вместо этого работал по 10-12 часов в течение 3 дней, а оставшуюся часть недели я лениво работал по 3-4 часа. Мне определенно нужно (ред) разработать распорядок дня!

Увлечение С++

В период знакомства и в первый месяц GSoC я посвятил много времени тому, чтобы как можно больше узнать о языке. Это означало, что я слушал множество докладов cppcon и понимал стандартную библиотеку. Это было необходимо для правильного понимания структуры параметров shogun, в которой использовались некоторые расширенные функции C++. И это оказалось очень полезным, когда я писал набросок кода о серьезном рефакторинге для базового класса shogun и при работе над своим первым подпроектом. Однако это увлечение начало исчезать на втором и третьем месяцах. Я заметил огромные накладные расходы, которые этот язык несет для достижения всего, чего вы хотите. Из-за его сложности большую часть времени вы больше думаете об «элегантности» и «правильном пути», вместо того, чтобы делать то, что требуется. Но это также может быть потому, что я все еще неопытен. Однако очень приятно, когда вы, наконец, закончите писать функциональный и элегантный код.

Улучшенные навыки чтения кода

Возможно, это самый полезный навык программирования, который я приобрел этим летом, и он очень помог мне в моем проекте. Полгода назад разобраться в коде, написанном не мной, было довольно сложно и отнимало много времени, при условии, что я не испугался и вообще не пытался. Многие коды казались мне загадочными, и это было похоже на написанные заклинания, предназначенные для выполнения магических действий, которые далеки от досягаемости для простого смертного вроде меня. Хорошо, это может быть немного преувеличением, однако я очень рад, что теперь могу просматривать различные виды кода и очень быстро понимать его суть. Ничто больше не кажется темной магией; может магия, но не темный тип :")

Быть хорошим разработчиком недостаточно

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

Стоит ли обращаться в GSoC?

Это та часть, где я проецирую на вас свой опыт. Итак, ответ — да, я считаю, что вы должны, даже если вы все еще новичок. Сначала вам следует научиться пользоваться git, найти интересующий вас проект и связаться с организацией как можно раньше. Тем не менее, вы должны сначала сделать домашнее задание. Я не думаю, что просто представиться, достаточно просто задавать вопросы. Вместо этого проведите некоторое исследование, получите кодовую базу, если вы будете работать над существующей, и задавайте вопросы только после того, как попытаетесь найти ответы самостоятельно. Это будет видно и произведет хорошее впечатление. Если вам удалось решить некоторые проблемы в списке треков, это было бы плюсом.

Сообщество сёгуна и наставники

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

Я хочу поблагодарить своих наставников Фернандо, Хайко и Виктора, а также Гила Хобена, чьи обзоры и работа были очень поучительны.