هيكل توليد الكود
ليه "اكتبلي 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.
الموديل رجّع 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 متعملة صح في الدرس الخامس.
تدفق الكورس بسرعة:
Prompt غامض مقابل prompt على شكل skeleton بيطلّعوا مخرجات مختلفة خالص:
Prompt غامض مقابل Prompt بشكل skeleton
غامض: "اكتبلي function تشيل التكرار"
- الموديل بيختار defaults ما ثبّتهاش
- المخرج tutorial، مش وحدة كود
- بتحرق وقت في تنضيف prose واختيار
Skeleton: INTENT + CONSTRAINTS + TESTS + FORMAT
- الـ signature إنت اللي ثبّته، مش الموديل
- Asserts بتثبت الصح قبل الـ commit
- المخرج بينزل في ملف .py على طول
التالي: الـ skeleton الرباعي نفسه. :::
سجّل الدخول للتقييم