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

Мне и еще трем смельчакам дали поработать сайт vets.gov. Этот сайт предназначен для использования ветеранами вооруженных сил США в целях поиска и подачи заявок на получение различных льгот, на которые они имеют право, через Департамент по делам ветеранов. Сайт разрабатывается как новый портал для поиска и подачи заявок на льготы по программе VA. Текущий сайт VA, без сомнения, нуждается в обновлении, и найти информацию, представленную на vets.gov, гораздо сложнее на va.gov.

Погружение в кодовую базу:

Репозиторий для vets.gov был хорошо задокументирован. В файле readme представлена ​​вся необходимая информация, необходимая для клонирования репозитория, настройки наших зависимостей и локального запуска приложения на наших машинах. Кроме того, был раздел, в котором обсуждалась файловая структура и различные библиотеки, используемые для компиляции и запуска приложения. Несмотря на то, что документация была тщательной, хотя и слегка устаревшей, мы все же потратили большую часть полутора дней, пытаясь проанализировать базу кода и понять, как все компоненты взаимодействуют друг с другом. Теперь, на этом этапе моей карьеры в разработке программного обеспечения, я думал, что чувствую себя комфортно, работая в React/Redux. Я сделал несколько приложений и уверен в своем понимании жизненных циклов и того, как состояние обрабатывается и передается между компонентами. Однако то, что мы нашли в этой кодовой базе, было, безусловно, унизительным. Огромное количество компонентов, большинство из которых можно использовать повторно, дало мне новую оценку мощности и эффективности React. После первоначального шока от наклеек, так сказать, размера и сложности репозитория, мы начали определять функции, библиотеки и технологии, с которыми мы не были знакомы. Было разумно продолжать понимать, как все файлы взаимодействуют друг с другом, прежде чем пытаться изменить кодовую базу.

Что было нового и интересного?

Хотя там было несколько библиотек и технологий, которые я не знал об использовании в кодовой базе, из-за общей сложности файловой структуры я обнаружил, что особенно заинтересован в определении того, как все файлы компилируются вместе и в функционирующий сайт. В случае с vets.gov кодовая база использовала библиотеку JavaScript под названием Metalsmith. Сайт Metalsmith описывает его как чрезвычайно простой подключаемый конструктор статических сайтов. Что это делает, так это читает исходный файл или любое количество исходных файлов, извлекает их информацию, каким-то образом манипулирует ею, перезаписывает информацию в новые файлы в целевой каталог.

Metalsmith(__dirname)          // instantiate Metalsmith in the cwd
  .source('sourcepath')        // specify source directory
  .destination('destpath')     // specify destination directory
  .use(markdown())             // transpile markdown into html
  .use(layouts({               // wrap a handlebars-layout
    engine: 'handlebars'       // around transpiled html-files
  }))    
  .build(function(err) {       // this is the actual build process
    if (err) throw err;    // throwing errors is required
  });

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

Что мы сделали?

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

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

Выводы

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

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