چرا و چطور توی اپن سورس مشارکت کنیم؟

من هیچوقت توی یه محیط حرفه‌‌ای برنامه نویسی نبودم. هیچوقت روی یه اپلیکیشن بزرگ کار نکردم. حتی دوست برنامه نویس هم ندارم. خودم هستم و خودم. این وسط باید بین هزاران آموزش یوتیوبی و بسته هایی که توی ۳ روز بهتون "برنامه نویسی" یاد میدن راه خودم رو باز میکردم و پیشرفت میکردم. یه مدت این شکلی جلو رفتم ولی از یه جایی آموزش به دردم نمیخورد و دنبال تجربه بودم. اون موقع انتخاب های خیلی محدودی برای کار داشتم. هنوز هم دارم. در واقع کار کردن توی یه شرکت برام غیر ممکن بود چون شرکتی اطرافم نبود و حالا دلایل دیگه که نمیخوام واردش بشم. اون موقع اپن سورس (یا بهتر بگم، گیتهاب) رو پیدا کردم که مثل دری به دنیای جدیدی بود.

برای اولین بار میتونستم کد یه برنامه خیلی پیشرفته رو بخونم. این قدم خیلی بزرگی برای من بود. همونطور که یه انسان دانا میگه:‌ برنامه نویس خوب کد خوب نمینویسه، یه برنامه خوب میدونه از کجا کپی پیست کنه (یا همچین چیزی.) و چه کدی بهتر از کد یه برنامه پیشرفته تست شده که هزاران نفر باهاش کار میکنن؟ شیوه کار من توی یکی دو سال اخیر با افتخار کپی پیست کردن بوده و تا الان خیلی خوب جواب داده. البته منظورم کپی کردن خود کد به معنای واقعی نیست. بیشتر رویه ها و الگو هایی هست که جا های مختلف تکرار میشن. وقتی خیلی گیر کنم میگردم دنبال پروژه های اپن سورس خوب و کدش (شیوه انجام کار) رو کپی پیست میکنم. و میدونید لازمه اینکه بدونید از کجا کپی پیست کنید چیه؟ اینکه کد خوب بخونید و این به نظر مهم ترین چیزه.

توی دنیای اپن سورس اکثرا دلی کار میکنند و صرفا دنبال درآمد نیستند. حضور توی همچین جمعی علاوه بر اینکه شانس دیدن چیز های باحال رو افزایش میده به نظر من انرژی مثبت زیادی رو بهتون منتقل میکنه. اینکه بدونید روزانه پروژه های اپن سورس بیشتری حمایت مالی میشن بازم انرژی مثبت بیشتری بهتون میده. راستش من هم یه بار در آستانه "کسب درآمد" از اپن سورس بودم. توی یه پروژه خیلی مشارکت میکردم و صاحبش میخواست به عنوان تشکر به قول خودش یه آبجو برام بخره که حس خیلی خوب داشت، احساس میکردم یه ماموریت غیر ممکن رو به پایان رسوندم:) ولی هنوز کسب درآمد از اپن سورس اونقدری سخت هست که کسی به نیت پول سمتش نره.

مشارکت توی اپن سورس فرصتی رو براتون فراهم میکنم که با آدم های خیلی خفن تر از کسایی که دور و برتون هستند معاشرت داشته باشید. بارها پیش اومده که یه کار اشتباه انجام بدم و یه نفر اشتباهم رو اصلاح کنه و در موردش توضیح بده. میتونید به چشم "کارآموزی مجانی" بهش نگاه کنید:)

چطور شروع کنیم؟

برای مشارکت توی اپن سورس اول از همه باید به کسانی که توش کار میکنند احترام بگذارید. اگر کتابخونه که ازش استفاده میکنید یه باگ عجیب داره هیچوقت نرید یه issue باز کنید و با لحن تند ازش انتقاد کنید. طرف به احتمال زیاد توی وقت های خالی زندگیش داره این کار رو انجام میده و شما هم مجبور نیستید از اون کتابخونه استفاده کنید و در ضمن پولی هم بهش نمیدین پس دلیلی برای خشونت وجود نداره.

باید به وقت کسانی که توش کار میکنند هم اهمیت بدید. همونطور که گفتم طرف احتمالا توی وقت های خالی زندگیش داره این کار رو میکنه و نباید باعث هدر رفتن وقتش بشید.

۱. قبل از اینکه یه issue باز کنید بگردید دنبال issue های مشابه و اگر چیز مشابهی نبود با اطلاعات دقیق و کامل باگی که پیدا کردید رو گزارش بدید.

۲. اگر بخش discussion باز بود سوال هاتون رو اونجا بپرسید به جای اینکه یه issue باز کنید.

۳. اگر فایل CONTRIBUTING.md توی ریپوزیتوری وجود داشت یا به هر شکلی یه بخش "راهنما مشارکت" وجود داشت سعی کنید مو به مو اون رو اجرا کنید.

۴. سعی کنید تا جای ممکن کم توی Pull request ها و issue ها پیام بدید چون با هر پیغامی که اضافه میکنید یه ایمیل به همه کسانی که توی اون بحث شرکت کردن میاد که زیاد جالب نیست. به جاش از ری‌اکشن هایی که توی گیتهاب هست استفاده کنید. اگر یه نفر شما رو راهنمایی میکنه لازم نیست حتما توی یه پیغام جدا ازش تشکر کنید، مخصوصا اگر آدم های زیادی توی اون بحث شرکت کرده باشن. میتونید با یه قلب ساده قال قضیه رو بکنید.

۵. قبل از اینکه یه چیز بزرگ به یه پروژه اضافه کنید یه issue باز کنید و از صاحبش بپرسید که همچین چیزی میخواد یا نه. اینطوری توی وقت خودتون هم صرفه جویی میشه.

۶. اگر یه pull request باز میکنید، هرچقدر هم ساده باشه توضیح بدید که چیکار میکنه و چرا باید انجام بشه.

تا وقتی موارد بالا رو رعایت کنید هیچ مشکلی براتون پیش نمیاد. اپن سورس بر مبنای احترام متقابل اداره میشه. اگر به وقت بقیه اهمیت بدید بقیه هم به وقت شما اهمیت میدن و با شما با احترام بیشتری برخورد میکنند.

شاید الان یکم ترسیده باشید که اپن‌ سورس خیلی جای خشکیه ولی اصلا اینطور نیست. معمولا با آدم های خیلی باحالی سر و کار پیدا میکنید. این ترس مانع خیلی ها برای مشارکت توی پروژه های اپن سورسه. اگر متوجه یه مشکل توی پروژه شدید یه pull request (PR) باز کنید و هر چقدر هم که کوچیک باشه اون رو حل کنید. کسی قرار نیست سرتون داد بزنه و مسخرتون کنه. نهایتا اگر صاحب پروژه اون رو دوست نداشت PR رو میبنده. به همین راحتی.

بعضی وقتا هم PR هایی که شاید خنده دار به نظر برسن merge (به پروژه اضافه) میشن. مثلا این PR توی زبان Rust باعث میشه وقتی از ایموجی خرچنگ (نماد Rust) به عنوان اسم متغیر استفاده کنید کامپایلر یه ارور خنده دار بده که merge هم شده! توی یه زبان برنامه نویسی فوق پیشرفته! تا این حد با آدمای باحال سر و کار دارید.

مشارکت توی داکیومنت ها به نظر من بهترین راه برای شروعه. یه پروژه پیدا کنید که داکیومنت های خوبی نداشته باشه (احتمالا اتفاقی به همچین پروژه هایی برخورد کردید) و سعی کنید اون رو بهتر کنید. غلط های املاییش رو برطرف کنید یا یه چیزی بهش اضافه کنید. زبانتون خوب نیست؟ میتونید طراحی سایتشون رو یکم تغییر بدید. مثلا اگر یه دکمه به اندازه کافی توی دید نبود رنگش رو عوض کنید. اینطوری ترستون کاملا میریزه.

همچنین میتونید با چیز هایی که ازش لذت میبرید و خیلی "فنی" نیست شروع کنید. مثلا من از تنظیم و شخصی سازی کردن ادیتور نئوویم لذت میبرم در نتیجه خیلی توی NvChad که یه جور نئوویم از پیش تنظیم شده هست مشارکت داشتم.

شاید این پست هم قدیمی هم براتون جالب باشه:

https://virgool.io/@ahhshm/%D8%B1%D9%88%DB%8C-%D8%AA%D8%A7%D8%B1%DB%8C%DA%A9-%D8%A7%D9%BE%D9%86-%D8%B3%D9%88%D8%B1%D8%B3-qg49hovvdude
https://virgool.io/gitscm/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7-%D9%82%D8%AF%D9%85-%D8%A8%D9%87-%D9%82%D8%AF%D9%85-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%A7%D9%88%D9%84%DB%8C%D9%86-%D9%BE%D9%88%D9%84-%D8%B1%DB%8C%DA%A9%D9%88%D8%A6%D8%B3%D8%AA-la2kg38y71hj
https://virgool.io/gitscm/%D8%A8%D8%A7-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-restore-%D8%A8%D9%87-%D9%86%DB%8C%D9%86%D8%AC%D8%A7-%DA%AF%DB%8C%D8%AA-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D8%A8%D8%B4%DB%8C%D8%AF-fnidifasofol
https://virgool.io/gitscm/%D9%85%D9%82%D8%AF%D9%85%D9%87-%D8%A7%DB%8C-%D8%A8%D8%B1-stash-%D8%AF%D8%B1-%DA%AF%DB%8C%D8%AA-%D9%87%D8%B4%D8%AF%D8%A7%D8%B1-%D9%88%D8%AC%D9%88%D8%AF-%DA%A9%D8%A7%D9%86%D9%81%D9%84%DB%8C%DA%A9%D8%AA-ubm55dn7eimy
https://virgool.io/gitscm/%D9%85%D9%82%D8%AF%D9%85%D9%87-%D8%A7%DB%8C-%D8%A8%D8%B1-interactive-rebase-%D8%AF%D8%B1-%DA%AF%DB%8C%D8%AA-%D9%88-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D8%B2%D9%86%D8%AF%DA%AF%DB%8C%D8%AA%D9%88%D9%86-oi5xncjazudk
https://virgool.io/@ahhshm/%D8%AF%D8%B1%DA%A9-git-clone-rbgwrtkhhahw
https://virgool.io/@ahhshm/%D8%A8%D8%A7-%D8%A7%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%DB%8C-%DB%8C%D8%A7%D8%AF%D8%A8%DA%AF%DB%8C%D8%B1-%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%DB%8C%D9%85-%D9%87%D8%A7%DB%8C-%D8%AD%D8%B1%D9%81%D9%87-%D8%A7%DB%8C-%D8%A7%D8%B2-%DA%AF%DB%8C%D8%AA-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D9%85%DB%8C%DA%A9%D9%86%D9%86%D8%AF-dlop7mp3ywzw