Jannah Theme License is not validated, Go to the theme options page to validate the license, You need a single license for each domain name.
التعليم الإلكتروني

كتب منظمة العفو الدولية كود جافا سكريبت بالنسبة لي


“حلم داخل حلم” – إدغار آلن بو

هل تعتقد أن الذكاء الاصطناعي (AI ، مثل ChatGPT) قادر على كتابة كود JavaScript لنا لنسخه ولصقه في مشغل Storyline؟ هل أنت مستعد للعمل مع مساعد AI؟ أدعوك للسفر معي إلى GPT-land. على وجه التحديد ، سنطلب من ChatGPT من OpenAI التظاهر بكونه مطور تعليم إلكتروني حائز على جوائز يعرف Articulate Storyline و JavaScript ويمكنه مساعدتنا في كتابة كود JavaScript (بينما نتظاهر بعدم معرفة JavaScript) [1].

مشكلة الأعمال في التعليم الإلكتروني

لنفترض أننا نريد فرز أسماء اللاعبين حسب درجاتهم. لدينا 10 متغيرات نصية ، تسمى player1، player2، player3وما إلى ذلك ودرجاتهم ، النتيجة 1 ، النتيجة 2 ، النتيجة 3، إلخ. نريد أن يقوم AI ChatGPT (الذي يطلق على نفسه داخليًا “المساعد” ، راجع للشغل) بكتابة شفرة JavaScript لفرز اللاعبين حسب درجاتهم ، حتى نتمكن من نسخها ولصقها في مشغل في Storyline. أخيرًا ، سنعرض “أفضل خمسة” لاعبين تم فرزهم ونتائجهم على الشاشة.

يمكنك المتابعة عن طريق تنزيل ملف Articulate Storyline المصدر ونسخ رمز المساعد ولصقه في المشغل الخاص بك لاختباره بنفسك. لقد أضفت الأساسيات في ملف .story ، بحيث يمكنك التركيز فقط على المشغل نفسه. يتضمن ملف .story أيضًا شريحة حل مع الكود النهائي ، ولكن لا تنظر إليها حتى نهاية هذه المقالة [2]!

دعونا رئيس المساعد

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

محرج. يعرف المساعد كيف تعمل المشغلات في Storyline. يعطي تعليمات محددة حول ما يجب القيام به. دعنا نرى ما إذا كان بإمكان مساعد AI كتابة كود JavaScript لحل المشكلة لنا.

يبدو أن الخطوات منطقية (مرة أخرى ، نتظاهر بعدم معرفة JavaScript). لكن ماذا عن الكود؟

انسخ الكود التالي إلى مشغل Storyline الخاص بك وقم بتشغيل الدورة التدريبية (لقد استخدمت 10 متغيرات فقط لتسهيل الأمر بدلاً من 20):

/ حلقة من خلال 20 درجة ومتغيرات اللاعب

لـ (var i = 1 ؛ i <= 10 ؛ i ++) {

درجة فار = “النتيجة” + أنا ؛

var player = “player” + i ؛

// تحقق مما إذا كانت النتيجة الحالية أكبر من 0

إذا (التقييم (النتيجة)> 0) {

// أضف اللاعب والنتيجة إلى مجموعة SortedPlayers

SortedPlayers.push ({

الاسم: EVAL (لاعب) ،

النتيجة: تقييم (الدرجة)

}) ؛

}

}

// قم بترتيب مجموعة اللاعبين التي تم فرزها بترتيب تنازلي بناءً على درجة اللاعب

SortedPlayers.sort (الوظيفة (أ ، ب) {

إرجاع b.score – a.score ؛

}) ؛

// التكرار خلال أفضل 5 لاعبين في مصفوفة اللاعبين التي تم فرزها

لـ (var i = 0 ؛ i <5 ؛ i ++) {

var player = SortedPlayers[i]؛

// استخدم الميزات المضمنة في Storyline لعرض اسم اللاعب والنتيجة على الشريحة

playerName.text = player.name ؛

playerScore.text = player.score ؛

}

هل القانون يعمل؟

هل من عمل لك؟ ليس لي. نحن بحاجة إلى استكشاف الأخطاء وإصلاحها. افتح المفتش (Ctrl + Shift + I في Chrome) لمعرفة المشكلات. عندما أنقر فوق الزر “فرز” ، يعرض المتصفح خطأً: “player1 غير معرّف.” دعنا نسأل المساعد عن كيفية إصلاحه.

تعتبر إجابة المساعد منطقية بشكل عام ، لكنها تُظهر شيئين بوضوح: أ) لا يفهم كيف تعمل الحلقة بالفعل ، و ب) لا يفهم أن JavaScript بحاجة إلى GetPlayer () للوصول إلى المتغيرات في Storyline. إذا لم نعرف حقًا أي شيء عن JavaScript و Storyline ، فسنكون عالقين في هذه المرحلة. لذلك “خرجت من شخصيتي” وساعدت مساعد الذكاء الاصطناعي في كتابة كود JavaScript قليلاً.

يُحسب للمساعد أنه يعرف هذه المعلومات الهامة ؛ لقد تجاهله فقط. ها! قامت بمراجعة الكود السابق لتشمل الخط الحرج. يمكنك نسخ الكود ولصقه في المشغل ، والكتابة فوق الجزء العلوي من الكود.

// احصل على كائن اللاعب

var player = GetPlayer () ؛

// التكرار خلال 10 نقاط ومتغيرات اللاعب

لـ (var i = 1 ؛ i <= 10 ؛ i ++) {

// استخدم طريقة GetVar () للحصول على قيمة متغير “الدرجة” + i

فار نقاط = player.GetVar (“النتيجة” + أنا) ؛

// استخدم طريقة GetVar () للحصول على قيمة المتغير “player” + i

var player = player.GetVar (“player” + i) ؛

// تحقق مما إذا كانت النتيجة الحالية أكبر من 0

إذا (النتيجة> 0) {

// أضف اللاعب والنتيجة إلى مجموعة SortedPlayers

SortedPlayers.push ({

الاسم: لاعب ،

النتيجة: النتيجة

}) ؛

}

}

// قم بترتيب مجموعة اللاعبين التي تم فرزها بترتيب تنازلي بناءً على درجة اللاعب

SortedPlayers.sort (الوظيفة (أ ، ب) {

إرجاع b.score – a.score ؛

}) ؛

// التكرار خلال أفضل 5 لاعبين في مصفوفة اللاعبين التي تم فرزها

لـ (var i = 0 ؛ i <5 ؛ i ++) {

var player = SortedPlayers[i]؛

// استخدم الميزات المضمنة في Storyline لعرض اسم اللاعب والنتيجة على الشريحة

playerName.text = player.name ؛

playerScore.text = player.score ؛

}

المزيد من استكشاف الأخطاء وإصلاحها

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

var SortedPlayers = []؛

بمجرد إضافة هذا السطر إلى الجزء العلوي من المشغل الخاص بك ، فإنه يتوقف عن الشكوى من “SortedPlayers”. تابعت ذلك بسؤال المساعد عن سبب عدم تضمينه لهذه الأسطر الحاسمة ، لأنه كان على ما يبدو مدركًا لحقيقة أننا بحاجة إليها. كان الجواب نوعًا من الاعتذار ، ولكنه كان أيضًا نوعًا من إلقاء اللوم عليَّ لأنني لم أكون أوضح. لنكمل! بالنظر إلى آخر سطرين من التعليمات البرمجية في الجزء السفلي ، لم يكن لدي أي فكرة عما كان يفكر فيه المساعد … لذلك طلبت منه الشرح.

وهنا بدأت أتساءل عن مقدار “تقليد” الواقع المحض دون تطبيق أي قواعد حقيقية. قام مساعد AI بمراجعة وكتابة كود JavaScript بسرعة لقراءة:

AI Wrote JavaScript Code - استكشاف الأخطاء وإصلاحها

اسمحوا لي أن أشرح ما أعنيه بـ “تقليد” الواقع ، دون الوقوع في أعشاب البرمجة.

مشكلة متغير “اللاعب”

لا يزال القانون المنقح لا يعمل. لديها عيب كبير. لماذا؟ نظرًا لأن لديك متغير “player” تم الإعلان عنه مقدمًا (نسميه متغيرًا عامًا) ، يمثل كائن Storyline. باختصار ، متغير “player” الأصلي هو ما استخدمناه للحصول على متغيرات Storyline وتعيينها. انه يعمل انها تعمل. وهكذا ، في البداية ، تعمل وظائف player.GetVar () و player.SetVar () بشكل جيد. مرة أخرى ، يمثل متغير “player” كائن Storyline.

… حتى تحصل على الرمز في الأسفل. لماذا؟ لأن “var player = SortedPlayers[i]”يعيد السطر تعريف متغير المشغل الأصلي. بمعنى آخر ، بينما حتى هذه النقطة ، كان لدى” player “وظيفتي GetVar () و SetVar () ، استخدم مساعدنا نفس اسم المتغير (” player “) مرة أخرى وضبطه على لاعبين. في تلك اللحظة ، فقدنا متغير “player” الأصلي. وهكذا ، فإن هذا “اللاعب” الجديد لديه “اسم” و “نتيجة” ولكن لم يعد هناك SetVar () أو GetVar (). نوع مختلف من المتغيرات.

الآن ، يمكن أن يكون هذا مجرد “خطأ مطبعي” في رمز مبرمج بشري مهمل (لن أوظفه). لذلك أردت التحقق من ذلك مع المساعد. هل يفهم أنه لا يمكنه استخدام اسم المتغير “player” مرة أخرى؟

احلم احلام

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

كتب منظمة العفو الدولية كود JavaScript - حلم داخل الحلم

التفسير صلب. يفحص. يتفق معي في إعادة التسمية. لقد أعادت تسمية متغير المشغل إلى “curent_player”. لكن مرة أخرى ، لا يفهم المساعد أنه قد أدخل مشكلة جديدة. كان يجب أن يحتفظ بـ “player.SetVar” كـ “player.SetVar.” بإعادة تسمية جميع الكلمات “player” إلى “current_player” ، فإن الكود ينكسر مرة أخرى لأن “current_player” لا يحتوي على وظيفة SetVar. هذا هو الكود الذي كان يجب أن يعطيه لي ، إذا كان يفهم حقًا JavaScript و Storyline:

// التكرار خلال أفضل 5 لاعبين في مصفوفة اللاعبين التي تم فرزها

لـ (var i = 0 ؛ i <5 ؛ i ++) {

var current_player = SortedPlayers[i]؛

// استخدم طريقة SetVar () لتعيين قيمة متغير Storyline

player.SetVar (“playerName”، current_player.name) ؛

player.SetVar (“playerScore”، current_player.score) ؛

}

المشكلة النهائية

الآن ، هناك أيضًا مشكلة مفاهيمية في هذا الرمز. إنه يتكرر عبر أفضل خمسة أسماء وعشرات كما طلبنا. ومع ذلك ، نظرًا لأنه يحافظ على تعيين نفس متغيرات Storyline ، “playerName” و “playerScore” في الحلقة ، فإنه يستمر في الكتابة فوقها. سترى القيمة الخامسة فقط على الشاشة إذا كنت تريد عرض “playerName” و “playerScore”. لماذا؟ لأنه يقوم بتعيين “playerName” على اسم اللاعب الأعلى ، ثم يقوم بتعيين نفس “playerName” على اسم اللاعب الثاني والثالث والرابع والخامس. إنه سريع جدًا ، لذا ستلاحظ فقط القيمة الأخيرة ، الخامسة.

من أجل الحفاظ على أفضل خمسة لاعبين وأعلى الدرجات ، تحتاج إلى تخزين هذه القيم في متغيرات مختلفة في قصة القصة. لهذا السبب صنعت topPlayer1و topPlayer2، وما إلى ذلك ، و أعلىو توبسكور 2، وما إلى ذلك في مثال ملف .story. إذا كنت تعرف JavaScript ، يمكنك محاولة إصلاحه. ستجد الحل في شريحة “الحل” في نموذج الملف.

استنتاج

بشكل عام ، يسترجع ChatGPT حجمًا مذهلاً من المعلومات. حقيقة أنه يمكن أن يشرح عرضًا كيفية استخدام Storyline ، ويبدو أنه يمكنه كتابة كود JavaScript بسهولة ، هي لمحة عن المستقبل. ومع ذلك ، فإن هذا المستقبل هو حلم حتى الآن. واقعي تمامًا ، لكنه لا يزال حلماً. عندما تهتم بالتفاصيل عن كثب ، فإنك تدرك أنك في حلم داخل حلم. عالم أحلام المساعد. لا تصدق كل ما تراه ، ولكن استعد ، لأن طريقة عملك وإنجاز المهام في L&D لن تكون هي نفسها …

Quoth the Raven: “أبدا”.

موارد:

[1] https://chat.openai.com/chat

[2] مصدر الملف

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى