خططت منذ فترة طويلة لإرسال التصحيح إلى Go ، ولكن تم تأجيلها باستمرار؟ تواجه الصعوبات ، لا تعرف من أين تبدأ؟ في هذه المقالة سأصف كيف أجرينا ورشة عمل مساهمة Go في قازان ، حول نتائجها ، وكذلك حول الدروس التي تعلمها المنظمون.
Spoiler: من المخطط تكرار هذا الحدث عندما ينتقل Go إلى مرحلة التطوير النشط (يخرج من حالة تجميد الرمز). انظر التفاصيل تحت القطع.
ما هي ورشة عمل مساهمة Go؟
من وقت لآخر ، تعقد اجتماعات مبرمجي Go بأحجام مختلفة في جميع أنحاء العالم ، والغرض منها هو دراسة دواخل Go وإرسال تغييراتهم إليها. بدأ كل شيء مع GopherCon .
يأتي شخص ما لمساعدة الآخرين على معرفة سير العمل ، والتقاط مشكلة وحلها ، ثم الذهاب في مراجعة ، والوصول إلى النقطة التي يتم فيها حقن التصحيح في المنبع . يأتي البعض الآخر كمساهم لأول مرة.
إذا كنت مهتمًا بأي مما يلي ، فقد ترغب في المشاركة:
- انغمس في التفاصيل ذات المستوى المنخفض لسلسلة أدوات Go (مترجم ، رابط ، مجمع ، ...)
- تسريع بعض الوظائف من المكتبة القياسية أو وقت التشغيل
- أضف أمثلة أو اختبارات مفقودة لأي من الحزم.
- إعادة صياغة بعض الرموز المخيفة للغاية
- تحسين دعم بنية نادرة أو نظام تشغيل (لديك أجهزة و / أو نظام تشغيل)
- الدردشة مع الأشخاص الذين ساهموا في Go لفترة طويلة
القائمة ليست كاملة ، يمكن للجميع العثور على شيء في هذا.
ورشة عمل في روسيا
في مرحلة ما ، قررت أنني أريد المساعدة في تنظيم مثل هذا الحدث. الأهم من ذلك كله أردت أن أكون في دائرة من الناس لديهم اهتمامات مماثلة.
استغرق البرنامج الأولي حوالي 6-10 ساعات (أفضل وأسوأ نطاق للحالة). بدا hackathon الشكل الأنسب ، ولكن لم يكن من الممكن العثور على رعاة في ذلك الوقت. ولكن كانت هناك فرصة لإجراء فصول اختيارية للمنصة العلمية والعملية لـ IWMI و KFU ، مرة واحدة في الأسبوع لمدة ساعة ونصف. العيب الواضح: بسبب الفواصل الكبيرة بين المشاركة ، سيكون عليك قضاء بعض الوقت الإضافي. ولا بيتزا. تنهد
بشكل غير متوقع ، تحولت إلى أن أكون ضيفًا في بودكاست GolangShow (الحلقة 119) ، حيث أترك فكرة عن إجراء شيء مشابه للطلاب. بعد ذلك بقليل ، أنشأت Elena Grakhovats القناة #kfu-go-2018
في ركود المجتمع الناطق بالروسية Go . لا يمكن فقط لطلاب جامعة الملك فيصل التواصل هناك ، ولكن أيضًا جميع أولئك المهتمين بالمشاركة عن بُعد.
بعد ذلك ، تمت الموافقة على تفاصيل الاجتماع في الجامعة ، وأصبحت مواعيد محددة معروفة. بدلاً من الهاكاثون ، حصلوا على "دورة لغة برمجة Go". لم يغير هذا المحتوى كثيرًا ، وظل الهدف كما هو وقد تم وصفه بوضوح في الإعلان .
تبع ذلك مسحًا للمتتبع بحثًا عن المهام التي يمكن إجراؤها في إطار الحدث جزئيًا على الأقل (حتى أفضل - تمامًا).
الدرس رقم 1في الواقع ، اتضح أن قائمة المهام تضمنت تلك التي كانت مصالح أو أفهمها شخصيًا. وقد تم الاعتراف بذلك أيضًا أثناء تجميع القائمة ، ولكن من الصعب التأثير عليها.
ربما سيكون من الأفضل إذا كانت هذه القائمة تتكون من عدة أشخاص لديهم ملفات شخصية واهتمامات مختلفة.
يمكن لأي مشارك الانتقال إلى Go tracker واختيار أي شيء ، ولكن بالنسبة للمهام من القائمة ، كانت التفسيرات جاهزة ، وبالنسبة لبعضها حل جزئي.
معظم المحتوى الذي تم إنشاؤه خلال الدورة متاح في مستودع kfu-go-2018 . يمكنك أيضًا العثور على task.org هناك .
الاجتماع الأول
جاء الطلاب الذين لم يكتبوا مسبقًا على Go. لم يسمع معظمهم حتى عن لغة البرمجة هذه.
لقد أنفقنا نصف الدرس الأول على بناء Go من المصدر. على أجهزة الكمبيوتر المختلفة كانت هناك اختلافات ، بما في ذلك مشاكل غير متوقعة. أنظمة تشغيل مختلفة ، إصدارات لمجمعي النظام (شخص ما لم يكن ينوي الذهاب 1.4) ، وهكذا. ./make.bash
( make.bat
لـ Windows) مع أخطاء مختلفة.
عندما كان لدى الأغلبية ميزة Go Go عاملة ، كان أول عرض لنا Hello World هو go tool compile
الرسالة الأساسية في go tool compile
عندما تم تمرير إشارة جديدة إليها.
مرت 90 دقيقة: تحدثنا عن Go ، وقارنناه بـ C ++ ، وقمنا بتجميع سلسلة أدوات ، وتفكيك عملية التمهيد ، وتجميع مترجم محدث.
الدرس رقم 2بشكل منفصل ، تجدر الإشارة إلى أن Delus Farkhulin ساعدني. كشفت تجريبيا أن أكثر من أربعة أشخاص لقيادة وحدها أمر صعب للغاية. الوضع معقد عندما لا يعرف أي من المشاركين ، باستثناء الموجهين ، Go. عليك القيام بالعديد من الخطوات الإضافية. ومع ذلك ، إذا كان هناك أربعة منا ، فسيكون الأمر أسهل بكثير (كان هناك 15 طالبًا).
البقع الأولى في مشروع Go
في الدرس الثاني ، كان الهدف هو الذهاب مباشرة للمساهمة:
- اتفقنا مع دانييل مارتي على أنه سيكون متاحًا في الوقت المتفق عليه وسيكون قادرًا على إجراء مراجعة (ضع +2 إذا كان التصحيح تافهًا وصحيحًا).
- اقترح Ilya Tokar مستودع خدش حيث يكون من الأسهل بكثير إرسال أول CL (قائمة التغيير). يسمح لك بتجربة gerrit في العمل دون خطر كسر شيء ما.
- أعدت ملصقات للتسليم لأولئك الذين حقنوا بنجاح بقع في Go.
كنا محظوظين: تم كسر مستودع الخدش. قام شخص ما بإرسال رمز خاطئ إلى المستودع وبسبب هذا ، فشلت trybots (اختبارات CI) دائمًا. كانت إحدى المهام التي أعددتها هي إصلاح سبب حدوث خطأ البناء.
في نهاية الدرس تم إرسال 6 رقع:
CL105415 ، CL105395 ، CL105356 ، CL105416 ، CL105355 ، CL105375 .
الجميع حصلوا على الملصقات.

180 دقيقة مرت: قاموا بتفكيك عملية تطوير Go ، وأصدروا Google CLA للجميع ، وأقاموا gerrit ، وأرسلوا تصحيحات "hello world" ، وأصلحوا مجموعة مستودع الخدش ، وتمكن أحد المشاركين من إرسال التصحيح إلى golang / go (كان الدمج في نفس اليوم).
الدرس رقم 3للحصول على ملصقات جيدة "في الوقت المحدد" ، تحتاج إلى الاتصال بمورد موثوق به. لا يعد التوفير في أقرب نقطة حيث يمكن طباعة الملصقات بدون تقطيع فكرة جيدة. ولا يمكنك الجمع بين شعار غوفر وأي شيء آخر: ينتهك غوفر مع تسجيل دخول إنتل جميع قوانين الملصقات التي يمكن تصورها.
عقدت الفئات المتبقية وفقا لمخطط فضفاض. جئنا وعملنا على مهامنا وتبادلنا الخبرات وساعدنا بعضنا البعض. أرسل كل اجتماع تقريبًا العديد من التصحيحات.
ثم جاء تجميد الشفرة ووصلت الدورة إلى نهاية منطقية. عند هذه النقطة ، تم سكب 17 بقعًا . ما زلنا نجتمع يوم السبت ونعمل على مرافق Go مختلفة ...

صعوبات "الخطوة الثانية"
كانت أسهل طريقة هي اتخاذ الخطوة الأولى. بالنسبة لأولئك الذين ليسوا على يقين من العمل مع git ، فإن مستودع الخدش هو حل رائع.
لم يكن من الصعب للغاية العثور على المهام ذات الحجم الأدنى ولا تتطلب سياقًا كبيرًا. ساعدت مجموعة متنوعة من اللتر هنا. قم بتشغيل " gometalinter --enable-all
" على العبوة من GOROOT
واختر ما تريد إصلاحه.
كان الأمر أكثر صعوبة مع المهام أعلى مستوى واحد. كان من الصعب بالنسبة لي اقتراح مثل هذا ، ولكن كان من الصعب عليهم اختيار ذلك. في الوقت نفسه ، كان هناك فهم بأننا تجاوزنا بالفعل تصحيح تحذيرات اللتر (اختفى التحدي ، من أجل التدريب المنتج كان من الضروري البحث عن أنواع جديدة من المهام).
من الناحية النظرية ، تتمثل المهمة الجيدة من المستوى الثاني في تحسين الاختبارات في Go: زيادة التغطية ، أو إضافة أو تحسين المعايير ، وإصلاح الاختبارات غير الصحيحة تمامًا أو المعطلة ، والتحقق من اختبارات الانحدار ، والمزيد. يتطلب هذا بعض الانغماس في حزمة الاختبار ، ولكن نطاق التغيير سيكون ضئيلًا ومن السهل التحقق من النتيجة. ولكن لا يحب الجميع العمل مع الاختبارات.
أمثلة على ما تمكنوا من القيام به كمهام من المستوى الثاني:
- ترميز / json: إضافة المسار الكامل للحقل في UnmarshalTypeError (
#22369
) - time: تحسين time.Time.Sub and time.Since (
#17858
) - cmd / compile: تجنب النسخ البطيئة لتعليمات LEA على x86 (
#21735
)
لقد جعلناهم أقرب إلى تجميد الشفرة ، لذلك لم يكن لدينا الوقت لإنهائها: كان هناك يومان من أيام السبت لمدة 90 دقيقة ، ولكن هذا ليس كافيًا. علاوة على ذلك ، عمل الجميع على مهمتهم. ربما سيكون من الأسهل أن ينقسم شخصان على الأقل إلى فرق ، على سبيل المثال ، في حالة المسألة 21735 ، يمكنك التحقق من الفرضيات المختلفة بالتوازي ودراسة أجزاء مختلفة من المترجم بالتوازي ، ثم مشاركة المعرفة.
الدرس رقم 4الأهم من ذلك كله ، يجدر الانتباه إلى هذا الجزء بالذات ، والتعمق الذي لا مفر منه والقضايا التي تلي ذلك. أشك في أن هناك أشخاصًا يعرفون جميع أجزاء Go كثيرًا حتى يتمكنوا من دعم أي خيار ، لذلك هنا مرة أخرى كل هذا يرجع إلى نقص في الخبراء المختلفين.
ورشة العمل v2
سيتم حل بعض المشكلات الموضحة أعلاه عن طريق تنسيق بديل ، عندما لا تتطلب مهمة أكثر تعقيدًا حلها في غضون ثلاثة أسابيع. يجب أن تعقد ورشة العمل التالية في شكل حدث مستمر ، لمدة 4-5 ساعات على الأقل ، وبشكل مثالي مع استراحة ولمدة أطول.
عادة ، يتضمن تنسيق الهاكاثون أيضًا بعض التحضير للمشاركين قبل البداية ، أي اختيار المهمة ووصف أولي لطرق حلها ، وتشكيل فرق. يمكن أن يساعد ذلك أيضًا في زيادة عدد المساهمات الناجحة.
نحتاج إلى المزيد من الموجهين الذين يمكنهم مساعدة المشاركين في اختيار المشكلات وحلها في الوقت الفعلي.
يعتمد اختيار المدينة على عدد المشاركين وتوزيعهم الجغرافي. هناك أربعة خيارات هي الأقرب إلي: موسكو ، إنوبوليس ، قازان ، نيجني نوفغورود.
في الختام
ليس من الضروري المجيء إلى مثل هذه الهاكاثونات لبدء المساهمة في Go ، ومن الأمثلة المحفزة على ذلك مقال ماركو عن كيفية مساهمة New to Go . ومع ذلك ، في شركة من نفس الأشخاص المهتمين ، من الأسهل التغلب على الانزعاج والارتباك الأوليين ، للانتقال من البداية إلى النهاية.
إذا لم تكن غير مبال بهذا الموضوع ، فابق على اتصال ، وانظر إلى golang-ru.slack . تبدأ الفترة التالية من التطوير النشط لـ Go في أغسطس 2018 : ليس بعيدًا جدًا لنسيانها ، وليس قريبًا جدًا من عدم توفر الوقت للاستعداد جيدًا.
مواد إضافية للمساهمين المبتدئين
الأحداث القادمة