ديفيد مالان: هذه هي دورة CS50،
مقدِّمة إلى المشروعات الفكرية لعلوم الكمبيوتر
وفن البرمجة المعتمَدة من جامعة هارفارد.
اسمي ديفيد مالان، وإذا كنتَ من بين هؤلاء
الموجودين في الغرفة الذين يفكرون، في سبب وجودهم في صف دراسي خاص بعلوم الكمبيوتر،
فاعلم أني شعرتُ بالشعور نفسه أيضًا.
في الواقع، في سنتي الأولى، لم أكن
لأقدم على خوض هذه الدورة أو علوم الكمبيوتر بشكلٍ أعمّ،
وكان ذلك لحد كبير لأني كنت أرتعب من ذلك.
لقد كنت متوترًا قليلاً.
كان شعورًا جيدًا أن أخرج من نطاق اطّلاعي المألوف.
ولم أكن حقيقةً أعرف في نهاية المطاف حقيقة ما كان عليه الأمر.
ولكن اعلم إذا كنتَ، أنت أيضًا، تشعر بالقليل من ذلك الشعور،
أو حتى إذا كنتَ من بين هؤلاء الأكثر اطّلاعًا الذين
مارسوا مهاراتهم في مجال علوم الكمبيوتر أو البرمجة،
فاعلم أن هناك الكثير من الفراغات التي يمكننا ملؤها على طول الطريق
بحيث إنه وبنهاية الفصل الدراسي، سيشعر كل شخص
أنه على قدم المساواة مع الآخرين.
وحتى ذلك الحين، تأكد أن 68٪ من الأشخاص الذين يجلسون عن يمينك
وشمالك وخلفك وأمامك
لم يسبق لهم قط أن درسوا دورةً تدريبيةً في علوم الكمبيوتر، وهو ما قد يكون جيدًا جدًا
كتركيبة أفراد تناسبك.
ولكن اعلم، أيضًا، بأنه ومع هيكل دعم مدهش كهذا
بالعديد من ساعات العمل والأقسام والمواد وغيرها الكثير،
فاعلم أنه في هذه الدورة التدريبية ليس المهم بدرجة كبيرة في النهاية
أين سينتهي بك المطاف مقارنةً بزملائك في الصف الدراسي
في الأسبوع العاشر، أسبوعنا الأخير، لكن ما يهم كثيرًا هو أين سينتهي بك المطاف مقارنةً بك أنت
في الأسبوع صفر.
وبالفعل، هذه هي النقطة التي نوجد فيها الآن.
وكما يتضح، يبدأ علماء الكمبيوتر العد من الصفر.
وهكذا وعلى مدار الأحد عشر أسبوعًا التالية، سنأخذك
من بين هؤلاء الذين يشعرون براحةٍ أقل أو ربما
في مكان ما بين مَن هم أقل راحة وأكثر راحة
للشعور براحة أكبر وثقة وقدرة أكثر من ذلك.
لكن للوصول إلى هذا، يجب أن نفهم ما الذي يعنيه علم الكمبيوتر حقًا.
وهذا شيءٌ لم أفهمه حتى وضعت قدمي في قاعة
مثل هذه.
وأجرؤ على القول إننا نستطيع استخلاص علم الكمبيوتر من هذه الصورة فقط.
يدور علم الكمبيوتر حول حل المشكلات.
وأنا أعلم أن الدورات التدريبية في المدرسة الثانوية عادةً ما ترسم
صورةً مضللة تدور فقط بشكل كامل
حول البرمجة والأشخاص الذين ينكبّون على
العمل في الرموز في مختبرات الكمبيوتر بصورة غير اجتماعية إلى حد ما،
لكن الحقيقة هي أن الأمر برمته يدور حول حل المشكلات، وغالبًا،
حل المشكلات بشكل تعاوني سواء بشكل شخصي أو عن طريق تفعيل الرموز،
أو البرامج التي كتبها آخرون في الماضي.
وما الذي يعنيه حل مشكلة ما؟
حسنًا، أنت تحتاج إلى مدخلات.
لذلك هناك مشكلة تحاول أن تصل إلى حلها.
هذا هو المدخل.
وأنت بحاجة إلى مُخرَج.
أنت تريد حلاً لهذه المشكلة.
وسر الخلطة في علم الكمبيوتر
سيكون كل شيء في هذا الصندوق الأسود الشهير
في المنتصف خلال الأسابيع القليلة القادمة،
حينما تبدأ في فهم ما يمكنك القيام به بالضبط مع ذلك.
لكن لبدء حل المشكلات، نحن بحاجةٍ فقط
إلى أن نقرر كمجموعة كيف سنمثل هذه المشكلات
وماذا يمكن أن تكون المشكلة.
حسنًا، في هذه القاعة، هناك مجموعة كاملة من الأشخاص.
أذا أردنا أن نأخذ الحضور أو نحصي عدد الأشخاص في هذه القاعة،
فقد أحتاج إلى البدء في حفظ تتبع مسارات الأشخاص الذين أراهم.
ولكن كيف أقوم بتمثيل عدد الأشخاص الذين أراهم؟
حسنًا، يمكنني فعل ذلك بالطريقة التقليدية ويمكنني فقط إخراج قطعة من الطباشير
أو أي شيء وأقول، حسنًا.
أنا أرى 1، 2، 3، 4، 5.
يمكنني إجراء القليل من المحادثات الأسلوبية مثل هذه
لتوفير مساحة وتذكير نفسي.
6، 7، 8، 9، 10، وما إلى ذلك.
أو يمكنني، بالطبع، أن أحسب فقط على يدي.
1، 2، 3، 4، 5، وما إلى ذلك.
لكن بوضوح، كم يمكنني أن أصل في العد على يد واحدة فقط؟
يمكنك التفكير في 5، لكن هذا فقط لأننا لم
نفكر مليًا في هذه المشكلة.
اتضح أنه فقط باستخدام الخمس أصابع هذه، ناهيك عن هذه الخمسة،
يمكنني أن أحصي أكثر لأنه وفي نهاية المطاف، نظام
علامات الإحصاء الذي أستخدمه على اللوحة أو فقط
باستخدام أصابعي هو مجرد إبقاء أصابعي منخفضة
أو رفعها لتمثيل الأشخاص، بالفعل.
ولكن ماذا لو أخذت في الاعتبار ترتيب أصابعي
وبدلتهم نوعًا ما، إن جاز التعبير، لتكون بالفعل أنماطًا من الأصابع
تمثل عدد الأشخاص في هذه القاعة،
وليس مجرد وجود إصبع يصعد ويهبط.
بعبارة أخرى، يمكن أن يظل هذا صفرًا.
ويمكن أن يكون هذا واحدًا.
ولكن ماذا لو كان اثنان ليس هذا فقط، كما هو واضح؟
لكن ماذا لو كان هذا فقط؟
لذا رفع إصبع واحد فقط، إصبعي الثاني.
ماذا لو كان ثلاثة هو هذا، إذًا؟
لذا نحن لدينا 0، 1، 2، 3.
هذا سيقودنا إلى أربعة إلى حدٍ ما.
لكن إذا بدأنا بالقفز مباشرةً إلى خمسة، قد يمكنني الآن
تبديل هذا الأصبع وهذا الأصبع لأعلى.
وإذا أردت الآن أن أمثل ستة، يمكنني القيام بذلك.
والآن سبعة.
وبعبارة أخرى، لقد عبّرت عن العديد من الأنماط على يدي بالفعل
وإذا استمررنا في القيام بذلك، أعتقد أنه يمكنني بالفعل
أن أمثل ربما 32 نمطًا مختلفًا، وبالتالي
32 شخصًا مختلفًا، على يدي فقط.
أو 31 شخصًا إذا كنتُ أبدأ العد من الصفر.
إذًا ما هذا-- ما هي العلاقة
وكيف وصلنا حتى إلى هنا؟
حسنًا، اتضح أن أجهزة الكمبيوتر بسيطة نوعًا ما،
بالضبط كما تبدو أيدينا هنا.
في نهاية المطاف، يتم توصيل جهاز الكمبيوتر الخاص بك في الجدار
أو يكون به بطارية، لذلك فإما أن يكون به كهرباء أو لا.
وفي نهاية الأمر، فذلك هو المورد المادي
الذي يحرك هذه الأشياء وهواتفنا وجميع التقنيات اليوم.
لذا إذا كان الأمر إما هناك كهرباء أو لا، فهذا يوضح بسهولة
فكرة وجود إصبع أو عدم وجوده.
وبالفعل، فأجهزة الكمبيوتر، كما تعلمون تتكلم فقط أي لغة؟
أي أبجدية، إذا جاز التعبير؟
نعم.
النظام الثنائي.
Bi تعني اثنين.
وبالفعل، يشير هذا إلى حقيقة أنه في النظام الثنائي في أجهزة الكمبيوتر،
لديك فقط رقمان--
صفر وواحد.
نحن البشر، بالطبع، لدينا 0، 1، 2، 3، 4، 5، 6، 7، 8، 9،
ومن ثم يمكننا دمج هذه الأرقام للعد أكثر.
لكن أجهزة الكمبيوتر لديها فقط 0، و1، وانتهى الأمر.
لأنه في نهاية المطاف، هناك في الواقع
اقتران مباشر بين إيقاف الطاقة وبين كونها صفرًا أو كونها قيد التشغيل
وكونها واحدًا، أو بعض الإلكترونات أو أيًا كان ما يتدفق من البطارية
أو من الجدار.
ولهذا السبب تميل أجهزة الكمبيوتر إلى التحدث بالنظام الثنائي فقط،
لأنها في نهاية المطاف، تقترن بطريقة بسيطة حقًا
بما هي عليه، وبما يمدها بالطاقة في المقام الأول.
ولكن كيف يكون هذا مفيدًا بالفعل؟
إذا كانت أجهزة الكمبيوتر تحتوي فقط على الأصفار والأحاد، فكيف يمكنها فعل أي شيء مفيد؟
حسنًا، فكر في عالمنا البشري، حيث قد يكون لديك هذا النمط من الرموز.
هذا رقم عشري، عشري يعني 10 لأن لديك من 0 إلى 9.
وهذا بالطبع، 123.
لكن لماذا؟
إذا لم تكن قد فكرت في هذا بعض الوقت،
هذا حقًا مجرد نمط من ثلاثة رموز، واحد واثنين وثلاثة أشكال،
أو الرموز، على الشاشة.
ولكن نحن البشر، منذ المدرسة الابتدائية، بدأنا ننسب معنىً
لكل من هذه الأرقام، أليس كذلك؟
إذا فكرت مرة أخرى، فهذا عمود الأحاد، وهذا عمود العشرات،
وهذا عمود المئات، وهكذا، ويمكننا الاستمرار.
ولماذا هذا النمط-- واحد، اثنان، ثلاثة-- يعني 123؟
حسنًا، هذا لأن جميعنا بنوع من البديهة
هذه الأيام نقوم بسرعة بحساب 100 ضرب 1 زائد 10 ضرب
2 زائد 1 ضرب 3، والذي بالطبع يعطينا 100 زائد 20 زائد ثلاثة،
لذا فنحن نعرف الرقم رياضيًا على النحو 123.
لكننا جميعًا نفعل هذا بسرعة جدًا، فأنت لم تعد تفكر حقًا في هذا الموضوع.
حسنًا، تعمل أجهزة الكمبيوتر بشكل أساسي بالطريقة نفسها.
ليس لديهم الكثير من الأرقام--
من 0 إلى 9-- كما لدينا.
لديهم فقط أصفار وأحاد.
لذا إذا كانوا سيخزنون قيمًا، فأنت
سترى فقط الأصفار والأحاد على الشاشة،
ولكن تلك الأصفار والأحاد فقط تعني أشياءً مختلفةً.
بدلاً من وجود مكان للأحاد، والعشرات، والمئات،
فسيكو لديهم مكان للأحاد، ومكان للأثناء، ومكان للأربعاوات،
ثم الثمانيات و 16 وما بعدها.
الآن، لماذا؟
حسنًا، واحد و 10 و 100، يتضح أن هؤلاء من قوى الـ 10.
10 بالنسبة إلى 0 هي تقنيًا 1.
10 بالنسبة إلى 1 هي مجرد 10.
10 بالنسبة إلى 2 هي 100.
وهذا سبب أن لدينا أحاد، وعشرات ومئات، وآلاف، وهكذا.
وعلى ما يبدو أن أجهزة الكمبيوتر تستخدم قوى الرقم 2.
ليس من المستغرب.
فثنائي-- تعني اثنين.
لذا، إذا كان لديك فقط أحاد، وأثناء، وأربعاوات كعناصر نائبة،
إذا كان الكمبيوتر يخزن هذه الأرقام--
0، 0، 0-- فهذا الكمبيوتر من المفترض أنه يخزن أي عدد حتى الآن حسب ما
نفهم نحن البشر؟
حسنًا، هذه هي الكيفية التي يخزن بها الكمبيوتر الصفر.
إذا كان الكمبيوتر حرفيًا يخزن 0، 0، 0، فقط
كما هو الحال في عالمنا البشري، فهذا أيضًا 0، لكن هذا تقنيًا
لأنه 4 ضرب 0 زائد 2 ضرب 0 زائد 1 ضرب صفر، يساوي بوضوح
صفرًا.
بينما إذا كان الكمبيوتر في الواقع لا يخزن فقط،
لنقل، 0، 0، 0، ولكن بدلاً من ذلك يخزن هذه "القيمة" في نظام ثنائي،
فبماذا يرتبط هذا في الأرقام العشرية؟
إذًا هذا واحد.
والآن، لماذا، إذا قمنا بتغيير هذا الـ 0 والـ 1 إلى هذه "القيمة" هنا، يساوي اثنين؟
حسنًا، رياضيًا، للأسباب نفسها بالضبط.
لذا في البداية، كان لدي خمسة أصابع، ولكن إذا كنت تنظر فقط إلى الثلاثة الأولى،
عندما فعلت ذلك ورفعت إصبعًا واحدًا، وكنت أمثل اثنين.
وإذا كنت أريد تمثيل ثلاثة، أذكر أنني رفعت الإصبع الثاني.
ولهذا فإن سبب قيامي بتمثيل ثلاثة بشكل جيد
هو أن كل ما كنت أفعله باستخدام يدي البشرية كان العد في نظام ثنائي.
وكان يمكنني الاستمرار في العد أكثر وأكثر وأكثر.
وهكذا إذا كان لدي خمسة أصابع أو خمسة وحدات بت، والبت يعني الأرقام الثنائية،
فأستطيع أن أعد، كما يتضح، إذا حسبنا الأمر،
ما يصل إلى 31 إذا بدأنا من الصفر.
سيكون من الصعب القيام بهذا جسديًا، ولكننا استطعنا.
إذًا لماذا هذا مفيد؟
في نهاية المطاف، يمكن للكمبيوتر، لذلك،
أن يمثل أي عدد من "القيم" من 0 إلى 1 إلى 2 إلى 3 إلى بعض الأرقام،
أكثر من ذلك بكثير للغاية.
كل ما يحتاجه هو قدر كافٍ من وحدات البت، والأصفار والأحاد.
حسنًا، ما هي وحدات البت تلك؟
حسنًا، على سبيل المثال، لدى كلٌ منا هذه الأيام مصادر ضوء في هواتفنا.
لذا يمكنني أن أقول بالفعل أن هذا الجهاز الجسدي في الوقت الحالي--
قد يكون من الصعب عليه فعل هذا--
إنه يحتوي على الكشّاف وهو متوقف تقنيًا في الوقت الحالي.
لكن إذا قمت بتشغيل هذا الكشّاف، وبالتالي استخدام بعض الكهرباء،
الآن، أنا أُخزن واحدًا.
وهكذا فإن الهاتف في وضع التشغيل.
والآن، في وضع إيقاف التشغيل.
الآن، في وضع التشغيل.
وإذا رأيت--
هل يمكنني استعارة هاتف شخصٍ ما بسرعة؟
هل يمكنني؟
حسنًا.
والكشّاف.
كيف أقوم بتشغيل الكشّاف؟
أوه.
يعمل بالهز.
لا بأس.
حسنًا.
شكرًا لك.
أوه.
شكرًا لك.
حسنًا.
هذا رائع.
الآن. يمكنني العد أكثر.
الآن، هذا يمثل الرقم، ماذا لو كان لديّ مصباحان أو مفتاحان يعملان
في الوقت الحالي؟
أجل.
ثلاثة.
لأن لدي واحدًا، لدي واحدًا، وأنا
لدي اثنين، وهذا بالطبع سيصل في النهاية إلى ثلاثة.
وإذا التقطت هاتفًا ثالثًا بطريقة ما، يمكن أن أعدّ أكثر من ذلك.
من الناحية الفنية، إذا كان لدي ثلاثة مصابيح في وضع التشغيل--
واحد،وواحد، وواحد-- ماذا ستكون تلك القيمة؟
سبعة.
لأنه أربعة زائد اثنين زائد واحد، وهكذا دواليك.
شكرًا جزيلاً لعفويتك.
لذا لماذا لم يؤدِ هذا إلى وضع حدودٍ لنا؟
يمكنني العد بأرقام عشرية بقدر ما أريد.
يمكنني الآن العد في نظام ثنائي بقدر ما أريد، طالما لدي ما يكفي من الأجزاء.
لكن كيف يمكنني في الواقع تمثيل معلوماتٍ أخرى؟
حسنًا، إذا كنت أريد أن أمثل شيئًا كحرف مثلاً، كيف أصل إلى هذا؟
إذا كانت أجهزة الكمبيوتر لديها كهرباء فقط وتستخدم النظام الثنائي للعد،
ومع ذلك وبطريقة ما فإنها أكثر فائدة من مجرد إجراء الحسابات--
فيمكنهم الحصول على رسائل نصية ورسائل بريد إلكتروني ومواقع ويب ومقاطع فيديو وغير ذلك الكثير--
كيف يمكننا الانتقال من الأصفار والأحاد إلى الحروف؟
حسنًا، نحن-- أجل.
معذرة.
أعلى قليلاً.
أجل.
نحن بحاجة فقط إلى نوع من الربط بين الأرقام والحروف.
وبعبارة أخرى، جميع الأشخاص في هذه الغرفة يحتاجون فقط إلى أن يقرروا في مرحلةٍ ما
هذا، أتعلم ماذا؟
إذا أردنا أن نمثل شيئًا ما مثل الحرف الكبير A،
نحتاج فقط أن نقرر نمط وحدات البت،
نمط الأصابع، الذي سيمثل A.
واتضح أن البشر منذ سنوات ومن طرف واحد
قرروا جعل الرقم 65 الرقم العشري الذي يمثل الحرف الكبير A.
وهل بإمكانك تخمين الرقم العشري الذي يمثل الحرف الكبير B؟
66.
ومن ثم الحرف C يمثله 67 وهكذا دواليك.
وهناك تخطيط لما يشبه 128 وحتى 256 من القيم المحتملة
لجميع المفاتيح التي قد تراها على لوحة المفاتيح النموذجية
لتمثيل الحروف.
الآن، كيف يميز الكمبيوتر، بالرغم من ذلك، بين الأرقام والحروف؟
حسنًا، يعتمد فقط على السياق.
إذا كنت تستخدم برامج مثل برنامج الآلة الحاسبة على Mac
أو الكمبيوتر الشخصي أو iPhone أو Android، حسنًا، فإن الكمبيوتر، أو الجهاز،
سيتعرف على السياق فقط، دعوني أفسر هذا النمط من الأصفار
والأحاد كأرقام فعلية لإجراء الحسابات.
ولكن إذا كنت تستخدم تطبيق الرسائل القصيرة SMS أو تطبيق الرسائل على هاتفك،
ستكون في الواقع في سياق النص،
ومن ثم سيقوم هاتفك بتفسير النمط نفس من الأصفار والأحاد،
أو إيقاف تشغيل مصابيح الإضاءة، أو، في نهاية الأمر، الترانزستورات،
القطع الصغير من الأجهزة وأجهزة الكمبيوتر التي إما تعمل أو لا تعمل--
ستفسر هذه الأنماط كما تمثل مجرد حرف.
إذا كنت في سياق النص الخاص بتطبيق المراسلة أو برنامج Microsoft Word
أو محرر مستندات Google أو ما شابه ذلك، يعتمد الأمر تمامًا على السياق.
توصل البشر إلى نظام يُدعى أسكي ( ASCII)، الشفرة القياسية الأمريكية
لتبادل المعلومات.
الاسم ليس مثيرًا للاهتمام، لكن حقيقة أننا اتفقنا منذ سنوات
أن الرقم 65 وما إلى ذلك هو الأمر المهم.
وعلى سبيل المثال، إذا نظرنا إلى هذا التوضيح هنا
الذي يمثل أول عدد قليل فقط من الحروف، ماذا يعني هذا؟
إذا كنت سأحصل على رسالة نصية الآن ولدي القدرة بطريقةٍ ما
للنظر في أساسها، إذا جاز التعبير، على نمط الأصفار والآحاد
التي كتبها شخصٌ لي، وهذا النمط،
إذا قمت بتحويله إلى عشري، يقال من الناحية الفنية، دعنا نقل، 72 و 73--
حتى أحصل على مجموعة كاملة من الأصفار والأحاد.
وقمت ببعض الحسابات وأدركت، حسنًا، لقد تلقيت للتو 72 و73،
ولكنها رسائل نصية، وهكذا فهي ليست مجرد أرقام يرسلها لي صديقي.
إنها رسالة.
ما الذي سأفهمه من رسالة أرسلها صديقي إذا قام هو أو هي بإرسال 72 ومن ثم 73؟
نعم.
مرحبًا.
H-I. لأنه إذا قفزت إلى اليمين هنا،
يصادف هذا أن يكون في خريطة أسكي (ASCII) بين 72 و73، H و I.
من الناحية الفنية، إذا احتوت الرسالة على بايت ثالث، إذا صح التعبير.
بايت، إذا تسائلت من قبل، فهو عبارة عن ثمانية أجزاء.
من السهل عدم التحدث من حيث وحدات البت المفردة،
حيث لا يمكنك العد بأرقامٍ كبيرة، لكن مع البايت، أو 8 وحدات بت،
يمكنك العد أكثر.
وهكذا يتضح أنه إذا تلقيت بايت ثالث، تسلسل آخر من ثمانية
أصفار وأحاد معًا--
33.
كيف نعرف مضمون هذه الرسالة الآن؟
نعم.
وهكذا يتضح لك أنك لن تعرف هذا إلا
من خلال التخمين أو البحث من خلال Google أو مجرد تعلم هذه المعرفة.
هذه الآن "مرحبًا!"
مع علامة تعجب لأن 33 ترمز إلى، إذا نظرت إلى التوضيح في الأعلى،
علامة التعجب، أيضًا.
الآن، إذا نظرنا بالفعل إلى النظام الثنائي لهذا،
سنرى في الواقع هذا النمط من الأصفار والأحاد.
هذه طريقة تمثيل 72 في النظام الثنائي.
وهذه طريقة تمثيل 73.
وهذه طريقة تمثيل 33.
ولاحظ أني استخدمت واحدة، اثنتان، ثلاث، أربع، خمس، ست وحدات بت،
على الرغم من أنه من الناحية الفنية نتلقى الأشياء في وحدات من 8،
وحدات من البايت.
لكن لماذا لم أزعج نفسي بكتابة 00 آخرين هنا و 0 آخر هنا؟
هل يختلف الوضع إذا كتبت هذه الأشياء؟
لا.
ليس تمامًا.
كما في اللغة الإنجليزية، في عالمنا البشري، إذا كنتَ تريد كتابة واحد، اثنان، ثلاثة،
فهذه 123.
إذا كنتَ تريد كتابة 0، 1، 2، 3، فلا تزال 123.
لذلك و على الرغم من أننا نميل إلى وضعها في مجموعات من 8،
لا نحتاج بالضرورة إلى كتابة الثمانية عندما نتحدث عنهم فقط.
إذًا ماذا فعلنا؟
حسناً، دعوني أعرض كلمة أفضل تُعرف الآن باسم التجريد.
التجريد هو مجرد مصطلح عام يُستخدم في علوم الكمبيوتر وسنقوم قريبًا
برؤيته في البرمجة لأخذ بعض المستويات المنخفضة-- حرفيًا مستوى منخفض--
من تفاصيل التنفيذ، حتى التفاصيل الدقيقة، وفهمها
في مرحلةٍ ما، ولكن تحديد ذلك ليس مفيدًا من الناحية النظرية
للتفكير في المشكلات.
أنا حقًا لا أريد حل المشاكل في هذا العالم من ناحية التفكير في 0 و1.
أفضل التفكير في هذه الأشياء من الناحية العشرية على الأقل، أو أفضل من ذلك حتى،
في سياق الحروف إذا كنت أتلقى نصًا بالفعل، أو حتى
بعض طرق التمثيل الآخرى.
وبهذا يدور التجريد حول التفاصيل منخفضة المستوى نوعًا ما
وتبسيطها فقط حتى نتمكن من إجراء محادثة أكثر فائدة
وألا نقلق مجددًا بشأن مصدر الكهرباء.
يمكننا الاشتراط فقط على الكمبيوتر الخاص بي بتمثيل الأصفار والأحاد.
لذلك، يمكنه تمثيل الأرقام.
لذلك، يمكن أيضًا أن يمثل أسكي (ASCII) أو الحروف.
ويمكننا المضي قدمًا وبدء حل مشاكل أكثر إثارة للاهتمام.
ولكن يبدو أننا لا نستطيع حل جميع المشاكل لأن في لوحة المفاتيح لدي
هنا، لوحة المفاتيح الأمريكية هذه، هناك مجموعة كاملة من الرموز،
تقريبًا 100 أو 200 ربما على وجه الإجمال إذا ضغطنا فوق مفتاح shift وoption وجميع
ذلك.
لكن ما لاتراه هو بعض الحروف الشائعة جدًا.
على وجه الخصوص بالنسبة للجمهور الدولي،
ما الذي لا يمكننا إلى حدٍ ما كتابته على لوحة المفاتيح هذه؟
أي أنواع الرموز؟
حسنًا.
أي شيء بشكلة.
إذا كانت لديك شكلات فوق الحروف المتحركة أو حروف أخرى.
ماذا أيضًا؟
معذرةً.
علامات تغيير الصوت أو علامات أخرى فوق الحروف.
أجل.
مثل رمز الشباك؟
أوه.
مثل رمز الجنيه البريطاني.
بالتأكيد.
وبلدان أخرى، أيضًا.
أي عدد من اللغات الآسيوية.
هناك الكثير من الرموز التي لم يتم تصويرها على لوحة المفاتيح هذه،
ومع ذلك وبطريقةٍ ما، يمكننا جميعًا بكل تأكيد التعبير عن أنفسنا باستخدام
لوحات المفاتيح أو الهواتف الدولية.
لكن هذا لأن الهواتف وأجهزة الكمبيوتر هذه الأيام لا تستخدم فقط نظام أسكي (ASCII).
يستخدم نظام أسكي (ASCII) فقط ثماني وحدات بت في المجمل.
من الناحية الفنية سبعة، ولكن بعد ذلك، في نهاية المطاف، ثمانية حقًا.
ومع ثماني وحدات بت، إذا كنت بالفعل تجري الحسابات--
إذا كان لديك ثماني وحدات بت أو ثمانية أصابع، يمكنك
تبديلهم فقط 256 مرة بطريقةٍ محتملة تمامًا، أي
أنه يمكنك فقط تمثيل 256 حرفًا باستخدام نظام ASCII مع الأرقام
غير الظاهرة، وهذا ليس كافيًا لتمثيل
العديد من الرموز المختلفة مثل تلك المذكورة هنا.
لا يمكنك تمثيل أيٍ من الشكلات التي يمكنك وبالرغم من ذلك
كتابتها على أجهزة Mac وأجهزة الكمبيوتر لديك وبالتأكيد
لا يمكنك كتابة هذه الأشياء، الرائجة إلى حدٍ كبير جدًا.
على الرغم من أنها صور، فهي في الواقع مجرد حروف.
لأنه اتضح منذ بضع سنوات، أن العالم قرر أن ثماني وحدات بت ليست كافية.
لنبدأ باستخدام شيء ما يسمى اليونيكود (Unicode)، حيث تستخدم بالفعل
واحدة أو اثنتين أو ثلاث أو حتى أربع وحدات بايت.
لذلك ثماني وحدات بت، أو 16 بت، أو 24 بت، أو حتى 32 بت لتمثيل الحروف.
والآن، لدينا القدرة لتمثيل آلاف أو حتى
ملايين الحروف.
وبصراحة، أظن، النتيجة من هذا الكم الهائل من التوافر
هو جزئيًا سبب وجود هذا العدد الكبير من هذه الأشياء الآن.
وهم يواصلون صنع المزيد لأن هناك الكثير جدًا من الأرقام المختلفة
المتاحة لنا.
لذلك يكون Unicode في الغالب إصدارًا محددًا منه يسمى UTF-8،
والتي سنراها قريبًا.
لكن دعوني أطرح هذا السؤال هنا.
هذا وجه يبكي بفرح، أعتقد أنه هكذا يسمى.
إذًا كما يتضح، وفقا لـ Apple أو iOS،
فإن هذا هو الرمز التعبيري الأكثر شعبية والذي يرسله على الأقل مستخدمو
هاتف iPhone، لبعضهم البعض.
إذن عندما تتلقى هذا، رغم ذلك، إذا كان يمكن أن نشعر حقًا بالمرح
من هذا، فما هو نمط وحدات البت الذي تتلقاه فعليًا من صديقك؟
إنه يحاول أو إنها تحاول بوضوح التعبير عن بعض المشاعر،
ولكن في الحقيقة، ما يرسله صديقك إليك-- هو الرقم العشري 128514.
أو حقيقةً، إذا نظرت إلى الأصفار والآحاد القادمة
إليك عبر الإنترنت أو موجات الأثير، فأنت
تحصل على هذا النمط من الأصفار والآحاد، والذي يكون مرحًا بالكاد أو
وصفيًا بالكاد، ولكن كل ما يفعله هاتفك أو جهاز الكمبيوتر لديك
هو رؤية هذا النمط من وحدات البت،
والبحث عنه في ما يشبه ورقة غش صغيرة، وقول، أوه.
وقتما رأيتُ هذا النمط من وحدات البت في سياق نص مثل المراسلة النصية،
فينبغي عليّ في الواقع عرضه على شكل تلك الصورة.
الآن، تلك الصورة تحتوي على الكثير من الألوان الصفراء وغيرها
فيها، ولكن كيف وصلنا إلى هذه النتيجة؟
حسنًا، يتضح أن هذا النمط نفسه من الأرقام--
72، 73، 33--والذي للتأكد فقط، منذ لحظة واحدة، ماذا كان يعني؟
مرحبًا.
في سياق برنامج نصي مثل Microsoft Word، ومستندات Google، والرسائل النصية،
هذا يعني مرحبًا.
لكن ماذا لو رأيت هذا النمط من وحدات البت نفسه--
ومجددًا، قد يمكننا رسم الأصفار والأحاد،
لكن هذا لم يعد مثيرًا للاهتمام، لذا سنقوم
بتثبيته على المستوى العشري.
إذا حصلت على هذا النمط من الأصفار والأحاد نفسه
أو أرقام في سياق مثل برنامج الفوتوشوب أو المتصفح
أو نوعٍ ما من برامج الصور، حسنًا، قد يكون هذا منطقيًا
إن تم تفسيره ليس كنص، ولكن كصور، كنوع من الألوان.
حسنًا، يتضح أن هناك نظامًا آخر في العالم--
ربما قد تكون رأيت هذا الاختصار من قبل--
والذي يُدعى (RGB)-- أحمر، أخضر، أزرق.
وهذه مجرد طريقة وحدها البشر منذ
سنواتٍ مضت أتعلم ماذا؟
إذا أردنا أن نمثل نقطة على شاشة شخصٍ ما، بما يعرف باسم
وحدة البكسل، وهي مربع صغير على شاشة
الهاتف، أو الكمبيوتر المحمول، أو حتى التلفزيون الآن،
سنستخدم ثلاث وحدات بايت--
وحدة بايت لتحديد مقدار الأحمر الذي يجب أن يكون في ذلك البكسل المحدد،
وبايت آخر لتحديد مقدار الأخضر الذي يجب أن يتم دمجه مع الأحمر لتشكيل
هذا البكسل، ومن ثم بايت آخر، بايت ثالث،
لتمثيل مقدار اللون الأزرق الذي سيدمج مع هذين اللونين الآخرين
لصنع لون جديد معًا.
لذلك هو نوع من دمج الدهانات، ما عدا في هذه الحالة،
فإنه في الواقع موجات ضوء للحصول على لون معين باستخدام فقط
الأحمر، والأخضر، والأزرق كلوحة ألوان.
ولذا إذا رأينا هذا النمط الأحمر، والأخضر، والأزرق وقلنا،
أتعلم ماذا؟
أعطني 72 من الأحمر، و73 من الأخضر، و33 من الأزرق.
إذا كان إجمالي المدى الممكن كما ألمحت سابقًا هو مثلاً 0 من إلى 256،
أو فنيًا من 0 إلى 255 إذا بدأت العد في علوم الكمبيوتر من الصفر،
هذا تقريبًا كمية متوسطة من الأحمر، وكمية متوسطة من الأخضر،
والقليل من اللون الأزرق، إذا كان النطاق يتراوح من 0 إلى 255.
لذلك إذا قمت بدمج هؤلاء الثلاثة معًا
وتريد أن تعرف ما اللون الذي ستحصل عليه--
حسنًا.
فالنتيجة هي نوع من الأصفر الفاتح الذي يشبه هذا.
لذلك إذا كان الكمبيوتر يخزّن نقطة واحدة على الشاشة
والتي تصادف أن تكون باللون الأصفر، فما يخزنه الكمبيوتر بالفعل
ليس هذه النقطة بصورةٍ مادية، لكنه نمط من ثلاث
وحدات بايت-- مقدار اللون الأحمر، والأخضر، والأزرق الذي يجب أن يعرضه
الكمبيوتر في هذه النقطة بالذات.
لذلك إذا نظرنا إلى هذا الوجه الذي يبكي من الفرح وقمنا بتعزيزه أو تكبيره
هنا، يمكنك في الواقع رؤية أنه يبدأ في التقطّع، إذا جاز التعبير،
حيث بإمكانك رؤية النقاط.
إذا قمت بتكبيره أكثر، الآن يمكنك حقًا
رؤية النقاط على الشاشة.
وإذا قمت بتكبيره أكثر من هذا، يمكنك في الواقع
رؤية المربعات الصغيرة جدًا التي تشكل هذه الصورة، ومعظمها
على مستوى التكبير تعتبر صفراء، ولكن مجموعة منها سوداء،
ومجموعة منها ذات لون أسود فاتح أو أصفر داكن.
وهذا ما يُشكل هذه الصورة في نهاية المطاف.
هذا يعني أنه إذا كنت تعد كل وحدات البكسل الموجودة على الشاشة
ثم تضربها في وحدة بايت واحدة، أو اثنتين، أو ثلاث، أي
كم عدد وحدات البايت أو الكيلوبايت أو الميغابايت، إذا كنتَ قد سمعتَ عن تلك المصطلحات،
الذي سيتم تخزينه على جهاز الكمبيوتر الخاص بك فقط لتمثيل صورة.
إذًا انتقلنا من الكهرباء إلى الأسفل هنا، إذا جاز التعبير، إلى الأصفار والأحاد،
إلى الأرقام العشرية، والآن إلى الألوان.
حسنًا، مع الألوان، يمكنك الحصول على صور.
ما الذي يأتي بعد الصور؟
حسنًا، شاهدنا جميعًا مقاطع فيديو أو أفلام رقمية بالتأكيد هذه الأيام.
حسنًا، ما هو الفيلم أو ملف الفيديو؟
كيف يمكن تنفيذ ذلك؟
قلها بصوتٍ أعلى قليلاً.
أجل.
هو مجموعة من الصور.
إذا كنت قد سمعت من قبل عن الإطارات في الثانية--
مثل الأفلام تتكون من 24 لقطة في الثانية أو 30 لقطة في الثانية--
هذا يعني أن الفيلم العادي، كل ثانية
يعرض لك 24 أو 30 صورة في الثانية
وهم يمرون بسرعة لدرجة أنك بالفعل
لا تلاحظ أنك تشاهد تسلسلاً من الصور الثابتة.
إنه يشبه الطفل في هذا، إذا كان لديك في وقتٍ ما الكتب الورقية تلك حيث يوجد
العديد من الرسومات، وأثناء التنقل عبر الصفحات،
ترى الأشياء تتحرك، ولكن هذا فقط لأن عينيك
ترى لقطات صغيرة بسرعة لشيء يتحرك على الورق.
هذه هي حقيقة ملف الفيديو في الواقع.
لذا إذا كان لديك جهاز iPhone وكنت قد سبق ولعبت بهذه الرموز المتحركة،
إذا جاز التعبير، حسنًا، كل هؤلاء هم ملفات فيديو صغيرة
تتألف من الكثير والكثير والكثير من الصور
التي قمت بحفظها على هاتفك أو قمت بإرسالها إلى شخص آخر.
وإذا كنّا نفكر فقط، أننا الآن عند نقطة الفيديو، ولكن هذا جيد.
فالفيديو عبارة عن مجموعة من الصور.
والصور عبارة عن مجموعة من الألوان.
والألوان عبارة عن أنماط من وحدات البت.
ووحدات البت، في نهاية الأمر، هي فقط
نتاج الكهرباء التي تدخل إلى جهازي أو الترانزستورات
التي تقوم بالتشغيل وإيقاف التشغيل.
تقريبًا، يجب علينا جميعًا استيعاب الأمر بأكمله، لكن لا أحد منا
أبدًا سيحتاج حقًا إلى التفكير بشأن النظام الثنائي في سياق مقاطع الفيديو
لأن مقطع الفيديو هو فقط عبارة عن تجريد أعلى مجموعة من الصور،
والصور هي فقط عبارة عن تجريد أعلى مجموعة من البيكسلات، وهكذا.
لذا يمكننا الاستمرار في رسم هذا التسلسل الهرمي الذي
يسمح لنا فقط بالتحدث عن الأشياء على مستوى أكثر فائدة،
والسبب في إجراء هذه المحادثة هو
فقط لأننا كنا بحاجة إلى طريقة لتمثيل
المدخلات والمخرجات للمشاكل.
اسمحوا لي أن أتوقف ثانية فقط لمعرفة ما إذا كان هناك أي أسئلة.
أي شيء على الإطلاق؟
لا؟
حسنًا.
إذًا، ما الذي يوجد داخل هذا الصندوق الأسود؟
حسنًا، تبين أن هذا هو المكان حيث يبدأ العمل المثير للاهتمام حقًا
في الحدوث ويبدأ الفكر في الظهور.
هذه هي الخوارزميات المشهورة، الإرشادات خطوة بخطوة
لحل بعض المشاكل.
وقد يكون البعض منكم قد حل هذه المشكلة من قبل،
إما رقميًا أو نصيًا، ولكن بالطبع،
إذا كان لديكم جهات اتصال في هواتفكم هذه الأيام
ولديكم مجموعة من الأصدقاء والعائلة،
فالاحتمالات هي أن يتم ترتيبهم أبجديًا حسب الاسم الأول أو الأخير.
ولديكم الإكمال التلقائي هذه الأيام، لكن في الحقيقة إنها مجرد
قائمة طويلة من الأسماء والأرقام.
وهذا ليس كل ما يختلف عن تنفيذ السنة الماضية
للمشكلة نفسها، والتي كانت أن هذا الشيء هنا، دليل الهاتف.
الآن، قد يشتمل دليل الهاتف هذا على صديق لنا فيه، ولنقل محمد محمود
والذي يبدأ اسمه الأخير بحرف م وبإمكاني، بالطبع،
إذا جربت العثور على محمد محمود أن أبدأ بالبحث
في الصفحة الأولى، الصفحة الثانية، الصفحة الثالثة، الصفحة الرابعة
وفي النهاية، على أمل العثور على محمد محمود.
في الواقع، هل هذه الخوارزمية، هذه العملية التي تجري خطوة بخطوة،
صحيحة للعثور على شخص ما مثل محمد محمود؟
نعم.
إنها صحيحة.
إنها غبية وبطيئة ربما لأنها
ستأخذ باستمرار في دليل هاتف بهذا الحجم،
لكنها صحيحة لأنه إذا كان محمد هنا، ففي الواقع، سأعثر عليه.
لكن يمكنني القيام بذلك بشكل أفضل.
يمكنني القيام بقلب صفحتين في كل مرة.
إذًا، اثنتان، أربع، ست، ثماني، 10--أو بشكل غير كامل--
10 و12 و14.
هل هذا أسرع؟
من الواضح، أنها تسير بسرعة مضاعفة.
هل هذا صحيح؟
لا.
لماذا هو غير صحيح؟
نعم.
قد أفوته، أليس كذلك؟
وفي النهاية، قد يصبح محمد محصورًا الآن بين صفحتين بدون قصد
وأحظى بتجربة سيئة الحظ فقط لمجرد تفويته.
الآن، هل هذا قابل للإصلاح؟
نعم.
ربما يمكنني، على سبيل المثال بمجرد أن أصل إلى قسم ين أو و--
يمكنني أن أقول فقط، من الواضح، أنني قد ذهبت بعيدًا جدًا عن محمد.
اسمحوا لي بالعودة صفحة واحدة أو مجرد بضع صفحات.
إذًا، هذا قابل للإصلاح.
وما دمت قد وفرت الوقت، من خلال تصفح هذا مرتين أسرع،
هل يمكنني على الأقل تحمل بذل بضع خطوات إضافية في النهاية فقط
للعثور على محمد محمود؟
ولكن لا أحدًا منّا سيفعل ذلك.
وأجهزة أندرويد وأبل لدينا بالتأكيد
لن تفعل ذلك من أجل الكفاءة اليوم.
الاحتمالات هي أن معظمنا سيفعل ما يجعلنا نعثر على شخص ما في أي كتاب مثل هذا؟
نعم.
قم بالفتح نحو المنتصف تقريبًا أو ربما نميل نحو النهاية
لأن م بعد المنتصف.
لكن تعلم، أنا هنا في منتصف دليل الهاتف.
والآن، إذا كنت أعلم أن محمدًا موجودًا في قسم م وبالتالي فهو هنا،
فأين أعرف أنه ليس موجودًا؟
ليس موجودًا في البداية ويمكنني حرفيًا
تمزيق مشكلة مثل هذه إلى نصفين، وإلقاء بشكل مجازي وحرفي نصف
المشكلة بعيدًا، والبقاء بشكل أساسي مع المشكلة نفسها،
لكن النصف كبير.
لقد انتقلت من--أيًا كان--
1000 صفحة إلى 500 صفحة، ويمكنني الآن تكرار هذه الخوارزمية.
أنظر إلى الكتاب.
أنا بعيد نوعًا ما.
أنا في قسم ش الآن.
حسنًا.
يمكنني ثانيةً تمزيق المشكلة إلى نصفين، وإلقاء هذا النصف بعيدًا،
التخلص من 500 صفحة بايت، و250 صفحة بايت، والآن أنا سأبقى
مع فقط 250 صفحة أخرى.
ولاحظ مدى السرعة التي وصلت بها هنا.
أوصلتني أول خورازميتين من 1000 إلى 999 إلى 998 أو من 1000 إلى 998
إلى 996.
ولكن هنا، أنا انتقلت من 1000 إلى 500 إلى 250.
يبدو أننا نكسب وقتًا هنا.
وبالفعل، إذا استمررت في تكرار هذه العملية،
فآمل، أن أبقى فقط مع صفحة واحدة من الكتاب
حيث محمد موجود فيها أو لا، عند هذه النقطة، سأتصل به.
وهكذا، بأمانة فربما تفيد هذه الخوارزمية حدسنا
والمزيد مما ستكون عليه البرمجة،
هو التفكير بشأن مشكلة مثل هذه، ومعرفة كيفية تقسيمها
والتغلب عليها، ومن ثم التعبير عن نفسك بطريقة
يمكن للكمبيوتر بعدها حل هذه المشكلة لك.
ولرسم صورة فقط إلى أي مدى تعتبر هذه الخوارزمية أفضل، حسنًا،
إذا كان هذا هو مجرد مخطط تجريدي موجود لدينا على
المحور الرأسي أو محور ص، فما الوقت المستغرق لحل مشكلة،
وعلى المحور الأفقي ما مدى حجم هذه المشكلة--
لذا، كلما ذهبت أبعد في هذا الاتجاه، زادت الصفحات في المشكلة،
وزادت الصفحات في دليل الهاتف.
وكلما ذهبت لأعلى هنا، زاد عدد الثواني أو الصفحات
المنقلبة التي يستغرقها الأمر.
فالخوارزمية الأولى هي فقط تشبه منحدر خطي،
إذا جازالتعبير، لأن مقابل كل صفحة إضافية في الكتاب،
قد يستغرق مني الأمر ثانية أخرى.
يمين، أعلى.
إنها مجرد علاقة واحد مقابل واحد بالنسبة للصفحات.
الخوارزمية الثانية، إذا قمت برسمها، حيث
أنتقل خلالها بسرعة مضاعفة، كيف
سيبدو هذا الخط بدلاً من ذلك؟
أجل.
سيبدو أدنى من هذا الخط.
سيظل يبدو خطًا مستقيمًا لأن الآن، هناك علاقة اثنين إلى
واحد، ولكن إذا كان لديك دليل هاتف فيه هذا الكم من الصفحات،
وفي الخوارزمية الأولى، يستغرق الأمر مدة طويلة، هنا،
حسنًا، في الخوارزمية الثانية، سيأخذ نصف الخطوات، زائد أو ناقص
واحد أو اثنين إذا كنت حقًا بحاجة إلى العودة إلى الخلف قليلاً.
ولكن الخوارزمية الثالثة هي ما سندعوها لوغاريتمي.
إذا كان ع هو عدد الصفحات في دليل الهاتف،
فإن الخوارزمية الأولى، في أسوء الأحوال،
قد تستغرق كل ع من الصفحات للعثور على محمد محمود.
الخوارزمية الثانية ستستغرق نصف عدد الخطوات لأنني
أقلب خلالها صفحتين في وقت واحد.
لكن الخوارزمية الثالثة، ستبدو وتظهر بهذا الشكل.
ستكون منحنية وسترتفع وترتفع وترتفع ببطء شديد جدًا،
ما يترتب على هذا هو... إذا كانت Verizon أو شركة الهاتف
ستضاعف عدد الصفحات في دليل الهاتف
السنة القادمة لأن كامبريدج وسومرفيل اندمجا معًا في دليل
الهاتف، ولدينا الآن 2000 صفحة.
حسنًا،كم عدد الخطوات الإضافية التي ستأخذها الخوارزمية الثالثة لدي؟
واحدة فقط.
لأنني يمكنني أن أستبعد 1000 صفحة من المشكلة
باستخدام هذه الخوارزمية الذكية، في حين أن الخوارزمية الأولى والثانية لدي تستغرق
صفحة أو صفحتين فقط في كل مرة.
بعبارة أخرى، علينا أن نزيد حجم هذه المشكلة على نحو كبير
فقط ليزداد عدد الثواني أو تقليب الصفحة زيادة فعلية ملموسة.
وهكذا وبمجرد أن نبدأ في تعلم البرمجة،
فإنها ستفيد، مجدّدًا، حدسنا من أجل
حل المشاكل بشكل فعلي والترميز بشكل أكثر فاعلية أكثر مما
قد نفعله دون هذا الحدس بمفرده.
لذا دعونا نصوغ هذا الآن.
كانت هذه نوعًا ما طريقة بديهية جدًا لتقسيم المشكلة والتغلب عليها.
فالأمر منطقي نوعًا ما عندما تنتقل إلى المنتصف،
وتقطعه، ثم تنتقل إلى النصف الأول أو النصف الآخر
وتقطعه، وهكذا.
لكن جهاز الكمبيوتر، حتى لو كان لطيفًا مثل أليكسا ومساعد جوجل المنزلي وكل ذلك،
لا يمكنك في الحقيقة الكلام معه كأي إنسان آخر
وجعله يقوم بتنفيذ الأشياء بشكل صحيح.
أنا أعاني للحصول على سيري لتعيين مؤقِّت على هاتفي.
نحن لم نصل إلى هذه الدرجة بعد، نحن ما زلنا في العصر
حيث علينا أن نكون أكثر دقة مع أجهزة الكمبيوتر،
أو الصوت الذي تم تفعيله أو غير ذلك أو إدخال السودوكود حتى الآن.
ليس للسودوكود تعريف رسمي.
إنها مجرد طريقة للتحدث تستخدم بناء الجملة الشبيه بالإنجليزية أو أي لغة منطوقة
للتعبير عن نفسك بشكل مختصر وصحيح
بحيث يمكن لكمبيوتر أو إنسان آلي أو حتى شخص آخر
فهم ما تحاول قوله.
لذا هنا، أقترح، خوارزمية مكتوبة
بالسودوكود، بناء الجمل شبيه بالإنجليزية، يجعل هذا وجهة نظري تصل.
ويمكنني كتابة هذا بأي عدد من الطرق.
لقد قمت بترقيم الخطوات من صفر تصاعديًا، فقط من أجل المناقشة،
ولكن قد يبدو هذا صورة لما فعلته من قبل.
التقط دليل الهاتف.
افتح على منتصف دليل الهاتف.
انظر في الأسماء.
إذا كان محمود بين الأسماء، اتصل بمحمد.
وإلا، إذا كان محمد محمود في بداية الكتاب،
انتقل إلى اليسار، وتحديدًا منتصف النصف الأيسر للكتاب،
ثم قم بالرجوع إلى الخطوة الثانية.
لأنني بالفعل، كنت أفعل الشيء نفسه مرارًا وتكرارًا،
والسبب في أنني لم أفعل ذلك باستمرار هو أنني في كل مرة كنتُ
أقوم بتكرار الأمر بالفتح والتمزيق، كنت أقوم بتقليص المشكلة.
ويمكنني فقط تقليص مشكلة ذات حجم محدد وثابت
مرات عديدة حتى أحصل على صفحة واحدة، وهكذا
إذا تابعت بهذه النظرة المنطقية إلى اليمين أو إلى اليسار أو فقط التوقف،
إذا لم أعثر على محمد على الإطلاق في الصفحة الأخيرة،
فقد يبدو هذا التقاطًا لتلك التعليمة البرمجية بدقة أكبر.
حسنًا، دعونا نقتبس الآن من هذا بعض المفاهيم
ثم نبدأ تطبيقها على الرمز الفعلي.
ما تم تمييزه بالأصفر هنا، أجرؤ على القول إنه، جميع الأفعال أو الإجراءات.
هذه هي الوظائف، كما سنبدأ بتسميتها،
في هذه الخوارزمية.
الوظيفة هي مجرد خطوة محددة، إجراء محدد
تقوم به من أجل القيام بشيء ما.
ولذا المميز بالأصفر هنا-- التقط، افتح على، انظر في، اتصل، افتح، أنهِ
جميعها أفعال أو إجراءات.
من الآن فصاعدًا، سنُطلق عليها وظائف.
وفي الوقت نفسه، أبرزت باللون الأصفر هنا-- if, else if, else if, else.
هذا نوع من البدايات في طرح الأسئلة.
ما يمكن أن يُطلق على هذا إذا كان لديك بعض المعرفة؟
حسنًا.
يتضح أن العديد من لغات البرمجة، إذا كنت قد اطلعت على أي لغة من قبل،
تطلق على هذه "الشروط".
فهي تفرعات، أو نقاط فاصلة في الطريق.
إذا كان هذا صحيحًا، فاذهب في هذا الاتجاه.
وإلا، ربما اذهب إلى هذا الاتجاه الآخر، أو لربما اتجاه ثالث أو رابع
تمامًا.
في غضون ذلك، إذا نظرنا فعليًا إلى هذه العبارات المظللة--
إذا كان أحمد من بين الأسماء أو إذا ذُكر أحمد سابقًا في الكتاب
أو سيُذكر أحمد في وقت لاحق في الكتاب--
هذه هي الأسئلة المحددة التي نطرحها لاتخاذ هذا القرار.
وتعرف هذه باسم التعبيرات البولينية، والتي سُميت نسبة إلى رجل محترم
حسب الاسم الأخير لبولي قبل بضع سنوات.
وبالتالي فإن التعبير البوليني هو مجرد سؤال
تكون الإجابة عليه إما بنعم أو لا، صح أو خطأ، صفر أو واحد
إذا صح التعبير.
وهذا تخطيط رائع لما تكون أجهزة الكمبيوتر جيدة حقًا فيه.
حتى في ظل "الشروط"، تكون لديك "التعبيرات البولينية"
لتحديد الاتجاه الذي تريد اتخاذه.
ثم أخيرًا، الموضح باللون الأصفر هنا
هو العودة إلى الخطوة 2 في مكانين.
وهذا ما أنتج، إلى حد ما، نوعًا من دورة أو "حلقة"
تخبر الكمبيوتر أن يفعل شيئًا مرارًا وتكرارًا.
هكذا وباختصار، يكون لدينا هذه الكتل البنائية بالفعل من الناحية النظرية.
وكما تبين، يمكننا الآن بدأ ترجمة هذه
إلى لغة برمجة فعلية.
أول لغة من اللغات سنقدمها في CS50
هو شيئًا يسمى سكراتش.
اتضح أن هذه ليست لغة تستند إلى نص،
كما هو الحال في "السودوكود" باللغة الإنجليزية لديّ، ولكنها رسوم بيانية
وتبدو الأشياء مثل قطع اللغز التي يمكنك سحبها وإفلاتها
وتترابط فيما بينها إذا كان من المنطقي لها القيام بذلك.
وفي واقع الأمر، بعضكم قد يكون لعب هذا قديمًا عندما كان طفلاً
أو حتى في الآونة الأخيرة بسبب أنها تستهدف في الواقع عادة
الطلاب في برامج بعد المدرسة
الذين يريدون أن يتعلموا بشكل أكثر منهجية، أو أكثر حسابية، أو التفكير الحسابي.
ونحن بصدد استخدامها لاستكشاف ليست كتل البيانات البنائية هذه فحسب
ولكن بعض من الأخرى، كذلك.
ويبدو أن اللغات الأخرى التي سنستكشفها في CS50 وما بعده،
لغات مثل C التي سنقوم في الواقع الانتقال إلىها في أسرع وقت في الأسبوع المقبل،
ثم لترجمة ما نفعله هذا الأسبوع في سكراتش الى الاسبوع المقبل في C.
وفي لغات مثل Python وJavaScript
و SQL، التي سنستكشفها أيضًا، هل لدينا قدرات أخرى--
القدرة على تخزين البيانات في المتغيرات، إذا صح التعبير،
لاستخدام مؤشرات الترابط، مما يعني جعل الكمبيوتر يقوم بعدة أشياء دفعة واحدة،
الأحداث، لقصد الاستماع لأشياء تحدث، مثل نقرة
على الصفحة أو كتابة بشرية أو حتى قول شيء ما.
وسنكون قادرين على القيام بكل الأشياء التي تأخذها
كأمر مُسلم به في الهواتف الخاصة بك.
وسنفعل هذا لأول مرة عن طريق هذا الرجل.
إذًا هذا هو الاسكراتش، القط الافتراضي الذي يأتي مع هذه لغة البرمجة هذه
من مختبر الوسائط في معهد ماساتشوستس للتكنولوجيا.
وعبر لغة سكراتش يمكننا أن نبدأ في برمجته للتحريك للأعلى،
للأسفل، لليسار، لليمين، قوّل شيئًا ما، لفظ شيًا ما، وأوامر أخرى
معًا.
في الواقع، اسمحوا لي بالمتابعة وتبديل السياقات هنا
لعرض لك أول شيء كتبته بلغة سكراتش.
تعود إلى يوم حينما كنت في مرحلة الدراسات العليا
وكان قد تم اختراع لغة "سكراتش" للتو من قِبل معهد ماساتشوستس للتكنولوجيا.
لذا دعوني أمضي قُدمًا وافتح هذا.
وأطلقت عليه اسم أوسكار تايم.
وإذا كان بإمكاننا أن يكون لدينا متطوع فليأتِ للحظة.
يجب أن تكون مرتاحًا على المسرح وعلى الإنترنت.
هل يمكن أن يأتي الشخص صاحب القميص الأبيض؟
رأيت يدك أولاً.
تعال.
إذًا هذا هو أوسكار تايم.
تم تنفيذه بلغة تسمى سكراتش.
وفي نهاية الأمر، إن كل ما سيكون في أساس هذا البرنامج
هو الوظائف والحلقات والشروط وعدد قليل من هذه المفاهيم الأخرى.
مرحبًا.
ما اسمك؟
أفيفا: أفيفا.
ديفيد مالان: أفيفا.
ديفيد.
تشرفت بمقابلتك.
تعالي هنا.
وبعد لحظات، سأمضي قُدمًا وسأنقر فوق
العلم الأخضر في أعلى الزاوية اليسرى، والذي
سيُشغِّل هذه اللعبة.
وسنرى الإرشادات على الشاشة.
[MUSIC PLAYING]
أوسكار: (يغني) أوه، أنا أحب النفاية.
أي شيء وسخًا أو قذرًا أو مُتربًا.
أي شيء رثًا أو عفنًا أو صدئًا.
نعم، أنا أحب النفاية.
إذا كنت تريد حقًا أن ترى شيئًا رديئًا، فانظر إلى هذا.
لدي هنا حذاء رياضي وهو ممزق وبالٍ.
إنه مليء بالثقوب وأربطته ممزقة.
هدية من والدتي في يوم مولدي.
أنا أحبه لأنه نفاية.
نعم، أنا أحب النفاية.
أي شيء وسخًا أو قذرًا أو مُتربًا.
أي شيء رثًا أو عفنًا أو صدئًا.
نعم، أنا أحب النفاية.
إليك المزيد من الأشياء العفنة.
لدي هنا بعض الصحف منذ 13 شهرًا.
ديفيد مالان: حسنًا.
فلتصفقوا جميعًا لأفيفا للصعود على المسرح.
شكرًا لكِ.
تعالي.
أفيفا.
[APPLAUSE]
كرة ضغط صغيرة من CS50.
يكفي أن أقول، إذا كنت تعبت من هذه الأغنية،
ففكر في التعب الذي أصابني بعد ثماني ساعات من اكتشاف أخطاء هذا البرنامج وتصحيحها
وكذلك بنائه.
لكن لننظر إلى ما رأيناه للتو.
إنها تلك اللعبة التفاعلية ذات الأشياء المتحركة والموسيقى التي تعمل.
ولكن إذا كنت تركز على تفكيك، إذا صح التعبير، هذا البرنامج إلى
كتل البناء الأساسية فقط، فهذا مجرد نوع كبير من التجريد على بعض من قطع المستوى
السفلية للوظيفة.
مثل سلة المهملات هذه هنا.
في هذه اللحظة، إنها مجرد صورة، وفي بعض الأحيان،
بمجرد أن أسقطت أفيفا شيئًا ما في سلة المهملات، ظهر الغطاء
وظهر أوسكار، وقال شيئًا ما، ثم عاد إلى أسفل.
لكن هذه الرسوم المتحركة فائقة التبسيط.
فهي مجرد تسلسل من 1، 2، 3، أو حتى عرض الصور ثم
العودة إلى أسفل لخلق وهم الرسوم المتحركة.
بينما، في كل مرة قال أوسكار شيئًا ما،
كان هذا يتتبع درجتها في ما يسمى "المتغير".
في الجبر، لديك x وy وz ، ولكن في البرمجة، لديك الفكرة نفسها،
ولكن عادةً ما تزداد الفائدة بتسميتهم بشكل أكثر وصفية،
مثل درجاتك.
ولذلك ربما يوجد متغير في هذه اللعبة يسمى
"الدرجة" والذي كان فقط يلاحظ عدد المرات
التي أسقطت فيها أفيفا شيئًا في سلة المهملات.
بينما، سلة المهملات نفسها والحذاء والصحيفة-- وحتى المزيد
من الأشياء التي تحدث في النهاية-- كانت تسقط من السماء
من مواقع عشوائية نوعًا ما، وهذا لأنني برمجت اللعبة
لإسقاط النفاية من هنا أو من هنا، فقط
لجعلها أكثر تحديًا بصورة صغيرة كلما نشطت اللعبة.
في واقع الأمر، تبدأ الأشياء بالوقوع أسرع وأسرع مع مرور الوقت،
كلعبة نموذجية، تزداد صعوبة أكثر وأكثر.
إذًا كيف نصل إلى شيء كهذا؟
حسنًا، اسمحوا لي بالمتابعة وفتح لغة سكراتش نفسها
وعرض بيئة العمل.
إذًا في سكراتش، لديك بشكل أساسي ثلاث مناطق عامة.
وهو يعتمد على الويب، لذا يمكنك إجراء هذا على أي جهاز كمبيوتر.
وفي الجانب الأيسر هنا، لديك قطع اللغز تلك
التي أشرت إليها في وقت سابق.
تمثل قطع اللغز تللك تخطيطًا للوظائف أو الحلقات أو الشروط
أو المتغيرات، الأشياء التي رأيناها من قبل، وسأكون
قادرًا على سحبها وإفلاتها في المنتصف
للتوصيل بينها وكتابة برنامجي،
الذي سنفعله في غضون لحظة واحدة.
في هذه الأثناء، يعيش سكراتش في هذه المرحلة، هذا العالم، حيث يمكنه الحركة لأعلى،
لأسفل، لليسار، لليمين.
يمكنك تغيير شكل سكراتش.
يمكنك إضافة سمات أخرى، تُعرف أيضًا باسم الرموز المتحركة،
لتكون لديك أمور متعددة تحدث في وقت واحد.
وبالطبع، يمكنك ملء الشاشة بها.
وهكذا كانت لعبة أوسكار تايم منذ لحظة في الواقع مجموعة كاملة من الرموز المتحركة.
كانت سلة مهملات أوسكار واحدة.
كانت كل قطعة من النفاية رمزًا متحركًا آخرًا.
كانت الصحيفة عبارة عن رمز متحرك، وما إلى ذلك.
وهكذا كل واحد منها كان عبارة عن برامج منفصلة تعمل بالتوازي في الوقت نفسه.
لذلك دعونا حقًا نجعله يفعل شيئًا.
ويتضح أنه إذا انتقلت إلى، لنقل، أحداث،
سأرى واحدة من أكثر الكتل قوةً
من get go، والتي تظهر عند نقر العلم الأخضر.
هذا في الواقع كيف بدأت اللعبة مع أفيفا،
من خلال النقر فقط فوق هذا العلم الأخضر أعلى عالم سكراتش.
وإذا أردت أن أوقفها، كما فعلت، يمكنك
النقر فوق علامة التوقف الحمراء لتقول توقف.
وفي الوقت نفسه، بالعلم الأخضر، يمكنني باستمرار
الاستماع إليه عن طريق سحب قطعة اللغز هذه وإسقاطها.
عندما يتم النقر على العلم الأخضر، ماذا أريد أن أفعل؟
حسناً، دعونا ننتقل إلى الأشكال.
وهذه مجرد فئات مختلفة.
ويمكننا التمرير خلال جميع الكتل الملونة المختلفة،
لكنها إلى حد كبير فقط تفعل ما يقولون.
سأنتقل إلى الأشكال، حيث أعرف أن هناك كتلة تسمى
قل، وسأذهب إلى الأمام وأكتب أكثر شيء متعارف عليه في
علوم الكمبيوتر-- مرحبًا بالعالم--
في هذا المربع.
لذلك لاحظ أن الوظائف نفسها يمكن في الواقع
أخذ المدخلات والمدخل لهذه الوظيفة، على سبيل المثال،
سيكون مرحبًا بالعالم.
إذا انتقلت الآن إلى العلم الأخضر وضغطت عليه--
مرحبًا بالعالم.
حسنًا.
ليس صعبًا على الإطلاق. ليس مثيرًا للاهتمام للغاية.
ولكنه في الواقع أنجز المهمة، ولذلك فإن برنامجي هو بالفعل هكذا.
حسنًا، كيف يمكنني أن أجعل هذا أكثر إثارة للاهتمام قليلاً؟
مجرد قول، مرحبًا بالعالم طوال الوقت ليس جذابًا لدرجة كبيرة.
حسنًا، أتعلم ماذا؟
دعني أفكر.
دعني أتراجع عن هذا.
دعني أمرر لأسفل إلى الاستشعار.
ولاحظوا هذا.
يمكن للوظائف أيضًا أن تأخذ مدخلاً من إنسان
ويمكن للوظائف أيضًا أن تعطيك قيمة، ما تسمى بقيمة العودة.
إذًا هذه الكتلة هنا، اسأل شيئًا-- بشكل افتراضي، تقول،
ما اسمك وانتظار--
هي وظيفة أخرى مضمنة في سكراتش تسمح لي أن أفعل هذا.
لذلك سأمضي قُدمًا وأسحب هذا هنا
وسأتركه يقول، ما اسمك؟
لاحظ الآن أن أسفل هذه الكتلة توجد كتلة خاصة،
مهما كان ما سترده الكتلة.
لذا فإن الإجابة هي ما سيكتبه الشخص مهما كان.
وإذا أردت الآن أن أقول ما كتبه الشخص، اسمحوا لي أن أعود إلى الأشياء.
انتقل للحديث.
ولاحظ أن هذه الكتل مغناطيسية نوعً ما.
إنها تريد أن تلتحم معًا.
لذلك سأمضي قُدمًا وللنتقل إلى هناك.
و إذا عدت إلى الاستشعار وسحبت الإجابة،
لاحظ أنه على الرغم من أنها ليست الحجم نفسه،
إلا أنها ستنمو لملء مكانها، والآن، أستطيع
أن أجعل البرنامج لدي يسأل المستخدم ما اسمه أو اسمها ثم
مهما كانت هذه الإجابة.
لذا دعوني أمضي قُدمًا وأتوقف وأنقر فوق تشغيل مجدّدًا.
لاحظ أنه يسألني عن اسمي، دعني أتابع وأكتب ديفيد.
إدخال.
حسنًا.
إنها طريقة غريبة قليلاً لتحية شخص ما.
ديفيد.
لذلك سيكون من الرائع تنظيف ذلك قليلاً.
لذلك أتعلم ماذا؟
أنا أعرف هذا فقط من تدقيقه من قبل.
ليس كل هذا واضحًا للوهلة الأولى.
ولكن اتضح أنه ضمن المشغلين، الفئة،
يوجد هذا الشيء هنا-- اجمع التفاح والموز.
والتي تكون مجرد قيم افتراضية.
يمكنك تغييرها.
لأن ما الذي أريد أن أفعله؟
أريد أن أقول مرحبًا، ديفيد، أو أي شخص، لذلك أريد أن أقول مرحبًا، فاصلة،
ثم، ديفيد-- مهما كان الشخص المكتوب.
وهذا ما يسمح الجمع لك بفعله.
إنه يسمح لك بجمع أو توصيل جملتين تكونان بطريقة أو بأخرى
مقدمتين عن طريقك أو عن طريق المستخدم.
لذا دعوني أخرج هذا، الإجابة.
اسمحوا لي بالمضي قُدمًا وسحب كتلة الجمع.
لاحظ أنها، أيضًا، ستنمو لملء الفراغ.
دعني أمضي قُدمًا، وأقول مرحبًا، فاصلة، مسافة، والآن، اسحب الإجابة إلى هناك.
ولاحظ هذا البناء.
مثلما في الرياضيات.
بناء الوظائف هذا.
يمكنني أولاً جمع الترحيب والإجابة من خلال أخذ هذين الأمرين كمدخل
ثم تمريرهما إلى القول كمدخل آخر
لأن هذه الطبقات يتم وضعها في الأعلى.
والآن، إذا أوقفت هذا وقمت بتشغيله مجدّدَا وقلت، ديفيد--
مرحبًا، ديفيد.
الآن، لدينا ما يؤهلنا لبرنامج تفاعلي ممتع بشكل أكبر
وليس مجرد ترميز ضمني.
بالطبع، ليس سمعيًا مثل شيء ما مثل أوسكار تايم منذ لحظة.
لذا دعوني أمضي قُدمًا وأفعل هذا.
اسمحوا لي أن أبدأ من جديد تمامًا وأعمل سكراتش بصفته قط كما هو
وابدأ الصوت الذي يطلق عليه مواء.
إذًا يتضح أن هناك فئة من الكتل تسمى صوت،
وداخل الصوت، يوجد تشغيل بعض الأصوات الافتراضية.
لذلك أبدأ صوت المواء.
والآن، ستصبح الأشياء ألطف قليلاً.
[MEOW]
أوه.
والآن، مرة أخرى.
[MEOW]
ويمكنني أن أحاول محاكاة قطة [MEOW] بالوقوف هنا لفترة من الوقت
والاستمرار في النقر فوق هذا الزر.
ولكن أتعرف ماذا؟
اسمحوا لي أن أجعله يصدر صوت مواء بضع مرات لأن ذلك أكثر واقعية.
لذلك اسمحوا لي بسحب الثانية والثالثة.
ويمكنك الحصول على عدد لا حصر له من الكتل.
دعوني أضغط على تشغيل.
[MEOW]
يبدو أن هناك خطأ.
لنجرب مجددًا.
تشغيل.
[MEOW]
هذا هو أول خطأ لي، أو غلطة.
هذا يبدو صحيحًا.
يقول عندما يتم النقر فوق العلم الأخضر، ابدأ صوت مواء، ابدأ صوت مواء
ابدأ صوت مواء.
لماذا أسمع صوت مواء مرة واحدة فقط؟
نعم.
إنها نوعًا ما في الوقت نفسه أو قريبة من الوقت نفسه
لذا فالأصوات نوعًا ما تتعثر فوق بعضها البعض أو تتداخل فقط،
هل هذا صحيح؟
تقول الكتل حرفيًا، ابدأ صوت مواء.
لكن أجهزة الكمبيوتر سريعة حقًا.
إذا كنت قد سمعت التعبير جيجاهيرتز، الذي يمثل وحدة قياس.
وإذا كان جهاز الكمبيوتر لديك يحتوي على CPU، أو وحدة معالجة مركزية، أو عقل بسعة واحد غيغاهرتز
مما يعني أنه يمكنه حرفيًا القيام بمليار شيء في الثانية.
يمكنه بالتأكيد بدء ثلاث أصوات بسرعة فائقة.
واذا كانوا يحدثون جميعًا على نحو فعّال واحدًا تلو الآخر
قبل أن ينتهي الصوت حتى، وأنت تسمع تأثير واحد نقي.
إذًا كيف يمكننا إصلاح هذا؟
حسنًا، يمكنني أن أنتقل في الواقع وأصلح هذا مع هذه الكتلة هنا--
تشغيل صوت المواء حتى الانتهاء.
و الآن.
[MEOWING]
حسنًا.
إن هذا القطة الاستثنائي، حزين قليلاً،
ولكنها على الأقل الآن صحيحة بدرجة أكبر.
و، كما يتضح، إذا انتقلت إلى التحكم--
هل تعلم؟
توجد هذه الكتلة هنا-- انتظر بضع ثوانٍ.
يمكنني المُضي قدمًا وإدراج هذا هنا.
دعني أقوم بواحدة أخرى هنا.
والآن، اضغط على تشغيل.
[MEOWING]
هل تعلم، هذا ليس سيئًا.
إنه يبدو الآن أكثر واقعية قليلاً.
ولكن بصراحة، إذا واصلتُ القيام بهذا-- أو هل تعلم؟
يمكنك بالفعل النقر بزر الماوس الأيمن أو النقر على زر التحكم على الكتل،
وتكرارها، ومجرد النسخ واللصق أكثر من ذلك إذا كنتَ تريدها.
لذلك إذا كان لي أن أفعل هذا، الآن، فإنها سوف تنتقل فقط ست مرات.
وبعد ذلك سيمكنني نسخها مرة أخرى والانتقال 12 مرة.
ولكن يجب أن توجد طريقة أفضل، أليس كذلك؟
هذه الآن برمجة سيئة.
هذا تصميم سيء.
لأنني حرفيًا أقوم بالنسخ واللصق، وإن كان، بشكل بياني.
لكننا رأينا بالفعل كتلة بنائية
يمكننا تصميم هذا البرنامج باستخدامها بشكل أفضل.
هذا صحيح، ولكنه ليس مصممًا بشكل جيد.
ما الذي ستكون عليه الكتلة البنائية إن احتجتُ لجعل هذا منظمًا أكثر قليلاً؟
حسنًا.
تكرار حلقي رباعي.
لا توجد تمامًا في سكراتش.
لكن الحلقة في الأساس تقوم بشيء ما بشكل دوري.
وفي الواقع، إذا انتقلتُ ضمن نطاق التحكم وبدأتُ في التدقيق،
ستلاحظ وجود عدد قليل من الكتل التي قد تنطبق هنا.
توجد كتلة التكرار لعدد من المرات
أو الكتلة المستمرة، واللتان تبدوان كتكرارات حلقية، أو دورات.
لذلك فكما هو متوقع، دعوني أمضي قدمًا هنا وسيمكنني التخلص من الكتل
فقط عن طريق سحبها إلى اليسار.
دعوني أسحب هذه لثانية.
ثم قل فقط تشغيل هذا الصوت باستمرار، ثم انتظر للحظة.
لذا فالآن، يبدو برنامجي هكذا.
[MEOWING]
كما تعلمون، لن نعرف أبدًا ما إذا كان صحيحًا من الناحية التقنية لأنه فقط
سوف ينتقل، كما نعتقد، باستمرار، لكن يبدو أن هذا صحيح.
ولقد كان تعليمة برمجية أقل بدرجة كبيرة وصار أسهل كثيرًا
الاحتفاظ به لأنني إذا أردتُ منه نوعًا من النعاس،
فيمكنني حينئذ أن أقول ثانيتان بدلاً من ذلك.
[MEOW]
كما تعلم، ويمكننا ضبط هذا بسرعة فائقة أثناء تنقلنا.
لكن دعونا نبدأ بدمج بعض من هذه الأفكار
الآن وتغيير ماهية التأثير النهائي.
دعوني أمضي قدمًا وأفتح مثالاً قدمتُه مسبقًا.
ويسمى هذا المثال باسم Count Zero "عدّ الصفر".
وسنضع هذا على موقع الويب لاحقًا بحيث يمكنك اللعب به إذا أردت ذلك.
وهذا يعتبر نوعًا عكس عدّ الخراف.
بدلاً مني أنا أو شخص ينام أثناء عدّ الخراف،
ستقوم هذه الخراف بعدّ نفسها.
لذا دعوني أمضي قدمًا وألعب فقط.
وبشكل مثير للإعجاب، يبدو أنه فقط يعد 1، 2، 3.
ولكن لماذا ذلك؟
إنه سيقوم فقط بالعدّ باستمرار.
ولكن دعونا ننظر إلى الكتل التي يقوم بالعدّ باستخدامها باستمرار.
عند النقر على العلم الأخضر، اضبط العداد.
يتضح أن المربع البرتقالي هو ما أطلقنا عليه اسم متغير.
لذا في الجبر، سيكون مثل س أو ص أو ع.
تلك القيم ليست وصفية.
بدلاً من ذلك قمتُ بتسمية عداد واحد، لكني سميتُه س أو ص أو ع.
من ثم أنطق العداد باستمرار لثانية واحدة، ثم أنتظر لثانية أخرى،
ثم أقوم بتغيير العداد بآخر، والذي
يعني من الناحية التقنية زيادته فقط.
أضف إليه 1.
وستقوم الخراف بالتالي بالعدّ تصاعديًا أكثر فأكثر فأكثر.
الآن، إنه أمر ممل قليلاً، لكن ذلك
هو نوع نقطة عدّ الخراف، طبعًا، للخلود إلى النوم.
ولكن ماذا لو كانت الخراف نوعًا ما أعجبها العدّ بشكل أسرع قليلاً بالفعل؟
حسنًا، دعني أنتقل أسفل عوامل التشغيل هنا.
تبدو عملية الضرب وكأنها قد تجعلنا نصل للأماكن بشكل أسرع.
ودعوني أن أمضي قدمًا وأنتقل إلى المتغيرات.
وبدلاً من تغيير العداد بآخر،
دعوني أمضي قدمًا وأن أستمر فقط في ضبطه لعدد آخر.
لذا دعوني أقوم بسحب هذا وإفلاته.
اضبط العداد لعدد ما في عدد ما، خاصةً
العداد في اثنين، بالتالي الضعف، الضعف، الضعف، الضعف.
يبدو أنها تزداد، إذا جاز التعبير، بسرعة أكبر.
لنرَ.
1، 2، 4.
إذن فهو يَعد أسرع، لكن ما زال الأمر نوعًا ما مملاً.
ماذا لو قمنا بهذا بدلاً من ذلك؟
دعونا نتوقف عن الانتظار ونمضي قدمًا و، بالنظر،
لا ننطق العداد لثانية واحد، ولكن دعونا ننطق العداد بسرعة.
لذا سأنطق العداد.
عذرًا.
سأنطق العداد، ثم سأقوم بضبطه بضربه في 2.
إذن إليك المكان الذي نقف عنده.
ابدأ، أو اضبط العداد على 1 بدايةً، وانطقه، ثم ضاعفه،
ثم ضاعفه، ثم ضاعفه، مع نطقه أثناء ذلك.
ها نحن ذا ننطلق.
هذا مثير للإعجاب.
إذن تم حتى الآن عدّ الخراف وصولاً إلى 10 وحتى رقم 60.
10 إلى رقم 100.
حسنًا.
الآن، هذا لا يتناسب حتى مع فقاعة الكلام، لكنه ما يزال مستمرًا.
إلى أي مدى يمكنه الوصول؟
ما هو أكبر رقم يمكنك العدّ إليه في جهاز كمبيوتر؟
هل يرغب أحد أن يخمّن؟
قد يكون هنا لبعض الوقت.
10 إلى رقم 270 الآن.
لأي مدى يمكنك العدّ، أو بالأحرى--
حسنًا.
إذن لقد استسلمنا وأطلقنا عليه ما لا نهاية.
لذا يتضح أن ما لا نهاية لها قيمة دقيقة--
10 إلى رقم 250 أو نحو ذلك.
لكن ماذا يحدث هنا؟
حسنًا، نظرًا لأن أجهزة الكمبيوتر، في نهاية المطاف،
تقوم فقط بتخزين المعلومات رقميًا-- ولكن تلك المعلومات المخزنة رقميًا
يجب أن يتم تخزينها ماديًا باستخدام الكهرباء، باستخدام محولات خفض المستوى
هذه المسماة بأجهزة الترانزستور.
في نهاية الأمر، يكون لهاتفي، أو جهاز الكمبيوتر المحمول الخاص بي، وأي جهاز معني
مقدار محدود فقط من تلك الأشياء.
أنا لدي عدد محدود من الأصابع.
باستخدام النظام الأحادي، نهج المدرسة القديمة لعلامة التجزئة لديّ،
يمكنني العدّ إلى خمسة على هذه اليد.
باستخدام النظام الثنائي، زعمتُ أني أستطيع العد إلى 31 على هذه اليد.
لكنه ما يزال محدودًا.
لا يمكنني العدّ إلى ما لا نهاية على هذه اليد لأن لدي فقط خمسة أصابع.
وبالمثل، فالكمبيوتر به فقط أجهزة ترانزاستور كثيرة جدًا أو
وحدات بايت أو وحدات بت كثيرة جدًا في الذاكرة، وعند نقطة معينة،
يتعين على المبرمج أن يفكر فيما سيفعله
أو ستفعله عندما يريد المستخدم العدّ لمدى مرتفع جدًا
لا يمكنك مواءمته ماديًا بعد ذلك.
عليك أن تستسلم مثل هذا وأن تقول شيئًا بشكل شبه دقيق
أو عليك معالجة تلك المسألة بطريقة أخرى معينة.
وسنرى عندما نصل إلى C أن كيفية معالجتك لهذه المشكلة ليست
بالضرورة مباشِرة، والكثير من البرامج في الواقع
هناك لا تتعامل مع هذه المشكلة.
والاحتمالات هي، أننا جميعًا لدينا برامج إذا
قمتَ بكتابة كلمات كبيرة بما يكفي أو أرقام كبيرة بما يكفي فيها،
فإنها قد تنقطع أو تتعطل أو تتوقف بشكل كبير جدًا
ذلك لأن البشر، على عكس MIT (معهد ماساشوستس للتكنولوجيا)، لم يتوقعوا أن ذلك قد
يحدث بالفعل ويعالجوه.
حسنًا، دعوني أمضي قدمًا وأقوم بذلك.
دعوني أفتح هذا البرنامج وأرى ما إذا لم نتمكن من قراءة التعليمة البرمجية الآن.
وهذا يسمى Pet Zero وهذا برنامج يحاكي ملاطفة الحيوانات.
لذا إذا قمتُ بالنقر فوق تشغيل ولم ألمس لوحة المفاتيح،
فيبدو ألا شيء سيحدث، ولكن إذا قمتُ الآن بتحريك المؤشر نحو القط--
[MEOW]
ياللأسف.
إنه نوع لطيف.
[MEOW]
حتى الآن، إنه ليس أكثر من مواء عند الطلب عندما تقوم بملاطفة القط.
لماذا؟
حسنًا، لاحظ أنني أضفتُ بعض الكتل البنائية الأخرى.
لم نستخدم هذا من قبل، لكنه بديهيًا
قد يخلق شعورًا واضحًا جدًا.
عندما يتم النقر على العلم الأخضر، فقم بما يلي باستمرار.
إذا كان القط يلمس مؤشر الماوس-- فإن هذا الشيء باللون الأزرق
هو ما أطلقنا عليه من قبل اسم تعبير منطقي.
وتكون له إجابة نعم/لا، صح/خطأ، واحد/صفر.
ويكون لمس مؤشر الماوس هو أحد الخيارات الموجودة في القائمة الصغيرة
المنسدلة هنا إذا قمت بالعبث بها.
لذا فإذا كان القط يلمس مؤشر الماوس، فحينئذ وحينئذ فقط،
قم بتشغيل صوت المواء حتى الانتهاء.
إذن لقد قمنا الآن بدمج الدوالّ بتكرارات حلقية ذات شرط.
لكن لماذا التكرار الحلقي؟
يقوم القط بالمواء مرة واحدة عندما ألاطفه.
لماذا أقوم بأي شيء باستمرار هنا؟
شخص ما-- أجل.
أجل.
قد أرغب بملاطفته ثانيةً، لذا فأنا أريد من البرنامج توقع ذلك.
وبصراحة، فلو أني حذفتُ الكتلة المستمرة هذه وبدا برنامجي
بدلاً من ذلك كمثل هذا--
فدعوني إذن أتخلص من هذا وذاك--
ثم نقرتُ على تشغيل، والآن، فأنا أتحرك فوقه،
فلماذا لا تعمل حتى ولو لمرة واحدة؟
انطقها مرة أخرى.
أجل.
فأنا أعني إذن، عند هذه النقطة، إذا أمكنني الإيجاز،
أن الكمبيوتر سريع للغاية، لدرجة أن هذا قد حدث بالفعل
في وقت تحريكي للمؤشر نحو القط، وفي اللحظة التي
قمتُ فيها بالنقر فوق تشغيل، لم ألمس القط.
تم تنفيذ تلك الكتل، إذا جاز التعبير، من الأعلى للأسفل.
هذا هو كل شيء للبرنامج.
لذا عندما أقوم بتحريك المؤشر نحو القط، ينتهي البرنامج.
إنه ليس استماعًا.
وهكذا باستمرار، بهذه الطريقة يمكنني بالفعل الاستماع بشكل متواصل إلى شيء ما
يحدث بالفعل.
ماذا لو كنت أريد القيام بشيء ما ليس فقط إذا ما كان الشيء صحيحًا،
لكن يتعامل مع الحالتين؟
إذا وإلا.
حسنًا، دعوني أمضي قدمًا وأفتح Pet One.
وهذا مثال آخر.
وهل يمكن لشخص ما أن يصف، بعد قراءة هذه التعليمة البرمجية، ما
سيفعله هذا البرنامج بدلاً من ذلك؟
أجل.
بالضبط.
دعوني ألخص شفهيًا على نحو أكبر.
إذن إذا كنتَ هذه المرة، تلمس القط، فإنه سيقوم بالزئير بدلاً من ذلك.
وإلا، سيقوم بالمواء بشكل لطيف.
إذن هذه المرة، سيقوم بالمواء بشكل مستمر مرة واحدة كل ثانية،
لكن إذا لمستَ هذا القط الاستثنائي، فلن يعجبه ذلك.
إذن شغّل.
[MEOW]
مواء.
[MEOW]
مواء.
[MEOW]
والآن.
[ROAR]
لا تلمس القط.
الآن إذن، قد نتفاعل بطريقتين مختلفتين
بسلوك طريقين مختلفين يمكنك الانتقال خلالهما.
حسنًا، دعونا حقًا نفعل شيئًا تفاعليًا بدرجة أكبر بقليل.
دعوني أمضي قدمًا وأفتح مثالاً آخر.
وهذا يطلق عليه اسم Bounce Zero "الارتداد للصفر" لأنه يمكننا الآن،
الآن أن نبدأ في مشاهدة بعض عناصر التصميم مما كان عليه Oscar Time.
مثل هذا يصبح الآن الأمر شيقًا قليلاً.
ما الذي يحدث هنا بالفعل؟
دعونا نقوم بالتكبير على الكتل هنا.
تقوم هذه الكتلة فقط بنطق تحرك باستمرار 10 خطوات، والتي
تعتبر كتلة أخرى لم نرَها من قبل.
لكن 10 خطوات مثل 10 وحدات بكسل.
إذن تحرك 10 وحدات بكسل على الشاشة.
لكن إذا كنت تلمس الحافة، فمن ثم استدر بزاوية 180 درجة.
ويمكنك أن ترى ذلك يحدث بالضبط.
يتم تدوير سكراتش 180 درجة ولا يعني نمط الاستدارة هذا إلا
رجوعًا مزدوجًا.
لا تعجب بالتكرار الحلقي بزاوية 180 درجة.
إذن ذلك أمر رائع.
لكن هذه ليست الطريقة التي يمشي بها البشر أو القطط.
كمثل ماذا يبدو أمرًا غير طبيعي بوضوح فيما يخص هذا؟
أجل.
أعني، أعني، لا يمكنني حتى محاكاته، أليس كذلك؟
مثل وجود قدميه في وضع ثابت، لكنه يمررها ذهابًا وإيابًأ
على الشاشة.
ولكن، لا يكون المشي هكذا.
مثل المشي له نوع من الحركة افتراضيًا وماذا؟
حسنًا، يمكننا نوعًا ما محاكاة هذا مثل--
حسنًا، يمكنني فقط المشي--
المشي ويمكنك أن تتخيل التقاط صور سريعة كأنها حقيقية لساقيّ
أو لساق قط تتحرك ثم تقرر فقط أن هذه الصورة
ستكون ممثلة لخطوة واحدة.
وهذه الصورة ستمثل خطوة أخرى.
وكما تعلمون، باستخدام خطوتين فقط من تلك الخطوات،
كنتُ أراهن أننا يمكننا بالفعل القيام بعمل جيد لمحاكاة
الكيفية التي يبدو عليها المشي.
في الواقع، إذا عدتُ من حيث بدأنا، من صورة سكراتش هذه،
ماذا لو قمتُ فقط بتحريك ساقيه قليلاً جدًا، ثم الرجوع للخلف،
ثم التقدم للأمام؟
وحتى لو في ملف PDF الخاص بي، يمكنني محاكاة الرسوم المتحركة بنقر السهم لأعلى،
السهم لأسفل، السهم لأعلى، السهم لأسفل لأنه نوعًا مما
يبدو أنه يمشي الآن، بينما في الحقيقة، عيونكم البشرية فقط ترى
صورتين مختلفتين مرارًا وتكرارًا.
إذن كيف يمكنني القيام بذلك؟
حسنًا، إذا قمت بالرجوع إلى سكراتش، فإنه ما يزال يمشي.
دعوني أمضي قدمًا وأفتح Bounce One، الإصدار الثاني لهذا، والآن،
قم بذلك.
حسنًا.
كيف قمتُ بإضافة هذا؟
هناك كتلة أرجوانية صغيرة لم نرها بعد،
ولكن إذا قمتَ بالتدقيق في الفئات، فإنك
سترى كتلاً أخرى مثل هذا الزي التالي الذي يستمر في
تغيير الزي الذي يرتديه.
يتضح وجود سكراتش كصورة وصورته الافتراضية
وهو لا يتحرك، ولكن إذا انتقلتُ لأعلى هنا إلى أعلى اليسار، ثم نقرتُ فوق الأزياء،
فسيمكنك بالفعل مشاهدة أنه يوجد هنا زيه الواحد.
وها هو زيه الثاني.
ولذلك فتلك الكتلة الأرجوانية التي تنطق الزي التالي، لأنه
داخل التكرار الحلقي المستمر، تواصل فقط القيام بالتالي، التالي، التالي، التالي، التالي،
ليُظهر زيًا واحدًا أو الآخر.
من الواضح أنهم يقلدون المشي.
الآن، هذا أمر غير طبيعي تمامًا.
لماذا لا نقوم بإبطائه حتى، وليكن، خمس خطوات في المرة ونجعله ينتقل ثانيةً؟
الآن، هذا ما يزال ينتقل سريعًا جدًا.
دعوني أمضي قدمًا وأقول--
أننا يمكننا التحكم.
يمكننا أن نجعله ينتظر لثانية بعد التحرك بشكل كبير جدًا.
ربما يمكننا تسريع هذا الأمر.
لذا دعونا ننتظر 1/10 من الثانية، 0.1.
أو ربما ننتظر 0.01، أي 1/100 من الثانية.
الآن، أصبح الأمر أكثر واقعية نوعًا ما.
لكن هذه هي ماهية الرسوم المتحركة.
إذا شاهدت فيلم كارتون من قبل أو فيلمًا يستند على صور مثل هذه،
فأنت فقط تحاول إصلاح بعض من هذه المعلمات، وهذه المدخلات،
من أجل إنتاج هذا المُخرَج عن طريق فهم
ما هو التمثيل الأساسي لهذه الأشياء، والذي يعتبر في هذه الحالة
الصور فقط، مرارًا وتكرارًا من أجل
إنشاء هذه الرسوم المتحركة.
لكن ماذا عن التفاعل؟
دعوني أفعل هذا بنفسي.
دعوني أمضي قدمًا وأتخلص من هذا، وأرجع إلى الأحداث، وأنطق،
عند النقر على العلم الأخضر.
ثم، دعوني أمضي قدمًا وأمسك بكتلة مستمرة
ويستمر ذلك مرارًا وتكرارًا.
ثم، دعوني أمضي قدمًا إلى الحركة.
يتضح أن تحت رمز الحركة، توجد هذه الكتلة التي لم نرَها--
تشير تجاه مؤشر الماوس.
ودعوني أمضي قدمًا وأسحب هذه هنا.
ثم، دعوني أحرّكها تمامًا كخطوة واحدة في كل مرة، بدلاً من 10.
ما الذي سيفعله هذا؟
ماذا يفعل هذا البرنامج؟
أجل.
انطقها مرةً أخرى.
اتبع الماوس.
أجل.
إنها نوعًا ما طريقة تشبه اصطحاب قطك في تمشية.
ربما ليس تمامًا الحيوان الذي نقصده بالفعل، ولكنه سيتبع المؤشر.
ويمكنني فعلاً تسريع هذا قليلاً نوعًا ما.
لذا دعونا نحرّكه 10 خطوات.
حسنًا.
الآن، ها نحن ذا ننطلق.
إذن الآن، هو يتحرك لأعلى ولأسفل، وبالتالي فهو الآن متفاعل.
ربما إذن تذكرون عندما كنا نشغّل Oscar Time من قبل وقمنا
بالتقاطه--
حسنًا.
لا تفعل ذلك.
انظر، هذا خطأ.
إنه فقط مرتبك.
هو يتحرك دائمًا تجاهه، لكنك بالفعل--
حسنًا.
لذا سنتوقف.
حسنًا.
إذن الآن، هو يتابع، لكن تلك هي الطريقة التي يمكننا ابتكارها الآن،
على سبيل المثال، القدرة على تحريك قطع القمامة هذه
في مختلف الاتجاهات وجعلها تتبع مؤشر الماوس.
إذا كنت تفكر في الرجوع إلى Oscar Time، ففي كل مرة تقوم بالتقاط قطعة قمامة،
فإنه سيتبع المؤشر وذلك نظرًا لوجود تكرار حلقي مستمر وكتلة مثل هذه
تشير تجاه مؤشر الماوس.
حسنًا، الآن، دعونا ندمج الأفكار المتعددة
ونكوّن بالفعل نصوصًا متعددة.
لقد اقترحتُ سابقًا إمكانية أن يكون للبرامج مؤشرات ترابط متعددة.
ومؤشر الترابط هو طريقة ممتازة للنطق، في السياق الموجود لدينا، وهو النصوص المتعددة.
والنصوص المتعددة في البرنامج الواحد هي التي تحدث بالضرورة بالتوازي.
بفضل الترابط يمكن للكمبيوتر القيام بأشياء متعددة بشكل فعّال في المرة الواحدة،
وزيادةً على ذلك في الطريق.
لذا تعتبر هذه أكثر انخراطًا، لكن دعونا نرى
ما إذا كان بإمكاننا-- دعونا نفهم أولاً ما يفعله هذا البرنامج.
دعوني أمضي قدمًا وأنقر فوق تشغيل.
وهذا الصوت يميل لأن يكون صاخبًا قليلاً.
[SEA LION BARKING]
إذن أسد البحر يعوي بلا توقف، بشكل مزعج.
إذن بقراءة التعليمة البرمجية، كيف يمكنني الآن إيقافه عن العواء؟
اضغط على شريط المسافة.
حسنًا.
إذن اضغط على شريط المسافة.
حسنًا.
يمكنني تحديدًا إيقاف البرنامج، بوضوح،
ولكن ما زال هذا البرنامج يعمل، من الناحية الفنية.
ولكن لمَ يعمل هذا؟
حسنًا، لاحظ أن هذا الموجود على الجانب الأيسر هو النص الأول.
عند النقر على العلم الأخضر، اضبط هذا المتغير الذي سميتُه muted "مكتوم الصوت" على خطأ.
إذا تمت تسميته x أو y أو z أو عداد، وإن كان أي من تلك
المسميات لا يعني شيئًا، لذا سمّيتُه muted "مكتوم الصوت".
وقمتُ بضبطه ليساوي الخطأ، والذي يعتبر، مجددًا، قيمة منطقية.
صح أو خطأ يعنيان فقط نعم أو لا.
باستمرار، إذا تم الضغط على شريط المسافة، فافعل ذلك.
إذا كان muted "مكتوم الصوت" خطأ حاليًا، فغيّر muted "مكتوم الصوت" إلى صح.
وإلا، غيّر muted "مكتوم الصوت" إلى خطأ.
لذا إذا كان muted "مكتوم الصوت" خطأ، فغيّره إلى صح.
إذا كان muted "مكتوم الصوت" صحيحًا، فغيّره إلى خطأ.
في أي وقت يقوم فيه الشخص بالضغط على شريط المسافة، قم بتحديث ذلك المتغير.
الآن، إذا نظرنا في النص الآخر، الذي يوجّه أسد البحر أيضًا،
ما الذي يقوم به؟
باستمرار، إذا كان المتغير muted "مكتوم الصوت" خطأ.
لذلك إذا لم يكن مكتوم الصوت.
إذا كان المتغير muted "مكتوم الصوت" خطأ فهذا يعني عدم كتم صوته.
ابدأ تشغيل صوت أسد البحر ومن ثم تخيل مرحبًا، مرحبًا، مرحبًا لمدة ثانيتين،
ثم انتظر لثانية أخرى.
ثم ما عليك إلا التكرار، التكرار، التكرار.
لكن إذا قمت بالتغيير وشريط المسافة مكتوم الصوت إلى صح،
فسوف يقول إذا ما كان مكتوم الصوت يعادل الخطأ، فهذا ليس كذلك.
لن أقوم بتشغيل صوت هذه المرة.
وبالتالي الآن، لدينا القدرة على دمج نصوص متعددة معًا
لتحقيق نتيجة أكثر تفاعلية.
وماذا عن هذا؟
عندما كنتُ طفلاً، ربما أكون قد لعبتُ في لعبة ماركو بولو الصيفية.
لعبة بسيطة رائعة.
لعبناها في حمام السباحة، لسببٍ ما، حيث
يتم تعصيب عيني شخص في حمام السباحة بأمانٍ شديد،
ثم يصيح قائلاً أو تصيح قائلةً ماركو.
ومن ثم، من المفترض أن يصيح جميع من حوله أو حولها قائلين بولو.
ومن ثم، فالشخص المعصوب العينين
يُفترض أن يطارد الأطفال الآخرين في حمام السباحة ثم يلحق بهم،
من ثم يصبحون مكانه.
لكن وبعبارة أخرى، فهذا يشبه آلية إرسال الإشارات.
يصيح أحدهم، ماركو وجميع الآخرين يستجيبون
لذلك البث لكلمة ماركو.
حسنًا، يتضح أننا نستطيع محاكاة هذا مع هاتين الدميتين.
هذا الفتى هنا-- لاحظوا أني سلطتُ الضوء على الدمية البرتقالية
نظرًا لوجود دمية زرقاء أخرى هناك.
النقوش المتحركة المنفصلة.
وهذه مجرد صور قمنا بتحميلها للعبة.
باستمرار، إذا تم الضغط على مفتاح المسافة، لذا إذا تم الضغط على شريط المسافة،
فقل ماركو لمدة ثانيتين ومن ثم قم ببث حدث.
وفي هذه الأثناء، يكون للدمية الزرقاء هنا كتلة بسيطة فائقة،
ولكن يختلف الأمر بشكل جذري عن تلك التي رأيناها.
فهو لا يبدأ عند النقر على العلم الأخضر.
إنه يبدأ فقط عندما يتلقى حدثًا.
لذا يتضح أن النقوش المتحركة وسكراتش لا يمكنها سماع أو رؤية
ما يقوله الطرف الآخر في فقاعات الحديث تلك.
يتوجب عليك استخدام تقنية أفضل، وهي
الكتلة الخاصة التي يُطلق عليها اسم بث، وهي
مثل تمرير ملاحظة رقميًا من نقش متحرك إلى آخر
يمكن للطرف الآخر قراءته أو تلقيه، إذا جاز التعبير.
لذلك فقط عندما يتلقى هذا الحدث، إذا جاز التعبير،
فهل ينطق بولو لمدة ثانيتين.
ومجددًا، ترسل الدمية البرتقالية تلك الرسالة السرية
فقط باستخدام قطعة اللغز الأخرى هذه.
قم ببث حدث، مثل تمرير ملاحظة لا يراها الشخص في الحقيقة.
لذا إذا ضغطتُ الآن على العلم الأخضر وضغطتُ على شريط المسافة، ستصيح الدمية البرتقالية قائلةً ماركو.
وتصيح الزرقاء قائلةً بولو ردًا عليها.
لكنّ لم يتم توقيت هاتين معًا.
وبدلاً من ذلك، سيسمع الفتى الأزرق باستخدام ما قاله البرتقالي،
مما يسمح للنقوش المتحركة المتعددة بالتواصل البيني فعليًا.
إذن كيف توصلنا لذلك؟
حسنًا، فلنتذكر أننا لدينا جميع الكتل البنائية هذه منذ لحظة.
أولاً، بدأنا فقط بالوظائف والشروط
والتعبيرات المنطقية والتكرارات الحلقية.
لقد أضفنا الآن إليها القدرة على تخزين المعلومات
في متغيرات ومؤشرات ترابط للقيام بأشياء متعددة في وقت واحد، ومن ثم، إذا كانت لديك
أشياء متعددة تحدث، أو أحداث، يمكنهم
الدخول فيها للتواصل بطريقة ما.
ولكن كتلة بنائية أخرى.
لذلك إذا أخذنا الآن خطوة للوراء وفكرنا في
الكيفية التي يمكننا بها القيام بوظائف خاصة بنا، ستصبح لدينا القطعة الأخيرة
من اللغز، إذا جاز التعبير.
دعوني أمضي قدمًا وأفعل هذا.
دعوني أمضي قدمًا وأقوم بإنشاء برنامج بسيط، عند اقتصاص العلم الأخضر،
يحاكي باستخدامه ببساطة سعال قط.
لذا لن يقول هذا القط مرحبًا، ولكن سيسعل لمدة ثانية واحدة.
ومن ثم سيمضي قدمًا وينتظر لمدة ثانية واحدة.
ومن ثم سأمضي قدمًا وأنسخ، وألصق، كما فعلت في السابق--
هذا هو أحد تلك الأمور التي يتم القيام بها كما أنطقها، وليس كما أفعلها-- لتنفيذ هذا البرنامج هنا،
حيث يسعل ثلاث مرات.
نحن نعلم بالفعل، بالرغم من ذلك، منذ وقت مبكر أن هذا ليس تصميمًا جيدًا.
لماذا؟
إنك تكرر نفسك.
لا تكرر نفسك.
DRY هو اختصار "لا تكرر نفسك"، بالفعل.
لا تكرر نفسك لأنك تقوم
ثلاث مرات بفعل شيء ما تحتاج إلى فعله مرة واحدة فقط.
كان الحل قبل ذلك، بالطبع، هو مجرد استخدام تكرار حلقي من نوع ما.
لذا دعوني بالفعل أُخرج ذلك.
دعوني أستخدم كتلة تكرار، وأغيّر 10 إلى ثلاثة،
ثم أستخدم اثنتين فقط من هذه الكتل.
ولاحظوا بالفعل، أن هذا البرنامج مضغوط أكثر من ذلك بكثير.
والآن، إذا كنتُ أريد تغيير الثلاثة إلى 30 أو إلى 10 أو أي عدد،
فسأغير فقط قيمة بسيطة واحدة.
لا يتوجب عليّ إعادة كتابة الأشياء أو نسخها ولصقها أو حذفها.
يمكنني تحديث البرنامج بصورة أسهل بكثير،
والآن، سيحدث نفس الشيء بمجرد أن أسعل، وأسعل، وأسعل.
ولكن يتضح أن الأمر قد يكون لطيفًا إذا تم التجرد من هذا من الآن فصاعدًا،
أليس كذلك؟
أنا فقط أريد أي برنامج أكتب عليه لأعرف كيف أسعل.
وفي الواقع السعال يصدر تحديدًا صوتًا ما، ربما
لعدة مرات.
ولكن يتضح أننا يمكننا تجريد هذا في التعليمة البرمجية.
دعوني أنتقل لأسفل إلى الكتل الخاصة بي هنا ويسمح لي هذا
بالنقر فوق هذا الزر--إنشاء كتلة.
ويسمح لي بالقيام بالوظيفة الخاصة بي.
وضعتُ نافذة الحوار هذه هنا.
وسأطلق بالتحديد على هذه الكتلة اسم سعال.
وسأمضي قدمًا وأنقر فوق موافق.
والآن، لدي هذه الكتلة الوردية الجديدة التي يمكن أن يكون بها كتل مندرجة تحتها.
وهل تعرف ما الذي سأقوم به؟
سأقوم بالمضي قدمًا وأفعل هذا.
سأمضي قدمًا وأقول سعال أسفل ذلك.
والآن، لاحظ على اليسار، لديّ الآن حق الوصول إلى هذه القطعة الوردية الجديدة.
يمكنني الآن وضع هذا هنا.
إذن الآن، بالرغم من ذلك، نعم، هذه هي الكيفية التي يتم تنفيذ السعال بها
على الجانب الأيسر هنا، في المرة التالية، عندما أكتب برنامجًا،
فما عليّ إلا أن أرغب في أن أطلق اسم سعال.
ولا أهتم بتفاصيل التنفيذ على المستوى الأقل هذه.
أنا لا أهتم بالحفل أو أي من ذلك.
أنا أريد فقط أن يكون هذا تجريدًا.
ولكن يمكنني القيام بأفضل من هذا، ألن يكون
لطيفًا لو أنني بدلاً من مجرد تكرار السعال ثلاث مرات،
فماذا لو قمت بجعل ذلك ميزة للسعال؟
لذا دعوني أقوم بهذا.
يمكنني المضي قدمًا والنقر بزر الماوس الأيمن فوق هذه القطعة الوردية ويمكنني تحريرها.
سيجلب ذلك نفس تلك النافذة التي ظهرت من قبل.
ونلاحظ هذا.
أضف مدخلاً.
إذن عندما أقوم بإنشاء كتلة مخصصة، فيمكنني في الواقع إنشاء كتل خيالية جميلة
تمامًا كتلك التي يقدمها لنا MIT مع البرنامج،
والآن، يمكنني تدوين شيء ما مثل n.
وإذا قمتُ بإضافة ملصق فقط لجعلها وصفية أكثر، فيمكنني فقط النطق لمرات.
إذن الآن، لقد أعددتُ قطعة لغز مخصصة خاصة
تقول سعال لعدة مرات، حيث n للعدد
هي فقط الانتقال للمتغير الذي يميل المبرمجون لاستخدامه.
إذن الآن، يمكنني بالفعل تحريك كتلة التكرار هذه في كتلة السعال نفسها،
ولكن بدلاً من الكود الثابت رقم 3، لاحظ هذا.
يمكنني استعارة هذا المتغير، والآن أقول سعال هذا العدد من المرات عن طريق
تكرار قول هذا مرارًا وتكرارًا.
والآن، عندما أسعل في برنامجي الفعلي، أقوم فقط بكتابة ثلاثة هنا.
لذلك لدي هذا التجريد الجميل الآن، إذا جاز التعبير.
قم بسعال هذا عدة مرات وأنا وليس أي شخص آخر في العالم
لا يحتاج مرة أخرى إلى الاهتمام بما يعني السعال لأننا بالفعل
نفذنا ذلك من قبل.
وهكذا فقط كما قدم معهد ماساتشوستس للتكنولوجيا لنا الكثير من الوظائف
التي لم يتعين علينا أنفسنا أنا نفكر فيها، بحيث يمكن
لي الآن جعل الوظائف التي لا يتيعن أن أفكر بشأنها.
وبينما نتقدم إلى لغات أعلى مستوى مثل C وJavaScript
وPython، وسنتابع هذه العملية، في بعض الأحيان
لحل المشكلات بأنفسنا عن طريق صنع قطع اللغز المعينة الخاصة بنا،
ولكن في كثير من الأحيان باستخدام أشياء تسمى المكتبات،
وهي رموز كتبها أشخاص آخرون قبلنا وهذا مفيد فقط لإنجاز المهمة،
مثلما فعل سكراتش هنا جزئياً لنا.
اسمحوا لي بالمضي قُدمًا، حينئذ، وجلب كل هذا
معًا عن طريق فتح هذا المثال الآخر هنا.
اسمحوا لي بالمُضي قُدمًا وفتح هذا، وهو شيء لم نراه،
لكنه نوع من لعبة تفاعلية مثل هذا عن طريق طالب سابق.
[MUSIC PLAYING]
هل من الممكن أن نحصل على تفاحة؟
نعم.
رسم متحرك صغير.
حسنًا.
لم تكن نهاية جيدة.
لنجرب مجددًا.
تشغيل مرة أخرى.
ولاحظ أن كتلة القول تعمل.
يوجد نوع من كتلة السؤال.
كان الطالب يتحقق ما إذا كان الشخص قد كتب نعم أو لا.
دعونا نكتب لا هذا المرة.
لا أريد تفاحة.
أوه.
كاب كيك.
حسنًا.
نعم.
إدخال.
حسنًا.
لا تفعل هذا.
حياة أخرى.
ها نحن ذا.
[MUSIC PLAYING]
حسنًا.
لا أريد تفاحة.
لا أريد كاب كيك.
متغير صغير.
[SCREAMING]
[LAUGHTER]
حسنًا.
إذًا فزت باللعبة.
في لحظاتنا الأخيرة هنا، دعوني أتابع وأفتح مثالًا أخيرًا.
كما تعلمون، لا تُقدم CS50 في جامعة هارفارد فقط، ولكن في جامعة ييل، أيضًا،
لذلك يبدو مناسبًا الإنهاء بملاحظة أن
تباري حرم جامعي ربما في مواجهة الآخر عن طريق لعبة أخرى
والتي كتبها طالب سابق وتسمى Ivy's Hardest Game.
ولكن لهذا، أعتقد أننا في حاجة لمتطوع أخير ليصعد إلى هنا.
حسنًا.
اليد الأولى.
هناك بالضبط.
تعال.
إذًا في أصعب ألعاب رابطة جامعات Ivy، إنها لعبة تُمارس بلوحة المفاتيح.
وعلى الرغم من أنها قد تبدو ذات زخم بدرجة قليلة للوهلة الأولى،
تمامًا مثلما كان أوسكار تايم وتمامًا مثل الرسم المتحركة،
نُدرك أنك إذا قمت بتفكيكه في عقلك مفكّرًا بشأن
ما عليه تلك الكتل الفردية، يمكنك من المحتمل
تخمين ما هي قطع اللغز.
مرحبًا.
ما اسمك؟
أندريا: مرحبًا.
أنا أندريا.
ديفيد مالان: أندريا.
ديفيد.
تشرفت بمقابلتك.
إليكِ لعبة Ivy's Hardest Game.
تضعك في مواجهة جميع كليات Ivy.
ثم بعد ذلك مباشرة سننتقل إلى الكاب كيك في جناح الكنيسة.
مستعدون؟
[MUSIC PLAYING]
[MUSIC - MC HAMMER, "U CAN'T TOUCH THIS"]
MC HAMMER: (غناء) لا يمكنك المساس بهذا.
لا يمكنك المساس بهذا.
ديفيد مالان: رائع.
[MUSIC - MC HAMMER, "U CAN'T TOUCH THIS"]
MC HAMMER: (غناء) لا يمكنك المساس بهذا.
خاصتي، خاصتي، خاصتي، خاصتي.
الموسيقى خاصتي تؤثر فيك بقوة.
تجعلني أقول، يا إلهي.
أشكرك على نعمة العقل لنظم قافية واثنين من أوزان الضجيج.
إنه شعور جيد عندما تعلم أنك سيئ.
أنا فتى من مدينة أوكتاون يبيع المخدرات.
وأنا مشهور على هذا النحو.
ولا يمكنك المساس بهذا الإيقاع.
أخبرتك، يا فتى، لا يمكنك المساس بهذا.
أجل.
إليك كيف نحيا وتعلم أنه لا يمكنك المساس بهذا.
انظر إلى عيني.
يا رجل، لا يمكنك المساس بهذا.
[APPLAUSE]
[MUSIC - MC HAMMER, "U CAN'T TOUCH THIS"]
(يغني) أحذية وسراويل جديدة.
ستحصل عليها والآن تعلم أنك تريد أن ترقص.
لذا انهض من على مقعدك وتعرف على حسناء
وجارِ هذا الإيقاع وهو يتردد.
انتظر.
ارتفع وانخفض قليلاً وعرفني أن الأمر يسير على هذا المنوال.
على هذا المنوال.
ضعيف في مهمة فاسحبه إذن للخلف.
دعهم يعرفون أنك مبالغ فيك ولا يمكنك المساس بهذا الإيقاع.
أنت، لقد أخبرتك، لايمكنك المساس بهذا.
لماذا تقف هناك يا رجل؟
لا يمكنك المساس بهذا.
أنت، رنّ الأجراس.
هنا المدرسة يا مغفل.
لا يمكنك المساس بهذا.
أعطني أغنية أو إيقاعًا.
تجعلهم يتعرقون.
هذا ما أحاول تقديمه لهم.
الآن هم يعرفون أنك عندما تتحدث عن هامر،
فأنت تتحدث عن عرض مزدحم وضخم.
المغنيون يتصببون عرقًا فأعطهم منديلاً أو شريطًا
لمعرفة ما سيحدث في التسعينات لرفع المبيعات.
ديفيد مالان: من المستوى الثاني للمستوى الأخير.
[MUSIC - MC HAMMER, "U CAN'T TOUCH THIS"]
MC HAMMER: (غناء) إما العمل الجاد أو قد تطرد.
كانت هذه كلمة لك لأنك تعرف أنك لا يمكنك المساس بهذا.
لا يمكنك المساس بهذا.
فسرها.
توقف.
إنه زمن هامر.
يقال، سر مع التيار.
إذا لم تتمكن من الاستمتاع بهذا، فأنت بالطبع ميت.
لذا لوح بيدك في الهواء.
قم ببعض الحركات.
مرر أصابعك عبر شعرك.
تحية للفائز.
ارقص على هذا الإيقاع، وستصبح أنحف.
تحرك.
حرك أردافك.
لدقيقة واحدة فقط، فلنقم جميعًا بالتمايل، التمايل، التمايل.
أجل.
لا يمكنك المساس بهذا.
انظر يا رجل.
لا يمكنك المساس بهذا.
من الأفضل أن تشعر بالضجيج يا فتى، لأنك تعرف--
[CROWD YELLING]
[MUSIC - MC HAMMER, "U CAN'T TOUCH THIS"]
(الغناء) فسرها.
ديفيد مالان: [INAUDIBLE]
أندريا: [INAUDIBLE]
ديفيد مالان: لا.
لا بأس.
[MUSIC - MC HAMMER, "U CAN'T TOUCH THIS"]
حياة أخرى.
[MUSIC - MC HAMMER, "U CAN'T TOUCH THIS"]
MC HAMMER: (SINGING) قف.
إنه زمن هامر.
ديفيد مالان: حسنًا.
صفقوا بحرارة لأندريا، إذا أمكن.
[APPLAUSE]
حسنًا.
هذا كل شيء عن CS50.
راجعوا موقع الويب للحصول على التفاصيل.
سنراكم في جناح الكنيسة لتناول الكعك.
مرحبًا بكم معنا.