لقد أطلقت برمجيات لا أفهمها، وأراهن أنكم فعلتم ذلك أيضاً – جيك نيشنز، نتفليكس

AAI Engineer
Computing/SoftwareManagementInternet Technology

Transcript

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[موسيقى]

Key Takeaway

يجب على المهندسين إعطاء الأولوية لفهم الأنظمة وتصميمها بدقة بدلاً من الاعتماد الكلي على سرعة توليد الذكاء الاصطناعي، لتجنب تراكم تعقيد لا يمكن إدارته.

Highlights

الاعتراف المتزايد بين المهندسين بشحن رموز برمجية لا يفهمونها بالكامل نتيجة أدوات الذكاء الاصطناعي.

التمييز الجوهري بين مفهوم "البسيط" (الهيكل غير المتشابك) ومفهوم "السهل" (القريب والمتوفر).

تاريخ أزمات البرمجيات يتكرر، والذكاء الاصطناعي يمثل "الزر السهل" الذي قد يفاقم التعقيد العرضي.

فشل الذكاء الاصطناعي في التعامل مع الأنظمة المتشابكة دون تدخل بشري يفهم السياق والتاريخ التقني.

منهجية "ضغط السياق" المكونة من ثلاث مراحل (البحث، التخطيط، التنفيذ) لاستعادة السيطرة على الكود.

التأكيد على أن البرمجة مسعى بشري وأن القيمة الحقيقية تكمن في فهم "ماذا" نبني وليس فقط "كيف" نولد الكود.

Timeline

الاعتراف بأزمة الفهم في عصر الذكاء الاصطناعي

يبدأ جيك نيشنز حديثه باعتراف صريح حول شحن برمجيات لا يفهمها تماماً، مشيراً إلى أن هذا الشعور مشترك بين العديد من المطورين اليوم. يوضح كيف ساهمت أدوات الذكاء الاصطناعي في نيتفليكس في تسريع وتيرة العمل من أيام إلى ساعات، لكنه يحذر من خطورة ذلك عند تعطل الأنظمة الإنتاجية الكبرى. يطرح المتحدث معضلة أن سرعة إنتاج الرموز باتت تتجاوز قدرة البشر على الاستيعاب والمواكبة. يشدد على أهمية فهم الكود الذي نحاول إصلاحه خاصة في لحظات الانهيار الحرجة مثلما حدث مع "كلاود فلير". يمهد هذا القسم لرحلة استكشافية حول كيفية وصولنا إلى هذه النقطة من فقدان السيطرة المعرفية.

تاريخ أزمات البرمجيات ودورات التطور التقني

يستعرض المتحدث تاريخ هندسة البرمجيات موضحاً أن الأزمة الحالية ليست الأولى من نوعها، بل هي تكرار لأنماط تاريخية بدأت منذ السبعينيات. يستشهد بمقولة "دايكسترا" حول كيف حولت الحواسيب العملاقة البرمجة إلى مشكلة عملاقة تتطلب موازنة بين الإمكانيات والأساليب. يسرد التطور من لغة C والحواسيب الشخصية وصولاً إلى البرمجة الكائنية، ومنهجية أجايل، ثم الحوسبة السحابية والديف أوبس. يوضح أننا اليوم نعيش مرحلة الإنتاج الآلي اللانهائي باستخدام أدوات مثل "كوبايلوت" و"جيمناي". يكمن الفرق الجوهري اليوم في أن النطاق أصبح عالمياً ولانهائياً مقارنة بالأزمات السابقة.

وهم الرصاصة الفضية ومعضلة البسيط مقابل السهل

يناقش جيك ورقة فريد بروكس الشهيرة "لا توجد رصاصة فضية"، مؤكداً أن الصعوبة الجوهرية تكمن في تصميم الحل وليس في ميكانيكا الكتابة. يطرح تفريقاً فلسفياً وتقنياً هاماً نقلاً عن ريتش هيكي بين مفهوم "البسيط" الذي يتعلق بفك التشابك و"السهل" الذي يتعلق بالقرب والراحة. يوضح أننا غالباً ما نختار المسار السهل (مثل نسخ كود جاهز) على حساب البساطة المعمارية، مما يراكم ديوناً تقنية. الذكاء الاصطناعي يمثل ذروة "الزر السهل"، حيث يزيل العقبات أمام الكتابة لكنه قد يطمس الحاجة للتفكير في البنية التحتية. يخلص هذا الجزء إلى أن اختيار السهولة الآن يعني مواجهة تعقيد مضاعف في المستقبل القريب.

تشريح التعقيد وفشل الذكاء الاصطناعي في إعادة الهيكلة

يحلل المتحدث كيفية تحول المهام البسيطة إلى فوضى عبر واجهات المحادثة، حيث يتم مسح الأنماط المعمارية لصالح إرضاء الطلب الأخير فقط. يفرق بين "التعقيد الجوهري" للمشكلة و"التعقيد العرضي" الناتج عن الحلول المؤقتة وأطر العمل المتراكمة. يعرض مثالاً واقعياً من نيتفليكس حول محاولة إعادة هيكلة نظام مصادقة قديم باستخدام الذكاء الاصطناعي، وكيف فشل الوكيل الآلي في تمييز الفواصل بين منطق العمل ومنطق المصادقة. يوضح أن الذكاء الاصطناعي يعامل كل سطر كنمط يجب الحفاظ عليه، بما في ذلك الأخطاء والديون التقنية. يؤكد أن البشر فقط هم من يملكون السياق التاريخي والخبرة للتمييز بين ما هو ضروري وما هو عرضي.

منهجية مراحل ضغط السياق الثلاث

يقدم جيك حلاً عملياً يسمى "ضغط السياق" للتعامل مع قواعد البيانات الضخمة التي تتجاوز سعة نوافذ السياق الحالية. تتكون المنهجية من ثلاث مراحل: البحث المكثف باستخدام الأدوات لرسم المكونات، ثم التخطيط التفصيلي لإنشاء مواصفات تشبه "التلوين بالأرقام"، وأخيراً التنفيذ النظيف. يشدد على أن التفكير والتخطيط يجب أن يشكلا أغلب العمل، بينما يتم استخدام الذكاء الاصطناعي لتسريع الأجزاء الميكانيكية فقط. هذه العملية تضمن وجود مراجعة بشرية حاسمة في كل خطوة لرصد الأخطاء المعمارية قبل تحولها إلى كوارث. الهدف هو الحفاظ على قدرة المهندس على استيعاب ما يتم بناؤه بنفس سرعة توليد الكود.

البرمجيات كمسعى بشري وفجوة المعرفة

يختتم المتحدث بالتأكيد على أن نجاح إعادة الهيكلة في نيتفليكس جاء نتيجة عمل يدوي شاق لفهم التبعيات وليس بسبب أوامر برمجية سحرية. يحذر من "فجوة المعرفة" التي تنشأ عندما نولد آلاف الأسطر التي لا نستطيع استيعابها، مما يؤدي لضمور غريزة المهندس في رصد التعقيد. يوضح أن الذكاء الاصطناعي لا يختزن دروس الإخفاقات الماضية، ولن يغير أسباب فشل البرمجيات الجوهرية. المطورون الناجحون في المستقبل هم من سيمتلكون القدرة على رؤية الفواصل وفهم ما يبنونه بعمق. ينهي حديثه بسؤال جوهري حول ما إذا كنا سنظل نفهم أنظمتنا الخاصة عندما يكتب الذكاء الاصطناعي معظم الكود الخاص بنا.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video