الفخّ: ما لا يجب أن تسلّمه
درس 7 من 12
7الفخّ: ما لا يجب أن تسلّمه
الجزء الأخير ليس عن أداة بل عنك: أربعة فخاخ حقيقية، الاعتماد، والاختراع المعقول، والحزمة المخترعة، والمسؤولية التي تبقى باسمك، وبروتوكول شخصي من سبعة أسئلة تخرج به من هذا المسار.
ماذا تشاهد في الرسم: أربعة أسئلة تمرّ عليها بالترتيب: هل تفهمه، هل شغّلته، هل الحزمة موجودة فعلًا، وهل تقبل أن يُنسب إليك.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
المساعد يكتب بسرعة، لكنك أنت من يوقّع على العمل. مثل محاسب يستعين بآلة: لو أخطأت الآلة، المحاسب هو المسؤول أمام صاحب الشركة. هذا الدرس يعطيك أسئلة قصيرة تسألها لنفسك قبل أن تقبل أي كود لم تكتبه بيدك.
الفخاخ الشائعة: كود لا تفهمه، واعتماديات مخترعة أو غير موثوقة، وأسرار مسرّبة، واختبارات لا تختبر شيئًا. البروتوكول سبعة أسئلة: هل أستطيع شرحه؟ هل شغّلته؟ هل يفشل الاختبار حين أكسره؟ هل كل حزمة موجودة؟ هل فيه سر؟ هل الترخيص سليم؟ هل أتحمّل صيانته؟
المتطلبات قبل البداية
الأجزاء ١–٦
رأيت أداة تكتب وتشغّل وتخطئ. هذا الجزء يحوّل ما رأيته إلى عادة.
صدق مع نفسك
السؤال الوحيد الصعب هنا: كم ملفًا في مشروعك لا تستطيع شرحه؟ الجواب الصادق هو بداية العلاج.
مشروع حقيقي أمامك
البروتوكول في آخر هذا الجزء يُقرأ مرة ويُستخدم عند كل دمج. جرّبه على آخر تعديل كتبته.
المفاهيم الأساسية
ليس أن تستخدم الأداة كثيرًا، بل أن تدمج ما لا تستطيع شرحه. المهارة لا تضمر من السرعة؛ تضمر من تخطّي خطوة الفهم. والاختبار بسيط: أغلق المساعد واشرح الملف بصوت عالٍ.
النموذج يولّد نصًا مرجّحًا لا نصًا صحيحًا. ولأن flatten() معقولة تمامًا بجوار flat()، سيكتبها بثقة كاملة. الثقة في نبرة الجواب ليست مؤشّرًا على صحته أبدًا.
أخطر صورة للاختراع: اسم حزمة غير موجود. من يراقب هذه الأسماء يستطيع نشر حزمة بذلك الاسم فعلًا، فيصير تثبيتك لها تشغيلًا لكود شخص غريب على جهازك. تحقّق من كل اسم حزمة جديد قبل التثبيت.
الـcommit باسمك، والمراجعة باسمك، والعطل في الإنتاج باسمك. «المساعد كتبها» ليست جملة مهنية. ومعها: لا تلصق أسرارًا ولا بيانات مستخدمين في أي محادثة، واعرف سياسة شركتك قبل إرسال كود خاص.
سلّم الطباعة، وراجع المنطق، ولا تسلّم أبدًا تعريف الصحة ولا قرار الدمج. كل هذا المسار كان تدريبًا على هذا الخط الواحد.
كيف يعمل؟
شكل 1، حلقة الاعتماد: لاحظ أنها تُغلق على نفسها، والمخرج الوحيد خارج الحلقة
شكل 2، خط التسليم: ما تسلّمه، وما تراجعه، وما يبقى لك وحدك
الفخّ الثاني بمخرجات حقيقية، ثم البروتوكول
لنجعل الفخّ الثاني ملموسًا. هذه أربعة أزواج من الدوال: في كل زوج واحدة موجودة في جافاسكربت وواحدة تبدو موجودة. جرّب أن تحدس قبل أن تقرأ المخرجات:
$ node probe.js
[1,[2,[3]]].flat(2) -> [1,2,3]
[1,[2,[3]]].flatten() -> TypeError: [1,[2,[3]]].flatten is not a function
"7".padStart(3, "0") -> "007"
"7".padLeft(3, "0") -> TypeError: "7".padLeft is not a function
Object.fromEntries([["a",1]]) -> {"a":1}
Object.toEntries({a:1}) -> TypeError: Object.toEntries is not a function
[3,1,2].toSorted() -> [1,2,3]
[3,1,2].sortBy(x => x) -> TypeError: [3,1,2].sortBy is not a functionflatten وpadLeft وtoEntries وsortBy كلها أسماء جيدة، وبعضها موجود في لغات أخرى أو في مكتبات مشهورة. النموذج لا «يكذب»؛ هو يكمل نمطًا معقولًا. وهذا بالضبط ما يجعل الخطأ غير مرئي في المراجعة البصرية.التمرين العملي: افحص مشروعك بثلاث خطوات
البروتوكول الذي تخرج به من هذا المسار
سبعة أسئلة، تسعون ثانية، قبل كل دمج. علّقها أمامك أو ضعها في AGENTS.md عندك:
قبل الدمج — سبعة أسئلة (٩٠ ثانية) 1. أقدر أشرح كل سطر بجملة؟ لا -> لا تدمج 2. شغّلته بنفسي ورأيت المخرجات؟ لا -> شغّله 3. يوجد تحقّق يفشل لو خرّبت الكود؟ لا -> اكتبه 4. فحصت الحدود: فارغ، غير موجود، نوع خاطئ؟ لا -> افحصها 5. كل دالة/حزمة مستدعاة موجودة فعلًا؟ لا -> تحقّق 6. ما أرسلت سرًا ولا بيانات مستخدم؟ أرسلت -> أبلغ فورًا 7. أوقّع على هذا باسمي؟ لا -> لا تدمج
اعتقاد شائع × الحقيقة
| الاعتقاد | الحقيقة |
|---|---|
| «إذا شرح النموذج بثقة فالجواب صحيح.» | النبرة والواقع لا علاقة بينهما. padLeft تُشرح بثقة تامة وهي غير موجودة. |
| «استخدام المساعد يُضعف مهارتي.» | ما يُضعفها هو دمج ما لا تفهمه. الاستخدام مع الفهم يوسّعها أسرع من أي كتاب. |
| «أسأل المساعد: هل أنت متأكّد؟» | جواب التأكيد يُولَّد بنفس الطريقة. الدليل تشغيل أو توثيق رسمي، لا سؤال ثانٍ. |
| «الحزمة المخترعة مجرّد خطأ إملائي.» | هي باب لكود غريب يُشغَّل على جهازك. تحقّق من الاسم قبل التثبيت دائمًا. |
| «المسؤولية مشتركة مع الأداة.» | الـcommit باسمك وحدك. لا يوجد توقيع مشترك في سجل git. |
| «المحترفون لا يحتاجون قوائم تحقّق.» | المحترفون هم من يستخدمونها: الطيّارون والجرّاحون. القائمة تحمي من يوم سيّئ، لا من جهل. |
جرّب بنفسك
المساعد كتب arr.flatten() وشرح بثقة أنها تسطّح المصفوفة. ما أول خطوة؟
التشغيل أو التوثيق هما الدليلان الوحيدان. الخيار الثاني يولّد تأكيدًا بنفس الطريقة التي ولّد بها الخطأ، والرابع يحوّل خطأً بسيطًا إلى حزمة جديدة في مشروعك.
أي من هذه لا يجوز تسليمه للمساعد أبدًا؟
لأن تعريف الصحة يعبّر عن نيّتك وعن عقدك مع المستخدم، وقرار الدمج يحمل مسؤوليتك المهنية. البقية طباعة وشرح، سلّمها بلا قلق وراجع ناتجها.
بطاقات مراجعة سريعة
تحقّق من فهمك
1. بجملة واحدة: ما الفرق بين «النموذج يكذب» و«النموذج يخترع»؟
الكذب فيه قصد ومعرفة بالحقيقة. النموذج لا يملك أيًّا منهما: هو يولّد الاستمرار الأكثر ترجيحًا لنص، فإن كان الاسم المخترع أكثر «شكلًا طبيعيًا» من الحقيقي كتبه. ولهذا لا يُجدي عتابه ولا سؤاله عن تأكيده، يُجدي تشغيل الكود.
2. لماذا سؤال «هل أنت متأكّد؟» ليس تحقّقًا؟
لأن جواب «نعم، متأكّد» يُولَّد بنفس الآلية التي ولّدت الخطأ: ترجيح نصّي لا فحص واقع. وغالبًا يميل النموذج إلى الموافقة على صياغة سؤالك، فتزداد ثقتك بلا أن تزداد المعلومة. التحقّق الحقيقي شيء خارج المحادثة: تشغيل، أو توثيق رسمي.
3. (اكتشف الخطأ) عضو في فريقك لصق رسالة خطأ من الإنتاج في محادثة، وفيها مفتاح API وبريد عميل. ماذا تفعل؟
تعاملها كحادثة لا كخطأ صغير: المفتاح يُبطَل ويُستبدل فورًا، ويُبلَّغ المسؤول عن الأمن وعن الخصوصية في شركتك حسب سياستها، ويُسجَّل ما خرج بالضبط. ثم تُعالج السبب: قاعدة واضحة أن الرسائل تُقتضب قبل اللصق. افتراض أن المحادثة خاصة ليس ضمانًا، والسرّ الذي خرج يُعتبر محروقًا.
4. كيف تستخدم المساعد بطريقة تزيد مهارتك لا تنقصها؟
ثلاث عادات: اكتب أنت أول نسخة من أي مفهوم جديد عليك ثم اسأل عن تحسينه؛ واطلب الشرح قبل الكود في كل ما لا تعرفه («اشرح لي الفكرة ثم أرني مثالًا»)؛ واجعل كل اقتراح تقبله مادة قراءة لا مادة لصق. المساعد مُدرّس ممتاز حين تسأله «لماذا؟»، ومُعطّل للتعلّم حين تسأله «أعطني».
5. (قرار) شركتك تريد قياس أثر هذه الأدوات. يُقترح مقياس «عدد الأسطر المدمجة». ما ردّك؟
أنه يقيس الشيء الخطأ ويحفّز على الأسوأ: من يدمج بلا فهم سيتصدّر القائمة. المقاييس الأقرب للقيمة: نسبة التعديلات التي رجعت للخلف، ووقت إصلاح العطل (لأنه يكشف الكود الذي لا أحد يفهمه)، وتغطية الاختبارات التي تفشل فعلًا عند تخريب الكود، ورضا المراجعين عن قابلية المراجعة. ما يُقاس يُعزَّز، فقس الفهم لا الحجم.