وحدة 3 / 12

البرمجة والبرمجة الزوجية باستخدام الذكاء الاصطناعي

المكاسب:

  • القدرة على كتابة الوظائف والفئات والوحدات النمطية للذكاء الاصطناعي مع تعريفات واضحة للمدخلات والمخرجات والقيود
  • القدرة على استخدام الذكاء الاصطناعي كشريك برمجة مزدوج والتقدم خطوة بخطوة، في أجزاء صغيرة يمكن التحقق منها
  • القدرة على اكتشاف الأخطاء المنطقية وحالة الحافة من خلال تجميع التعليمات البرمجية التي تم إنشاؤها بواسطة الذكاء الاصطناعي وتشغيلها بأمثلة صغيرة

البرمجة الثنائية هي عندما يعمل مطوران على نفس المشكلة، حيث يقوم أحدهما بالكتابة والآخر بالمراجعة. إن البرمجة باستخدام الذكاء الاصطناعي هي النسخة الرقمية لهذه العلاقة بالذات: أنت تحدد الاتجاه والقيود ومعايير القبول؛ الذكاء الاصطناعي ينتج مسودة سريعة؛ يمكنك التحقق من كل خطوة عن طريق تجميعها واختبارها. أكبر فخ هنا هو إخبار الذكاء الاصطناعي "اكتب لي هذا التطبيق من البداية إلى النهاية" وقبول كتلة مكونة من 200 سطر بشكل أعمى. تتم البرمجة الزوجية الجيدة في خطوات صغيرة: يجب أن تكون كل خطوة مفهومة وقابلة للاختبار وقابلة للعكس.

ستتعلم في هذه الوحدة كيفية طباعة الوظائف والفئات والوحدات النمطية بعقد واضح للمدخلات والمخرجات؛ كيفية توجيه الذكاء الاصطناعي خطوة بخطوة؛ وسنرى كيفية اكتشاف الأخطاء المنطقية وحالة الحافة عن طريق تشغيل الكود الذي ينتجه مع أمثلة صغيرة. الهدف ليس السرعة، بل السرعة المؤكدة.

المفاهيم: عقد المدخلات والمخرجات: تعريف واضح للمدخلات التي تأخذها الوظيفة وما هي المخرجات وسلوك الخطأ الذي تعد به. حالة الحافة: إدخال غير عادي ولكن يمكن أن يحدث بالفعل (فارغ، صفر، سلبي، كبير جدًا، فارغ). التطوير المتزايد: البدء بقطع عمل صغيرة والتحقق من صحة كل خطوة.

طباعة الكود مع صافي العقد

أساس رمز الجودة هو تحديد "ما تريده" بالضبط قبل بدء العمل. عند كتابة دالة للذكاء الاصطناعي، أعطها خمسة أشياء: اللغة والإصدار، وأنواع الإدخال ومعانيه، والمخرجات، وشروط الخطأ، والقيود (الأداء، وحظر المكتبة الخارجية، والأسلوب). وهذا يمنع الذكاء الاصطناعي من التخمين.

  1. اكتب العقد. الإدخال، الإخراج، الخطأ، القيد.
  2. اطلب وحدة صغيرة. وظيفة ذات مسؤولية واحدة؛ إنها ليست وحدة ضخمة.
  3. طلب كتلة اختبار. أضف بعض نماذج التشغيل/الاختبارات بجوار الكود.
  4. تجميع وتشغيل. جربه مع حالات الحافة، وتحقق من الإخراج بالعين المجردة.
  5. انتقل إلى الخطوة التالية. بمجرد تأكيد القطعة، قم بالبناء عليها.

موجه الدالة المتعاقد عليها: "اكتب دالة لـ TypeScript 5. الغرض: حساب إجمالي كمية العناصر في عربة التسوق. الإدخال: { السعر: رقم، كمية: رقم [] مصفوفة. الإخراج: رقم (إجمالي). القواعد: خطأ في الرمي إذا كانت الكمية أو السعر سالبًا؛ إرجاع 0 للمصفوفة الفارغة؛ تقريب المبلغ إلى منزلتين عشريتين للخطأ العشري. لا تستخدم مكتبة خارجية. أضف 5 حالات اختبار أسفل الدالة (عادي، فارغ، كمية سالبة، سعر عشري، مفرد) البند).."

توجيه الذكاء الاصطناعي كزوج

التقدم الجيد في البرمجة الزوجية هو عبارة عن حوار وليس طلبًا واحدًا كبيرًا. أولاً، اطلب الهيكل العظمي وقم بتشغيله؛ ثم قم بإضافة حالة الحافة؛ ثم قم بإصلاح الخلل. يبقي هذا الأسلوب التعليمات البرمجية مفهومة ويمنحك القدرة على التحكم في كل خطوة.

مطالبة التقدم المتزايد: "سنكتب قارئًا يقرأ ملف CSV ويحول السطور إلى كائن. فلننتقل خطوة بخطوة، وننتقل إلى الخطوة التالية دون تأكيد كل خطوة. الخطوة 1: فقط اكتب الهيكل العظمي الذي يقسم الملف إلى أسطر ويفصل سطر الرأس. لا تضف تحويل النوع أو معالجة الأخطاء بعد. اجعلها قصيرة، اشرح."

اشرح وتبرير موجه التعليمات البرمجية: "اشرح الوظيفة التي كتبتها للتو، ليس سطرًا بسطر، ولكن القرار بقرار: ما هو قرار التصميم الذي اتخذته ولماذا، وما هي حالة الحافة التي تعاملت معها وكيف، وما هي الحالات التي استبعدتها عمدًا؟ أدرج 3 افتراضات في الكود لا ينبغي لي تفويتها."

نصيحة: لا تقبل التعليمات البرمجية التي أنشأها الذكاء الاصطناعي دون فهمها. "اشرح لي هذا، ما هي الافتراضات التي قمت بها؟" يكشف السؤال عن الأخطاء المخفية ويسمح لك بالدفاع عن هذا الرمز، حيث يظل الرمز مسؤوليتك. إن وضع تعليمات برمجية لا تفهمها في عملية الإنتاج يشبه إرسال عقد دون التوقيع عليه.

موجه ضعيف / موجه قوي

ضعيف: "اكتب وظيفة فرز." (النتيجة: ما هي اللغة، ما الذي يتم فرزه، هل هو مستقر، ما هو قيد الأداء، التعليمات البرمجية الغامضة وربما لا تناسب المتطلبات.) قوي: "بالنسبة لـ Java 17، اكتب طريقة تقوم بفرز كائن القائمة <الموظف> أولاً حسب القسم (أبجديًا)، ثم حسب الراتب (تنازلي). لا تستبدل القائمة الأصلية، قم بإرجاع القائمة الجديدة. دع القسم الفارغ يأتي أخيرًا، اشرح مدى تعقيد الطريقة في سطر التعليق، حدد إضافة كتلة اختبار رئيسية تحتوي على 4 عينات.

موجه قوي؛ يتضمن معيار الفرز (مستويين)، وقاعدة التأثير الجانبي (استبدال الأصل)، والسلوك الفارغ، وتوقع الاختبار. وبدون هذه التفاصيل، يقدم الذكاء الاصطناعي حلاً معقولاً ولكنه غير صحيح؛ على سبيل المثال، قد يؤدي ذلك إلى إتلاف القائمة الأصلية وسيؤدي ذلك إلى حدوث خطأ صامت في مكان آخر.

التحقق من الصحة باستخدام الحالات المتطورة والعينات الصغيرة

الكود الذي يعمل في السيناريو السعيد ليس هو الكود الصحيح. فرض كل وظيفة منتجة بوعي:

نوع حالة الحافة

إدخال العينة

السلوك المتوقع

إدخال فارغ

صفيف/سلسلة فارغة

ليس خطأ، نتيجة منطقية فارغة

صفر/سلبي

0، -1

السلوك المحدد والصحيح

قيمة عظيمة

ملايين السجلات

التحكم في الفائض/الأداء

فارغة/غير محددة

مساحة مفقودة

خطأ متحكم فيه أو افتراضي

مكررة/غير عادية

متكرر، ترتيب عكسي

النتيجة الصحيحة

حالات صغيرة

الحالة 1 - خطأ تقريب صامت. يكتب الذكاء الاصطناعي دالة تجمع الأموال بأنواع عشرية (عائمة)؛ 0.1 + 0.2 يعطي 0.3000000000000004. يتم حل الخطأ عندما يضيف المهندس القاعدة "تقريب إلى رقمين واستخدام البنسات الكاملة". تمنع قاعدة الثلاثة أسطر آلاف القروش من التباين في التسوية الشهرية.

الحالة 2 - فخ الآثار الجانبية. يقوم الذكاء الاصطناعي بكتابة طريقة "لفرز" القائمة، ولكنها تعدل القائمة الأصلية في مكانها. يحدث سلوك غير متوقع لأن وحدة نمطية أخرى تستخدم نفس القائمة. إذا كان القيد "تغيير الأصل" موجودًا في الموجه، فلن يحدث الخطأ أبدًا؛ يتم القبض عليه أثناء مراجعة التعليمات البرمجية ويمنع تصحيح الأخطاء لمدة ساعتين.

الحالة 3 - الأرباح خطوة بخطوة. يقوم المطور بطباعة وحدة استيراد مكونة من 150 سطرًا مرة واحدة؛ عندما يجد خطأ، لا يستطيع أن يجد من أين جاء. يقوم مطور آخر بتقسيم نفس العمل إلى 5 خطوات صغيرة، ويختبر كل خطوة في دقيقتين ويكتشف الخطأ فورًا في الخطوة الثالثة.

الأخطاء الشائعة

  • طباعة كتل كبيرة في طلب واحد. ولدت تعليمات برمجية محفوفة بالمخاطر يصعب فهمها وتصحيح أخطائها.
  • طلب رمز دون إعطاء عقد. إذا كان خطأ الإدخال والإخراج غامضًا، فسوف يخمن الذكاء الاصطناعي ويخطئ.
  • مجرد اختبار السيناريو السعيد. إذا لم تتم تجربة الإدخال الفارغ والخالي والسالب والكبير، فسيتم ترك الخطأ للإنتاج.
  • القبول دون فهم. الكود الذي لم تكشف عنه هو دين لا يمكنك الدفاع عنه.
  • تجاهل الأنواع الحساسة مثل الآثار الجانبية والمال/التاريخ. إن تعويم الأموال بتاريخ خالد هو مصدر كلاسيكي للخطأ.

باختصار

إن كتابة التعليمات البرمجية باستخدام الذكاء الاصطناعي هي برمجة زوجية منضبطة: عقد واضح وخطوات صغيرة وبناء واختبار في كل خطوة. إن إعطاء الرباعية لقيود خطأ الإدخال والإخراج من البداية يحدد جودة الكود. يؤدي شرح الكود الذي ينتجه وفرضه باستخدام حالات الحافة إلى ظهور الأخطاء المخفية تحت السيناريو السعيد. مصدر السرعة ليس القبول الأعمى؛ هي مسودة سريعة بالإضافة إلى التحقق السريع.

مهمة التطبيق

اختر وظيفة صغيرة ولكن حقيقية (على سبيل المثال، إجمالي السلة، فرق التاريخ، تحليل النص). الطباعة باستخدام موجه الوظيفة المتعاقد عليها؛ أضف ما لا يقل عن 5 سيناريوهات اختبار بجانبه. قم بتشغيل الكود وجرب 5 حالات حافة بوعي، باستخدام الجدول كدليل. ابحث عن خطأ في حالة حافة واحدة على الأقل (إذا لم يكن الأمر كذلك، فقم بتصميم إدخال جديد لفرض الوظيفة)، وقم بإصلاحه باستخدام الذكاء الاصطناعي، وتحقق من خلال إعادة الاختبار أن الإصلاح يعمل.

قائمة مرجعية

  • [ ] قمت بكتابة عقد يتضمن المدخلات والمخرجات والأخطاء والقيود.
  • [ ] لقد قمت بإنشاء الكود في خطوات صغيرة بدلاً من كتلة واحدة كبيرة.
  • [ ] لقد قمت بإضافة كتلة اختبار/عينة بجوار الكود.
  • [ ] لقد قمت باختبار ما لا يقل عن 5 حالات حافة على الأقل.
  • [ ] قمت بشرح الكود للذكاء الاصطناعي وراجعت افتراضاته.
  • [ ] لقد قمت بتصحيح الخطأ الذي تم العثور عليه وأكدت الإصلاح عن طريق إعادة الاختبار.