Как найти опенсорс проект

Как новичку поучаствовать в опенсорс разработке?

Время на прочтение
4 мин

Количество просмотров 38K

В прошлый раз я публиковал пост о сложностях, с которыми сталкиваются разработчики при попытках поучаствовать в опенсорс проектах. Не хотелось оставлять эту проблему без описания возможного решения, поэтому в этот раз я перевел для вас статью известного опенсорс активиста Кента Доддса. В статье автор делится несколькими любопытными лайфхаками — надеюсь, кому-то из читателей они помогут извлечь больше пользы/получить больше удовольствия от участия в опенсорс проектах.

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

В наиболее общем виде ответ звучит так:

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

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

Какие открытые библиотеки, фреймворки или инструменты вы применяете чаще всего? Может, вы работаете с Grunt, Gulp, Webpack или Browserify, и вам кажется, что они могли бы быть улучшены или задокументированы точнее. Или, вероятно, вы применяете библиотеку React или модуль Angular – их тоже можно немного отполировать. Вы наверняка используете какое-либо опенсорс ПО — и его улучшение может вам в чем-то помочь.

Первые шаги

Как только вы определились с проектом, в котором будете участвовать, возникает второй вопрос: «А с какой стороны за него браться»? У многих проектов есть файл CONTRIBUTING. Заглянув в него, вы обнаружите инструкции по участию в проекте. Если отдельного файла нет, то соответствующие инструкции могут быть в README (обычно расположен на домашней странице проекта). А если нет ни того ни другого, то можно отправить пулл реквест на добавление хотя бы скелетного файла CONTRIBUTING.md, чтобы начать переговоры о добавлении полноценных инструкций.

Познакомьтесь с проектом ближе. Чтение документации это хорошо, но мне больше нравится узнавать проект по коду. Мой любимый способ – влезть в обращения к функциям через дебаггер. К примеру, что случиться, если обратиться angular.module?

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

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

Если у вас есть собственные соображения об исправлении бага или фичи, которую вам хотелось бы претворить в жизнь, я настоятельно рекомендую сначала обсудить её с куратором(ами) на GitHub issue. Может они скажут, что она лежит вне сферы интересов проекта или уже находится в разработке, а может, подскажут, какого рода изменения они хотели бы видеть в программном коде. Вы потратите гораздо меньше времени, убедившись, что ваш пулл реквест будет принят, прежде чем браться за его оформление (точно также прежде чем сделать предложение своей жене, я сначала сделал все для того, чтобы ответ был “да”)

Ваш первый пулл реквест

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

Также вам может быть интересна серия постов о том, как участвовать в опенсорс проектах на GitHub: https://blog.kentcdodds.com/introducing-how-to-contribute-to-open-source-be67917eb704.

Дополнительные материалы

Загляните на GitHub’s issues в поисках тикетов, отмеченных first-timers-only, good for beginners, good first bug (или good-first-bug), или help wanted. Есть и другие ресурсы для поиска простых путей участия в проектах:

  • twitter.com/yourfirstpr
  • twitter.com/first_tmrs_only
  • 24pullrequests.com
  • up-for-grabs.net/#
  • github.com/MunGell/awesome-for-beginners

Моим первым пулл реквестом стал запрос на исправление опечатки в комментарии. Он был очень маленьким и относился к проекту, которым я почти не пользовался (обнаружил опечатку, шастая по коду в дебаггере). Это был хороший первый вклад, хоть он и не особо повлиял на проект, а я не особо стремился продолжать участие в нём. Я перешагнул пропасть между отсутствием и наличием первого вклада, и это главное.

Заключение

Мне очень нравится участвовать в опенсорс проектах, и я всячески советую испытать на себе этот опыт. Да, начать непросто, но после того как вы сделаете первый шаг все последующие будут даваться значительно легче. Конечно, не всегда всё идёт как по маслу. У опенсорс сообщества есть свои причуды. Не обращайте на них внимания, просто продолжайте работать. Всё обязательно получится! Удачи!

Пара слов от переводчика:

Хотел бы посоветовать ещё одну полезную статью Кента «Introducing: How to Contribute to Open Source». В ней упоминается его небольшой курс «How to Contribute to an Open Source Project on GitHub».

Как поучаствовать в разработке Open Source проектов, какова их роль и что они могут дать вам как разработчику?

Начнём с того, что гордое название «Open Source» носят проекты с открытым исходным кодом, которые чаще всего разрабатываются и поддерживаются силами сообщества. Это значит, что устройство и принцип работы таких проектов прозрачны, а в разработке может принять участие любой желающий.

как принять участие в Open Source проекте

Участие в Open Source проектах — это возможность усовершенствовать свои навыки, создавая при этом что-то новое или улучшая уже существующее. При этом не имеет значения, изучаете вы основы PHP или являетесь продвинутым C++ разработчиком — открытых проектов уйма, на любой вкус и цвет. Начинающие программисты могут не только пополнить багаж знаний, научиться работать с чужим кодом и получать фидбек от опытных программистов, но также пополнить портфолио первой серьёзной работой.

Разбираемся, как поучаствовать в Open Source проекте и не ударить в грязь лицом.

1

Тут всё зависит от ваших целей и задач. Кто-то начинает работать с Open Source, чтобы глубже изучить определённый технологический стек, кто-то — потому что сам использует тот или иной инструмент в работе и считает, что может его улучшить. Кто-то, как мы в ABBYY в случае с нашей библиотекой NeoML, сначала создаёт инструмент для решения внутренних задач, а потом понимает, что от его выхода в Open Source выиграет и компания, и сообщество. Есть разные пути — решите, какой из них больше подходит именно вам.

Работа в Open Source может дать много, если подойти к ней с умом. Навык чтения чужого кода здорово выпрямляет руки, работа с кураторами подтянет английский. А чувство, что вы приложили руку к крупному проекту (которых в Open Source достаточно), может неплохо смотивировать вас в карьерном плане.

Антон Немкин, председатель совета фонда Цифровая долина Сочи

2

Как найти Open Source проект?

Для участия в Open Source проекте самое главное — определиться со сферой собственных интересов. Это крайне важно, так как вам предстоит выбрать проект, максимально подходящий под ваши интересы и компетенции. Делается это просто. Крупнейший сайт с проектами — это Github. Там вы делаете поисковый запрос по ключевым словам, соответствующим интересам, например «javascript gamification framework». В ответ получаете список проектов, в каждом из которых вы можете поучаствовать.

Никита Буйда, основатель и ведущий разработчик Datebox.app

Очевидный ответ, который напрашивается, — зайти на GitHub. Уже на месте стоит определиться с тематикой, хотя бы с точностью до крупной области. Затем погуглить, что есть на сайте на этот счёт.

Новичку я бы посоветовал обратить внимание на GitHub Trending, где постят небольшие проекты.

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

Антон Немкин, председатель совета фонда Цифровая долина Сочи

3

На что обращать внимание при выборе проекта?

Обратите внимание на ПО, которым пользуетесь сами: во-первых, вы уже знакомы с проектом как пользователь и хорошо понимаете, что стоит улучшить или изменить; во-вторых, вы будете вносить вклад в то, что важно для вас.

  • Описание проекта — интересен ли он вам? Решает ли важную (интересную) проблему? Актуальна ли тема?
  • Популярность проекта. На Github это можно оценить по количеству звёзд — местному аналогу лайка.
  • Посмотрите на раздел с проблемами (issues): много ли там открытых и особенно закрытых проблем? Это поможет оценить простор для творчества.
  • Изучите часть описания проекта, относящуюся к сторонним разработчикам (contributing). Там, как правило, описывается простой способ, как настроить среду разработки под этот конкретный проект и прислать свои изменения. Иногда просто пишут «pull requests are welcome», то есть «ждём не дождёмся ваших исправлений и предложений».
  • Насколько давно были сделаны последние изменения в проекте, активно ли идёт разработка? Если да, то ваши изменения быстро рассмотрят и, возможно, примут. Если не активно — быть может, вы захотите взять продвижение проекта в свои руки?
  • Есть ли активное комьюнити? Часто у проекта может быть чат, форум или группа в соцсети, где разработчики активно обсуждают проект. Кроме того, активность можно посмотреть в комментариях к проблемам и предлагаемым изменениям.

    Никита Буйда, основатель и ведущий разработчик Datebox.app

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

Илья Башилов, руководитель Frontend-направления SimbirSoft

4

Каковы особенности Open Source разработки?

  • В каждом Open Source проекте есть свои правила и ограничения для организации кода, построения архитектуры. Обычно всё это описывается в разделе contributing в README.md или в файле CONTRIBUTING.md (чаще всего находится в корне репозитория проекта).
  • Среди требований нередко встречается определённый код-стиль проекта, которого надо придерживаться.
  • Во многих проектах для каждого изменения требуется написание юнит-тестов. Без них изменения не принимаются.
  • Естественно, всё общение между участниками проекта ведётся на английском языке через систему pull-request, в специальных чатах или даже через email рассылки. Это также чаще всего описывается в разделе contributing.

    Дмитрий Зайцев, эксперт по разработке ПО компании «Рексофт»

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

5

Каких Open Source проектов стоит избегать?

У проектов с открытым кодом есть и свои неприятные особенности:

  • Разработчик проекта может вести его в никуда. И такое бывает весьма часто! Если проект всё равно хорош, то вы можете сделать ответвление (fork) и разрабатывать его в правильном, по-вашему мнению, направлении.
  • Разработчик проекта может медленно отвечать. Вы видите, что обновления кода идут, но коммуникации с разработчиком никакой. Это плохой признак и знак того, что ловить здесь нечего.
  • Разработчик проекта может потерять интерес и забросить код. Это можно понять по количеству нерешённых проблем в репозитории и давним обновлениям кода.

    Никита Буйда, основатель и ведущий разработчик Datebox.app

6

Что стоит сделать перед тем, как принять участие в Open Source проекте?

Основной инструмент для участия в Open Source проектах — это, конечно, система контроля версий Git. Поэтому в первую очередь стоит ознакомиться с ним. Также можете испытать возможности GitHub Copilot — инструмента, который помогает разработчикам писать код.

Есть несколько важных условий для того, чтобы начинающий специалист справился с Open Source — впрочем, как и вообще с любым проектом. Требования к хардскиллам очевидны — нужно уверенно владеть выбранным стеком технологий. Софтскиллы, в свою очередь, помогают успешнее погрузиться в новый проект. Ключевые личные качества на этом этапе — дисциплина, коммуникации, готовность к командной работе, обучению и самообучению. Наконец, самому разработчику при выборе проекта стоит внимательно оценивать порог входа — в Open Source бывают такие задачи, с которыми и сеньор не сразу справится.

Илья Башилов, руководитель Frontend-направления SimbirSoft

7

А как быть с внесением изменений в проект?

Pull request — запрос на изменение кода в репозитории. Перед началом работы обязательно создайте свою ветку, в которую вы будете вносить изменения. Если речь идёт о master-ветке, любые изменения стоит вносить только после согласования с куратором проекта.

Отличной практикой будет предварительный показ вашей работы кому-нибудь, ведь вы могли что-то упустить или просто свернуть не туда. В этом случае вас могут попросить изменить что-либо в вашем PR.

8

Как начать свой Open Source проект?

Это ещё один ответ на вопрос, как поучаствовать в Open Source проекте: создайте его сами. Но для начала определитесь с целью, взвесьте все «за» и «против», убедитесь, что готовы взять на себя ответственность за труд других людей и уверенно двигаться к релизу.

Если начинать свой Open Source проект, то необходимо привлечь к нему внимание через англоязычные порталы. Самый простой вариант — публиковать ссылки на портале Reddit в нужных подразделах с тематикой «программирование». Это обеспечивает больший отклик, чем публикация на любом русскоязычном сайте. Естественно, стоит рассказать о проекте и на таких ресурсах, как Хабр, DTF и в тематических группах ВК.

Дмитрий Зайцев, эксперт по разработке ПО компании «Рексофт»

Все и везде говорят, что Open-Source — лучшее место, где начинающие разработчики могут набираться опыта. Проджект-менеджер Хекслета Максим Скрипов рассказывает, как выбрать первый опенсорс проект, на что обращать внимание новичку и для чего это вообще нужно.

Что такое опенсорс проект?

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

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

С чего начать и где искать проекты с открытым публичным кодом

Новичкам я советую присмотреться к задачам на сайте GoodFirstIssue. Здесь публикуются задачки для тех, у кого нет никакого опыта в разработке. Чаще всего у таких Issue есть тег “good first issue». По этому же тегу можно найти себе первые задачи и через поиск на GitHub.

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

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

У Хекслета есть множество опенсорс проектов, в которых может принять участие все желающие — как самые начинающие разработчики, так и программисты с опытом. Полный список наших опенсорс проектов мы раскрываем в нашем большом гайде «Как участвовать в жизни Хекслета».

Опенсорс проекты Хекслета

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

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

  • Участие в разработке сайта
  • Добавление новых соревновательных задач
  • Участие в разработке Chrome расширения

Общение по проекту происходит в канале #codebattle внутри комьюнити Хекслета.

Читайте также:
Как присоединиться к работе над опенсорсом, что такое PS1 и другие вопросы: отвечает разработчик Хекслета Андрей Мошков

Другой наш важный проект — RunIT. Это встроенный редактор для написания и исполнения кода, который в дальнейшем мы сможем использовать во всех наших образовательных платформах. Этот проект очень важен для нас, потому что такие сервисы, как Replit и Codepen могут вести себя непредсказуемо или сломаться. Например, один из сервисов начал вставлять свою рекламу и потом вовсе отвалился. Обсудить задачки для развития этого проекта можно в канале #hexlet-volunteers в Telegram-сообществе.

Еще одним важным проектом в жизни Хекслета является Code-Basics — ​​это открытый бесплатный проект для изучения основ программирования. Цель этого сервиса — дать базовые знания языков программирования для разработчиков, которые только начинают свой путь. Этот сайт абсолютно бесплатен и развивается благодаря нашему дружному сообществу.

  • Улучшение существующих уроков. Список уроков и языков есть на GitHub
  • Улучшения самого сайта. Задачи по улучшению появляются в Issues
  • Создание уроков для новых языков
  • Перевод уроков на английский язык
  • Популяризация проекта.

Еще есть Хекслет СИКП — трекер прохождения SICP. Участники отмечают пройденные материалы, отслеживают прогресс других пользователей. Проект работает на Laravel. Этот проект мы очень любим и активно развиваем.

Обсудить задачи можно в канале #hexlet-volunteers в нашем Telegram-сообществе.

Читайте также:
Навыки командной разработки, опыт с GitHub и умение читать чужой код: зачем нужна стажировка

Хекслет-резюме — другой опенсорс проект для соискателей и HR-специалистов. Кандидаты публикуют свои резюме на сайте, а опытные HR помогают их улучшить. В проекте используется Ruby on Rails. Благодаря ему множество ребят получили свой первый оффер на работу, а работодатели нашли себе разработчиков.

Задачи к нему тоже можно обсудить в канале #hexlet-volunteers в Telegram-сообществе.

Hexlet Friends — проект с открытым исходным кодом на Python. Сервис отслеживает опенсорсные проекты «Хекслета». Анализируется количество коммитов, пулл-реквестов, issue. Он автоматически строит рейтинг участников с «ачивками». Сейчас мы хотим добавить туда много нового функционала, поэтому очень рекомендую ознакомиться с Issues.

Если же вы уже более опытный разработчик, которому хотелось бы улучшить свои практические навыки, то предлагаю вам искать проекты на Github или CodeTriage. Обращайте внимание на количество Issues — обычно проекты, у которых их более 100, — это очень крупные опенсорсы, порог вхождения в которые может быть высок. Это чревато тем, что вы будете смотреть на сложные задачи, которые вам не под силу, и думать, что это не для вас. Старайтесь всегда начинать с малого.

Важные советы для тех, кто хочет работать с опенсорс проектами

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

  • Берите простые задачи, которые вам под силу. Дальше — больше, так вы сможете улучшать свои навыки в разработке.
  • Если что-то не понятно, не стесняйтесь задавать вопросы в комментариях.
  • Не переживайте, что ваши вопросы или Pull-Request заметили не сразу. Часто бывает, что вы запушили свои изменения, сделали PR, но его долго не принимают. Это нормально — люди, которые принимают Pull-Request, могут быть заняты на своей основной работе. И вполне может быть, что они уделяют опенсорс проекту несколько часов в неделю. Поэтому наберитесь терпения и ждите. Вы также можете написать контрибьюторам с просьбой посмотреть ваш Pull-Request, возможно, он даст вам комментарий по проделанной работе.
  • Если ваш Pull-Request отклонили, не стесняйтесь спросить, почему. Такой фидбэк поможет вам в будущем. Если же разработчик проекта не отвечает вам слишком долго, то стоит задуматься, жив ли этот проект и нужно ли тратить на него свое время.
  • Очень важно — вы будете работать с чужим кодом. Поэтому нужно помнить, что все разработчики пишут код по-разному, и научиться читать чужой код — большое дело. Нередко в проектах требуется писать код в определенном стиле, с этим можно ознакомиться в файле README или CONTRIBUTING. Новичку такой подход может показаться сложным. Но если вы разберетесь с этим и освоите этот пункт, то при трудоустройстве на работу вам будет значительно проще въехать в проект.

Читайте также:
Как принять участие в работе Open Source проектов на GitHub. Краткое руководство для начинающих

О работодателях

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

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

Компании по-разному относятся к участию своих разработчиков в опенсорсе. Об этом подробно можно почитать в интервью с Александром Макаровым — одним из контрибьюторов опенсорс фреймворка Yii Framework для PHP.

Выводы

  • Не бойтесь пробовать себя в новых проектах. Это улучшит ваши навыки и резюме. Выбрать свой опенсорс проект и внести первый PR совсем не сложно.
  • Если ваш Pull-Request не принимают слишком долго или отклонили, то не расстраивайтесь, такое бывает.
  • Никогда не стесняйтесь задавать вопросы другим людям. Задавая вопросы, вы учитесь искать ответы для своих задач. В дальнейшем вы сами будете помогать новичкам.
  • Чем больше вы будете работать с чужим кодом, тем проще вам будет включаться в новые проекты.
  • Для потенциального работодателя важно, чтобы у вас в портфолио были не только учебные проекты, но и живые.

Никогда не останавливайтесь:
В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях

В этой статье собрано все, что необходимо знать для участия в Open Source проектах: типичные ошибки и приобретаемые навыки.

Как получить опыт зарабатывать на Open Source проектах

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

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

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

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

Опрос о новичках в open source проектах

А начать довольно просто – с поиска проекта, который вам симпатичен.

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

Программы для поддержки студентов

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

В течение 3-4 месяцев вы удаленно занимаетесь написанием и тестированием кода, составлением отчета. В ходе программы вы получаете стипендию, разделенную обычно на несколько платежей. Большинство спонсируемых программ проходят в летние месяцы, чтобы студенты не отвлекались от основной учебной деятельности. Однако регистрация заявок начинается раньше, обычно весной. Редакция proglib.io специально подготовила эту статью именно сейчас, так как большинство конкурсов принимает заявки студентов во второй половине марта.

Google Summer of Code

Google Summer of Code – самая известная глобальная программа, сфокусированная на привлечении молодых программистов в Open Source разработку. В 2018 году студенты могут выбрать один из проектов и подать свои заявки на участие в программе с 12 по 27 марта.

К 23 апреля студентов и менторов связывают в пары для начала планирования проекта. С середины мая до начала августа студенты работают над своим проектом, а в конце августа подводятся результаты. Стипендия зависит от страны проживания и разбита на три платежа: 30%, 30% и 40%. Например, для России сумма сейчас составляет $3600.

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

Другие стипендиальные программы

Кроме Google Summer of Code существует ряд не менее достойных программ поддержки студентов:

  • European Space Agency: Summer of Code in Space (SOCIS) – разработка систем для космоса, анализ данных, обработка изображений, визуализация и т.д. После утверждения проекта студент получает стипендию 1000€, после успешного завершения – еще 3000€. На написание кода дается три летних месяца.
  • OpenDaylight Summer Internship Program – в дополнение к стипендии программа оплачивают перелет в Кремниевую долину на OpenDaylight Event по завершении программы для презентации отчета.
  • The X.Org Endless Vacation of Code (EVoC) – программа, у которой нет дедлайна: вы выбираете проект и описываете что именно готовы делать в течение 3-4 месяцев. Стипендия в $5000 разбита на начальный ($500) и два последующих платежа по $2250, начисляемых после успешного прохождения ключевых точек.
  • Tor Summer of Privacy – очередной виток программы был объявлен в блоге Tor 2 марта. Программа связана с различными идеями относительно развития Tor. У студентов преимущество, но могут участвовать и не студенты. Суммы стипендий аналогичны Google Summer of Code. Подача заявок проходит с 12 по 26 марта, объявление победителей 20 апреля.
  • OWASP Summer Code Sprint – программа, посвященная системам безопасности, более скромная по стипендии (суммарно $1500), но интересная самими проектами.
  • Outreachy Program – программа, нацеленная на привлечение в Open Source людей из социальных групп, слабо представленных в разработке: женщин, трансгендеров и национальных меньшинств без ограничения по возрасту. Размер стипендии $5500 плюс дополнительные $500 в качестве трэвел-гранта. Проекты включают не только программирование, но и User Experience, документирование, иллюстрацию, графический дизайн и Data Science. Дедлайн подачи заявок 22 марта. Для оповещения о датах конкурса подпишитесь на лист рассылки.
  • Rails Girls Summer of Code: еще одна программа, нацеленная на привлечение девушек в IT. Здесь также нет ограничений по возрасту и не обязательно быть студенткой. В этом году прием заявок уже закончился, но продолжается краудфандинговая компания.

Программы менторства проектов

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

  • Mozilla Winter Of Security – программа проводилась последний раз в 2016 году.
  • Season of KDE – в этот раз проходит с 10 декабря 2017 по 21 марта 2018, дедлайн подачи был 26 декабря 2017 года.
  • Free Software Foundation Interships – ближайший дедлайн для подачи заявки 27 апреля 2018. Программа проводится три раза в году: весной, летом и осенью и требует отдачи по 20 часов в неделю.

Обратите внимание, что в этих же сообществах вы можете найти проект и наставника вне обозначенных дедлайнов.

Программа для школьников Google Code-In

Из-за сложностей с перечислением денежных средств несовершеннолетним в стипендиальных программах обычно указывается возрастное ограничение: не младше 18 лет. Для подростков 13-17 лет проводится соревнование по открытому программному обеспечению Google Code-In. В результате конкурсов участники получают различные подарки, футболки и сертификаты. Отчеты русскоязычных школьников по этому конкурсу в 2012, 2013 и 2014 годах сподвигли и некоторых взрослых людей заняться Open Source :)

Другие варианты поиска ментора

Еще один из возможных способов найти ментора это ACM MentorNet – специальная сеть для создания пар наставник-ученик. Заметим, что для этого требуется наличие почты на edu-домене.

Более общий сервис – сайт инициативы развития открытого программного обеспечения Open Source Initiative, содержащий множество различной актуальной информации об Open Source движении.

Наконец, вы можете просто писать администратору/менеджерам интересного Open Source проекта, например, владельцам соответствующего репозитория на GitHub.

Где еще можно найти проект или просто задачу

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

Множество проектов собраны на специальных сайтах сообществ. Например относительно Gnome работает программа GnomeLove, для новичков в Linux Kernel есть сообщество Linux Kernel Newbies, у Mozilla Foundation What Can I do For Mozilla и т.д.

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

  • issuehub.io
  • Up for Grabs
  • OpenHatch
  • 24 Pull Requests

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

С чего начать

Проекты бывают очень большими, а начать можно с малого. Люди, участвующие в Open Source проектах это в первую очередь сообщество единомышленников. Присоединитесь к e-mail рассылке, IRC-каналу или групповому чату. Выясните как общаются между собой участники проекта. В крупных проектах обычно для каждой составляющей делается отдельная рассылка.

Бывает, что создаются специализированные planet-порталы, аккумулирующие новости из разных каналов. Читайте документацию и комментарии в самом коде. Читайте блоги и twitter, чтобы быть в курсе новостей сообщества. Следите за обновлениями репозитория и баг-трекера.

Как в общих чертах выглядит процесс разработки

Рассмотрим на примере GitHub наиболее популярную модель совместной разработки fork & pull.

Представим, что какое-то сообщество создало нравящийся вам репозиторий. Вы клонируете (fork) его и вносите изменения в своей личной версии репозитория. Если вы думаете, что текущие изменения могут быть полезны для исходного проекта, вы отправляете pull request – запрос на включение изменений кода в репозитории. Контрибьюторы репозитория решают, будут ли предложенные изменения включены в оригинальный репозиторий или отклонены. Подробнее на русском языке вы можете прочитать об этом здесь.

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

Что делать в Open Source проектах

1. Тестируйте промежуточные версии и релизы

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

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

2. Пишите, корректируйте и переводите документацию

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

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

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

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

3. Ищите и исправляйте ошибки

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

Если вы обнаружили еще не оформленный баг, пишите issue. Если вы сами сумели его исправить, оформляйте pull request и указывайте, что он исправляет определенный issue. Или найдите чужой issue, в котором описывается баг и устраните его в коде. Некоторые проекты требуют, чтобы баг-фиксы сопровождались тестами.

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

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

Если вы работаете с компилируемым проектом и проект компилируется без ошибок, попробуйте разобраться в причинах прочих предупреждений (warnings) – указывают ли эти замечания компилятора на особенности, которые не позволят расширяться проекту далее.

4. Пишите тесты

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

5. Пишите примеры и демо-приложения

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

Хороший пример с ясным описанием позволяет, не читая документации, понять пользователю подходит ли проект для решаемой им задачи.

6. Пишите новый код

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

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

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

7. Делайте дизайн

Разработчики в основном думают о реализации какого-то технического замысла, но часто в Open Source проектах материализованной идее не достает красивой обертки. Броское качественное оформление привлечет к проекту и новых пользователей, и участников сообщества.

Найти дизайнера или предложить свои услуги можно при помощи сайта Open Source Design.

8. Ведите блог/YouTube-канал и помогайте другим пользователям

Делитесь опытом, полученным при работе в Open Source проектах. Рассказывайте о проблемах, с которыми вы столкнулись и как вы их решили. Так вы одновременно поддержите внимание к любимому проекту и создадите базу информации для тех, кто присоединится к нему впоследствии.

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

Все это зарекомендует вас как специалиста и поможет собрать благожелательную аудиторию.

Типичные проблемы новичков

Проблемы, с которыми сталкиваются новички в open source проектах, можно объединить в следующие категории:

  • Неуверенность в собственных силах. Код в Open Source проектах пишут в большинстве своем не гении разработки, а такие же программисты, как вы. И даже у них есть ошибки и просто опечатки. Нужно понимать, что крупным проектам требуются разработчики разного уровня подготовки, навыков и опыта. Открытость никак не гарантирует качества кода и часто даже неопытный новичок лучше, чем отсутствие специалиста.
  • Пугающая величина проекта. Да, проекты могут состоять из сотен и тысяч файлов, миллионов строк кода. Но никто не читает все эти файлы подряд. Чаще всего есть какая-то проблема, которая становится для вас точкой входа в проект – вы постепенно «разматываете» код от этого отправного пункта.
  • Боязнь задавать вопросы и раздражить сообщество своим непониманием. Если вы будете кого-то раздражать, вам скорее всего на это мягко намекнут, в этом нет ничего страшного. Такое происходит крайне редко, так что нужно постараться – многие проекты живут исключительно за счет энтузиазма создателей, и хорошие пулл-реквесты подстегивают их к продолжению работы.
  • Попытки решить множество проблем ондим пулл-реквестом. Обычное правило: один баг – один pull request, одна фича – один pull request. Так тем, кто получает ваши исправления гораздо проще их принимать или отклонять и аргументировать решение.
  • Вопросы сразу лично авторам проекта. Получить ответ гораздо быстрее из чата или мейлинг-листа, так как его одновременно читает множество людей.
  • Вы безоговорочно соглашаетесь с тем, что вам говорят ревьюеры. Ревьюер может быть тоже не прав. Старайтесь аргументировать свою позицию, если вы считаете ее правильной. Это очень полезный навык для того, чтобы работать в команде. Обратная сторона – умейте принять позицию, если вы действительно не првы.
  • Вы сдаетесь. Спокойствие, только спокойствие. Даже об этом вы можете написать в сообщество. Что где-то застряли и не знаете как дальше продвинуться. С этой ситуацией сталкивался любой, и кто-то обязательно даст совет по вашей проблеме.

Чему вы научитесь

Кроме удовольствия от участия в любимых Open Source проектах, начинающие программисты также учатся большинству вещей, характерных для работы в сильной команде:

  • Разбираться в чужом коде.
  • Пользоваться системами контроля версий.
  • Понимать весь процесс разработки продукта.
  • Проводить ревью кода (читать и понимать код вне IDE).
  • Проводить тестирование.
  • Пользоваться инструментами: IDE, сиcтемы сборки, утилиты проверки стиля и логики кода (checkstyle/PMD) и т.д.
  • Работать в очень большой и очень распределенной команде, обсуждая идеи и принимая решения.

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

Как это поможет в работе/карьере

Разработка открытого программного обеспечения повлияла на карьеру многих разработчиков. Мы объединили отзывы разработчиков о работе в Open Source проектах относительно основной работы в следующие пункты:

  • Весомая строчка в резюме и опыт. В хорошем крупном проекте есть все, что обычно требуется от разработчика на собеседовании: грамотное проектирование, хорошее кодирование, навыки работы с системой контроля версий и баг-трекером, peer review, работа в команде и т.д. За два-три года непрерывной работы в такой атмосфере можно вырасти до уровня, соответствующего позиции Senior Developer. Такой опыт может оказаться эквивалентен соответствующей строчке в трудовой книжке.
  • Портфолио и набор программных решений. Вашу компетенцию становится легко оценить по профилю на GitHub. Всегда есть что показать и легко пройти первый этап собеседования при приеме на работу. Кроме того, есть шанс, что работодатель найдет вас по коммитам или профилю на Github. Зарубежом это становится все более распространенной практикой.
  • Репутация и востребованность. Если компания использует развиваемый вами открытый продукт в своем технологическом стеке, вы становитесь идеальным кандидатом на место соответствующего разработки. Кроме того в Open Source проектах вы можете пересечься с другими специалистами, которые предложат вам место в своей компании.
  • Самостоятельность. Можно не ждать выхода новой версии библиотеки, а исправить баг самостоятельно.
  • Стажировки в мировых компаниях.

Как это поможет в учебе

Вернемся к студенческому вопросу. Что дают занятия открытым программным обеспечением студенты?

  • Опять-таки опыт: так как это открытое программное обеспечение, вы видите как в реальности решаются те или иные задачи. Кроме того, списков рассылки вы понимаете как это решение появляется в команде. То есть это настоящее подспорье для обучение практическому программированию.
  • Во многих институтах работа в подобных проектах оценивается преподавателями как показатель зрелости специалиста, в силу чего вам могут «автоматом» перезасчитываться лабораторные и курсовые, а свою дипломную работу при везении можно посвятить вашему вкладу в одном или нескольких Open Source проектах.
  • Результаты вашей работы могут служить материалами для научных статей и конференций, дающих бонусы или необходимых для поступления в магистратуру/аспирантуру.
  • Наконец, в результате общения вы поднимаете свой уровень владения английским языком.

Если вы студент, это также позволит вам претендовать на различные стипендии.

  • Стипендия по постановлению Правительства РФ #945.
  • Стипендия Президента РФ.
  • Стипендия Правительства Москвы.
  • Стипендия фонда Владимира Потанина.
  • Стипендия Аниты Борг.
  • Другие конкурсы гранты.

Собственный проект

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

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

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

Варианты развития

В дополнение к спонсорству возможны следующие варианты заработка для дальнейшей работы в Open Source:

  • Собственный бизнес. Сделайте проект, на основе технологии которого можно построить бизнес. Например, вы создаете бинарники для конечных пользователей. К технологии будет испытываться большее доверие в силу свободности кода –можно проверить проект на отсутствие закладок. Кроме того, вы можете создать более крупный программный продукт, который может применяться многими, и на собственном примере вы можете показать другим как работает проект и привлечь контрибьюторов.
  • Платная поддержка. Одна из самых популярных моделей: вы разрабатываете открытый код, но предоставляете клиентам платную поддержку своего решения. Таким образом, например, поступает Linux Red Hat.
  • Разработка на заказ. Фактически аутсорсинг для других фирм и платные доработки под нужды заказчика. Пример: компания Chronicle Software кроме свободных проектов Crhonicle выполняет заказы по разработке систем с использованием этих проектов.
  • Обучение клиентов. Проводите обучающие платные тренинги, на которых вы учите клиентов как использовать ваш продукт. Таким образом, вы одновременно продвигаете проект и зарабатываете деньги.
  • Двойное лицензирование. Лицензируйте свой проект двумя лицензиями. Например, бесплатной лицензией для одиночных пользователей и образовательных учреждений и платной лицензией для коммерческого применения. Примером является система виртуальной роботехники V-REP.
  • Платные вспомогательные сервисы. Стратегия, близкая к предыдущей, но более гибкая: зарабатывайте не на самом проекте, а на предоставлении платных вспомогательных сервисов, таких как хостинг, сервис резервного копирования или мониторинга.
  • Сбор пожертвований. Не самый популярный подход в Open Source проектах, примером может служить Linux Mint и ReactOS.
  • Краудфандинговые компании. Последний подход, совмещающий первый и предпоследний пункты данного списка заключается в целенаправленном сборе средств на создание продукта в ограниченные сроки. Такие компании регулярно объявляются на Kickstarter и c переменным успехом набирают необходимую сумму. Один из успешных примеров – клиент для MySQL mycli.

О чем нужно помнить

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

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

Как раскрутить свой Open Source проект

Для того, чтобы представить свой проект общественности, нужно начать с довольно простых вещей:

  • Критически важен хороший README файл. Сделайте его предельно понятным. Приведите примеры использования.
  • Если проект представляет собой библиотеку, поработайте над документацией.
  • Если проект связан с графикой, приложениями и играми, сделайте заметными скриншоты.
  • Явно пропишите лицензию.
  • Сошлитесь на свой блог с описанием ключевых особенностей проекта, углублений в кейсы.

Когда вы посчитаете, что проект уже выглядит достойно, проведите рекламную кампанию: добавьте ссылки на проект в Reddit (в ветку reddit.com/r/{язык вашего проекта}), Hacker News, в профильных группах и форумах. Если ожидается, что проект станет достаточно крупным, заведите для него свой твиттер-аккаунт, в который будете выкладывать новости по работе над проектом и попробуйте его разрекламировать, попросив кого-то из близких по духу известных разработчиков.

Чем большему числу людей будет полезен ваш проект, тем больше пользователей вы сможете заинтересовать и привлечь к совместной работе в собственных Open Source проектах.

Другие материалы по теме

  • Open Source проекты в резюме: 5 причин писать открытый код
  • 8 книг об open source для обучения программированию
  • 6 open-source проектов для практики новичка

Зачем участвовать в опенсорс-проектах?

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

Зачем люди участвуют в опенсорсе? На то есть множество причин!

Улучшить используемые проекты

Многие опенсорс-контрибьюторы перед тем, как внести свой вклад в продукт, были обычными его пользователями. Если вы обнаружите баг в используемой вами опенсорс-программе, вы, возможно, захотите заглянуть в её исходный код, чтобы узнать, сможете ли вы исправить его самостоятельно. Если это так, то отправка патча — лучший способ убедиться, что ваши друзья (и вы сами, когда вы обновитесь до следующего релиза) смогут извлечь из него пользу.

Улучшить существующие навыки

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

Познакомиться с людьми с общими интересами

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

Найти наставников и научить других

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

Создать общедоступные проекты, которые помогут вам повысить репутацию (и карьеру)

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

Изучить навыки работы с людьми

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

Возможность внести изменения, пусть даже небольшие

Необязательно становиться контрибьютором на протяжении всей жизни, чтобы получать удовольствие от участия в опенсорс-проектах. Вы когда-нибудь видели опечатку на сайте и хотели бы, чтобы кто-нибудь её исправил? В проекте с открытым исходным кодом вы можете это сделать. Опенсорс помогает людям чувствовать себя хозяевами своей жизни и того, как они воспринимают мир, и это само по себе отрадно.

Что значит внести свой вклад

Если вы новичок в опенсорсе, процедура участия в нём может быть пугающей. Как найти подходящий проект? Что делать, если вы не умеете программировать? Что если что-то пойдет не так?

Не беспокойтесь! Много чем можно заняться в опенсорс-проекте, и вот несколько подсказок, которые помогут вам определиться, чтобы извлечь максимальную пользу.

Необязательно помогать кодом

Распространенное заблуждение, касающееся участия в опенсорсе, состоит в том, что вам нужно писать код. Зачастую есть другие части проекта, которыми наиболее всего пренебрегают или упускают из виду. Вы окажете проекту огромную услугу, предложив поработать над ними!

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

Нравится планировать мероприятия?

  • Организуйте семинары или митапы по проекту, что и сделал @fzamperin в NodeSchool
  • Организуйте конференцию проекта (если она есть)
  • Помогите участникам сообщества найти подходящие конференции и подать заявку на доклад

Нравится дизайнить?

  • Переделайте макеты, чтобы повысить удобство использования проекта
  • Проведите исследование поведения пользователей, чтобы реорганизовать и улучшить навигацию или меню проекта, например, как предлагает Drupal
  • Составьте руководство по стилю оформления, чтобы помочь проекту с соблюдением единообразного визуального дизайна
  • Создайте принты для футболок или новый логотип, как это сделали участники hapi.js

Нравится писать?

  • Напишите и улучшите документацию по проекту
  • Создайте папку с примерами по использованию проекта
  • Запустите рассылку новостей по проекту или освещайте самое важное из списка рассылки
  • Составьте обучающие руководства по проекту, как это сделали участники PyPA
  • Переведите документацию проекта

Нравится организовывать?

  • Давайте ссылки на повторяющиеся ишью, предлагайте новые ярлыки для ишью, чтобы они были лучше огранизованы
  • Пройдитесь по открытым ишью и предложите закрыть старые, как, например, сделал @nzakas в ESLint
  • Задавайте уточняющие вопросы по недавно открывшимся ишью, чтобы продвинуть обсуждение вперед

Нравится кодить?

  • Найдите открытую проблему для решения, что, например, @dianjin сделал в Leaflet
  • Спросите, можете ли вы помочь с разработкой новой функциональности
  • Автоматизируйте настройку проекта
  • Улучшите инструменты и тестирование

Нравится помогать людям?

  • Ответьте на вопросы о проекте, например, на Stack Overflow (как в этом примере с Postgres) или Reddit
  • Отвечайте на вопросы людей по открытым ишью
  • Помогите модерировать доски обсуждений или каналы в чатах

Нравится ли вам помогать другим кодить?

  • Проверяйте код других людей
  • Напишите учебные руководства по использованию проекта
  • Предложите наставничество другому контрибьютору, как @ereichert сделал для @bronzdoc в Rust

Можно работать не только над программными проектами!

Хотя «опенсорс» часто относится к программному обеспечению, вы можете совместно работать практически над чем угодно. Есть книги, рецепты, списки и курсы, которые разрабатываются как опенсорс-проекты.

Например:

  • @sindresorhus курирует список “классных” списков
  • @h5bp ведет список потенциальных вопросов на собеседовании для кандидатов в разработчики интерфейсов
  • @stuartlynn и @nicole-a-tesla сделали сборник забавных фактов о тупиках

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

Подготовка к новому проекту

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

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

Анатомия опенсорс-проекта

Каждое сообщество с открытым исходным кодом отличается.

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

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

Типичный проект с открытым исходным кодом состоит из следующих типов людей:

  • Автор: Человек или организация, создавшие проект.
  • Владелец: Лицо, которое имеет административные права на организацию или репозиторий (не всегда те же самые, что и первоначальный автор).
  • Мейнтейнеры: Контрибьюторы, которые несут ответственность за формирование видения и управление организационными аспектами проекта (они также могут быть авторами или владельцами проекта).
  • Контрибьюторы: Все, кто внес свой вклад в проект.
  • Участники сообщества: Люди, использующие проект. Они могут быть активными в беседах или высказывать свое мнение о направлении проекта.

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

У проекта также есть документация. Эти файлы обычно находятся в корне репозитория.

  • LICENSE: По определению, каждый опенсорс-проект должен иметь соответствующую лицензию. Если у проекта нет лицензии, его нельзя причислить к опенсорсу.
  • README: README — это руководство-инструкция, которая приветствует новых членов сообщества в проекте. В этом файле объясняется назначение и применение проекта.
  • CONTRIBUTING: В то время как README помогают людям использовать проект, документация по участию помогает людям вносить вклад в проект. В нем объясняется, какие виды помощи необходимы и как устроен процесс. Хотя не у каждого проекта есть файл CONTRIBUTING, его наличие свидетельствует о дружелюбном отношении к участникам.
  • CODE_OF_CONDUCT: Кодекс поведения устанавливает основные правила поведения участников и помогает создать дружелюбную, гостеприимную атмосферу. Хотя не в каждом проекте есть файл CODE_OF_CONDUCT, его наличие свидетельствует о том, что это хороший проект, в который можно внести свой вклад.
  • Другая документация: Может быть дополнительная документация, например обучающие материалы, пошаговые руководства или политики управления, особенно для более крупных проектов.

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

  • Список ишью (issue tracker): Место, где происходят обсуждения, связанные с проектом.
  • Пул-реквесты (pull requests): Место, где рассматриваются запросы на изменение кода.
  • Дискуссионные форумы или списки рассылки: Некоторые проекты могут использовать эти каналы для разговорных тем (например, “Как мне …“ или “Что вы думаете о …“ вместо отчётов об ошибках и внесения предложений с новыми возможностями). Другие используют ишью для всех дискуссий.
  • Синхронный чат-канал: Некоторые проекты используют чаты (например, Slack или IRC) для спонтанного общения, совместной работы и быстрого обмена информацией.

Поиск проекта, в котором можно поучаствовать

Теперь, когда вы разобрались, как устроены опенсорс-проекты, пришло время найти проект, в который вы сможете внести свой вклад!

Если вы никогда раньше не имели дела с опенсорсом, прислушайтесь к совету президента США Джона Ф. Кеннеди, который однажды сказал: «Не спрашивайте, что ваша страна может сделать для вас, спросите, что вы можете сделать для своей страны».

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

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

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

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

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

28% случайных вкладов в опенсорс представляют собой документацию, например, исправление опечатки, переформатирование или перевод.

Если вы ищете существующие ишью, которые можно исправить, то в каждом опенсорс-проекте есть страница /contribute, где перечислены ишью, специально предназначенные для начинающих. Перейдите на главную страницу репозитория на GitHub и добавьте в конец URL-адреса /contribute (например, https://github.com/facebook/react/contribute`).

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

  • GitHub Explore
  • Open Source Friday
  • First Timers Only
  • CodeTriage
  • 24 Pull Requests
  • Up For Grabs
  • Contributor-ninja
  • First Contributions
  • SourceSort

Чеклист перед тем, как принять участие

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

Вот удобный чеклист список, чтобы понять, подходит ли проект для новых контрибьюторов.

Попадает под определение опенсорса

Есть ли у него лицензия? Обычно в корне репозитория находится файл LICENSE.

Проект активно принимает стороннюю помощь

Посмотрите на коммиты в основной ветке. Узнать это вы можете на главной странице репозитория на GitHub.

Когда был последний коммит?

Сколько контрибьюторов у проекта?

Как часто люди коммитят в репозиторий? (На GitHub выяснить это можно, кликнув по ссылке «Commits» в верхней панели.)

Затем посмотрите на ишью проекта.

Сколько сейчас открытых ишью?

Быстро ли мейнтейнеры реагируют на ишью после того, когда они открываются?

Ведётся ли активное обсуждение ишью?

Есть ли недавно созданные ишью?

Есть ли закрытые ишью? (На странице Issues GitHub-репозитория щелкните на вкладку «Closed», чтобы увидеть закрытые ишью.)

Теперь выясните такую информацию про пул-реквесты проекта.

Сколько сейчас открытых пул-реквестов?

Быстро ли мейнтейнеры реагируют на пул-реквесты после их открытия?

Ведётся ли активное обсуждение пул-реквестов?

Есть ли недавно отправленные пул-реквесты?

Как давно были объединены пул-реквесты? (На странице Pull Request GitHub-репозитория щелкните на вкладку «Closed», чтобы увидеть закрытые пул-реквесты.)

Проект приветливый

Дружелюбный и доброжелательный проект свидетельствует о том, что в нём будут с пониманием относиться к новым контрибьюторам.

Отвечают ли охотно мейнтейнеры на вопросы в ишью?

Дружелюбны ли люди в вопросах, на дискуссионном форуме и в чате (например, IRC или Slack)?

Проверяются ли пул-реквесты?

Благодарят ли мейнтейнеры людей за их помощь?

Как сделать вклад

Вы нашли понравившийся проект и уже готовы поучаствовать в нём. Наконец-то! И вот как правильно это сделать.

Эффективное общение

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

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

Дайте контекст. Помогите другим быстро освоиться. Если вы столкнулись с ошибкой, объясните, что вы пытаетесь сделать и как ее воспроизвести. Если вы предлагаете новую идею, объясните, почему вы думаете, что она будет полезна для проекта (не только для вас!).

😇 “Х не происходит, когда я делаю Y”

😢 “X не работает! Исправьте это.”

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

😇 “Я не знаю, как реализовать X. Я посмотрел документацию и не нашел никаких упоминаний об этом.”

😢 “Как мне сделать X?”

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

😇 “Я хотел бы написать руководство по API.”

😢 “На днях я ехал по шоссе и остановился заправиться, и тогда у меня возникла замечательная идея, чем мы должны заняться, но прежде чем я это объясню, позвольте мне показать вам …“

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

😇 (в качестве комментария) «@-мейнтейнер Привет! Как нам поступить с этим пул-реквестом?»

😢 (по электронной почте) «Привет, извини, что побеспокоил тебя по электронной почте, но мне было интересно, была ли у тебя возможность просмотреть мой PR»

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

😇 “Спасибо, что разобрались с этой ошибкой. Я последовал вашим предложениям. Вот результат.”

😢 “Почему вы не можете решить мою проблему? Разве это не ваш проект?”

Уважайте решения сообщества. Ваши идеи могут отличаться от приоритетов или видения сообщества. Члены сообщества могут высказать свои мнения или отказаться от реализации вашей идеи. Хотя всегда нужно обсуждать и искать компромисс, последнее слово за мейнтейнерами, потому что им в дальнейшем предстоит работать с вашим кодом. Если вы не согласны с их направлением, вы всегда можете работать над собственным ответвлением проекта (форком) или начать собственный проект.

😇 “Я разочарован, что вы не можете поддержать мой вариант использования, но, как вы объяснили, он затрагивает только небольшую часть пользователей, я понимаю почему. Спасибо за внимание.”

😢 “Почему вы не поддерживаете мой вариант использования? Это недопустимо!”

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

Изучение обстановки

Прежде чем что-либо делать, убедитесь, что это больше нигде не обсуждалось. Пройдитесь по README-файлу проекта, ишью (открытые и закрытые), списку рассылки и Stack Overflow. Не тратьте много времени на это, достаточно поискать по нескольким ключевым словам.

Если вы не нашли обсуждение вашей идеи, можно начать действовать. Если проект находится на GitHub, вы, скорее всего, будете общаться, открывая ишью или пул-реквест:

  • Ишью отлично подходят, чтобы завести беседу или обсуждение
  • Запросы на изменение предназначены для начала работы над решением.
  • Для легкого общения, например, уточняющего или практического вопроса, попробуйте задать вопрос в Stack Overflow, IRC, Slack или других чат-каналах, если они есть в проекте

Прежде чем открывать ишью или пул-реквест, ознакомьтесь с руководством по участию (обычно ему посвящен отдельный файл с именем CONTRIBUTING или соответствующий раздел в файле README), чтобы сделать всё правильно. Например, вас могут попросить представить информацию согласно шаблону или потребовать, чтобы вы написали тесты.

Если вы планируете сделать большое изменение, перед этим лучше откройте ишью. Полезно некоторое время понаблюдать за проектом (на GitHub для этого можно кликнуть по кнопке «Watch», чтобы получать уведомления обо всех активностях), а также познакомиться с некоторыми участниками сообщества.

Открытие ишью

Как правило, следует создать ишью, чтобы:

  • Сообщить об ошибке, которую вы не можете исправить самостоятельно
  • Обсудить общую тему или идею (например, связанную с сообществом, развитием или политикой проекта)
  • Предложить реализовать новую функциональность или другую идею проекта

Советы по общению в ишью:

  • Если видите открытую ишью, которую хотите решить, прокомментируйте её, чтобы люди знали, что вы занимаетесь ею. Таким образом, снизится вероятность, что кто-то ещё будет работать над ней.
  • Если ишью была открыта давно, возможно, что она рассматривается в другом месте, либо уже решена, поэтому прокомментируйте её, чтобы подтвердить её актуальность.
  • Если вы открыли ишью, но позже самостоятельно нашли ответ, прокомментируйте её, чтобы сообщить об этом людям, а затем закройте её. Даже фиксирование такого результата является вкладом в проект.

Открытие пул-реквеста

Как правило, следует создать пул-реквест, чтобы:

  • Сделать незначительное исправление (например, исправить опечатку, неработающую ссылку или очевидную ошибку)
  • Начать работать над тем, о чём уже было договорено или что обсуждалось в ишью

Пул-реквест не обязательно должен представлять законченную работу. Обычно лучше открывать пул-реквест на раннем этапе, чтобы люди могли наблюдать за вашим прогрессом или оставлять отзывы о нем. Только в названии такого пул-реквеста укажите “WIP” (от англ. Work in Progress — в процессе выполнения). Всегда позже можно отправить дополнительные коммиты.

Если проект находится на GitHub, выполните следующие шаги, чтобы создать пул-реквест:

  • Форкните репозиторий и склонируйте его к себе локально. Затем в этом локальном репозитории добавьте оригинальный (upstream) репозиторий. Почаще загружайте изменения из исходного репозитория, чтобы ваш локальный репозиторий оставался в актуальном состоянии, — это снизит вероятность возникновения конфликтов при создании пул-реквеста. (См. более подробные инструкции здесь.)
  • Создайте ветку для ваших правок.
  • Ссылайтесь на любые относящиеся к делу ишью или подтверждающую документацию в своем PR (например, «Closes #37»).
  • Добавьте скриншоты до и после, если ваши изменения затрагивают файлы HTML/CSS. Перетащите изображения в текстовую область пул-реквеста.
  • Протестируйте свои изменения! Например, запустите тесты, если они есть, и при необходимости напишите новые. Даже если тестов нет, проверьте сами, что после ваших изменений всё работает, как и раньше.
  • Соблюдайте стиль написания кода проекта в меру своих возможностей. Это может быть использование отступов, точек с запятой или комментариев иначе, чем вы привыкли, но мейнтейнерам это упростит слияние вашего пул-реквеста, а другим — облегчит понимание и поддержку в будущем.

Если это ваш первый пул-реквест, ознакомьтесь с сайтом Make a Pull Request, который @kentcdodds сделал в виде пошагового видео-руководства. Вы также можете попрактиковаться в создании пул-реквеста в репозитории First Contributions, созданном @Roshanjossey.

Что будет дальше после принятия участия

Вы сделали это! Поздравляем, вы стали контрибьютором в опенсорс. Надеемся, это будет далеко не первый раз.

После того, как вы отправите вклад, произойдет одно из следующих событий:

😭 Вы не получите ответ.

Предполагаем, вы проверили проект на наличие признаков активности перед тем, как внести свою лепту. Однако даже в активном проекте возможно, что ваш вклад не получит отклика.

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

Не обращайтесь напрямую к этому человеку; помните, что публичное общение жизненно важно для опенсорс-проектов.

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

🚧 У вас могут запросить внести изменения.

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

Когда кто-то запрашивает сделать изменения, относитесь к этому с пониманием и воспринимайте это должным образом. Люди нашли время, чтобы оценить ваш вклад. Открывать PR и бросать его на произвол судьбы — дурной тон. Если вы не знаете, как внести изменения, изучите проблему, а затем обратитесь за помощью, если она вам нужна.

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

👎 Ваш вклад не принят.

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

🎉 Ваш вклад принят.

Ура! Вы успешно сделали вклад в опенсорс!

Вы сделали это!

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

Понравилась статья? Поделить с друзьями:
  • Как найти ошибку в чертеже
  • Как составить тест по информатике
  • Отсутствует разрешение на открытие этого файла как исправить
  • Счет фактура выписана не на того контрагента как исправить
  • Как найти изомеры углеродного скелета