В этой статье описывается моя работа и опыт участия в Red Hat Open Source Contest- RHSOC 2020.

Был февраль, и я только начинал знакомиться с ReactJS. Вскоре после этого я сделал простое веб-приложение, которое было не чем иным, как простым секундомером, который я выбрал, предполагая, что нет ничего проще, чем применить основы. Я использовал ReactJS, чтобы сделать это, и я помню часы, которые потратил на создание простого приложения. Мои выходные были полностью поглощены этим. Но я понял, что работая над этим, я полностью погрузился в это. После этого я искал, чем бы поработать, когда мой друг рассказал мне о RHSOC. Я быстро просмотрел список проектов, чтобы узнать, подходит ли мне что-нибудь, и, конечно же, он был. Сначала я предполагал, что к нему будут назначены лучшие среди кандидатов, подавших заявки на конкретный проект. Итак, я уже был рад, что выиграл проект.

Во время моего первого общения с моим наставником по проекту Ричардом Всиански меня спросили о моем опыте работы с JS, ReactJS и Git. Некоторое время я просматривал репозиторий git и документацию Data-Driven-Forms, проекта, в который я участвовал. Data-Driven-Forms - это новый подход к созданию форм React непосредственно из данных, не требуя от пользователя написания какого-либо HTML или JS. Это четко объясняется в этой статье.

Формы, управляемые данными, позволяют невероятно легко создавать формы React, для этого нужно, чтобы пользователь указывал содержимое формы и то, как они должны выглядеть. Содержимое можно указать с помощью JSON. Один из способов выбора внешнего вида формы - это написать собственные компоненты и использовать их, или вы можете просто выбрать одну из библиотек компонентов, которую поддерживает форма, управляемая данными. В то время библиотеками компонентов поддерживались Material-UI, PatternFly4 и Patternfly3. Моя работа заключалась в том, чтобы добавить еще одну библиотеку компонентов на свой выбор. Посмотрев на доступные варианты и изучив свою рутинную работу по чтению мнений о Reddit и проверке статистики использования, я выбрал Ant Design.

{
  name: 'name',
  label: 'Name',
  component: 'text-field',
  isRequired: true,
  validate: [
    {
      type: 'required'
    }
  ]
}

Грубо говоря, моя работа заключалась в том, чтобы воспроизвести то, что было сделано с другими библиотеками компонентов с помощью Ant Design. Интеграция в проект не была трудной, поскольку в основном она была такой же, как и другие поддерживаемые библиотеки.

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

{
  name: 'email',
  component: 'text-field',
  label: 'Email',
  validate: [
    {
      type: 'pattern',
      pattern: '[a-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,}$',
      message: 'Not valid email'
    }
  ]
}

Я вернулся домой в тот момент, когда ВОЗ объявила о всемирной пандемии. Дома академическая нагрузка была намного меньше, и у меня было много свободного времени. Это когда я потратил целых четыре дня на работу над проектом и ничего больше. Было очень весело и много учиться. Моя работа заключалась в основном в чтении документации и написании кода. Оглядываясь назад, кажется, что большую часть времени я тратил на отладку. Одна странная вещь, которую я узнал, заключалась в том, что я мог часами отлаживать одну ошибку, и решение вполне могло быть одной строкой кода или даже одним отрицанием. Самое интересное было в том, чтобы найти корень проблемы. Если я не мог понять этого после некоторых усилий и если я чувствовал, что не могу добраться до основной проблемы, я разговаривал со своим наставником, и каждый раз он сразу же направлял меня к правильному подходу.

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

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