Защо да допринасяте за отворен код?

Приносът към отворен код може да бъде възнаграждаващ начин за учене, преподаване и изграждане на опит в почти всяко умение, което можете да си представите.

Защо хората допринасят за отворен код? Много причини!

Подобрете софтуера, на който разчитате

Много сътрудници с отворен код започват като потребители на софтуер, за който допринасят. Когато намерите грешка в софтуер с отворен код, който използвате, може да искате да погледнете източника, за да видите дали можете да го коригирате сами. Ако случаят е такъв, тогава връщането на корекцията е най-добрият начин да се уверите, че вашите приятели (и вие самите, когато актуализирате до следващото издание) ще могат да се възползват от нея.

Подобрете съществуващите умения

Независимо дали става въпрос за кодиране, дизайн на потребителски интерфейс, графичен дизайн, писане или организиране, ако търсите практика, има задача за вас по проект с отворен код.

Запознайте се с хора, които се интересуват от подобни неща

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

Намерете ментори и учете другите

Работата с други по споделен проект означава, че ще трябва да обясните как правите нещата, както и да помолите други хора за помощ. Действията на учене и преподаване могат да бъдат удовлетворяваща дейност за всички участници.

Изградете публични артефакти, които ви помагат да развиете репутация (и кариера)

По дефиниция цялата ви работа с отворен код е публична, което означава, че получавате безплатни примери, които да вземете навсякъде като демонстрация на това, което можете да правите.

Научете умения за хора

Отвореният код предлага възможности за практикуване на лидерски и управленски умения, като разрешаване на конфликти, организиране на екипи от хора и приоритизиране на работата.

Овластяващо е да можеш да правиш промени, дори малки

Не е нужно да сте сътрудник през целия живот, за да се насладите на участието в отворен код. Случвало ли ви се е да видите печатна грешка в уебсайт и да ви се иска някой да я поправи? В проект с отворен код можете да направите точно това. Отвореният код помага на хората да се чувстват независими от живота си и начина, по който преживяват света, и това само по себе си е удовлетворяващо.

Какво означава да допринасяш

Ако сте нов сътрудник на отворен код, процесът може да бъде смущаващ. Как намирате правилния проект? Ами ако не знаете как да кодирате? Ами ако нещо се обърка?

Не се притеснявайте! Има всякакви начини да се включите в проект с отворен код и няколко съвета ще ви помогнат да извлечете максимума от опита си.

Не е нужно да добавяте код

Често срещано погрешно схващане относно приноса към отворен код е, че трябва да допринесете с код. Всъщност често другите части на проекта са най-пренебрегвани или пренебрегвани. Ще направите огромна услуга на проекта, като предложите да се включите с тези видове принос!

Дори ако обичате да пишете код, други видове приноси са чудесен начин да се включите в проект и да се срещнете с други членове на общността. Изграждането на тези взаимоотношения ще ви даде възможности да работите върху други части на проекта.

Обичате ли да планирате събития?

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

Обичате ли да проектирате?

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

Обичаш ли да пишеш?

Обичате ли да организирате?

  • Връзка към дублирани проблеми и предлагане на теми за нови проблеми, за да поддържате организацията
  • Прегледайте отворените проблеми и предложете затваряне на стари, както направи @nzakas за ESLint
  • Задавайте изясняващи въпроси по наскоро открити въпроси, за да придвижите дискусията напред

Обичате ли да кодирате?

  • Намерете открит проблем, който да решите, както @dianjin направи за Leaflet
  • Попитайте дали можете да помогнете за записването на нова функция
  • Автоматизирайте настройките на проекта
  • Подобрете инструментите и тестването

Обичате ли да помагате на хората?

  • Отговорете на въпроси относно проекта напр. Stack Overflow (като този пример на Postgres) или Reddit
  • Отговаряйте на въпроси за хора по отворени въпроси
  • Помогнете за модерирането на дискусионните табла или каналите за разговори

Обичате ли да помагате на другите да кодират?

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

Не е нужно просто да работите върху софтуерни проекти!

Докато “отворен код” често се отнася до софтуер, можете да си сътрудничите по почти всичко. Има книги, рецепти, списъци и класове, които се разработват като проекти с отворен код.

Например:

Дори и да сте разработчик на софтуер, работата по проект за документация може да ви помогне да започнете работа с отворен код. Често е по-малко смущаващо да работите по проекти, които не включват код, а процесът на сътрудничество ще изгради вашата увереност и опит.

Ориентиране към нов проект

За нещо повече от поправка на печатна грешка, да допринесете за отворен код е като да отидете до група непознати на парти. Ако започнете да говорите за лами, докато те бяха потънали в дискусия за златните рибки, вероятно ще ви погледнат малко странно.

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

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

Всяка общност с отворен код е различна.

Прекарването на години в един проект с отворен код означава, че сте се запознали с един проект с отворен код. Преминете към друг проект и може да откриете, че речникът, нормите и стиловете на комуникация са напълно различни.

Въпреки това много проекти с отворен код следват подобна организационна структура. Разбирането на различните роли в общността и цялостния процес ще ви помогне бързо да се ориентирате към всеки нов проект.

Типичен проект с отворен код има следните типове хора:

  • Автор: Лицето/лицата или организацията, създали проекта
  • Собственик: Лицето/лицата, което има административна собственост върху организацията или хранилището (не винаги е същото като оригиналния автор)
  • Поддържащи: Сътрудници, които са отговорни за управлението на визията и управлението на организационните аспекти на проекта (Те също могат да бъдат автори или собственици на проекта.)
  • Сътрудници: Всеки, който е допринесъл с нещо обратно към проекта
  • Членове на общността: Хората, които използват проекта. Те могат да бъдат активни в разговорите или да изразят мнението си за посоката на проекта

По-големите проекти могат също да имат подкомисии или работни групи, фокусирани върху различни задачи, като инструменти, сортиране, модериране на общността и организиране на събития. Потърсете в уебсайта на даден проект страница за “екип” или в хранилището за документация за управление, за да намерите тази информация.

Към проекта има и документация. Тези файлове обикновено са изброени в горното ниво на хранилището.

  • ЛИЦЕНЗ: По дефиниция всеки проект с отворен код трябва да има лиценз за отворен код. Ако проектът няма лиценз, той не е с отворен код.
  • README: README е ръководството с инструкции, което приветства новите членове на общността в проекта. Той обяснява защо проектът е полезен и как да започнете.
  • ПРИНОС: Докато README помагат на хората да използват проекта, допринасящите документи помагат на хората да допринасят за проекта. Той обяснява какви видове вноски са необходими и как работи процесът. Въпреки че не всеки проект има ПРИНОСЯЩ файл, присъствието му сигнализира, че това е приветлив проект, за който можете да допринесете. Добър пример за ефективно ръководство за принос би било това от хранилището на документи на Codecademy.
  • CODE_OF_CONDUCT: Кодексът за поведение определя основните правила за свързаното поведение на участниците и спомага за създаването на приятелска, гостоприемна среда. Въпреки че не всеки проект има файл CODE_OF_CONDUCT, присъствието му сигнализира, че това е приветлив проект, за който можете да допринесете.
  • Друга документация: Може да има допълнителна документация, като уроци, инструкции или политики за управление, особено за по-големи проекти като Astro Docs.

И накрая, проектите с отворен код използват следните инструменти за организиране на дискусия. Четенето на архивите ще ви даде добра представа за това как общността мисли и работи.

  • Проследяване на проблеми: Където хората обсъждат въпроси, свързани с проекта.
  • Заявки за изтегляне: Когато хората обсъждат и преглеждат промените, които са в ход, независимо дали са за подобряване на реда код на сътрудника, използването на граматика, използването на изображения и т.н. Някои проекти, като MDN Web Docs, използват определени потоци за действие на GitHub, за да автоматизират и ускорят своите прегледи на кода.
  • Дискусионни форуми или пощенски списъци: Някои проекти могат да използват тези канали за теми за разговор (например “Как да…“ или “Какво мислиш за…“ вместо грешка отчети или заявки за функции). Други използват инструмента за проследяване на проблеми за всички разговори. Добър пример за това би бил седмичният бюлетин на CHAOSS
  • Синхронен чат канал: Някои проекти използват чат канали (като Slack или IRC) за непринуден разговор, сътрудничество и бърз обмен. Добър пример за това би била общността на Discord на EddieHub.

Намиране на проект, за който да допринесете

Сега, след като разбрахте как работят проектите с отворен код, време е да намерите проект, за който да допринесете!

Ако никога преди не сте допринасяли за отворения код, приемете съвет от президента на САЩ Джон Ф. Кенеди, който веднъж каза: “Не питайте какво вашата страна може да направи за вас – попитайте какво можете да направите вие за вашата страна.”_

Приносът към отворения код се случва на всички нива, във всички проекти. Не е нужно да мислите прекалено много какъв точно ще бъде първият ви принос или как ще изглежда.

Вместо това започнете, като помислите за проектите, които вече използвате или искате да използвате. Проектите, за които ще участвате активно, са тези, към които се връщате.

В рамките на тези проекти, всеки път, когато се хванете, че мислите, че нещо може да бъде по-добро или различно, действайте според инстинкта си.

Отвореният код не е изключителен клуб; направено е от хора точно като вас. “Отворен код” е просто фантастичен термин за третиране на световните проблеми като поправими.

Може да сканирате README и да намерите повредена връзка или правописна грешка. Или сте нов потребител и сте забелязали, че нещо е счупено, или проблем, който смятате, че наистина трябва да бъде в документацията. Вместо да го игнорирате и да продължите напред, или да помолите някой друг да го поправи, вижте дали можете да помогнете, като се включите. Това е смисълът на отворения код!

Според проучване, проведено от Игор Щайнмахер и други изследователи на компютърните науки, 28% от случайните приноси в отворен код са документация, като като корекции на печатни грешки, преформатиране или писане на превод.

Ако търсите съществуващи проблеми, които можете да коригирате, всеки проект с отворен код има страница /contribute, която подчертава лесни за начинаещи проблеми, с които можете да започнете. Отидете до главната страница на хранилището в GitHub и добавете /contribute в края на URL адреса (например https://github.com/facebook/react/contribute).

Можете също да използвате един от следните ресурси, за да ви помогне да откриете и допринесете за нови проекти:

Контролен списък, преди да допринесете

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

Ето един удобен контролен списък, за да оцените дали даден проект е добър за нови сътрудници.

Отговаря на определението за отворен код

Проектът активно приема вноски

Погледнете активността на комит в главния клон. В GitHub можете да видите тази информация в раздела Insights на началната страница на хранилище, като например Virtual-Coffee

След това разгледайте проблемите на проекта.

Сега направете същото за заявките за изтегляне на проекта.

Проектът е приветлив

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

Как да изпратите принос

Намерихте проект, който харесвате, и сте готови да дадете своя принос. Най-накрая! Ето как да получите своя принос по правилния начин.

Ефективна комуникация

Независимо дали сте сътрудник еднократно, или се опитвате да се присъедините към общност, работата с други е едно от най-важните умения, които ще развиете в отворен код.

Преди да отворите проблем или заявка за изтегляне, или да зададете въпрос в чата, имайте предвид тези моменти, за да помогнете на вашите идеи да се реализират ефективно.

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

😇 “X не се случва, когато направя Y”

😢 “X е повреден! Моля, поправете го.”

Напишете си домашното предварително. Добре е да не знаете нещата, но покажете, че сте опитали. Преди да поискате помощ, не забравяйте да проверите README на проекта, документацията, проблемите (отворени или затворени), пощенския списък и потърсете в интернет за отговор. Хората ще го оценят, когато демонстрирате, че се опитвате да учите.

😇 “Не съм сигурен как да внедря X. Проверих помощните документи и не намерих никакви споменавания.”

😢 “Как да направя X?”

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

😇 “Бих искал да напиша урок за API.”

😢 “Онзи ден карах по магистралата и спрях за газ и тогава ми хрумна тази невероятна идея за нещо, което трябва да направим, но преди да обясня това, нека ви покажа…“

Пазете цялата комуникация публична. Въпреки че е изкушаващо, не се свързвайте лично с поддържащите, освен ако не трябва да споделите чувствителна информация (като проблем със сигурността или сериозно нарушение на поведението). Когато поддържате разговора публичен, повече хора могат да научат и да се възползват от вашия обмен. Дискусиите могат сами по себе си да бъдат принос.

😇 (като коментар) “@-maintainer Здравейте! Как да продължим с този PR?”

😢 (като имейл) “Здравейте, съжалявам, че ви безпокоя по имейл, но се чудех дали сте имали възможност да прегледате моя PR”

Добре е да задавате въпроси (но бъдете търпеливи!). Всеки е бил нов в проекта в някакъв момент и дори опитните сътрудници трябва да навлизат в крак, когато разглеждат нов проект. По същия принцип дори дългогодишните поддържащи не винаги са запознати с всяка част от проекта. Покажете им същото търпение, което бихте искали те да проявяват към вас.

😇 “Благодаря, че разгледахте тази грешка. Следвах вашите предложения. Ето резултата.”

😢 “Защо не можете да решите проблема ми? Това не е ли вашият проект?”

Уважавайте решенията на общността. Вашите идеи може да се различават от приоритетите или визията на общността. Те могат да предложат обратна връзка или да решат да не следват вашата идея. Въпреки че трябва да обсъждате и търсите компромис, поддържащите трябва да живеят с вашето решение по-дълго, отколкото вие ще го направите. Ако не сте съгласни с тяхната посока, винаги можете да работите върху своя собствена вилица или да започнете свой собствен проект.

😇 “Разочарован съм, че не можете да подкрепите моя случай на употреба, но както обяснихте, той засяга само малка част от потребителите, разбирам защо. Благодаря, че ме изслушахте.”

😢 “Защо не подкрепите моя случай на употреба? Това е неприемливо!”

Преди всичко го поддържайте елегантно. Отвореният код се състои от сътрудници от цял свят. Контекстът се губи между езиците, културите, географията и часовите зони. Освен това писмената комуникация прави по-трудно предаването на тон или настроение. Предполагайте добри намерения в тези разговори. Добре е учтиво да отхвърлите идея, да поискате повече контекст или да изясните допълнително позицията си. Просто се опитайте да оставите интернет по-добро място, отколкото когато сте го намерили.

Събиране на контекст

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

Ако не можете да намерите идеята си другаде, вие сте готови да предприемете ход. Ако проектът е в GitHub, вероятно ще комуникирате, като направите следното:

  • Повдигане на проблем: Това е като започване на разговор или дискусия
  • Заявките за изтегляне са за започване на работа по решение.
  • Канали за комуникация: Ако проектът има определен Discord, IRC или Slack канал, помислете дали да започнете разговор или да поискате разяснение относно вашия принос.

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

Ако искате да направите значителен принос, отворете проблем, който да попитате, преди да работите по него. Полезно е да гледате проекта известно време (в GitHub, можете да щракнете върху “Гледане”, за да бъдете уведомени за всички разговори) и да стигнете до познавайте членовете на общността, преди да вършите работа, която може да не бъде приета.

Отваряне на проблем

Обикновено трябва да отворите проблем в следните ситуации:

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

Съвети за комуникация по проблеми:

  • Ако видите отворен проблем, с който искате да се заемете, коментирайте проблема, за да уведомите хората, че работите по него. По този начин е по-малко вероятно хората да дублират вашата работа.
  • Ако даден проблем е открит преди известно време, е възможно той да се адресира някъде другаде или вече да е разрешен, така че коментирайте, за да поискате потвърждение, преди да започнете работа.
  • Ако сте отворили проблем, но сте разбрали отговора по-късно сами, коментирайте проблема, за да уведомите хората, след което затворете проблема. Дори документирането на този резултат е принос към проекта.

Отваряне на заявка за изтегляне

Обикновено трябва да отворите заявка за изтегляне в следните ситуации:

  • Изпратете малки корекции като печатна грешка, повредена връзка или очевидна грешка.
  • Започнете работа по принос, който вече е поискан или който вече сте обсъждали в даден брой.

Заявката за изтегляне не трябва да представлява завършена работа. Обикновено е по-добре да отворите заявка за изтегляне рано, така че другите да могат да гледат или да дадат обратна връзка за напредъка ви. Просто го отворете като “чернова” или маркирайте като “WIP” (Работа в процес) в реда за тема или в секциите “Бележки към рецензентите”, ако са предоставени (или можете просто да създадете свой собствен. Подобно на това: **## Бележки към рецензента**). Винаги можете да добавите още ангажименти по-късно.

Ако проектът е в GitHub, ето как да изпратите заявка за изтегляне:

  • Разклонете хранилището и го клонирайте локално. Свържете вашето локално към оригиналното хранилище “нагоре по веригата”, като го добавите като дистанционно. Изтегляйте често промените от “нагоре по веригата”, така че да сте в течение, така че когато изпратите заявката си за изтегляне, конфликтите при сливане ще бъдат по-малко вероятни. (Вижте по-подробни инструкции тук.)
  • Създайте клон за вашите редакции.
  • Посочете всички съответни проблеми или подкрепяща документация във вашия PR (например “Затваря #37.”)
  • Включете екранни снимки преди и след, ако вашите промени включват разлики в HTML/CSS. Плъзнете и пуснете изображенията в тялото на вашата заявка за изтегляне.
  • Тествайте промените си! Стартирайте промените си срещу всички съществуващи тестове, ако съществуват, и създайте нови, когато е необходимо. Важно е да се уверите, че вашите промени не нарушават съществуващия проект.
  • Допринесете в стила на проекта според възможностите си. Това може да означава използване на отстъпи, точка и запетая или коментари по различен начин, отколкото бихте направили във вашето собствено хранилище, но улеснява поддържащия да слива, другите да разбират и поддържат в бъдеще.

Ако това е първата ви заявка за изтегляне, вижте Направете заявка за изтегляне, която @kentcdodds създаде като видеоурок с инструкции. Можете също така да практикувате да правите заявка за изтегляне в хранилището Първи вноски, създадено от @Roshanjossey.

Какво се случва, след като изпратите своя принос

Преди да започнем да празнуваме, едно от следните ще се случи, след като изпратите своя принос:

😭 Не получавате отговор

Надяваме се, че сте проверили проекта за признаци на активност, преди да направите принос. Дори при активен проект обаче е възможно вашият принос да не получи отговор.

Ако не сте получили отговор повече от седмица, е честно да отговорите учтиво в същата тема, като помолите някого за преглед. Ако знаете името на подходящия човек, който да прегледа вашия принос, можете да го споменете с @ в тази нишка.

Не се свързвайте лично с този човек; не забравяйте, че публичната комуникация е жизненоважна за проектите с отворен код.

Ако дадете учтиво напомняне и все още не получите отговор, възможно е никой никога да не отговори. Чувството не е страхотно, но не позволявайте това да ви обезсърчава! 😄 Има много възможни причини, поради които не сте получили отговор, включително лични обстоятелства, които може да са извън вашия контрол. Опитайте се да намерите друг проект или начин да допринесете. Ако не друго, това е добра причина да не инвестирате твърде много време в даването на принос, преди другите членове на общността да са ангажирани и отзивчиви.

🚧 Някой иска промени във вашия принос

Обичайно е да бъдете помолени да направите промени във вашия принос, независимо дали това е обратна връзка относно обхвата на вашата идея или промени в кода ви.

Когато някой поиска промени, бъдете отзивчиви. Те са отделили време да прегледат приноса ви. Да отвориш PR и да си тръгнеш е лоша форма. Ако не знаете как да правите промени, проучете проблема и след това поискайте помощ, ако имате нужда от нея. Добър пример за това би била обратната връзка, която друг сътрудник е дал на @a-m-lamb относно тяхната заявка за изтегляне към документите на Codecademy.

Ако вече нямате време да работите по проблема поради причини като разговорът продължава от месеци и обстоятелствата ви са се променили или не можете да намерите решение, уведомете поддържащия, за да може отворете проблема за някой друг, като @RitaDee направи за проблем в хранилището за приложения на OpenSauced.

👎 Вашият принос не се приема

Вашият принос може или не може да бъде приет в крайна сметка. Надяваме се, че вече не сте вложили твърде много работа в него. Ако не сте сигурни защо не е приет, е напълно разумно да помолите поддържащия за обратна връзка и разяснение. В крайна сметка обаче ще трябва да уважите, че това е тяхно решение. Не спорете и не бъдете враждебни. Винаги сте добре дошли да се разклоните и да работите върху собствената си версия, ако не сте съгласни!

🎉 Вашият принос се приема

Ура! Успешно направихте принос с отворен код!

Направи го! 🎉

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