00:00:00[موسيقى]
00:00:21أهلاً بالجميع، طاب مساؤكم.
00:00:22سأبدأ حديثي باعتراف بسيط.
00:00:26لقد شحنت رمزاً برمجياً لم أفهمه تماماً.
00:00:29أنشأته، واختبرته، ونشرته، لكنني لم أستطع شرح آلية عمله.
00:00:33والحقيقة هي أنني أراهن أن كل واحد منكم قد فعل ذلك أيضاً.
00:00:37[ضحك]
00:00:40بما أننا اعترفنا جميعاً بأننا لم نعد نفهم
00:00:41الرموز التي نشحنها، أريد أن نأخذ رحلة قصيرة
00:00:44لنرى كيف وصل بنا الحال إلى هنا.
00:00:46أولاً، بالنظر إلى الماضي، نجد أن التاريخ يميل لتكرار نفسه.
00:00:50ثانياً، لقد وقعنا في فخ بسيط.
00:00:52لقد خلطنا بين ما هو "سهل" وما هو "بسيط".
00:00:55وأخيراً، هناك حل، لكنه يتطلب منا ألا نستغني عن تفكيرنا.
00:01:00لقد قضيت السنوات القليلة الماضية في نيتفليكس للمساعدة في تبني أدوات الذكاء الاصطناعي.
00:01:05ويجب أن أقول إن تسارع الوتيرة حقيقي للغاية.
00:01:07مهام العمل التي كانت تستغرق أياماً باتت تنجز في ساعات.
00:01:10وعمليات إعادة الهيكلة الضخمة المؤجلة لسنوات أصبحت تُنفذ أخيراً.
00:01:15لكن إليكم المعضلة.
00:01:16الأنظمة الإنتاجية الضخمة تفشل دائماً بطرق غير متوقعة.
00:01:19انظروا إلى ما حدث مع "كلاود فلير" مؤخراً.
00:01:21عندما تنهار الأنظمة، من الأفضل أن تفهم الرمز الذي تحاول إصلاحه.
00:01:23والمشكلة الآن هي أننا ننتج رموزاً برمجية بسرعة وحجم هائلين.
00:01:28لدرجة أن فهمنا يواجه صعوبة في مواكبة ذلك.
00:01:29تباً، أنا نفسي مررت بهذا.
00:01:34لقد أنتجت الكثير من الرموز، نظرت إليها وقلت في نفسي: ليس لدي أدنى فكرة عما تفعله.
00:01:39لكن الاختبارات نجحت، والبرنامج عمل، لذا قمت بنشره.
00:01:41الأمر هو أن هذا ليس شيئاً جديداً تماماً.
00:01:44كل جيل من مهندسي البرمجيات واجه في النهاية جداراً حيث
00:01:48تجاوز تعقيد البرامج قدرتهم على إدارته.
00:01:50لسنا أول من يواجه أزمة برمجيات،
00:01:52لكننا أول من يواجهها بهذا الحجم اللانهائي من الإنتاج الآلي.
00:01:56لذا دعونا نعود خطوة إلى الوراء لنرى أين بدأ كل هذا.
00:01:58في أواخر الستينيات وأوائل السبعينيات، اجتمع نخبة من علماء الحاسوب
00:02:03وقالوا: نحن نمر بأزمة برمجيات.
00:02:06لدينا طلب هائل على البرمجيات، ومع ذلك لا نستطيع مواكبته.
00:02:11المشاريع تستغرق وقتاً أطول مما ينبغي، والعمل بطيء جداً.
00:02:15نحن لا نقوم بعمل جيد.
00:02:16وهنا خرج "دايكسترا" بمقولة رائعة.
00:02:20قال، وأنا هنا ألخص مقولة أطول: عندما كانت لدينا حواسيب ضعيفة،
00:02:23كانت البرمجة مشكلة بسيطة.
00:02:26والآن بعدما أصبح لدينا حواسيب عملاقة، أصبحت البرمجة مشكلة عملاقة.
00:02:31كان يوضح أنه مع نمو قوة الأجهزة بمعامل قدره 1000،
00:02:34نمت رغبة المجتمع في البرمجيات بنفس التناسب.
00:02:37وترك ذلك لنا نحن المبرمجين مهمة الموازنة بين الأساليب والإمكانيات،
00:02:41وكيفية دعم هذا الكم الهائل من البرامج.
00:02:43هذا الأمر يتكرر في دورات مستمرة.
00:02:47في السبعينيات ظهرت لغة C لنتمكن من كتابة أنظمة أكبر.
00:02:50في الثمانينيات ظهرت الحواسيب الشخصية، وأصبح بإمكان الجميع البرمجة.
00:02:53في التسعينيات ظهرت البرمجة الكائنية التوجه (OOP).
00:02:56والتدرجات الهرمية المعقدة، شكراً للغة جافا على ذلك.
00:03:00في الألفينات ظهرت منهجية "أجايل"، وأصبح لدينا دورات عمل (Sprints)
00:03:03ومسؤولو "سكروم" يوجهوننا، وانتهى زمن نموذج الشلال (Waterfall).
00:03:06في العقد الثاني من القرن الحادي والعشرين ظهرت السحابة والهواتف و"ديف أوبس"،
00:03:09حتى التهمت البرمجيات العالم حقاً.
00:03:10واليوم لدينا الذكاء الاصطناعي، و"كوبايلوت" و"كيرسر" و"كلود" و"جيمناي" وغيرها.
00:03:17يمكننا إنتاج الرموز البرمجية بالسرعة التي نصفها بها.
00:03:19النمط مستمر، لكن النطاق تغير تماماً، لقد أصبح لانهائياً.
00:03:23لنتحدث عن "فريد بروكس"، ربما تعرفونه من كتابه "الشهر المانح للأسطورة".
00:03:29كتب أيضاً ورقة بحثية في عام 1986 بعنوان "لا توجد رصاصة فضية".
00:03:32جادل فيها بأنه لن يكون هناك ابتكار واحد من شأنه أن يمنحنا
00:03:36تحسناً هائلاً في إنتاجية البرمجيات.
00:03:38لماذا؟
00:03:40لأنه قال إن الجزء الصعب لم يكن ميكانيكا البرمجة، أو القواعد،
00:03:44أو الكتابة، أو الرموز المتكررة.
00:03:45بل كان يتعلق بفهم المشكلة الفعلية وتصميم الحل.
00:03:49لا توجد أداة يمكنها القضاء على تلك الصعوبة الجوهرية.
00:03:52كل أداة وتقنية ابتكرناها حتى الآن تجعل الميكانيكا أسهل.
00:03:55لكن التحدي الأساسي،
00:03:57وهو فهم ما يجب بناؤه وكيف يجب أن يعمل، يظل بنفس الصعوبة.
00:04:00إذاً، إذا لم تكن المشكلة في الميكانيكا، فلماذا نواصل تحسينها؟
00:04:06كيف ينتهي الأمر بمهندسين ذوي خبرة برموز لا يفهمونها الآن؟
00:04:09الإجابة في رأيي تكمن في كلمتين نميل للخلط بينهما: "بسيط" و"سهل".
00:04:14نميل لاستخدامهما بالتبادل،
00:04:16لكنهما تعنيان شيئين مختلفين تماماً.
00:04:18لقد كُشف أمري في عشاء المتحدثين بأنني من محبي لغة "كلوجر"،
00:04:21لذا فإن الأمر واضح هنا.
00:04:23لكن "ريتش هيكي"، مبتكر لغة البرمجة كلوجر (Clojure)،
00:04:25أوضح هذا في حديثه عام 2011 بعنوان "البسيط جعل سهلاً".
00:04:29عرّف "البسيط" بأنه الشيء غير المتشابك ولا المتداخل.
00:04:33كل جزء يؤدي وظيفة واحدة ولا يختلط بغيره.
00:04:36وعرّف "السهل" بأنه ما هو قريب وفي متناول اليد.
00:04:39ما يمكنك الوصول إليه دون جهد.
00:04:41انسخ، الصق، وانشر.
00:04:43البساطة تتعلق بالهيكل.
00:04:45والسهولة تتعلق بالقرب.
00:04:48المشكلة هي أننا لا نستطيع جعل الشيء بسيطاً بمجرد التمني.
00:04:51البساطة تتطلب تفكيراً وتصميماً وفكاً للتشابك.
00:04:54لكن يمكننا دائماً جعل الشيء أسهل.
00:04:56كل ما عليك هو وضعه في مكان أقرب.
00:04:57ثبّت حزمة جاهزة، أنشئها بالذكاء الاصطناعي، أو انسخ حلاً من "ستاك أوفر فلو".
00:05:03من الطبيعة البشرية اختيار المسار السهل.
00:05:06نحن مجبولون على ذلك.
00:05:07كما قلت، انسخ شيئاً من "ستاك أوفر فلو"، فهو متاح أمامك.
00:05:10إطار عمل يتولى كل شيء بسحره الخاص، ثبته وابدأ.
00:05:14لكن السهل لا يعني البسيط.
00:05:15السهل يعني أنه يمكنك الإضافة إلى نظامك بسرعة.
00:05:18والبسيط يعني أنه يمكنك فهم العمل الذي قمت به.
00:05:20في كل مرة نختار فيها السهل، نختار السرعة الآن والتعقيد لاحقاً.
00:05:24وصراحةً، كانت هذه المقايضة تنجح في الماضي.
00:05:27التعقيد المتراكم في قاعدة الرموز لدينا كان بطيئاً بما يكفي
00:05:31لنتمكن من إعادة الهيكلة والتفكير والبناء عند الحاجة.
00:05:34أعتقد أن الذكاء الاصطناعي قد دمر هذا التوازن.
00:05:36لأنه يمثل "الزر السهل" المطلق.
00:05:37إنه يجعل المسار السهل خالياً من العقبات
00:05:38لدرجة أننا لم نعد نفكر في المسار البسيط.
00:05:41لماذا نفكر في البنية المعمارية بينما يظهر الرمز البرمجي فوراً؟
00:05:44دعوني أريكم كيف يحدث هذا.
00:05:47كيف تتحول مهمة بسيطة إلى فوضى من التعقيد
00:05:50من خلال واجهة محادثة أحببناها جميعاً.
00:05:52هذا مثال مصطنع، لكن لنفترض أن لدينا تطبيقاً،
00:05:55ونريد إضافة نظام مصادقة إليه.
00:05:57نطلب إضافة المصادقة، فنحصل على ملف auth.js نظيف.
00:06:01نعدل عليه بضع مرات، وتصل الرسائل للخامسة.
00:06:02نقول حسناً، سنضيف "OAuth" أيضاً،
00:06:04والآن لدينا ملف auth.js وملف OAuth.js.
00:06:07نستمر في التعديل، فنجد أن الجلسات تعطلت.
00:06:11وظهرت لنا مجموعة من التضاربات.
00:06:12وبحلول الخطوة العشرين، لا تكون في نقاش حقيقي بعد الآن.
00:06:15أنت تدير سياقات أصبحت معقدة لدرجة أنك لا تتذكر
00:06:18حتى كل القيود التي أضفتها إليها.
00:06:20رموز ميتة من محاولات مهجورة.
00:06:22اختبارات تم إصلاحها لمجرد جعلها تعمل.
00:06:25بقايا من ثلاثة حلول مختلفة لأنك انتهيت بقول: "انتظر، في الواقع".
00:06:28كل تعليمات جديدة تمسح الأنماط المعمارية السابقة.
00:06:31قلنا اجعل المصادقة تعمل هنا، ونجح.
00:06:33وعندما قلنا أصلح هذا الخطأ، فعل ذلك.
00:06:35لا توجد مقاومة للقرارات المعمارية السيئة.
00:06:38الرمز يتشكل فقط ليرضي طلبك الأخير.
00:06:40كل تفاعل هو اختيار للسهل على حساب البسيط.
00:06:43والسهل يعني دائماً مزيداً من التعقيد.
00:06:46نحن نعرف الحقيقة، لكن عندما يكون المسار السهل بهذه السهولة، نتبعه.
00:06:50والتعقيد سيتضاعف حتى يفوت الأوان.
00:06:52الذكاء الاصطناعي يأخذ "السهولة" إلى أقصى حدودها المنطقية.
00:06:58قرر ما تريد، واحصل على الرمز فوراً.
00:07:00لكن هنا مكمن الخطر.
00:07:02الرمز الناتج يعامل كل نمط في قاعدة رموزك على حد سواء.
00:07:06عندما يحلل وكيل الذكاء الاصطناعي الرموز، يصبح كل سطر نمطاً يجب الحفاظ عليه.
00:07:10فحص المصادقة في السطر 47؟ هذا نمط.
00:07:13كود GRPC الغريب الذي يتصرف كأنه GraphQL وأضفته في 2019؟
00:07:18هذا أيضاً نمط.
00:07:19الديون التقنية لا تظهر كديون، بل هي مجرد رموز إضافية.
00:07:22المشكلة الحقيقية هنا هي التعقيد.
00:07:25أعلم أنني رددت هذه الكلمة كثيراً دون تعريفها حقاً.
00:07:29لكن أفضل طريقة للتفكير فيها هي أنها عكس البساطة.
00:07:31إنها تعني فقط التشابك.
00:07:33وعندما تكون الأشياء معقدة، يلمس كل شيء كل شيء آخر.
00:07:36لا يمكنك تغيير شيء واحد دون التأثير على عشرة أشياء أخرى.
00:07:41وبالعودة لورقة فريد بروكس "لا توجد رصاصة فضية".
00:07:43حدد فيها نوعين رئيسيين من التعقيد في كل نظام.
00:07:47هناك "التعقيد الجوهري"، وهو الصعوبة الأساسية
00:07:51للمشكلة الفعلية التي تحاول حلها.
00:07:53المستخدمون بحاجة للدفع، والطلبات يجب أن تُنفذ.
00:07:56هذا هو سبب وجود نظامك البرمجي في المقام الأول.
00:08:00وثانياً، هناك فكرة "التعقيد العرضي".
00:08:03كل شيء آخر أضفناه في الطريق؛ الحلول المؤقتة، الرموز الدفاعية،
00:08:06أطر العمل، والتجريدات التي كانت منطقية في وقت ما.
00:08:09إنه كل ما جمعناه لجعل الكود نفسه يعمل.
00:08:11في قاعدة الرموز الحقيقية، هذان النوعان موجودان في كل مكان.
00:08:16وهما متشابكان لدرجة أن فصلهما يتطلب معرفة بالسياق،
00:08:19وتاريخ النظام، والخبرة.
00:08:20أما مخرجات الذكاء الاصطناعي فلا تفرق بينهما.
00:08:24لذا يستمر الحفاظ على كل الأنماط السيئة.
00:08:26إليكم مثالاً واقعياً من العمل الذي نقوم به في نيتفليكس.
00:08:32لدي نظام يحتوي على طبقة تجريد تقع بين
00:08:35كود المصادقة القديم الذي كتبناه قبل 5 سنوات، ونظام مصادقة مركزي جديد.
00:08:41لم يكن لدينا وقت لإعادة بناء التطبيق بالكامل،
00:08:42لذا وضعنا مجرد طبقة وسيطة (shim) بينهما.
00:08:44والآن بوجود الذكاء الاصطناعي، أصبحت هذه فرصة رائعة لإعادة الهيكلة
00:08:47لاستخدام النظام الجديد مباشرة، يبدو طلباً بسيطاً، أليس كذلك؟
00:08:50كلا، الكود القديم كان مرتبطاً بشدة بأنماط المصادقة الخاصة به،
00:08:56حيث كانت فحوصات الصلاحيات منسوجة داخل منطق العمل،
00:08:59وافتراضات الأدوار متجذرة في نماذج البيانات، وطلبات المصادقة موزعة في مئات الملفات.
00:09:03بدأ الوكيل في إعادة الهيكلة، وبعد بضعة ملفات،
00:09:07اصطدم بتبعية لم يستطع فكها، فخرج الأمر عن السيطرة واستسلم.
00:09:10أو الأسوأ من ذلك، حاول الحفاظ على بعض المنطق القديم
00:09:16وإعادة إنتاجه باستخدام النظام الجديد، وهو أمر سيئ أيضاً.
00:09:19المشكلة أنه لم يستطع رؤية الفواصل.
00:09:23لم يستطع تمييز أين ينتهي منطق العمل وأين يبدأ منطق المصادقة.
00:09:26كل شيء كان متشابكاً لدرجة أنه حتى مع توفر معلومات كاملة،
00:09:30لم يجد الذكاء الاصطناعي مساراً واضحاً.
00:09:33عندما يتشابك التعقيد العرضي بهذا الشكل،
00:09:35فلن يكون الذكاء الاصطناعي خير عون في تحسينه.
00:09:38وجدت أنه يضيف فقط مزيداً من الطبقات فوقه.
00:09:40نحن نستطيع التمييز، أو على الأقل عندما نتمهل بما يكفي للتفكير.
00:09:45نحن نعرف أي الأنماط جوهرية
00:09:47وأيها كانت مجرد طريقة حل اتبعها شخص ما قبل سنوات.
00:09:50نحن نحمل السياق الذي لا يستطيع الذكاء الاصطناعي استنتاجه،
00:09:53لكن فقط إذا أخذنا الوقت لتمييز هذه الفوارق قبل البدء.
00:09:56إذاً كيف تفعل ذلك فعلياً؟
00:10:01كيف تفصل بين التعقيد العرضي والجوهري
00:10:04بينما تحدق في قاعدة رموز ضخمة؟
00:10:07قاعدة الرموز التي أعمل عليها في نيتفليكس تضم حوالي مليون سطر بلغة جافا،
00:10:10والخدمة الرئيسية فيها تستهلك حوالي 5 ملايين وحدة (token) حسب آخر إحصاء.
00:10:13لا توجد نافذة سياق متاحة لي يمكنها استيعاب كل ذلك.
00:10:17لذا عندما أردت العمل عليها، فكرت في البداية:
00:10:19ربما يمكنني نسخ أجزاء كبيرة من قاعدة الرموز هذه ووضعها في السياق
00:10:23لأرى ما إذا كانت الأنماط ستتضح،
00:10:24وما إذا كان الذكاء الاصطناعي سيفهم ما يحدث.
00:10:26وتماماً مثل تجربة إعادة هيكلة المصادقة السابقة،
00:10:29تاهت المخرجات في دوامة تعقيدها الخاص.
00:10:31لذا، اضطررت مع هذا الوضع إلى تجربة نهج مختلف.
00:10:34كان عليّ اختيار ما سأدرجه: وثائق التصميم، الهندسة المعمارية، الرسوم التوضيحية،
00:10:37والواجهات الرئيسية، وكل ما شابه ذلك.
00:10:39واستغرق الأمر وقتًا لكتابة متطلبات كيفية تفاعل المكونات
00:10:42والأنماط التي يجب اتباعها.
00:10:43في الواقع، كنت أقوم بكتابة مواصفات فنية.
00:10:45تحولت الخمسة ملايين رمز إلى مواصفات من 2000 كلمة.
00:10:49ثم، للذهاب إلى أبعد من ذلك، أخذت تلك المواصفات
00:10:52لإنشاء مجموعة دقيقة من خطوات الكود البرمجي للتنفيذ.
00:10:55لا توجد تعليمات غامضة، بل تسلسل دقيق للعمليات فقط.
00:10:58وجدت أن هذا أنتج كودًا أكثر نظافة وتركيزًا يمكنني فهمه.
00:11:02لذا قمت بتعريفه أولاً، وخططت لتنفيذه ذاتيًا.
00:11:05أصبح هذا هو النهج الذي أسميته "ضغط السياق" منذ فترة.
00:11:11لكن يمكنك تسميته هندسة السياق، أو طيف التطوير،
00:11:13أو ما شئت.
00:11:15فالاسم لا يهم.
00:11:16ما يهم هنا هو أن التفكير والتخطيط أصبحا يشكلان أغلب العمل.
00:11:20لذا دعوني أشرح لكم كيف يعمل هذا عمليًا.
00:11:22لدينا الخطوة الأولى، المرحلة الأولى: البحث.
00:11:26أقوم بتزويده بكل شيء مقدمًا.
00:11:28مخططات الهندسة المعمارية، التوثيق، محادثات سلاك.
00:11:31لقد ناقشنا هذا كثيرًا.
00:11:32لكن حقًا، أحضر أكبر قدر ممكن من السياق ذي الصلة
00:11:35بالتغييرات التي تجريها.
00:11:36ثم استخدم العميل الذكي (الآلي) لتحليل قاعدة الكود
00:11:39ورسم المكونات والتبعيات.
00:11:42لا ينبغي أن تكون هذه عملية تتم لمرة واحدة.
00:11:43أحب الاستقصاء، كأن أقول: ماذا عن التخزين المؤقت؟
00:11:46كيف يتم التعامل مع الإخفاقات؟
00:11:47وعندما يخطئ في تحليله، أقوم بتصحيحه.
00:11:49وإذا افتقر للسياق، أقوم بتزويده به.
00:11:51كل تكرار يعمل على تحسين تحليله.
00:11:55المخرج هنا هو وثيقة بحثية واحدة.
00:11:57توضح: هذا ما هو موجود، وهذا ما يرتبط بماذا،
00:11:59وهذا ما سيؤثر عليه تغييرك.
00:12:01ساعات من الاستكشاف تُضغط في دقائق من القراءة.
00:12:03أعلم أن "ديكس" ذكر ذلك هذا الصباح، لكن نقطة المراجعة البشرية هنا حاسمة.
00:12:09هنا تقوم بالتحقق من صحة التحليل مقابل الواقع،
00:12:12وهي اللحظة الأقوى تأثيرًا في العملية برمتها.
00:12:15اكتشف الأخطاء هنا، لتمنع الكوارث لاحقًا.
00:12:17ننتقل إلى المرحلة الثانية.
00:12:20الآن وبعد أن أصبح لديك بحث صالح بين يديك،
00:12:22نقوم بإنشاء خطة تنفيذ مفصلة، وهيكل كود حقيقي،
00:12:25وتواقيع الدوال، وتعريفات الأنواع، وتدفق البيانات.
00:12:28تريد أن تكون الخطة واضحة بحيث يمكن لأي مطور اتباعها.
00:12:30أشبهها بمبدأ "التلوين بالأرقام".
00:12:32يجب أن تكون قادرًا على تسليمها لأصغر مهندس لديك وتقول له: افعل هذا.
00:12:35وإذا نسخها سطرًا بسطر، فيجب أن تعمل ببساطة.
00:12:38في هذه الخطوة نتخذ الكثير من القرارات المعمارية المهمة.
00:12:43نتأكد من صحة المنطق المعقد.
00:12:45نتأكد من أن متطلبات العمل تتبع الممارسات الجيدة.
00:12:50نتأكد من وجود حدود واضحة للخدمات، وفصل نظيف،
00:12:52ومنع أي اقتران غير ضروري.
00:12:54نحن نرصد المشاكل قبل وقوعها لأننا عشناها من قبل.
00:12:57أما الذكاء الاصطناعي فليس لديه هذا الخيار.
00:12:59فهو يعامل كل نمط كأنه شرط أساسي.
00:13:01السحر الحقيقي في هذه الخطوة هو سرعة المراجعة.
00:13:05يمكننا التحقق من هذه الخطة في دقائق ومعرفة ما سيتم بناؤه بالضبط.
00:13:10ولمواكبة السرعة التي نريد بها توليد الكود،
00:13:13نحتاج أن نكون قادرين على استيعاب ما نفعله بنفس السرعة.
00:13:18أخيرًا، لدينا مرحلة التنفيذ، والآن بعد أن أصبح لدينا خطة واضحة
00:13:22ومدعومة ببحث دقيق، يجب أن تكون هذه المرحلة بسيطة للغاية.
00:13:26وهذا هو الهدف الأساسي.
00:13:28فعندما يكون لدى الذكاء الاصطناعي مواصفات واضحة لاتباعها، يظل السياق نظيفًا
00:13:31ومركزًا.
00:13:32لقد منعنا لولبة التعقيد الناتجة عن المحادثات الطويلة.
00:13:36وبدلاً من 50 رسالة من الكود المتطور تدريجيًا،
00:13:38لدينا ثلاثة مخرجات مركزة، تم التحقق من كل منها قبل المتابعة.
00:13:41لا تراجع عن مناهج، ولا أنماط متضاربة،
00:13:44ولا لحظات "انتظر، في الواقع" التي تترك كودًا ميتًا في كل مكان.
00:13:48بالنسبة لي، المكسب الحقيقي من هذا هو أنه يمكنك استخدام عميل آلي
00:13:52للقيام بالكثير من هذا العمل، لأنك قمت بكل التفكير والعمل الشاق مسبقًا.
00:13:56يمكنه البدء في التنفيذ، بينما تذهب أنت للعمل على شيء آخر،
00:13:59ثم تعود للمراجعة.
00:14:01ويمكنك مراجعة ذلك بسرعة لأنك تتحقق فقط من مطابقتها
00:14:04لخطتك، ولا تحاول فهم ما إذا كان قد تم اختراع أي شيء جديد.
00:14:07النقطة الجوهرية هنا هي أننا لا نستخدم الذكاء الاصطناعي ليفكر نيابة عنا.
00:14:12نحن نستخدمه لتسريع الأجزاء الميكانيكية
00:14:15مع الحفاظ على قدرتنا على فهمها.
00:14:17البحث أصبح أسرع، والتخطيط أكثر شمولاً، والتنفيذ أنظف.
00:14:21لكن التفكير والتحليل وإصدار الأحكام.. كل ذلك يظل من شأننا نحن.
00:14:26لذا، هل تتذكرون عملية إعادة هيكلة التفويض التي قلت إن الذكاء الاصطناعي عجز عنها؟
00:14:34الحقيقة هي أننا نعمل عليها الآن
00:14:37وبدأنا نحرز تقدمًا جيدًا فيها.
00:14:39والسبب ليس لأننا وجدنا أوامر برمجية (prompts) أفضل.
00:14:42وجدنا أننا لا نستطيع حتى البدء في أي نوع من البحث أو التخطيط
00:14:45أو التنفيذ عبر الآلة.
00:14:46كان علينا فعليًا إجراء هذا التغيير بأنفسنا يدويًا.
00:14:49بدون ذكاء اصطناعي، فقط عبر قراءة الكود وفهم التبعيات،
00:14:52وإجراء التغييرات لنرى ما الذي سيتعطل.
00:14:53هذا النقل اليدوي كان، لأكون صادقًا، مرهقًا للغاية، لكنه كان ضروريًا.
00:14:59لقد كشف عن كل القيود المخفية، وأي الثوابت يجب أن تظل صحيحة،
00:15:02وأي الخدمات ستتعطل إذا تغير نظام التفويض.
00:15:05أشياء لم يكن لأي تحليل آلي للكود أن يظهرها لنا.
00:15:09ثم قمنا بتغذية طلب السحب (PR) الخاص بهذا النقل اليدوي
00:15:14في عملية البحث الخاصة بنا، وجعلناه أساسًا لأي بحث مستقبلي.
00:15:19عندها فقط تمكن الذكاء الاصطناعي من رؤية كيف يبدو النقل النظيف.
00:15:23المشكلة هي أن كل كيان من هذه الكيانات مختلف قليلاً، لذا كان علينا
00:15:27أن نستجوبه ونقول: مهلاً، ماذا نفعل بشأن هذا؟
00:15:29بعض الأشياء مشفرة وبعضها ليس كذلك.
00:15:32كان علينا تقديم ذلك السياق الإضافي في كل مرة من خلال الكثير من التكرار.
00:15:35عندها، وعندها فقط، استطعنا إنتاج خطة قد تنجح من المرة الأولى.
00:15:41وكلمة "قد" هي الكلمة المفتاحية هنا، لأننا ما زلنا نتحقق من الصحة،
00:15:45ونعدل، ونكتشف الحالات الاستثنائية.
00:15:47نهج المراحل الثلاث ليس سحرًا.
00:15:55لقد نجح فقط لأننا قمنا بعملية نقل واحدة يدويًا.
00:15:57كان علينا أن نكتسب الفهم بأنفسنا قبل أن نتمكن من برمجته في عمليتنا.
00:16:01ما زلت أعتقد أنه لا يوجد حل سحري.
00:16:02لا أعتقد أن هناك أوامر أفضل، أو نماذج أفضل، أو حتى كتابة مواصفات أفضل.
00:16:06بل هو مجرد العمل على فهم نظامك بعمق كافٍ
00:16:09بحيث يمكنك إجراء تغييرات عليه بأمان.
00:16:11إذن، لماذا نمر بكل هذا؟
00:16:15لماذا لا نكتفي بالتكرار مع الذكاء الاصطناعي حتى يعمل الأمر؟
00:16:18في النهاية، ستصبح النماذج قوية بما يكفي وسيعمل الأمر ببساطة.
00:16:21النقطة بالنسبة لي هي أن جملة "الأمر يعمل" ليست كافية.
00:16:24هناك فرق بين كود يجتاز الاختبارات وكود ينجو في بيئة الإنتاج.
00:16:28وبين أنظمة تعمل اليوم
00:16:31وأنظمة يمكن لشخص آخر تغييرها في المستقبل.
00:16:34المشكلة الحقيقية هنا هي فجوة المعرفة.
00:16:38عندما يتمكن الذكاء الاصطناعي من توليد آلاف الأسطر من الكود في ثوانٍ،
00:16:41فإن فهمه قد يستغرق منك ساعات، وربما أيامًا إذا كان معقدًا.
00:16:45وربما لن تفهمه أبدًا إذا كان متشابكًا جدًا.
00:16:48إليكم شيئًا لا أعتقد أن الكثيرين يتحدثون عنه في هذه المرحلة.
00:16:52في كل مرة نتخطى فيها التفكير لمواكبة سرعة التوليد،
00:16:56نحن لا نضيف فقط كودًا لا نفهمه،
00:16:58بل نفقد قدرتنا على تمييز المشاكل.
00:17:00تلك الغريزة التي تقول: "مهلاً، هذا بدأ يصبح معقدًا"،
00:17:03تضمر عندما لا تفهم نظامك الخاص.
00:17:09القدرة على تمييز الأنماط تأتي من الخبرة.
00:17:11عندما أرصد معمارية خطيرة،
00:17:12فذلك لأنني أنا من كنت مستيقظًا في الثالثة فجرًا أتعامل مع تبعاتها.
00:17:16وعندما أدفع باتجاه حلول أبسط،
00:17:17فذلك لأنني اضطررت لصيانة البديل المعقد الذي تركه شخص آخر.
00:17:21الذكاء الاصطناعي يولد ما تطلبه منه.
00:17:23فهو لا يختزن الدروس المستفادة من إخفاقات الماضي.
00:17:25نهج المراحل الثلاث يسد هذه الفجوة.
00:17:29فهو يضغط الفهم في نواتج يمكننا مراجعتها بسرعة توليد الكود.
00:17:33وبدونه، نحن نراكم التعقيد بسرعة أكبر
00:17:37مما يمكننا استيعابه.
00:17:39الذكاء الاصطناعي يغير كل شيء في كيفية كتابة الكود، ولكن صراحةً،
00:17:44لا أعتقد أنه يغير شيئًا في أسباب فشل البرمجيات نفسها.
00:17:47كل جيل واجه أزمته البرمجية الخاصة.
00:17:50جيل "دايكسترا" واجهها بإنشاء انضباط هندسة البرمجيات،
00:17:54ونحن الآن نواجه أزمتنا مع التوليد اللانهائي للكود.
00:17:56لا أعتقد أن الحل يكمن في أداة أو منهجية أخرى.
00:18:01بل في تذكر ما عرفناه دائمًا، وهو أن البرمجيات هي مسعى بشري.
00:18:05الجزء الصعب لم يكن أبدًا في كتابة الكود.
00:18:06بل في معرفة ما يجب كتابته في المقام الأول.
00:18:09المطورون الذين سيزدهرون لن يكونوا فقط من يولدون أكبر قدر من الكود.
00:18:13بل من يفهمون ما يبنونه،
00:18:15ومن يمكنهم رؤية الفواصل، وإدراك أنهم
00:18:18يحلون المشكلة الخاطئة.
00:18:19هذا الدور لا يزال دورنا.
00:18:20وسيظل دورنا فقط.
00:18:21أريد أن أختم بسؤال، ولا أعتقد أن السؤال هو ما إذا كنا
00:18:25سنستخدم الذكاء الاصطناعي أم لا.
00:18:26فذلك أمر مفروغ منه.
00:18:28لقد فات الأوان على هذا النقاش.
00:18:30بالنسبة لي، السؤال سيكون ما إذا كنا سنظل نفهم أنظمتنا الخاصة
00:18:33عندما يكتب الذكاء الاصطناعي معظم الكود الخاص بنا.
00:18:35شكراً لكم.
00:18:37>> [تصفيق]
00:18:39[موسيقى]