تجربه‌ی مشارکت با مایکروسافت، با طعم اوپن سورس!

در نگاه خیلی از افراد، از جمله خودم، کار کردن روی پروژه‌های شرکت‌های بزرگ، کاری جالب، حرفه‌ای و احتمالاً سخت است. معمولاً با مواجه شدن با این عنوان‌ها و یا خواندن داستان این افراد با خودم می‌گویم: «پسر، ببین چه کار خفنی!» و شاید به دلیل همین حس مشترک، عنوان این مطلب، شما را به اینجا کشانده است! با اینکه نمی‌توانم منکر این مورد شوم که این تجربه‌ها نیازمند بخش عمده‌ای تخصص و البته حوصله است، اما گاهی شروع این همکاری می‌تواند به سادگی اصلاح یک قطعه کد یا حتی یک به‌روز رسانی کوچک باشد.من یک برنامه‌نویس #C هستم که از قضا به اوپن سورس علاقه‌مند است. در نگاه بعضی از دوستان، این دو مورد کنار یکدیگر همخوانی ندارند و به قولشان: «یک جای کار می‌لنگه!» شاید مسئله از آن‌جایی شکل می‌گیرد که نمی‌توانند اوپن سورس و مایکروسافت را کنار هم جای دهند. به هرحال، داستان درمورد فلسفه‌ی اوپن سورس و انحصار نیست. داستان درباره‌ی تجربه‌ی مشارکت در یکی از پروژه‌های اوپن سورس مایکروسافت است.از کجا شروع شد؟شروع این مشارکت برمی‌گردد به مرداد امسال. برای برنامه‌نویس‌ها، گیت‌هاب کاملاً فضایی شناخته شده است. من گیت‌هابم را از سال 2016 راه‌اندازی کرده بودم؛ اما در شروع استفاده‌ی چندانی از آن نمی‌کردم. هنوز هم نمی‌توانم بگویم استفاده‌ی زیادی از آن می‌کنم! اما با آشنا شدن با این فضا و امکان مشارکت در پروژه‌ها و همان مفهومی که تا الان شاید 10 بار در این نوشته آن را تکرار کردم (اوپن سورس!)، به آن علاقه‌مند شدم. یکی از چالش‌های من این بود که اگر یک شرکت بزرگ کدهای پروژه‌ی خود را آزادانه در اختیار شما قرار می‌دهد و اگر شما می‌توانید در توسعه‌ی آن مشارکت کنید، پس من می‌توانم بخشی از یک پروژه‌ی یک شرکت بزرگ باشم. و شرکت موردنظر، مایکروسافت بود!پروژه‌ی Microsoft vcpkgدر این سال‌ها مایکروسافت پروژه‌های زیادی را روی گیت‌هاب منتشر کرده است. استقبال کاربران هم از این پروژه‌ها طبیعتاً زیاد بوده است. کافیست به آدرس github.com/Microsoft بروید و روی هر کدام از پروژه‌هایی که می‌خواهید کلیک کنید تا تعداد افرادی که آن پروژه را پسندیده‌اند یا در حال مشارکت روی آن هستند را ببینید. خب برای شروع من باید پروژه‌ای مناسب را پیدا می‌کردم که توانایی کار روی آن را داشته باشم. در نهایت بعد از بالا و پایین کردن و بررسی زیاد، پروژه‌ی vcpkg را برای خودم مناسب دیدم. با اینکه این پروژه به زبان #C و تخصص اصلی من نبود.پروژه‌ی vcpkg به شما کمک می‌کند تا کتابخانه‌های C و ++C را روی پلتفرم‌های مختلف ویندوز، لینوکس و مک او اس مدیریت کنید. به این صورت که زمانی که شما به یک کتابخانه احتیاج دارید و این کتابخانه در لیست vcpkg قرار دارد، می‌توانید به سادگی با نوشتن یک خط دستور آن را اضافه و مدیریت کنید.جستجو برای یک Pull Request ساده و مناسباگر بخواهم خیلی ساده Pull Request را توضیح دهم، باید یک تغییر ساده و مناسب را پیدا می‌کردم تا با اعمال آن به پروژه، پروژه را بهتر می‌کردم؛ و در نهایت درخواست اعمال این تغییر را به همراه خود تغییراتی که در پروژه داده‌ام، ارسال می‌کردم. سپس در صورت موافقت تیم، تغییرات من به پروژه‌ی اصلی اعمال می‌شد و من بخشی از مشارکت‌کنندگان پروژه می‌شدم.با بررسی پروژه متوجه شدم که برای دسترسی به کتابخانه‌ها، هرکدام از آن‌ها به همراه نسخه و سایر اطلاعات مورد نیاز برای نصب، در مسیری از پروژه نوشته می‌شود. از زمانی که من پروژه را بررسی می‌کردم، بیش از 1000 کتابخانه به همراه اطلاعاتشان در vcpkg گنجانده شده بودند. مشکل بزرگ این بود که کتابخانه‌ها هر چند مدت، توسط سازنده‌ی اصلی هر کتابخانه، به‌روز رسانی می‌شدند و اگر این به‌روز رسانی به vcpkg اعلام نمی‌شد، زمانی که از vcpkg برای نصب آن کتابخانه استفاده می‌کردید، نسخه‌ای قدیمی از آن را برای شما نصب می‌کرد. بنابراین تعدادی از مشارکت‌ها جهت به‌روز رسانی نسخه‌ها انجام می‌شود.این مورد برای شروع بد نبود. چون با مطالعه‌ی تقریبی مستندات (Documentation) احتمالاً می‎توانستم حداقل یک مشارکت در پروژه داشته باشم. پس سعی کردم تا این کار را انجام دهم و بالاخره بعد از بررسی نسخه‌های تعدادی کتابخانه از میان لیست بلند بالای 1000+ کتابخانه‌ها و کدهای سایر مشارکت‌کنندگان، توانستم اولین Pull Request خود را اعمال کنم. بعد از این باید منتظر بررسی تغییراتم توسط تیم می‌بودم.فردای آن روز، اولین مشارکت من تأیید شد و من در لیست تقریباً 600 مشارکت‌کننده‌ی پروژه در جایگاه آخر قرار گرفتم :)تکرار برای مشارکتشیرینی اینکه من در این لیست قرار گرفته بودم باعث می‌شد تا انگیزه داشته باشم به این مشارکت ادامه دهم. مخصوصاً اگر یکی از اعضای تیم از شما به خاطر مشارکت کوچکی که کردید تشکر می‌کرد بیشتر راضی می‌شدید. به هرحال من به مشارکت ادامه دادم. تعدادی کتابخانه‌ی دیگر هم به‌روز رسانی شد. اما گشتن میان لیست کتابخانه‌ها کاری زمانبر بود. و این مشکلی بود که من می‌توانستم به عنوان یک مهندس نرم‌افزار راه‌حلی برایش پیدا کنم.پروژه‌ی vcpkg-port-update-alertاین اسم طولانی نام راه‌حل من بود! البته این راه‌حل به پروژه‌ی اصلی اضافه نمی‌شد؛ اما برنامه‌ای جانبی بود که شما با اجرای آن می‌توانستید لیستی از کتابخانه‌های استفاده شده توسط vcpkg را که به به‌روز رسانی نیاز دارند، مشاهده کنید. این پروژه‌ی کم فروغ، از نظر تعداد افرادی که پسندیدند، را به صورت اوپن سورس روی گیت‌هابم قرار دادم. البته پروژه‌ای نبود که به درد هر کسی بخورد و بیشتر مشکل خودم را حل می‌کرد. در مجموع این پروژه را تنها یک نفر پسندید؛ اما یکی از اعضای تیم اصلی vcpkg؛ که این برایم ارزش داشت. همچنین به دلیل سرعتی که در شناسایی کتابخانه‌های نیازمند به‌روز رسانی به من می‌داد، باعث می‌شد بیشتر بتوانم در vcpkg مشارکت کنم.چالش بعدیبالاخره توانستم عضو کوچکی از یک پروژه باشم. و خب قطعاً قرار نبود این پایان ماجرا باشد. در پایان هر ماه، یک نسخه از vcpkg داده می‌شد و در سایت مایکروسافت مطلبی درباره‌ی نسخه‌ی جدید می‌نوشتند و در پایان از مشارکت‌کنندگان برتر ماه قدردانی می‌کردند. البته من در این مورد اطلاعی نداشتم و یکی از روزهایی که درباره‌ی مشارکت‌های خودم در توئیتر پیامی منتشر کرده بودم، پاسخی را دریافت کردم:از تارا راج: ممنون به خاطر تمام مشارکت‌های شما. به نظر میاد نام شما در مطلب آینده‌ی بلاگ vcpkg مایکروسافت درج خواهد شد!تارا راج، یکی از کارمندان مایکروسافت و از افرادی بود که در بلاگ مایکروسافت درمورد vcpkg می‌نوشت. این اتفاق خوبی بود اگر اسم من در بلاگ مایکروسافت درج می‌شد؛ هرچند به دلیل اینکه از اول چنین هدفی نداشتم، برایش برنامه‌ریزی نکرده بودم. به هرحال، چالش جدیدی را برای خودم در نظر گرفتم و آن این بود که در ماه آگوست، جزو 10 مشارکت‌کننده‌ی برتر باشم.در پایان ماه آگوست، نتیجه فراتر از انتظار من بود و برترین مشارکت‌کننده‌ی ماه شدم! هر چند این اتفاق هرگز نیفتاد که نام من در بلاگ مایکروسافت برود (به این دلیل که درج مطلب درمورد نسخه‌های ماهیانه‌ی vcpkg در بلاگ متوقف شد)، اما تجربه‌ی اول شدن و آشنا شدن با فردی مانند تارا راج برای من لذت‌بخش بود. ضمن اینکه به این مورد فکر می‌کردم که این مشارکت‌ها رزومه‌ی خوبی برایم خواهد شد.مشارکت، مشارکت و باز هم مشارکت!و همینقدر جالب و شاید ساده یکی از مشارکت‌کنندگان vcpkg شدم. اکنون که این مطلب را می‌نویسم، از میان 723 مشارکت‌کننده‌ی فعلی پروژه، بین 100تای برتر و با دو رتبه تنزل در جایگاه 13-ام قرار دارم. در این مدت مشارکت‌های من تنها به‌روز رسانی نبود. سعی کردم کارهایی مانند نوشتن Patch، اصلاح و اضافه کردن کتابخانه، پاسخگویی به سوالات دیگر کاربران و بازبینی کدهای سایر مشارکت‌کنندگان را هم فرا بگیرم. در طول مدت مشارکت، نکات بسیاری را فرا گرفتم، مشکلات بسیاری که داشتم توسط سایر اعضای تیم به من گوشزد شد و با افراد بسیاری از تیم آشنا شده و ارتباط برقرار کردم، که حقیقتاً مورد آخر ارزش بیشتری برایم داشت. تا به امروز سعی کردم این مشارکت را همچنان ادامه دهم و از انجام این کار لذت ببرم.مقصود از نوشتن این مطلب، مخصوصاً به عنوان اولین پست، «شوآف!» نبود. خواستم تجربه‌ای را از یک مشارکت هرچند کوچک در پروژه‌ای از یک شرکت بزرگ، بنویسم. شاید در ابتدا که خواندن مطلب را شروع کرده باشید، کار را بزرگ ببینید؛ اما امیدوارم اکنون که در حال مطالعه‌ی این قسمت هستید، نظرتان عوض شده باشد! همه چیز به همین سادگی شروع شد و ادامه پیدا کرد.در پایان قبول می‌­کنم؛ کمی هم شوآف کردم!