تخطَّ إلى المحتوى
NerdLevelTech
الدرس ١ من ٢٦
الدرس ١ من ٢٦٤ دقائق للقراءةمتوسط

ليه "اكتبلي function" بيفشل

اتعرّف على كريم. مهندس backend مستوى متوسط، بقاله ٦ شهور بيستخدم AI coding assistants. الكود اللي بيرجعله شكله صح، بس بيتكسّر بطرق خفية في production. عايز يكتب prompts تطلّع كود يقبله فعلاً في code review. بنهاية الكورس ده، هيشحن PR حقيقي ٢٠٠ سطر على GitHub بـ prompts بس.

نفس الهدف، اتنين prompts — انقر تشوف اللي كريم كان لازم يكتبه

غامض
Write a Python function to dedupe a list.

أول رد فعل عند كريم زي أي مهندس. بيكتب:

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 من ٤ blocks — INTENT, CONSTRAINTS, TESTS, FORMAT — بيجبر الموديل على function واحدة بشكل محدد. هتشوف نفس مهمة dedupe متعملة صح في الدرس الخامس.

تدفق الكورس بسرعة:

6 modules، و PR واحد في الآخر

Prompt غامض مقابل prompt على شكل skeleton بيطلّعوا مخرجات مختلفة خالص:

Prompt غامض مقابل Prompt بشكل skeleton

جاهز للصق

Skeleton: INTENT + CONSTRAINTS + TESTS + FORMAT

عدد الـ functions1
فيه testsأيوه (4 asserts)
Type hintsأيوه
بيشحن من غير تعديلأيوه
المزايا
  • الـ signature إنت اللي ثبّته، مش الموديل
  • Asserts بتثبت الصح قبل الـ commit
  • المخرج بينزل في ملف .py على طول
العيوب
  • بيكلّفك القرارات من الأول — لازم تكون عارف الـ signature بالفعل
  • التقييد الزيادة بيخفي أسلوب أحسن كان الموديل هيقترحه
  • Constraint غلط = كود غلط بثقة، و tests متفقة معاه

اقرا عمود الـ cons اللي على اليمين قبل ما تكمّل. الـ skeleton بينقل القرارات من الموديل ليك؛ مش بيشيلها. كل الدروس من هنا عن إزاي تخلّي القرارات دي رخيصة في التعبير — و module 2 عن اللي تعمله لما تعبّر عن واحد منهم غلط.

ملاحظة على الـ captures في الكورس ده

كل مخرج موديل في الكورس ده capture حقيقي، اتشغّل على Claude Sonnet 4.5 (claude-sonnet-4-5) في 2026-04-27، ومطبوع من غير تعديل — بما فيهم اللي طلعوا غلط. ٣ حاجات بتترتب على ده، وهي أهم من المخرجات نفسها:

  • إعادة التشغيل هتختلف. الموديلات دي مش deterministic، والشركة بتقول صراحة إن مفيش إعداد قدر يضمن مخرجات متطابقة. اعتبر كل capture ملاحظة واحدة، مش سلوك ثابت للموديل.
  • مُعرِّفات الموديلات بتتقاعد. claude-sonnet-4-5 ليه تاريخ تقاعد منشور، وكذلك اللي هيحل محله. قبل ما تثبّت موديل في أدواتك، شوف صفحة إهلاك الموديلات — الصفحة دي بتتصحّح لما التاريخ يتغيّر؛ الجملة دي لأ.
  • الـ capture دليل على سلوك، مش مصدر لحقيقة. لو الموديل قال حاجة عن العالم — أو عن نفسه — الكلام ده محتاج مصدر زي أي كلام تاني. كام درس هنا بيعيدوا تشغيل الـ capture ويلاقوا الموديل غلط. وده الغرض من عرضهم.

التالي: الـ skeleton الرباعي نفسه.

اختبار

الوحدة ١: الـ Skeleton الرباعي للكود

خذ الاختبار
هل كان هذا الدرس مفيدًا؟

سجّل الدخول للتقييم