- بواسطة x32x01 ||
يا صاحبي، لو اشتغلت قبل كده على Google Sign-In أو أي نوع من أنواع الـ Authentication، أكيد عديت على لحظة اللي كل حاجة كانت ماشية زي الفل… وفجأة تلاقي الدنيا ولّعت والنظام مبقاش راضي يشتغل
وده بالظبط اللي حصل معايا.
كنت قاعد أنا والـ AI بنحاول نحل مشكلة ظهرت فجأة، من غير أي سبب واضح، مع Google Sign-In API.
ويا سلام بقى على اللحظات اللي الكود يبقى شغال امبارح، وتيجي النهارده تفتحه تلاقيه بيقولك:
“لأ.. مش هشتغل.. تعامل معايا بقى
وهنا بدأت القصة
المحاولات اللي عملتها… واحدة ورا التانية
أول محاولة: أعمل Migrate لأحدث إصدار
قلت أجرب أحدث نسخة من المكتبة…ما اشتغلش.
تاني محاولة: أرجع الإصدار القديم
قلت أكيد المشكلة من التحديث…رجعت للنسخة اللي كانت ماشية زمان…
بردو ما اشتغلش.
تالت محاولة: أرجع Commit قديم من الكود
والله العظيم أول ما روحت Commit قديم…الكود اشتغل زي السكر
قلت خلاص يبقى المشكلة من تعديل اتعمل قريب.
رابع محاولة: أخد نفس الكود اللي كان شغال وأنقله في المشروع الحالي
وقلت يلا بينا…وبرضه…
ما اشتغلش
وهنا بدأت الدراما الحقيقية.
قررت أشغل تقيل… وناديت على Sonnet 4.5 Thinking
قلت خلاص.. الموضوع كده محتاج heavyweight.فتحت Sonnet 4.5 – Thinking mode…
والراجل قعد يحلل ويجرب ويدوّر…
وكل محاولة تنتهي بـ:
"Still not working"
وأنا:
وهو:
والكود:
رغم كل ده.. مفيش فايدة.
لكن… فجأة حصلت حاجة مهمة.
لحظة الاكتشاف: "يا نهار أبيض.. ده Token غلط!"
هو أثناء التفكير… رمى كده نص جملة ماخدتش بالي منها في الأول:“There’s a difference between the token your old code sends and the token the new code sends.”
استنى كده؟
إيه ده؟
لقيت إن:
وفجأة القطعة الناقصة من البازل ظهرت
تجربة سريعة… وتصحيح بسيط… وبوم! الكود اشتغل!
روحت داخل على المكان اللي بيبعت الـ Token للسيرفروبالفعل…
لقيته بيبعت idToken بدل accessToken.
غيرت السطر…
عملت Build…
جربت…
الكود اللي كان عامل الأزمة كان بالشكل ده:
JavaScript:
const token = user.idToken;
sendToBackend(token); JavaScript:
const token = user.accessToken;
sendToBackend(token); فرق كلمة واحدة… ومشغلش الدنيا كلها!
طب إزاي الـ AI ساعدني رغم إنه “ما حلش المشكلة”؟
ناس كتير فاكرة إن الـ AI لما ما يديكش حل نهائي يبقى كده “فشل”.بس الحقيقة لا…
الذكاء الاصطناعي مش مطلوب منه يفكر بدالك، المطلوب منه يفكر معاك.
تعالى نحلل اللي حصل:
الـ AI لفت نظري لحاجة أنا مكنتش شايفها
لما قال إن الـ token اللي مبعوت دلوقتي غير اللي كان مبعوت زمان…ده كان المفتاح الحقيقي.
الـ AI ساعدني أرتّب تفكيري
إني أديته:- نسخة للكود القديم
- نسخة للكود الجديد
- API Request
- API Response
الـ AI مش لازم يحل… يكفي يفتحلك طريق الحل
في الآخر هو ما كتبليش الكود الصح…بس قال الجملة اللي خلتني أربط كل حاجة ببعض.
وده بالظبط دور الـ AI في البرمجة.
ليه كتابة Prompt مظبوط بتوفر عليك ساعات؟
في أول مرة… كنت بكلم الـ AI بسطحية شوية.لكن لما فتحت Chat جديدة فيها Context جديد وكتبت له المشكلة بشكل:
- أوضح
- ملفات أكتر
- خطوات جربتها
- مثال للكود الشغال
- مثال للكود اللي مش شغال
وده درس مهم جدًا لأي مبرمج:
“كل ما الـ Prompt يبقى أدق… كل ما الـ AI يبقى أذكى”
مثال مبسط على Prompt ساعدني
ده نموذج من طريقة الشرح اللي استخدمتها: Code:
Here are two branches:
- branch_old: Google SignIn works
- branch_new: Google SignIn fails
Here are API Request & Response for each:
[REQUEST OLD]
[REQUEST NEW]
I need you to compare token types, parameters, headers,
and point out differences that may affect authentication. هو بيقرأ وبيقارن بمنطق.
الدرس الأهم: الـ AI مش بديل مهندس البرمجيات… لكنه أقوى مساعد ليه
دي النقطة الأساسية اللي عايز أوصلها للناس:
الذكاء الاصطناعي مش مطلوب منه يحل بدالك…
المطلوب إنّه يحل معاك
لإن في الآخر:إنت الـ Software Engineer
إنت اللي فاهم المشروع
إنت اللي شايف الصورة الكبيرة
مش هو.
ولو سيبته يكتب كود من غير ما تراجع…
أو من غير ما تفهم هو بيعمل إيه…
هتتوه أكتر.
طب ليه المبرمج لازم يراجع ويفهم مش بس “ياخد الكود ويحطه”؟
مثال صغير على خطأ AI ممكن يوقعك
لو كتبتله: Fix Google SignInهيديك حل Generic…
مش مناسب لحالتك.
لكن لو كتبتله:
Code:
Compare old working token with new request.
Backend expects accessToken.
Current code sends idToken.
Suggest where the issue might be happening.
خلاصة الكلام
الموضوع مش إن الـ AI يعوّضك…الموضوع إنه يعززك.
وفي الآخر؟
هتطلع بحل أسرع، أذكى، وأدق من إنك تشتغل لوحدك.
رسالة أخيرة لكل مهندس برمجيات
مهما الـ AI بقى قوي…هيفضل محتاج مبرمج فاهم.
لإن الكود اللي على الشاشة… مش أكتر من نتيجة تفكيرك انت.
والـ AI مجرد Tool بتساعدك توصل للأحسن أسرع.