لماذا يجب أن تبدأ المساهمة في مشاريع Kotlin الآن؟
\n\nلقد كنت تكتب بلغة Kotlin لعدة أشهر. تعلمت عن coroutines، وفهمت دوال extension، بل وتستخدم sealed classes. لكنك تشعر أنك واقف في مكانك؟ هذا مألوف. المصادر المفتوحة ليست "عملاً مجانياً". إنها تتعلق بتسريع نموك بمقدار 10 أضعاف. عندما تساهم في مشاريع حقيقية، فإنك:
\n\n- \n
- تحصل على مراجعة كود (code review) من مطورين بمستوى JetBrains وGoogle؛ \n
- تتعلم قراءة وفهم كود الآخرين (وهذا يمثل 80% من وقت عمل المطور الكبير (senior))؛ \n
- تضيف إلى محفظتك (portfolio) حالات حقيقية، وليس مهام تدريبية؛ \n
- تكوّن علاقات مفيدة في المجتمع. \n
في هذه المقالة، سأوضح لك كيفية اتخاذ الخطوة الأولى. بدون خوف، بدون نظريات معقدة - فقط ممارسة. سنناقش أين تبحث عن المهام، وكيف تكتب أول طلب سحب (PR) ذي معنى دون أن تخطئ.
\n\nمن أين نبدأ: اختيار مشروع يتناسب مع مستواك
\n\nالخطأ الرئيسي للمبتدئين هو محاولة المساهمة فوراً في Kotlin Compiler أو Ktor. توقف. هذا طريق للإرهاق. أنت بحاجة إلى مشاريع حيث:
\n\n- \n
- يوجد وسم
good first issueأوhelp wanted؛ \n - يتم دعم إصدار حديث من Kotlin (1.9+)؛ \n
- يوجد ملف
CONTRIBUTING.mdمفهوم؛ \n - يجيب المجتمع على الأسئلة في غضون 1-3 أيام. \n
أفضل 5 مشاريع للبدء في المصادر المفتوحة بلغة Kotlin
\n\nإليك مستودعات (repositories) موثوقة أوصي بإلقاء نظرة عليها:
\n\n- \n
- detekt — محلل كود ثابت. الكثير من المهام المتعلقة بالتوثيق والقواعد البسيطة؛ \n
- Kotlinx.serialization — مكتبة من JetBrains. توجد
good first issueللمبتدئين؛ \n - Ktor — إطار عمل (framework) للخوادم والعملاء. غالباً ما يحتاج مساعدة في التوثيق والاختبارات؛
- Exposed — ORM للغة Kotlin. مثالي إذا كنت قد عملت مع قواعد البيانات؛
- Anko — على الرغم من أن المشروع متوقف، إلا أنه لا يزال هناك العديد من المشكلات (issues) المفتوحة المتعلقة بالتوثيق.
هام: لا تحاول فعل كل شيء دفعة واحدة. اختر مشروعاً واحداً يثير اهتمامك حقاً. إذا كنت تحب كتابة الاختبارات، فاذهب إلى Ktor. إذا كنت ترغب في جعل الكود أنظف، فإن detekt هو خيارك.
\n\nكيف تجد مهمتك الأولى: تحليل GitHub Issues
\n\nلنفترض أنك اخترت مشروعاً. اذهب إلى قسم Issues. هدفك هو العثور على مهمة:
\n\n- \n
- موسومة بـ
good first issueأوbeginner friendly؛ - غير مخصصة لمطور آخر (لا يوجد assignee)؛
- نشطة (آخر تعليق ليس أقدم من أسبوعين).
مثال من الواقع. دخلت إلى مستودع detekt ووجدت مشكلة (issue): "إضافة توثيق للقاعدة الجديدة: MagicNumber". المهمة: كتابة توثيق بالروسية أو الإنجليزية للقاعدة الجديدة. هذا أول PR مثالي - لا يتطلب معرفة عميقة بالكود، لكنك بالفعل تقدم فائدة حقيقية.
\n\nنقوم بعمل Fork، Clone، وإعداد البيئة
\n\nعند اختيار المهمة، نعمل وفق المخطط التالي:
\n\n- \n
- نقوم بعمل Fork للمستودع (زر Fork في الزاوية اليمنى العليا)؛
- نقوم بعمل Clone للـ Fork محلياً:
git clone git@github.com:YOUR_USERNAME/detekt.git؛ - نضيف upstream:
git remote add upstream https://github.com/detekt/detekt.git؛ - ننشئ فرعاً (branch):
git checkout -b docs/add-magic-number-rule.
يجب أن يكون اسم الفرع ذا معنى. استخدم البادئات: docs/ للتوثيق، fix/ لإصلاح الأخطاء، feat/ للميزات الجديدة.
كتابة الكود: مثال حقيقي بلغة Kotlin
\n\nلنفترض أننا وجدنا خطأ (bug) في مكتبة Kotlinx.serialization. مكتوب في المشكلة (issue): "المُسلسِل (Serializer) لـ LocalDate يرمي استثناء عندما تكون السنة سالبة". دعنا نحلل كيف يمكن إصلاح ذلك.
\n\nأولاً، نبحث