Как началось это путешествие

«Поздравляю, вы выиграли школьный конкурс художественной литературы».

«Мы рады сообщить вам, что вас приняли в Гарвардский университет».

«Мы рады видеть вас в этой команде, работающей с нами в НАСА».

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

Для меня, работающего в индустрии разработки ПО уже второй год, пришедшего из абсолютно не связанной области, этим объявлением было «Добро пожаловать в Google Summer of Code 2022». Впервые я услышал об этой программе осенью прошлого года. Хотя это 18-я итерация, для меня это было что-то новое. И, к счастью, именно в этом году эта программа была значительно обновлена, и впервые с момента ее появления в ней могли участвовать не студенты. Я уже не был студентом, но был уверен, что смогу многому научиться.

Google Summer of Code — это программа, объединяющая организации, работающие над программным обеспечением с открытым исходным кодом, и людей, увлеченных компьютерными науками, которые хотят попасть в этот мир с открытым исходным кодом. Помимо предоставления возможности для сотрудничества, Google также награждает студентов стипендиями, что позволяет им сосредоточиться на учебе в течение лета.

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

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

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

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

Надеясь начать с 2-3 страниц для моего первоначального проекта предложения, мне удалось написать 9 с первой попытки. К сожалению, времени на получение двух правок от наставников не хватило, но я преодолел эту проблему.

Удивительно даже для себя, но я был уверен, что меня примут, поэтому особо не нервничал. Вместо этого я использовал это время, ожидая решения, знакомясь с кодовой базой и работая над другими вопросами. Наконец, 20 мая я получил свое письмо на ̶w̶i̶n̶n̶i̶n̶g̶ ̶a̶ ̶w̶r̶i̶t̶i̶n̶g̶ ̶c̶o̶n̶t̶e̶s̶t̶/̶g̶e̶t̶t̶i̶n̶g̶ ̶i ̶n̶t̶o̶ ̶S̶t̶a̶n̶f̶o̶r̶d̶/̶a̶c̶c̶e̶p̶t̶a̶n̶c̶e̶ ̶t̶o̶ ̶N̶a̶s̶a̶/̶ мой проект принят в Mathesar.

У меня было время познакомиться с командой и подготовиться к работе над своим проектом. Фактический период кодирования начался 13 июня. И я хотел бы рассказать немного больше о том, как проходила работа.

Для любителей кода

Есть несколько причин, по которым я обратился именно к Mathesar:

Стек технологий

  • Я немного знал Python, но в основном использовал его для написания личных скриптов. С этим проектом у меня есть шанс углубить свои знания, изучить еще один фреймворк для создания веб-приложений (а именно Django) и перенять лучшие практики, которые трудно сделать, когда вы учитесь самостоятельно или используете какие-то курсы/туториалы/руководства.
  • Опрос Stack Overflows показывает, что Svelte — один из самых привлекательных интерфейсных фреймворков. Я знаю Angular, использовал его в паре проектов, и он мне очень нравится. Но, в то же время, я не большой фанат React, поэтому мне захотелось научиться чему-то новому, чтобы иметь его в арсенале.
  • Постгрес SQL. Я люблю эту базу данных больше, чем SQL Server, с которым мне довелось поработать. Но я в основном использую его для создания таблиц, написания запросов и т. д. То, что около 90% (не точное число, никогда не подсчитывалось) веб-разработчиков делают при работе с базами данных. В Mathesar мне приходилось использовать некоторые скрытые функции этой базы данных, и я всегда стремился поиграть с такими вещами.

Название моего проекта — «Построить график зависимостей для объектов базы данных». Его идея состоит в том, чтобы иметь конечную точку веб-API (и, возможно, представление пользовательского интерфейса), которая возвращает список объектов базы данных, которые зависят от другого.

Обычно, когда мы используем язык определения данных в SQL, внося какие-то модификации (чаще всего удаляя), мы получаем те самые предупреждения от базы данных, которые не позволяют нам удалять объекты с какими-либо зависимостями. И я должен воссоздать его для приложения с учетом конечного пользователя.

Самым простым во всем этом было то, что есть набор функций и представлений под названием pg depend display, который делает именно то, что мне нужно. Поэтому моей задачей было переписать его с помощью операторов SQLAlchemy (одна из основных библиотек в Mathesar), сделать его модульным, чтобы он соответствовал всей архитектуре проекта, добавить тесты и все остальное.

Я на полпути к реализации, но предполагаю, что самые сложные части (и самые интересные) уже позади. Однако были некоторые сложные моменты, с которыми мне пришлось столкнуться:

  • Хотя SQLAlchemy — очень универсальная и мощная библиотека, требуется некоторое время, чтобы привыкнуть к структуре операторов SQL. Но это начинает иметь смысл, чем больше времени вы тратите на работу с ним.
  • Мой основной технический стек — .NET Core. И тот факт, что он строго типизирован, в отличие от динамически типизированного Python, делает весь процесс работы немного другим. (И дело не только в этих случайных vars или типах перед именами переменных). Отсутствие типов заставляло меня заглядывать в документацию чаще, чем я обычно это делаю с .NET Core. Когда у вас есть типы, компилятор знает их атрибуты, и такие инструменты, как IntelliSense, всегда помогают вам.

С другой стороны, есть некоторые вещи, которые мне очень понравились при работе с Python:

  • Хотя в .NET Core есть такие функции, как горячая перезагрузка, в большинстве случаев приходится полностью перестраивать приложение, даже если изменение относительно небольшое. В Python, наоборот, требуется пара секунд, чтобы увидеть изменение в действии без каких-либо дополнительных кликов, кроме нажатия «Ctrl+S».
  • Почему-то Python просто работает для меня. Я также заметил это раньше, когда писал личные сценарии. JS также является языком с динамической типизацией, но вы постоянно сталкиваетесь с разными проблемами. В Python я получал удивительные результаты, даже когда был уверен, что что-то напортачил. Это улучшает общее впечатление от процесса кодирования.

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

Я довольно рано нахожусь на своем пути разработки программного обеспечения. Мне нужно изучить десятки других языков, инструментов и парадигм, но мне нравятся и .NET Core, и Python. И я счастлив, что у меня была возможность попробовать их обоих в сложных проектах и ​​узнать, как профессионалы пишут свой код.

Тем не менее, самой сложной частью всей части Google Summer of Code было не изучение базы данных, новых технологий или внедрение чего-то конкретного. Это было разложение. Перед началом проекта у меня было довольно подробное предложение со всем, что мне нужно было сделать, чтобы заставить его работать, и даже сроки. Но этого недостаточно. Разработчики используют задачи для отслеживания своей работы не потому, что это стандарт, которому мы должны соответствовать, а потому, что это удобно.

Дело в том, что раньше в моей практике были люди в команде, чья основная работа заключалась в создании этих задач на основе требований высокого уровня. Этим летом пришлось делать их самой. Я боролся с этим, поэтому я потратил почти 1,5 месяца, просто работая над задачей с одним POC. Только закончив ее и побеседовав со своим наставником (спасибо, Мукеш), я смог взглянуть еще раз на высоком уровне и ясно понять, что еще нужно сделать. На этот раз я мог извлекать задачи, над которыми мог работать, и выполнять их обычным способом.

Общее впечатление

Google Summer of Code — одно из лучших событий, которые произошли со мной в этом мире программной инженерии, лучшее — Binary Studio Academy, которая помогла мне попасть в этот мир (об этом я писал здесь, к сожалению, не на английском языке). ).

Тем не менее, впечатления те же. Это возможность познакомиться с реальным языком и некоторыми инструментами во время работы над реальным проектом. У меня есть возможность общаться с профессионалами, которые указывают на мои ошибки и делятся своим опытом.

Одна из основных целей Google Summer of Code — привлечь новых людей в сообщество разработчиков открытого исходного кода, что определенно сработало для меня. Хотя сроки программы ограничены, я уверен, что после небольшого перерыва после ее окончания я продолжу работать над Mathesar и искать другие проекты, к которым я хотел бы приложить свою руку.

И последнее но не менее важное. У разных людей разные механизмы, чтобы справиться, когда происходит что-то ужасное. Я из Украины, страны, которая подверглась нападению со стороны Российской Федерации в начале 2022 года. Я не военный, и на фронте от меня мало толку или нет, поэтому единственный способ получить помощь - это быть эффективным тыловым полем. Иногда психологически сложно, когда знаешь, что там происходит, когда близкие люди находятся намного ближе к полю боя, или когда ты вынужден ходить в убежище несколько раз в день.

И лучший механизм выживания, который у меня есть, — это работа. Когда началась война, мне было трудно сосредоточиться на работе в первые пару недель. Однако чуть позже я понял, что работаю даже эффективнее, чем до войны, потому что работа помогает мне отвлечься. И Google Summer of Code был даже лучшим кандидатом на такое отвлечение, потому что это что-то новое, требующее большого внимания. Так что я благодарен за участие в проекте во время этой жестокости в 21 веке.