هل يجب أن نعلم المؤشرات في دورة "أساسيات البرمجة"؟

StackOverflow https://stackoverflow.com/questions/660538

  •  20-08-2019
  •  | 
  •  

سؤال

سأقوم بتدريس دورة حول أساسيات البرمجة في الخريف المقبل ، دورة علوم الكمبيوتر في السنة الأولى. ما هي إيجابيات وسلبيات تدريس المؤشرات في مثل هذه الدورة؟ (موقفي: يجب تعليمهم).

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

قرار نهائي: على الأقل تشير ، ولكن ربما مؤشرات دون حساب المؤشر.

هل كانت مفيدة؟

المحلول

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

نصائح أخرى

نعم.

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

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

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

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

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

خلال الفصل الدراسي الثاني ، أخذت الدورة التالية في السلسلة ، التي كانت حول C ، واعتمدت هذه الفئة اعتمادًا كبيرًا على مؤشرات.

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

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

الايجابيات: فهم قوي للطريقة التي يتم بها استخدام الذاكرة من قبل الجهاز ، والفرق بين (ومخاطر) المؤشرات على البيانات على الكومة مقابل المؤشرات للبيانات على المكدس ، وطرق التمرير حسب العنوان ، إلخ.

سلبيات: معقدة بالنسبة للجمهور الذي لم يتم دراية به بعد (أو لم يكن لديه وقت كاف لاستيعاب مفاهيم) بنية الكمبيوتر ، بما في ذلك ما هو المكدس ، ما هي السجلات ، اتفاقيات الاتصال ، إلخ.

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

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

أعتقد أنه لا ينبغي عليك تعلم ذلك أول. ولكن في وقت لاحق ، بمجرد الحصول على المفاهيم الأساسية للبرمجة.

مثال جيد هو كتاب Stroustrup الأخير: البرمجة - المبادئ والممارسة باستخدام C ++ حيث يعلم كيفية صنع محلل ، استخدام I/O (تيارات) واستخدام واجهة المستخدم الرسومية قبل الحديث عن المؤشرات!

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

يعتمد الأمر حقًا على هدف الدورة التدريبية الخاصة بك - تعليم البرمجة وتعليم علوم الكمبيوتر هدفين منفصلين ، وعلى الرغم من أنهما ليسا حصريين بشكل متبادل ، إلا أن الفصول التمهيدية لا تعلّم بشكل جيد على حد سواء. إليك مثال على الفرق: قل أننا نريد أن نتعلم كيفية فرز القائمة. ستعلمك دورة البرمجة في C ++ استخدام بناء جملة قالب وظيفة STD :: ، وقد تكتب الواجبات المنزلية العديد من المقارنة. ستشرح لك دورة علوم الكمبيوتر ما هو نوع الدمج ، وما تبدو عليه الخوارزمية في الرمز الزائفة ، وخصائص أدائها/المساحة ، والواجبات المنزلية ستكتب وظيفة الفرز نفسها.

لذلك إذا كنت تقوم بتدريس البرمجة التمهيدية ، فعندئذ ، يجب عليك تعليم طلابك عن المؤشرات.

إذا كنت تقوم بتدريس علوم الكمبيوتر ، فلا توجد حاجة لفهم المؤشرات على مستوى تمهيدي.

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

هذا لا يعني أن أساسيات دورة البرمجة يجب أن تكون تدريس مؤشرات.

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

أعتقد أن هناك الكثير مما يمكن قوله من خلال بدء الأشخاص بلغة واحدة فقط ، بدلاً من محاولة تغطية كل نمط من اللغة في وقت واحد.

استخدمت أول دورة لبرمجة التمهيدي هاسكل. لم يكن حتى دورة لاحقة باستخدام C تم تقديم المؤشرات (كنت بالفعل مبرمج جيد C و C ++ عندما أخذت الدورة ؛ كانت تلك الموضوعات إلزامية).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top