مرحبًا بالجميع! أود أن أشارككم تجربتي في تطوير مكتبة مفتوحة المصدر، والتحدث عن العملية المتبعة، وإلهامكم لإنشاء مشاريعكم الخاصة.
في الربيع، أثناء مشاهدتي لأحد برامج البث المباشر التي يقدمها إيجور بوجانكو، استلهمت فكرة تطوير البرمجيات مفتوحة المصدر. أكد إيجور أنه إذا كنت تريد أن تتجاوز كونك مطورًا عاديًا وتصبح متخصصًا أكثر طلبًا وفرادة، فأنت بحاجة إلى إنشاء شيء خاص بك. سواء كان كتابًا أو مدونة أو مكتبة أو حتى إطار عمل، فإن مثل هذه المشاريع تسمح لك بالتميز بين العديد من المطورين الآخرين، وخاصة في سوق تكنولوجيا المعلومات اليوم. هذا لا يوضح احترافك فحسب، بل يُظهر أيضًا التزامًا حقيقيًا بتطوير المجال.
كل هذا جعلني أفكر: كيف يمكنني حقًا أن أبرز بين المطورين الآخرين؟ على الرغم من سنوات العمل في مجال تكنولوجيا المعلومات والمشاركة في مشاريع مختلفة، إلا أنني ما زلت لا أملك شيئًا خاصًا بي - شيئًا يمكن أن يُظهر تفردي واحترافيتي.
لقد عدت إلى مشاريعي القديمة على موقع GitHub، ولكنني أدركت سريعًا أن أيًا منها لم يكن ذا أهمية حقيقية. لذا، قررت أن أبدأ من الصفر وأبتكر شيئًا جديدًا. وبدافع من التحفيز والحماس، بدأت أفكر فيما يمكنني كتابته والذي سيكون مطلوبًا، على الأقل بين جمهور صغير، والذي يتناسب مع مهاراتي.
لقد قمت بتحليل أفكار مشروعي مفتوح المصدر لمدة يومين أو ثلاثة أيام. وكلما تأملت أكثر، كلما بدا لي أن كل شيء قد تم كتابته بالفعل، وأن ما لم يتم تنفيذه بعد سيكون من المستحيل تحقيقه بمفردي. دعني أقول على الفور: هذا منظور مضلل. لا تدعه يدمر إمكاناتك. نعم، لقد تم إنشاء الكثير بالفعل، لكن هذا ليس سببًا للتخلي عن فكرة إنشاء شيء خاص بك.
الآن سأشرح السبب:
إن أهم جانب في إنشاء شيء جديد هو تحديد مشكلة حقيقية وتقديم حل لها. قد يكون هذا تحديًا عالميًا أو مشكلة صغيرة ولكنها مهمة تحتاج إلى تحسين. من الأهمية بمكان فهم الصعوبات التي يواجهها المطورون الآخرون أو المستخدمون العاديون وكيف يمكنك مساعدتهم في التغلب على هذه التحديات.
بعد مزيد من التفكير، شعرت برغبة في إنشاء شيء مفيد لمجتمع .NET — مكتبة صغيرة يمكنها تسهيل تطوير المشروع. ونظرًا لأن تركيزي الأساسي هو .NET، فقد قررت التركيز على ما أعرفه بالفعل وأتقنه. وكانت إحدى الأفكار التي خطرت ببالي هي إنشاء مكتبة لتتبع أحداث الإدخال من لوحة المفاتيح والفأرة.
قبل شهر من ذلك، أثناء العمل على تطبيق سطح مكتب لنظام التشغيل Windows، واجهت مهمة تتبع ضغطات المفاتيح على لوحة المفاتيح لأداء إجراءات معينة. كانت المشكلة الرئيسية هي أنه كان من الضروري أن تعمل بغض النظر عما إذا كان تطبيقنا نشطًا أم لا. نظرًا لعدم وجود حلول جاهزة في ذلك الوقت، فقد استخدمت مكالمات P/Invoke الأصلية وحققت النتيجة المرجوة بنجاح. في تلك اللحظة، لم أكن أتصور أن مطورين آخرين قد يواجهون هذه المشكلة أيضًا وأن مكتبة صغيرة تعالج هذه المشكلة قد تكون مفيدة للغاية.
نعم، إنها ليست مكتبة قادرة على تغيير حياة أي شخص، ولكنها الخطوة الأولى نحو خلق شيء خاص بي. إنها فرصة لاكتساب خبرة قيمة وقضاء الوقت في الانخراط في شيء أعشقه حقًا، ولهذا السبب قررت اتخاذ الإجراء اللازم.
كانت الخطوة الأولى هي تبادل الأفكار حول الوظائف التي ستتمتع بها مكتبتي. أردت أن تكون إمكانياتها واسعة قدر الإمكان مع الحفاظ على إمكانية الوصول إليها وسهولة استخدامها. كان هدفي هو ألا يضطر المستخدم إلى كتابة أكثر من 3 إلى 5 أسطر من التعليمات البرمجية في معظم السيناريوهات.
خلال عملية العصف الذهني، توصلت إلى فكرة مفادها أنه من الممكن ليس فقط تتبع المدخلات ولكن أيضًا التحكم فيها. على سبيل المثال، باستخدام التعليمات البرمجية، يمكن للمرء محاكاة الضغط على الأزرار أو مجموعات المفاتيح، أو تحريك مؤشر الماوس، أو تعطيل مفاتيح معينة بحيث لا يستجيب النظام للضغط عليها، أو حتى تغيير ارتباطات المفاتيح. تم تنفيذ كل هذه الميزات تدريجيًا من خلال التحديثات.
بمجرد الانتهاء من مجموعة الميزات، بدأت التطوير بحماس. لم يكن كتابة الكود أمرًا صعبًا بشكل خاص، لكنني ركزت على هيكله ونظافته حتى يتمكن المطورون الآخرون من فهم ما تم القيام به ولماذا بسهولة. أثناء عملية التطوير، أجريت إعادة هيكلة عالمية عدة مرات، وقمت بتغيير التنظيم والأسماء، بالإضافة إلى استخراج أجزاء من الكود إلى فئات منفصلة. لقد أوليت اهتمامًا خاصًا بفصل الكود المعتمد على المنصة (كما خططت لإنشاء حل متعدد المنصات في المستقبل) عن كود المكتبة نفسه. سيمنع هذا الحاجة إلى إعادة كتابة قاعدة الكود بالكامل عند الابتعاد عن P/Invoke. كما أخذت الوقت الكافي لإضافة تعليقات XML حتى يتمكن مستخدمو المكتبة من فهم ما تفعله كل طريقة أو فئة.
بعد الانتهاء من الإصدار الأول من المكتبة، قمت بتحميلها على NuGet (نظام إدارة الحزم لمنصة .NET، وهو مشابه لـ npm أو pip). أردت تلقي بعض الملاحظات لفهم ما إذا كان أي شخص مهتمًا بهذا المشروع والاتجاه الذي يجب أن أسلكه بعد ذلك. قبل الترويج لمكتبتي، قررت إنشاء ملف README في مستودع GitHub، بما في ذلك معلومات حول أهداف المكتبة ودليل موجز حول كيفية استخدامها.
قررت البحث عن أول مستخدمي موقع Reddit . وبعد العثور على العديد من المجتمعات المناسبة، كتبت منشورًا قصيرًا بعنوان " مكتبة C# مفتوحة المصدر للتعامل مع أحداث لوحة المفاتيح/الفأرة في تطبيقات واجهة المستخدم في Windows ". كان الأمر مرهقًا بعض الشيء، وبصراحة، لم أتوقع أي نتائج مهمة. ومع ذلك، من المدهش أن الأمر أتى بثماره. فقد حصد أحد المنشورات حوالي 14000 مشاهدة وحوالي 30 تعليقًا بتعليقات إيجابية. لقد كان شعورًا لا يصدق أتمنى أن يختبره الجميع: إدراك أن الوقت الذي أمضيته في المشروع لم يكن عبثًا. وعلى الرغم من أنني لم أبتكر شيئًا مبتكرًا، إلا أنني فهمت أن هناك أشخاصًا يجدونه مفيدًا حقًا وهم على استعداد لدعم جهودي.
بعد جمع كل التعليقات، قررت مواصلة التطوير والبقاء على اتصال بالمستخدمين الأكثر اهتمامًا الذين تركوا تعليقات. لقد تواصلت معهم بنشاط واستمعت إلى طلباتهم بشأن الوظائف التي يرغبون في رؤيتها. على مدار الشهر التالي، أصدرت عدة تحديثات صغيرة ثم ركزت مرة أخرى على جذب المستخدمين.
يوجد على GitHub نوع خاص من المستودعات يسمى "awesome" — وهي عبارة عن مجموعات من الروابط والموارد التي تم تجميعها حول موضوعات محددة، على سبيل المثال، awesome-dotnet . كان هدفي هو الترويج لمكتبتي في كل من هذه المستودعات. وعلى الرغم من أن هذه لم تكن مهمة سهلة — فالمكتبة التي تحتوي على 10 إلى 15 نجمة على GitHub لا تجتذب الكثير من الاهتمام — إلا أنني تمكنت من الدخول إلى العديد منها. وقد أدى هذا إلى زيادة حركة المستخدمين بشكل كبير ولفت الانتباه إلى مشروعي.
خلال التطوير الإضافي، واجهت العديد من المهام الصغيرة التي كنت أفتقر أحيانًا إلى الرغبة والطاقة لإكمالها. لذا، قررت الاستفادة من إحدى فوائد تطوير البرامج مفتوحة المصدر - جذب المتحمسين الذين كانوا على استعداد للمساعدة في هذه المهام. للقيام بذلك، لجأت إلى خدمة Up-for-Grabs ، التي توفر قائمة بمستودعات البرامج مفتوحة المصدر التي تحتوي على إصدارات نشطة لأولئك الذين يرغبون في المساهمة. بعد إضافة مستودعي وإنشاء العديد من الإصدارات، تلقيت على الفور طلبات للمساعدة.
بعد تنزيل مكتبتي أكثر من ألف مرة، قررت العمل بنشاط على التوثيق. منذ التحديث الأول، زادت وظائف المكتبة بشكل كبير، ولم تعد الأمثلة الموجودة في ملف README كافية. من بين جميع الخيارات الممكنة، اخترت الخيار الأبسط والأكثر سهولة في الوصول: قمت بإنشاء ملف Markdown منفصل وشرحت بالتفصيل جميع الفئات التي تقدمها المكتبة. كما قررت كتابة دليل صغير للمستخدمين المتقدمين الذين يريدون الاستفادة الكاملة من إمكانيات المكتبة. ولدهشتي، تواصل معي رجل متخصص في كتابة الوثائق الفنية وعرض مساعدته. ساعدني في هيكلة المادة بشكل صحيح ووصف جميع التفاصيل بدقة. وبمساعدته، أكملنا هذه المهمة بسرعة.
يعد تطوير البرامج مفتوحة المصدر فرصة رائعة للقاء وتوسيع شبكتك مع مبرمجين آخرين. حتى الآن، ساهم تسعة أشخاص من بلدان مختلفة في المكتبة، بما في ذلك الولايات المتحدة وأستراليا والأرجنتين وكندا وألمانيا وبولندا وغيرها. لقد ساعدوا في كتابة الوظائف واختبارات الوحدات والتوثيق. علاوة على ذلك، كان تبادلًا رائعًا للخبرات والتواصل الممتع. ربما مع بعض المساهمين، يمكننا أن نبدأ مشروعًا جديدًا معًا.
على الرغم من وجود وظيفة والتزامات أخرى، أريد الاستمرار في التطوير وإصدار نسخة كاملة بالميزات التي أعتقد أنه يجب تضمينها في المكتبة. تتضمن خططي المستقبلية جعلها متعددة الأنظمة وفصلها عن أطر واجهة المستخدم المحددة.
في الختام، أود تلخيص كل ما قلته. لا تخف أبدًا من تجربة شيء جديد ولا تقف مكتوف الأيدي. إذا كنت تحب البرمجة حقًا وترغب في النمو كمطور، فاجتهد في إنشاء شيء خاص بك — سواء كان مكتبة صغيرة أو خدمة. لا تعرف أبدًا إلى أين قد يقودك ذلك. طوال تطوير هذه المكتبة، وجدت المتعة ليس فقط في البرمجة ولكن أيضًا في مقابلة أشخاص وتكوين علاقات جديدة. أخطط لمواصلة المشاركة في تطوير المصادر المفتوحة، ليس فقط من خلال تطوير مشاريعي الخاصة ولكن أيضًا من خلال المساهمة في المكتبات المجتمعية — هذه أيضًا تجربة رائعة.
بالنسبة لأولئك الذين يريدون البدء في الانخراط في تطوير مفتوح المصدر، أوصي بهذا الدليل !
إذا أعجبك هذا المنشور، فسأكون ممتنًا إذا تمكنت من دعم المكتبة بنجمة على GitHub!