Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Alaboudi1/176fe290b97ee59e7f8ae7b7a163bd00 to your computer and use it in GitHub Desktop.
Save Alaboudi1/176fe290b97ee59e7f8ae7b7a163bd00 to your computer and use it in GitHub Desktop.

الأساليب الخمس الصحيحة في تعلم البرمجة، رأي شخصي

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


ملاحظة ملاحظة: هذا المقال يعبر عن رأي شخصي ولا يعني بالضرورة أنه الرأي الصحيح.

1. تعلم البرمجة من الأعلى إلى الأسفل وليس العكس (top-down approach only ):

التعلم من الأعلى إلى الأسفل هي طريقة لتعلم المفاهيم الأساسية أولاً من دون الخوض في أي تفاصيل أخرى. حينما تعلمت البرمجة في المرة الأولى، أولى الدروس كانت تركز على شرح أن الأوامر البرمجية بلغة الجافا تتحول إلى بايت كود ومن ثم يتم تنفيذها من خلال ال JVM، لم أستفد أي شيء من تعلم هذه المعلومات في ذلك الوقت، بل في الحقيقية أنها أعطتني انطباع مبدئي أن البرمجة مملة ومعقدة، هذه الطريقة خاطئة لأنها لم تبدأ بالمفاهيم الأساسية في البرمجة بل بدأت بمفاهيم غير أساسية في تعليم البرمجة، يشار لهذه الطريقة وما شابهاها بطريقة التعليم من الأسفل إلى الأعلى (bottom-up approach). الطريقة الصحيحة في نظري وهي كما أشرت سابقاً تسمى من الأعلى إلى الأسفل تكون بالقيام بشرح كيفية كتابة برنامج بسيط أولاً، ومن ثم يتم شرح كيفية تحويل هذا البرنامج إلى بايت كود، وليس العكس كما تم تعليمي.

2. تعلم البرمجية يكون من خلال أمثلة سهلة ولها معنى واضح:

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

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

3. تعلم البرمجة من خلال عدة لغات وعدة نماذج برمجية(paradigms):

من المؤسف أنه خلال دراستي للمرحلة الجامعية والماجستير كان جُل المناهج الدراسية تركز على تدريس البرمجة باستخدام لغة واحدة وهي الجافا وبنموذج واحد وهو البرمجية الشيئية (Object Oriented Paradigm) لا أقول هنا أن لغة الجافا ليست بالجيدة أو أن البرمجية الشيئية غير مؤهلة بأن تدرس في الجامعات، لكن ما أريد إيصاله أنه يجب أن يُعلم الطالب كيف ينظر للحلول والمشاكل البرمجية بعدة زوايا وبعدة خيارات وليس بطريقة واحدة وبلغة برمجية واحدة. كنت أتمنى مثلا أن يتم تدريس مدخل البرمجة باستخدام لغة برمجية ذات تصميم سهل للمبتدئين مثل لغة بايثون أو جافا سكربت، ومن ثم تدريسي البرمجية الشيئية وتراكيب البيانات باستخدام الجافا، وأخير إضافة مادة برمجية تقوم بتعليم البرمجية الوظيفية (Functional Paradigm) باستخدام لغة Haskell.

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

4. البرمجة يجب أن تكون المحور التعليمي وليس جزء منه:

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

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

5. تعلم البرمجة يجب أن يكون بالطريقة الصحيحة من البداية:

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

في الختام أتمنى أنه تم تغطية الموضوع بشكل واضح وسلس، إن أصبت فمن الله وإن أخطأت فمن نفسي والشيطان. أتمنى أن تشاركنا رأيك في الموضوع.

كتبها: عبدالعزيز سعد العبودي.

عضو هيئة التدريس في جامعة الملك سعود، قسم هندسة البرمجيات.

10 رجب

@brmgha
Copy link

brmgha commented Dec 24, 2022

مقال رائع احاول اتباع هذا المفهوم لتدريس برمجة بايثون في موقعي

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment