هيكل توليد الكود
ليه "اكتبلي function" بيفشل
اتعرّف على كريم. مهندس backend مستوى متوسط، بقاله 6 شهور بيستخدم AI coding assistants. الكود اللي بيرجعله شكله صح، بس بيتكسّر بطرق خفية في production. عايز يكتب prompts تطلّع كود يقبله فعلاً في code review. بنهاية الكورس ده، هيشحن PR حقيقي 200 سطر على GitHub بـ prompts بس.
نفس الهدف، اتنين prompts — انقر تشوف اللي كريم كان لازم يكتبه
أول رد فعل عند كريم زي أي مهندس. بيكتب:
Write a Python function to dedupe a list.
ده اللي رجّعه Claude Sonnet 4.5 فعلاً:
# Python function to dedupe a list
Here are several approaches to remove duplicates from a list:
## 1. Using set (simplest, but doesn't preserve order)
def dedupe_list(lst):
"""Remove duplicates from a list (order not preserved)"""
return list(set(lst))
## 2. Using dict.fromkeys() (preserves order, Python 3.7+)
def dedupe_list(lst):
"""Remove duplicates while preserving order"""
return list(dict.fromkeys(lst))
Captured from Claude Sonnet 4.5 (claude-sonnet-4-5) on 2026-04-27. Re-runs may differ slightly — see the model-lifecycle note in Module 1, lesson 1.
الموديل رجّع functions اتنين بنفس الاسم. خمّن الـ trade-off اللي كريم مهتم بيه. ما رجّعش tests. ما التزمش بـ signature واحد. المخرج ده tutorial، مش وحدة كود كريم يقدر يلصقها في ملف.
ليه حصل ده؟ الـ prompt ساب كل قرار مهم للموديل:
- نحافظ على الترتيب ولا لأ؟
- النصوص case-sensitive؟
- الأداء هو الهدف ولا الوضوح؟
- إيه الـ signature اللي
defالمفروض يستخدمه؟ - النتيجة فيها tests؟
لما ما تثبّتش الحاجات دي، الموديل بيختار default منطقي — و"المنطقي" غالباً معناه وري المستخدم خيارات وخليه هو يختار. ده مفيد لـ tutorial. بس كارثة لـ code change.
الكورس ده هيديك skeleton من 4 blocks — INTENT, CONSTRAINTS, TESTS, FORMAT — بيجبر الموديل على function واحدة بشكل محدد. هتشوف نفس مهمة dedupe متعملة صح في الدرس الخامس.
تدفق الكورس بسرعة:
6 modules، و PR واحد في الآخر
INTENT + CONSTRAINTS + TESTS + FORMAT — الشكل اللي كل prompt كود بيعيد استخدامه
حدّد المكان قبل ما تصلّح. شرح الـ traceback، expected-vs-actual، regression tests
تحويلات مقفولة بقيود عشان الـ refactor ما يغيّرش السلوك في الهدوء
3 فئات، rubric للخطورة، و verdict تقدر تتصرّف بناءً عليه
Diffs في Cursor، SEARCH/REPLACE في Aider، خطط Claude Code، context الـ Copilot
كريم بيشحن PR حقيقي ~200 سطر بـ prompts من M1–M5 بس
Prompt غامض مقابل prompt على شكل skeleton بيطلّعوا مخرجات مختلفة خالص:
Prompt غامض مقابل Prompt بشكل skeleton
غامض: "اكتبلي function تشيل التكرار"
- الموديل بيختار defaults ما ثبّتهاش
- المخرج tutorial، مش وحدة كود
- بتحرق وقت في تنضيف prose واختيار
Skeleton: INTENT + CONSTRAINTS + TESTS + FORMAT
- الـ signature إنت اللي ثبّته، مش الموديل
- Asserts بتثبت الصح قبل الـ commit
- المخرج بينزل في ملف .py على طول
- بيكلّفك القرارات من الأول — لازم تكون عارف الـ signature بالفعل
- التقييد الزيادة بيخفي أسلوب أحسن كان الموديل هيقترحه
- Constraint غلط = كود غلط بثقة، و tests متفقة معاه
اقرا عمود الـ cons اللي على اليمين قبل ما تكمّل. الـ skeleton بينقل القرارات من الموديل ليك؛ مش بيشيلها. كل الدروس من هنا عن إزاي تخلّي القرارات دي رخيصة في التعبير — و module 2 عن اللي تعمله لما تعبّر عن واحد منهم غلط.
ملاحظة على الـ captures في الكورس ده
كل مخرج موديل في الكورس ده capture حقيقي، اتشغّل على Claude Sonnet 4.5 (claude-sonnet-4-5) في 2026-04-27، ومطبوع من غير تعديل — بما فيهم اللي طلعوا غلط. 3 حاجات بتترتب على ده، وهي أهم من المخرجات نفسها:
- إعادة التشغيل هتختلف. الموديلات دي مش deterministic، والشركة بتقول صراحة إن مفيش إعداد قدر يضمن مخرجات متطابقة. اعتبر كل capture ملاحظة واحدة، مش سلوك ثابت للموديل.
- مُعرِّفات الموديلات بتتقاعد.
claude-sonnet-4-5ليه تاريخ تقاعد منشور، وكذلك اللي هيحل محله. قبل ما تثبّت موديل في أدواتك، شوف صفحة إهلاك الموديلات — الصفحة دي بتتصحّح لما التاريخ يتغيّر؛ الجملة دي لأ. - الـ capture دليل على سلوك، مش مصدر لحقيقة. لو الموديل قال حاجة عن العالم — أو عن نفسه — الكلام ده محتاج مصدر زي أي كلام تاني. كام درس هنا بيعيدوا تشغيل الـ capture ويلاقوا الموديل غلط. وده الغرض من عرضهم.
التالي: الـ skeleton الرباعي نفسه. :::
سجّل الدخول للتقييم