Fixing the PR Bottleneck — Matt Pocock, AIHero
948 segments
حسناً. أنا هنا للحديث
عن معالجة عنق زجاجة
طلبات السحب (PR)، وهذا
عنوان ضخم لمحاولة
إصلاح مشكلة تكافح
معها معظم المؤسسات،
وأعتقد أنها كانت
تكافح معها تاريخياً
قبل الذكاء الاصطناعي
، أتعلمون؟ لطالما كان
لدينا عدد هائل من
طلبات السحب المعلقة
التي لم يكلف أحد نفسه
عناء مراجعتها، وقد
تزايد هذا الأمر بشكل
كبير الآن بسبب الضغوط
الجديدة التي يفرضها
الذكاء الاصطناعي بكل
قيوده الغريبة.
وللقيام بذلك،
سأستخدم معايير
مهاراتي، التي ربما
سمعتم عنها، وربما
استخدمتموها. ولديّ
مهارتان جديدتان
لأعلن عنهما، نأمل أن
تحسّنا طريقة تعاملكم
مع طلبات السحب،
وتحسّنا السرعة التي
يمكنكم بها مراجعتها
وإنجازها. السرعة. لقد
دُفعنا للقيام
بالمزيد بموارد أقل،
في الأساس، أو التعامل
مع طلبات سحب أكثر،
ومزيد من العمل، وما
إلى ذلك. وهذا هو الوعد
المركزي للذكاء
الاصطناعي، بأننا
سنكون قادرين على
استخدام هذه الوكلاء
لتوسيع نطاق عملنا
وإنجاز المزيد. وقد
أدى هذا إلى ظهور "مصنع
البرمجيات"، ربما
الكلمة الطنانة
الأكبر في يومنا هذا.
الجميع يتحدث عن مصنع
البرمجيات كلما أتيحت
لي الفرصة. وأنا أعتبر
مصنع البرمجيات في
المقام الأول مكاناً
لا يقوم فيه الإنسان
ببدء كل هذا العمل، بل
سنقوم بنقل بعض مهام
البدء هذه. سيتم تنفيذ
بعض عمليات البدء
بواسطة الوكلاء. وأنا
أفكر في ذلك ربما من
هناك يكون لديك
مُصنِّف مثل "جيف"
ليقول: "حسناً، دعونا
نحول هذا إلى إصلاح أو
إلى محاكاة للمشكلة".
أو ربما أقوم بتنبيه
الأشخاص مباشرة. وربما
يكون لديك أشياء أخرى.
ربما لديك "Planet Scale"
متصل، ليقدم لك تقارير
حول الاستعلامات
البطيئة في قاعدة
بياناتك. ربما يؤدي
ذلك بعد ذلك إلى تشغيل
جزء مختلف من مصنع
البرمجيات الخاص بك.
كل هذا لا يُشغَّل
بواسطة البشر، بل
بواسطة تعليمات
برمجية حتمية، أليس
كذلك؟ وهذه العناصر
تسرع من عمل مصنع
البرمجيات الخاص بك.
إنها تدفع بالمزيد من
التعليمات البرمجية
عبره. لكن بعد ذلك
تحتاج إلى مكابح، أليس
كذلك؟ إذا كان لديك
تسارع دائم يدفع
بالأشياء عبر مصنعك،
فسينتهي بك الأمر
بمدفع فوضى، أليس كذلك
؟ سينتهي بك الأمر
بمجرد كومة من طلبات
السحب الرديئة التي لن
تتمكن من لمسها أو
مراجعتها أو حتى النظر
إليها. لذا فأنت بحاجة
إلى مكابح. هذه هي
الآليات التي تبطئ
الوتيرة، وتزيد
الجودة، وتضمن ألا
تتحول قاعدة
التعليمات البرمجية
الخاصة بك إلى كابوس
من الفوضى البرمجية،
لأن الكود هو البيئة
التي يعمل فيها وكيلك.
إذا كان لديك كود سيئ
في قاعدة بياناتك،
فسيؤدي ذلك إلى توليد
المزيد من الكود السيئ
. لذا، سأتحدث عن هذه
الفواصل الثلاثة في
هذا العرض، وكيف
يمكننا استخدامها
لنكون أسرع بشكل غير
متوقع. إذًا، الفحوصات
الآلية. هذه هي
الفحوصات الحتمية في
مستودع الكود الخاص بك
، والتي نستخدمها منذ
آلاف السنين، أو ربما
منذ الخمسينيات.
فحوصات حتمية تتضمن
التدقيق اللغوي،
والاختبارات، وفحص
الأنواع، وجودة الكود
؛ كلها تعمل معًا
وبنفس الطريقة في كل
مرة. وفوق ذلك، لدينا
المراجعة الآلية. حيث
نستخدم وكلاء يفحصون
الكود ويقولون: "حسنًا
، هذه للأشياء التي لم
تكتشفها الاختبارات،
أو للنظر في بنية
الكود بشكل عام". وفوق
ذلك، الطبقة الثالثة
والأخيرة هي المراجعة
البشرية. أي أشخاص
يقومون بمراجعة طلبات
السحب (PRs). هذه الطبقات
الثلاث تشكل هذا النوع
من الكعكة التي ينتهي
بنا المطاف بها عند
المراجعة البشرية.
وبالطبع، السرعة
الأكبر تعني المزيد من
طلبات السحب. لذا،
الهدف هنا هو جعل
المراجعة البشرية
أسرع بالاعتماد على
المرحلتين الأوليين.
وسوف نضع حداً للفوضى.
هذا هو المبدأ الأول؛
إذا رفعت جودة الكود
الذي تقدمه، ستقوم
بمراجعة بشرية أقل لأن
العمل سيكون أفضل،
وبالتالي ستحتاج إلى
تدخلات أقل. إذًا،
الفحوصات الآلية.
الفحوصات الآلية غير
مكلفة. الشيء الرائع
فيها أنها لا تستهلك
رموزًا (tokens) كما تفعل
المراجعة الآلية، ولا
تتطلب جهدًا بشريًا،
بل تستهلك فقط دورات
المعالج. على سبيل
المثال، تقوم بتشغيل
الاختبارات الخاصة بك
مع كل تغيير في الكود.
ربما تتطلب تلك
الاختبارات بعض
الرموز، لنقل إن
وكيلًا تسبب في خطأ
واكتشفه الاختبار،
حينها تحتاج لإنفاق
بعض الرموز لإصلاحه.
لكن في رأيي، هذه رموز
أنفقت بشكل جيد جدًا.
إذًا، الفحوصات غير
مكلفة. هذا يعني أنه
يمكنك إضافة الكثير
والكثير منها إلى
مستودعاتك. وربما أنت
لا تستخدم ما يكفي
منها أو لست مبدعًا
بما يكفي في استخدامها
. لكن، الفحوصات يمكن
أن تكذب. هل يعني نجاح
الاختبارات التلقائية
(CI) أن الكود جاهز
للدمج؟ لا، ليس كذلك.
لذا، كنا نحتاج دائمًا
، بالإضافة إلى هذه
الفحوصات، إلى طبقة
إضافية لمعرفة ما إذا
كان هناك أي خطأ كارثي
في الكود قبل طرحه.
وهكذا، فإن جميع
المراحل الأخرى،
المراجعة البشرية
والمراجعة الآلية، هي
في الواقع أجهزة كشف
كذب. إنها مخصصة لكشف
الأكاذيب في الفحوصات
الآلية. الآن، أريد أن
أريكم بعض هذه
الأكاذيب، أولاً لأن
هذا يساعدنا عند
التفكير في الكود
والاختبارات الآلية
لندرك مدى سوء الأمر
وتفاقمه. أولها
الاختبارات التكرارية
(تحصيل حاصل). اختبار
يعيد تأكيد التنفيذ لا
أكثر. أدمن "أوبوس 5"
على استخدام هذه
الاختبارات. لا أفهم
تماماً لماذا. كان
لديها، على سبيل
المثال، حد أحرف منشور
X يساوي 280. هل يمكن
لأحد تخمين الاختبار
الذي كُتب لاختبار هذا
السلوك؟ أليس كذلك؟
ربما رأيت هذا ألف مرة
من قبل. هذا كود حقيقي
من وكلاء أو من أشياء
وجدتها تقوم بها
الوكلاء. لقد نص على: "
توقع أن يكون حد أحرف
منشور X هو 280". هكذا بدا
التنفيذ. وبشكل أساسي،
أعاد الاختبار تأكيد
التنفيذ. هذا هو
الاختبار التكراري.
والاختبارات
التكرارية سيئة لأنها
حساسة للغاية تجاه
الهيكلية. إنها حساسة
جداً لآليات العمل
الداخلية للنظام. هذا
يعني أنني لا أستطيع
تغيير ذلك الثابت دون
فشل الاختبار. ولا
يمكنني إعادة تسمية
ذلك الثابت دون فشل
الاختبار أيضاً. إنه
مرتبط بشدة بهيكلية
نظامي. ووجدت مثالاً
آخر أكثر فظاعة، إن
جاز التعبير. هذا
اختبار لا يصدق. ما
يفعله هنا هو اختبار
ما إذا كان عنصران في
واجهة المستخدم
يظهران بالترتيب
الصحيح. إنه يتحقق من
أن صفحة تفاصيل العرض
أو قسم الفيديو يأتي
بعد خطة المحتوى. ما
يفعله هو أنه لا يقوم
بعرضه على الشاشة. بل
يقرأ الملف الفعلي،
والوحدة البرمجية في
ذاكرته، ثم يبحث عن
الشيء الصحيح. إذن،
يجد خطة المحتوى، ويجد
الفيديوهات، ثم يتوقع
أن تأتي الفيديوهات
بعدها في المصدر. وهو
أمر جنوني إذا فكرت
فيه، لأنني أستطيع
ببساطة تغيير شكل
المادة المصدرية
وسيفشل هذا الاختبار.
إنه حساس للغاية
لهيكلية قاعدة الكود
الخاصة بي. لذا، هذه
طريقة أخرى يمكن أن
تفشل بها الفحوصات
الآلية. وهناك أيضاً...
أوه، عذراً. الفحوصات
الآلية يمكنها أن تكذب
. هناك أيضاً اختبارات
لا يمكن أن تفشل
حرفياً. سيبدو هذا
مألوفاً لك إذا كنت قد
أسرفت في استخدام "
المحاكاة"(Mocking) سابقاً
أو استخدمت أشياء
مشابهة. على سبيل
المثال، لدينا هنا
وظيفة استخدام تعزيز
الصوت. وهذه الوظيفة،
تستخدم داخلها واجهة
برمجة تطبيقات سياق
الصوت في نموذج كائن
المستند (DOM). لا تقلق
إذا لم تكن تعرف أياً
من هذه المصطلحات. لكن
ما نقوم به هنا هو مجرد
إنشاء هيكل زائف ببعض
الطرق الوهمية. واتضح
أن سياق الصوت لديه
أوضاع خطأ معقدة،
وسيفشل إذا استخدمته
في ظروف غريبة. لذا،
القيام بهذا فقط يعني
أن اختبارنا لا يمكن
أن يفشل باستخدام تلك
الأوضاع، وسنواجه
أخطاء غريبة في
الإنتاج لا تستطيع
اختباراتنا إصلاحها.
إذن السؤال هو، إذا
كان بإمكانك التحايل
على الاختبارات
الآلية، سواء كنت تعلم
بذلك، وحتى بطرق حسنة
النية أيضًا. الذكاء
الاصطناعي لا يحاول
كتابة اختبارات سيئة
هنا. إنه يأخذ
تعليماتنا فقط ويكتب
اختبارات مرتبطة بشكل
مفرط بالهيكل بدلاً من
تنفيذ الكود فعليًا.
فكيف نجعل الاختبارات
الآلية أصعب في
التحايل عليها؟ إذا
استطعنا فعل ذلك،
فيمكننا زيادة جودة
تلك الاختبارات، مما
يعني رفع معايير
الجودة لدينا. وأول
شيء أحبه حقًا في هذا
هو التصميم القائم على
الكود. إذ يمكنك في
الواقع تصميم مخرج لك
من هذه الاختبارات
السيئة. إذًا، كيف
يبدو التصميم الجيد
القائم على الكود؟ لقد
تحدثت عن هذا من قبل في
محادثات سابقة عن
هندسة الذكاء
الاصطناعي، وهي
الوحدات البرمجية
العميقة. هذه وحدات
تخفي سلوكًا معقدًا
خلف واجهات بسيطة. هذه
فكرة لجون أوسترهوت من
فلسفة تصميم
البرمجيات. إذا نظرنا
إلى هاتين الوحدتين،
لدينا (أ)، التي تحتوي
على تنفيذ كبير يختبئ
خلف واجهة صغيرة في
الأعلى. هل هذا مفهوم؟
ثم لدينا (ب) وهي واجهة
كبيرة، بها الكثير من
الوظائف التي يمكنك
استدعاؤها، وتلك
الوظائف فرديًا لا
تفعل الكثير. هل يبدو
هذا منطقيًا؟ أجل؟
الآن، إذا كان لديك
وحدة عميقة مثل (أ) هنا
، سيكون لديك عدد أقل
من الاختبارات
الحساسة للهيكل لأنك
تخفي المزيد من
التنفيذ خلف تلك
الواجهة. إذا كان
الاختبار يتم فقط عند
تلك الواجهة، فستحصل
على اختبارات أفضل.
لذا، مهمتك هنا هي
إجبار الوكلاء على
استخدام تلك الواجهة
الصغيرة بدلاً من
الوصول إلى التنفيذ
لاختبار تفاصيل
التنفيذ الغريبة هذه.
لذا، لدي مهارة لهذا
الغرض. يمكنك الحصول
على أكثر قواعد الكود
غرابة، وأسوأ قاعدة
كود وقعت عليها عيناك،
ويمكنك تشغيل هذه
المهارة عليها
وستجعلها أفضل. ما
يفعله هذا أساسًا هو
منحك فرصًا لتعميق
الوحدات البرمجية.
ويبدو الأمر هكذا
تقريبًا. ارفعوا
أيديكم إذا كنتم قد
استخدمتم هذه المهارة
، بالمناسبة. لست
متأكدًا من عدد
الأشخاص الذين
يتبعونني في هذه
القاعة. أجل، حسنًا.
إنه أمر رائع حقًا.
بشكل أساسي، إنه يمنحك
مستند HTML. سأبتعد عن
الطريق هنا. لكل الفرص
المختلفة والمحتملة
التي يراها. لذا،
يمكننا أن نرى هنا
حالة قبل وحالة بعد،
حيث نقوم نوعاً ما
بتقليل التكرار،
وننشئ وحدة برمجية
عميقة وقابلة
للاختبار. ومن ثم
يمكنك المضي قدماً في
تنفيذ ذلك. وملحق بهذا
، هناك أيضاً نوع من
اللغة التي جمعتها
لوصف الوحدات
البرمجية، لأنه إذا
حاولت يوماً القراءة
عن كيفية هيكلة قاعدة
كود، ستجد 20 نهجاً
مختلفاً وكلها تسمى DDD
، وما تحتاجه هو لغة
متسقة يمكنك
استخدامها في فريقك
للحديث عن هذه الأمور.
لذا لدي مهارة صغيرة
في تصميم قواعد الكود
تحدد ما هي المحلية،
وما هي الاستفادة، وما
هو الرابط (seam). كنت
أستخدم الروابط قبل أن
تصبح شائعة. والمقصود
بالمحلية هو مدى ترابط
كل الكود في مكان واحد
بشكل جيد. كيف يمكنك
إجراء تغيير صغير في
وحدة واحدة وجعله يمتد
تأثيره للخارج؟ كما أن
الاستفادة هي ما تحصل
عليه عندما يكون لديك
وحدة عميقة، لأن
المستدعي، الشخص الذي
يستدعي تلك الوحدة
فعلياً، يحصل على قيمة
كبيرة من استدعاء دالة
بسيطة. كلاهما جيد
جداً في قواعد الكود.
واتضح أنهما جيدان
للوكلاء أيضاً. لكن،
أنا أصف نوعاً ما كل
هذه المعايير
البرمجية المتكلفة،
ولكن كيف نتأكد فعلياً
من أن الوكيل يلتزم
بها، أليس كذلك؟ كيف
تتأكد من أن الوكيل
ينشئ وحدات عميقة ويضع
اختبارات جيدة ولا
يكتب تلك الاختبارات
السخيفة التكرارية أو
الحساسة للهيكل؟
حسناً، أعتقد أن معظم
الناس يخطئون في هذا.
ونصيحتي الأولى هي: لا
تضع معايير برمجية في
وكلاء التنفيذ لديك.
مفهوم؟ دعوني أوضح ذلك
. إذا تخيلت أن وكيل
التنفيذ يبدو كهذا،
حيث يمثل هذا كل
الأشياء التي يحتاج
الوكيل للقيام بها في
نافذة سياقه الواحدة.
يحتاج لأن يكون قادراً
على الاستكشاف، أي
البحث عن الكود الذي
سيغيره. ثم يحتاج
لتغييره فعلياً، أي
إجراء التحديثات على
الملفات باللون
الأخضر. وبعد ذلك
يحتاج إلى بعض
الميزانية لتصحيح
الأخطاء في الشيء نفسه
. أي لتشغيل تلك
الفحوصات التلقائية،
وللتحقق والتأكد
فعلياً من أنه يعمل.
الآن، اتضح أن هذا عمل
كثير جداً. وإذا حاولت
فرض معاييرك البرمجية
عليه أيضاً، فسيكون
أداؤه أسوأ. لذا،
عملية التنفيذ مثقلة
بالأعباء. هذا هو
النموذج الذهني الذي
أريدك أن تمتلكه.
وهكذا، هل يمكننا
إيجاد طريقة لفرض تلك
المعايير البرمجية
بطريقة لا تكون مثقلة
جداً؟ حسناً، هذا هو
جهدي في هذا الصدد. هذه
هي مهارتي في مراجعة
الكود. وهي تستقبل ملف
التعديلات "diff". وتقوم
بقراءة ملف داخل
المستودع يسمى معايير
البرمجة، والذي يمكنك
كتابته وتخصيصه. ثم
تتحقق مما إذا كان
الكود يتبع تلك
المعايير. لذا، إذا
نظرنا إلى وكيل
المراجعة هنا، فإنه
يقوم بشكل حاسم
بتشغيله كوكيل فرعي.
فهو يمتلك نافذة سياق
خاصة به للتعامل مع
الأمر. ويمتلك
ميزانيته الخاصة. هذا
الوكيل يحتاج إلى
القيام ببعض
الاستكشاف، أليس كذلك
؟ لأنه بالطبع يستقبل
التعديلات ويعرف
موقعها ومكان الكود،
لكنه ينبغي أن يقوم
ببعض الاستكشاف
للحصول على سياق أوسع
وفهم أعمق للكود. لكنه
لا يحتاج إلى القيام
بأي تنفيذ. ولا يحتاج
إلى القيام بأي تصحيح
للأخطاء. لذا، بينما
يكون التنفيذ محملاً
بمهام كثيرة، تكون
المراجعة في الواقع
أقل عبئاً. لذلك، ليس
لديه الكثير ليفعله.
هذا يعني أنه يمكنك
تزويده بمجموعة كبيرة
من معايير البرمجة،
وسيقوم بعمل أفضل
بكثير مما لو حاولت
القيام بذلك أثناء
التنفيذ. أنا أفكر في
هذا الأمر، وهو شعور
غير مريح، أليس كذلك؟
لأننا جميعاً نريد
الحصول على كود جيد من
المرة الأولى. لكني
أعتبر هذه عملية من
جزأين لكتابة كود جيد:
التنفيذ حيث تجعله
يعمل، ثم مراجعة الكود
حيث تجعله جيداً
بالفعل. أنت تفرض
معايير البرمجة
الخاصة بك. وبالنسبة
للمطورين المخضرمين
بيننا، فإن هذا هو
جوهر نهج "red-green refactor".
نستخدم نافذة سياق
واحدة لجعل الكود يعمل
، ثم نستخدم نافذة
سياق أخرى لإعادة
هيكلته. هكذا يعمل
الأمر في ذهني على
الأقل، وقد كان ناجحاً
جداً بالنسبة لي. هذا
يعني أنه عندما تكون
لديك معايير برمجة، لا
تضعها في النطاق العام
. لا تضعها في ملف "
agents.md"، لأنها قد تشوش
على وكيل التنفيذ. قد
يقرأها، وقد لا يفعل
ذلك. بدلاً من ذلك،
ضعها في "coding standards.md"،
وبهذه الطريقة يقوم
وكيل مراجعة الكود
بالتعامل معها فقط.
لدي فكرة أخرى هنا،
فقد كنت أتحدث إلى
الكثير من الأشخاص
اليوم. الكثيرون
يقولون إنهم سمعوا عن
المراجعة والمراجعة
الآلية، وكيف تساعد في
حل مشكلة عنق الزجاجة
في طلبات السحب (PR).
يقول الكثيرون: "أوه،
نعم، نحن نستخدم خدمة
طرف ثالث". نستخدم "Cursor
Bug Bot". نستخدم "Code Rabbit".
أو شيئاً من هذا
القبيل. أعتقد أنني
حاولت حقاً في الماضي
ابتكار مهارة عامة
لمراجعة الكود، بحيث
تكتشف جميع الأخطاء
وتجري مراجعة أمنية
وما إلى ذلك. تبين أن
الأمر صعب للغاية،
لأنك إما أن تجعلها
عامة جداً فتنتج نتائج
إيجابية خاطئة لا
علاقة لها بحالتك، أو
تجعلها محددة جداً.
فتقول مثلاً: "حسناً،
ابحث عن كل ما يخص
TypeScript". وعندها لن
يتمكن مبرمجو Rust من
استخدامها. لذا، أقول
لا تعتمدوا على مراجعة
آلية خارجية. ابنوا
أدواتكم الخاصة. طوروا
معايير البرمجة
الخاصة بكم مع مرور
الوقت. وشاركوها مع
أعضاء فريقكم. وإذا
كانت لديكم فرصة لفرض
معايير برمجية، أو
كانت لديكم وثائق
مركونة لا يقرؤها أحد،
فهذا هو المكان
المناسب لوضعها فيه.
وأيضاً، عند استخدام
هذا المراجع الآلي،
فإن النزعة الطبيعية
للكثيرين هي القول: "
أوه نعم، وكيل مراجعة
الكود الخاص بي يقرأ
الكود ثم يعلق على طلب
السحب (PR)". حسناً، ما
يفعله وكيل مراجعة
الكود في هذه الحالة
هو توفير المزيد من
العمل للمراجع البشري.
حيث يتعين على المراجع
البشري قراءة كل هذه
التعليقات الطويلة
وتحديد ما إذا كان
ينبغي علينا تنفيذ هذا
أو ذاك. يجب على
المراجع أن يلتزم
بالبرمجة. يجب عليه
إجراء الإصلاحات
بنفسه. أي يجب عليه
فعلياً تغيير الأشياء
التي يكتشفها. لأنه
عندما يأتي العنصر
البشري، فإنه يراجع
نتيجة نهائية جيدة
ومجهزة. إذا وجد أي شيء
لديه استفسارات حوله،
فيمكنه بالطبع
التعليق، لكن الأصل هو
أن يقوم بالتعديل.
توقفوا عن محاولة
كتابة كود مثالي من
المرة الأولى. توقفوا
عن جعل وكيل التنفيذ
هو الشيء الوحيد الذي
تركزون عليه، قائلين: "
سأجبره على أن يكون
مذهلاً". يتطلب الأمر
بعض التفكير خارج
الصندوق، ولكن بمجرد
أن تدرك ذلك، سيكون
الأمر رائعاً. حسناً.
مع كل تلك العملية،
قمنا بتشغيل فحوصاتنا
الآلية، وقمنا الآن
بتشغيل مراجعتنا
الآلية للتأكد من أن
الفحوصات الآلية ليست
مضللة. كيف يمكننا
إذاً تعظيم جودة طلب
السحب من حيث المراجعة
البشرية؟ كيف نجعلها
تعمل بأفضل شكل ممكن؟
نحن بحاجة إلى طلب سحب
ملائم للبشر. وهذه
مهارة جديدة يتم
إضافتها إلى المستودع
، وهي لا تزال قيد
التنفيذ، لكنني
سأطلقها قريباً، وهي
مهارة طلب السحب. هذه
واحدة من المهارات
التي كنت أفكر فيها
لفترة طويلة جداً. لم
أستقر تماماً بعد على
ما هو الأفضل في هذا
المجال. وأدركت أن
أفضل طريقة لاكتساب
مهارة مراجعة طلبات
السحب (PR) هي ببساطة
سرقة أفضل الأفكار لدى
الجميع. وهذا أمر رائع
للغاية. والآن، كيف
يبدو طلب السحب الجيد؟
كيف يمكنك إعادة بناء
هذه المهارة بنفسك؟
حسناً، المبدأ الأول
هو أن بعض المراجعات
أهم من غيرها. ليست كل
مراجعة جوهرية، أليس
كذلك؟ وبمجرد أن تفهم
ذلك، ستدرك أنه يمكنك
تركيز طاقتك على
المراجعات المهمة
حقاً. ولكن كيف نصنفها
؟ عليك التفكير في طلب
السحب باستخدام
مصطلحات AWS: هل هو باب
ذو اتجاه واحد أم باب
ذو اتجاهين؟ معظم
طلبات السحب التي لديك
ستكون أبواباً ذات
اتجاهين. يمكنك دمج
طلب السحب ثم التراجع
عنه دائماً لاحقاً.
هذه هي الميزة العظيمة
لكونك مهندس برمجيات
مقارنة بمهندس مدني،
أليس كذلك؟ غالباً،
عندما تكون مهندساً
مدنياً، فالأمر عبارة
عن باب ذي اتجاه واحد،
صحيح؟ إذا أخطأت في
شيء ما، سينهار الجسر،
ولكن إذا كان لديك باب
ذو اتجاهين، فهذا يعني
أنه يمكنك التراجع عن
التغيير بسهولة. قد
يكون الأمر أكثر دقة
بقليل مما تتوقع. قد
يؤدي تغيير بسيط جداً
عن طريق الخطأ إلى
إرسال بريد إلكتروني
لـ 60 ألف شخص، وفي هذه
الحالة يكون باباً ذا
اتجاه واحد. عليك
مراجعة ذلك بعناية
فائقة جداً. إذا تضمن
عمليات ترحيل مكلفة أو
فقدان بيانات، فهو باب
ذو اتجاه واحد. راجع
طلب السحب هذا بدقة
متناهية. ولكن إلى
جانب ذلك، نحتاج إلى
فهم نطاق تأثير هذا
الطلب. ما الذي قد يسير
بشكل خاطئ؟ وإذا حدث
خطأ ما، فما مدى سوء
الأمر؟ وهذا يعني أنني
أضع ملخصاً لطيفاً في
أسفل جميع طلبات السحب
الخاصة بي تحت مسمى "
خطر الدمج". أستطيع أن
أرى أن هذا الباب ذو
اتجاهين. نطاق تأثيره
محدود، لذا يمكنني
القول: رائع، لا أحتاج
لإيلاء الكثير من
الاهتمام لهذا الأمر.
سأكتفي بمراجعته بشكل
بسيط. هذا أمر مهم حقاً
. بعد ذلك، نحتاج إلى
فهم ما يفعله طلب
السحب من الأساس، أليس
كذلك؟ لقد جربت طرقاً
عديدة لمعرفة ذلك،
وأفضل ما توصلت إليه
هو استخدام الكود
الزائف (Pseudo code). أود
هنا تقديم خالص الشكر
لمهارة "أرني"(Show me) من
مستودع مهارات الطبقة
البشرية لـ Dex Hadley. هذه
مهارة استثنائية
تختصر معظم النصوص
وتعرض لك الأمور في
صور ومخططات بدلاً من
ذلك. وهذا يجعل من
الأسهل بكثير فهم ما
يتغير ولماذا يتغير
فعلياً. إذن، ستحصل
على المجموعة
المعتادة من مخططات "
ميرميد" و UML، كما تعلم
، لتوضيح تسلسل
الأحداث التي وقعت.
ستحصل أيضاً على هذه
المخططات البسيطة
والجميلة مثل هذا، على
سبيل المثال. يمكننا
النظر إلى هذا ونقول: "
حسناً، نحن نعمل في
واجهة سطر الأوامر (CLI).
يمكننا أن نرى أنه تمت
إضافة أمر جديد."
ولدينا شيئان جديدان،
أعلام صغيرة هنا في
الأعلى. مجرد ملخصات
صغيرة كهذه. إنها حقاً
تحدث فرقاً هائلاً. من
الصعب المبالغة في
تقدير أهميتها. لذا،
أنت تحاول جعل فهم "
السبب" سريعاً قدر
الإمكان. وأعتقد أن
هناك مبدأً ثالثاً هنا
ينبغي أن تفكر فيه
كلما قمت بمراجعة
بشرية. لأننا، ولأننا
لا نقوم بـ أم، ولأن
عملياتنا الآن أصبحت
انسيابية للغاية،
وجميعنا نتعاون حول
ملفات المهارات ذاتها
وملفات التوجيه ذاتها.
نحن جميعاً نبني بيئة
لتعمل وكلاؤنا فيها
معاً. يجب أن تنظر إلى
العملية التي تنتج
الكود الخاص بك على
أنها لا تقل أهمية عن
الكود نفسه. بمعنى آخر
، عندما تقوم بمراجعة
بشرية، فأنت لا تراجع
الكود فحسب، بل تراجع
النظام الذي أنشأه.
والنظرية هنا هي أنك
لا تريد أبداً كتابة
التعليق نفسه مرتين.
أليس كذلك؟ أنت لا
تريد أبداً أن ترى
الوكيل يرتكب الخطأ
نفسه في طلبي سحب (PR)
مختلفين. إذاً، ما هي
الآلية التي يمكنك من
خلالها جعل مراجعتك
البشرية ذات قيمة؟
حسناً، هذه مهارة
جديدة. تسمى "ريترو"(retro
). وهي اختصار لـ "
مراجعة استرجاعية"(
retrospective). أنت تأخذ
جلسة قمت بها بشكل
أساسي. يمكن أن تكون
جلسة وكيل واحدة، أو
طلب سحب مع الجلسة، أو
يمكنك ببساطة أن تطلب
منه النظر في: "حسناً،
انظر إلى كل طلبات
السحب التي قمنا بها
خلال الأسبوع الماضي،
وكل المراجعات،
واجمعها كلها معاً."
دعنا نقوم بمراجعة
استرجاعية لها.
وسيقترح فحوصات آلية
ومعايير برمجية لجعل
الجلسة التالية أفضل.
إذن، هذا هو التأثير
التراكمي، حيث إنك من
خلال إجراء مراجعة
بشرية، ترفع جودة
المراجعة البشرية
التالية وتوفر على
نفسك جهداً أقل في
المرة القادمة. و "
ريترو" مهارة ذكية
حقاً. إنها تضيف
الكثير من الأشياء.
لذا، من الواضح أنها
تقترح فحوصات آلية.
وتقترح تحديثات لملف
معايير البرمجة (coding
standards.md). وتقوم بأشياء
ذكية أخرى أيضاً. فهي
تنظر إلى مؤشرات
التنقل. ما مدى سهولة
عثور الوكيل على
معلوماته؟ هل يمكننا
توفير مؤشر داخل ملف (
agents.md) لمساعدته في
المرة القادمة؟ وهي
تنظر أيضاً في اقتصاد
استخدام الأدوات. هل
هناك أدوات مختلفة
نستخدمها في الجلسة
يمكن، كما تعلم، جعلها
أكثر كفاءة في استخدام
الرموز؟ من المدهش عدد
الأشياء التي تكتشفها
هذه الأداة في الواقع،
لأنها غالباً ما تكون
صعبة التصحيح من
الخارج. إنها تبحث في
التضخم أيضاً. إذن، هل
هناك ملفات توجيه
متضخمة؟ هل هناك
مهارات متضخمة تساهم
في هذه النتائج السيئة
؟ هل يمكننا جعلها
أكثر تنظيماً؟ إذاً،
هذا هو الهدف. إنه جعل
المراجعة البشرية
أسرع. نقوم بذلك من
خلال تعزيز المراجعة
المؤتمتة، ونجعل
المراجعة البشرية غير
مؤلمة وبسيطة
واختيارية بقدر ما
نحتاج. أنت لا تحتاج
حقاً إلى مراجعة كل
قرار يمكن التراجع عنه
. لكن كل قرار لا يمكن
التراجع عنه يجب
مراجعته. وهكذا، هذه
هي مهاراتي. أنا هنا
على hero.dev/skills ونحن
نطلق الإصدار 1.3 هذا
الأسبوع. لقد كان من
الرائع قضاء الوقت
معكم. لقد كان مؤتمراً
لطيفاً حقاً. سأكون في
الخارج في الردهة إذا
أراد أي شخص الدردشة.
شكراً جزيلاً
لاستضافتي. شكراً لك
يا باريس.
Ask follow-up questions or revisit key timestamps.
يتناول هذا الفيديو مشكلة الاختناقات في طلبات السحب (PR) في بيئات تطوير البرمجيات المعاصرة، خاصة مع تزايد استخدام الذكاء الاصطناعي الذي يسرع من كتابة الكود لكنه قد يؤدي إلى تراكم تعليمات برمجية رديئة. يقدم المتحدث استراتيجية لتحسين كفاءة وجودة هذه العملية من خلال ثلاثة مستويات: الفحوصات الآلية، المراجعة الآلية (للكشف عن عيوب الاختبارات الآلية)، والمراجعة البشرية الموجهة. يؤكد المتحدث على أهمية "تصميم الكود" وتعميق الوحدات البرمجية، ويدعو المطورين لبناء أدوات ومعايير خاصة بهم بدلاً من الاعتماد الكلي على الخدمات الخارجية، مع التركيز على جعل المراجعة البشرية اختيارية وفعالة عبر أدوات مثل "الريترو" (المراجعة الاسترجاعية) لتحسين النظام التراكمي وتوفير الجهد.
Videos recently processed by our community