سؤال

أنا على وشك أن أبدأ (مع زملائه المبرمجين) البرمجة & خوارزميات النادي في مدرستي الثانوية.اللغة المفضلة هي C++ - آسف على ذلك, لا أستطيع تغيير هذا.يمكننا أن نفترض الطلاب لديهم أي خبرة في المواضيع المذكورة.

ما هي برأيك أهم المفاهيم الأساسية التي يجب التركيز عليها ؟

أنا أعرف أن التعليم شيء بالفعل من الواضح بالنسبة لي ليست مهمة سهلة.وأنا أدرك أن أول اجتماع وينبغي إيلاء الاهتمام الشديد - عدم تخويف الطلاب بعيدا - ومن ثم أنا أسألك.

تحرير: لاحظت أنه ربما الفرق الرئيسي بين المبرمجين المبتدئين هو "مبرمج طريقة التفكير" - أعني تصور المشاكل ، تعلم الخوارزميات.أنا أعلم أنه فقط من الناحية العملية ، ولكن هل تعرف أي نوع من التمارين/المفاهيم/الأشياء التي يمكن أن تحفز التنمية في هذا المجال ؟

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

المحلول

جعل البرمجة متعة!

من الممكن ان نتحدث عنه سيكون برمجة المسابقات إما أن النادي قد عقد نفسها أو أنها يمكن أن تدخل في محليا.لقد تنافس في مسابقات البرمجة في جامعة (ACM) المستوى وأنا أعرف حقيقة أن لديهم مستويات أقل أيضا.

هذه الأحداث يمكن حقا استخلاص بعض روح المنافسة وتقديم أعضاء نادي أقرب.

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

من الناحية الفعلية المواضيع الذهاب على أن يتم برمجة/خوارزمية ذات الصلة ، أود أن أقترح مجموعة تحاول بعض من هذه مشاكل البرمجة في برمجة المنافسة التمهيدي "البرمجة التحديات": رابط الأمازون

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

  • أكوام
  • طوابير
  • القواميس
  • الأشجار
  • الخ

معظم المشاكل في C++.

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

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

نصائح أخرى

كسر

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

"من أعلى إلى أسفل" النهج قد تساعد مع هذا المفهوم.عليك أن تبدأ من خلال خلق سيد وظيفة البرنامج مثل

filterItemsByCriteria();

لا يوجد لديك فكرة عن كيفية هذا العمل ، لذا كسرها نزولا إلى مزيد من الخطوات التالية:

(ملاحظة:أنا لا أعرف C++, لذلك هذا هو فقط عام سبيل المثال)

filterItemsByCritera() {
  makeCriteriaList();
  lookAtItems();
  removeNonMatchingItems();
}

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

انها نوع من مثل لعبة لعب الأطفال حيث أنهم يتساءلون "لماذا ؟" بعد كل ما اقول الا عليك أن تبقي تسأل "كيف؟"

القوائم المتصلة - كلاسيكي مقابلة السؤال ، لسبب وجيه.

وأود أن محاولة العمل مع ج فرعية, و لا تحاول أن تبدأ مع OO الأشياء.التي يمكن إدخالها بعد فهم بعض الأساسيات.

تحيات!

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

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

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

بوصفها جانبا ، أود أن النظر في "اللغة-الملحد" التوجه للنادي.تشجيع الأطفال على استكشاف لغات مختلفة و المنصات.

بالتوفيق عمل رائع!

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

أود أن أقول لا تذهب إلى خوارزمية سريعة جدا للمبتدئين ، والسماح لهم اللعب مع C++ الأولى.

شخص ما ذكر أعلاه ، "جعل البرمجة متعة".ومن المثير للاهتمام أن الناس اليوم لا تعلم لأجل التعلم.معظم الناس يريدون الإشباع الفوري.

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

  • لدي برنامج التخمينات في رقم بين 0 و 100.
  • يكون لهم جعل بلاك جاك استنساخ ...وقد فعلت هذا في الأساسية :-(

جعل ورقة التعليمات.

  1. شرح "البيض المقلي" القصة.نسأل السمعية ما يريدون فعله جعل أنفسهم البيض المقلي.جعلها ملاحظة الخطوة يفكرون.على الأرجح سوف تتلقى أقل من 5 خطوات الخوارزمية.ثم شرح لهم كيف العديد من الخطوات يجب أن تكون مكتوبة أسفل إذا كنا نريد أن تعليم الكمبيوتر قلي البيض.شيء من هذا القبيل:
1) Go to the Fridge 
2) Open the fridge door 
3) Search for eggs 
4) If there are no eggs - go to the shop to buy eggs ( this is another function ;) ) 
5) If there are eggs - calculate how many do you need to fry 
6) Close the fridge door 
7) e.t.c. :)
  1. نبدأ مع أساسيات ج - جملة دلالات هـ.t.ج ، وبالتوازي مع ذلك شرح الأساسية جدا خوارزميات مثل فقاعة نوع.
  2. بعد السمعية هو مألوف مع البرمجة المهيكلة (هذا يمكن أن يستغرق عدة أسابيع أو أشهر, اعتمادا على كيفية غالبا ما كنت جعل الدروس) ، يمكنك التقدم إلى C++ و OOP.

المحتوى في Deitel&Deitel C++ البرمجة مقدمة الكريم و تمارين مقترحة في نهاية كل فصل هي لعبة لطيفة المشاكل.

أساسا أنت تتحدث عن:- هياكل المراقبة - وظائف - المصفوفات - مؤشرات و السلاسل

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

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

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

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

ثم إضافة تعقيد من هناك (القوائم المتصلة, ملفات io, الحصول على مدخلات المستخدم ، إلخ).

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

المنظمة البحرية الدولية ، Big-O هو واحد من أهم المفاهيم بداية المبرمجين للتعلم.

يكون التصحيح المسابقة.تقديم نماذج التعليمات البرمجية التي تشمل الخلل.مسابقة لمعرفة من الذي يمكن أن تجد أكثر أو أسرع.

هناك كتاب ممتاز, كيف لا البرنامج في C++, التي يمكن استخدامها لبدء مع.

تتعلم دائما أفضل من الأخطاء و أنا أفضل أن نتعلم من بعض آخر.

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

بالإضافة إلى إجابات هذا السؤال, هناك بعض المواضيع الهامة لتغطية.هنا مثال على كيف يمكن أن هيكل الدروس.

الدرس الأول:مصطلحات الجملة

المصطلحات لتغطية:متغير, مشغل حلقة (التكرار), طريقة, كلمة محجوزة نوع البيانات الدرجة

بناء الجملة من أجل تغطية:المهمة العملية ، إذا/إذن/آخر حلقة ، في حين حلقة ، حدد الإدخال/الإخراج

الدرس الثاني:الخوارزمية الأساسية البناء

تغطية بعض خوارزميات بسيطة ، التي تنطوي على بعض المدخلات ، ربما أو حلقة في حين.

الدرس الثالث:أكثر خوارزمية متقدمة المواضيع

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

الدرس:فريق المشروع

جعل المشروع الذي المجموعات يمكن أن تتورط في القيام.

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

شبة الكود يجب أن يكون أول.

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

شكرا على الردود الخاصة بك!

و كيف نعلمهم الفعلية المشكلة حل ؟

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

أفترض انها فقط بسبب ضعف عملية التعلم كانوا في طريقهم من خلال.في العلوم - الرياضيات على سبيل المثال - فهي حقا رائعة.

فقط لأنك على دراية خوارزميات لا يعني أنك يمكن تنفيذها فقط لأنه يمكنك البرنامج لا يعني يمكنك تنفيذ خوارزمية.

بداية بسيطة مع كل موضوع (الحفاظ على البرمجة منفصلة من تصميم خوارزميات).بمجرد التعامل مع كل ببطء البدء في تحقيق المفهومين معا.

نجاح باهر.C++ هي واحدة من أسوأ اللغات التي تبدأ من حيث كمية لا علاقة لها حماقة تحتاج إلى الحصول على أي العامل (جافا سيكون أسوأ قليلا, أعتقد).

عند تعليم المبتدئين في النمطي الثقيلة البيئة أنه من المعتاد أن تبدأ مع "هنا بسيطة ج البرنامج.سوف نناقش ما كل هذا الهراء في الجزء العلوي من ملف في وقت لاحق, ولكن الآن التركيز على الخطوط بين 'int main(void)' و 'العودة' البيان الذي هو فيه كل مفيد العمل الذي تم إنجازه".

بمجرد تجاوزنا هذه النقطة ، المفاهيم الأساسية لتغطية تشمل هياكل البيانات الأساسية (المصفوفات, القوائم المتصلة, الأشجار, و القواميس) و الأساسية الخوارزميات (الفرز والبحث ، إلخ).

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

أما اللغة المختارة - تهانينا - ستجد C++ هي غنية جدا في صنع تعتقد الرياضية اختصارات الملايين من الطرق لجعل الكود الخاص بك أداء أفضل (أو لتنفيذ الهوى أنماط).

على السؤال:عندما كنت في بيجينينج إلى برنامج أنا دائما في محاولة لكسر أحد الحياة الحقيقية المشكلة إلى عدة خطوات ثم كما أرى تشابه بين المهام أو البيانات وتحويل أنا دائما في محاولة للعثور على كسلا, أسهل, meanier طريقة لتنفيذ ذلك.

الأناقة جاء بعد عندما أنماط التعلم الحقيقي الخوارزميات.

هانك:يا كبير???هل تقصد بداية المبرمجين أن رمز O(n^2) و لك من n log n ؟ ؟

أنا يمكن أن نرى عدد قليل من الطرق المختلفة لاتخاذ هذا:

1) البرمجة الأساسية بناء كتل.ما هي العبارات الشرطية ، على سبيل المثالالتبديل إذا/آخر ؟ ما هي تكرار البيانات ، على سبيل المثالو حين الحلقات ؟ كيف يمكننا الجمع بين هذه للحصول على البرنامج إلى تسلسل الخطوات نريد ؟ يمكنك أن تأخذ شيئا سهلا كما هو إضافة ما يصل فاتورة البقالة أو تحويل درجات الحرارة أو مسافات من المقياس إلى الإمبراطورية أو العكس بالعكس.ما هي المتغير الأساسي أنواع مثل string, integer, أو الضعف ؟ أيضا هنا هل يمكن أن يكون الجبر البولي متقدمة فكرة أو ربما تعلم كيفية القيام بعملية حسابية في قاعدة 2 أو 16 والتي قد تجد بعض الناس سهل وغيرهم من الصعب العثور على.

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

3) تجميع وتشغيل مرة العناصر.ما هو مكدس الاستدعاءات?ما هو المكان ؟ كيف يتم التعامل مع الذاكرة لتشغيل البرنامج مثلارمز قطع البيانات القطع ؟ كيف يمكننا فتح والتعامل مع الملفات ؟ ما هو تجميع و ربط ؟ ما جعل الملفات ؟ بعض من هذا هو بسيط ، لكنه يمكن أيضا فتح العين فقط لمعرفة كيفية عمل الأشياء التي قد تكون ما النادي يغطي معظم الوقت.

هذه القادم 2 هي إلى حد ما أكثر صعوبة ولكن يمكن أن يكون متعة:

4) مناقشة الأفكار المختلفة وراء خوارزميات مثل:1) فرق تسد, 2) البرمجة الديناميكية, 3) القوة الغاشمة ، 4) إنشاء بنية البيانات ، 5) الحد من مشكلة مشابهة حلها بالفعل على سبيل المثال أرقام فيبوناتشي هو كلاسيكي العودية المشكلة لإعطاء بداية المبرمجين ، 6) فكرة أن تكون ، "الجشع" مثل في صنع التغيير على سبيل المثال إذا كنت في بلد حيث عملة الطوائف حيث أ ، ب ، ج.هل يمكن أيضا الحصول على بعض البياني نظرية أمثلة مثل الحد الأدنى الوزن شجرة الامتداد إذا كنت تريد شيئا غريبة نوعا ما ، أو الباعة المتجولين على شيء يمكن أن يكون من السهل أن تصف ولكن الألم إلى حل.

5) وظائف حسابية.كيف يمكنك البرنامج مضروب ، التي هي نتاج جميع الأرقام من 1 إلى n ؟ كيف يمكنك حساب المبالغ من مختلف حسابية أو هندسية السلسلة ؟ أو حساب عدد المجموعات أو التباديل r عناصر من مجموعة من ن ؟ بالنظر إلى مجموعة من النقاط ، التقريبية متعدد الحدود التي تلبي هذا الشرط ، مثلفي 2-الأبعاد الطائرة يسمى x و y يمكنك أن تعطي 2 نقطة و يكون الناس على معرفة ما هي المنحدر و y اعتراض إذا كان لديك حل أزواج من المعادلات الخطية بالفعل.

6) القوائم التي يمكن تنفيذها باستخدام القوائم المرتبطة والمصفوفات.الذي هو أفضل لمختلف الحالات ؟ كيف يمكنك تنفيذ المهام الأساسية مثل insert, delete, اكتشاف, و النوع ؟

7) مجردة هياكل البيانات.ما هي المكدسات و الطوابير?كيف يمكنك بناء و اختبار الطبقات ؟

8) مؤشرات.هذا يؤدي فقط إلى كميات ضخمة من المواضيع مثل كيفية تخصيص/دي-تخصيص الذاكرة, ما هو تسرب للذاكرة

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

يمكنكم بناء TinyPIM المشروع من "المكتبة القياسية C++ من الصفر"و من ثم عندما يعمل ، البدء في تصميم التمديدات الخاصة بك الخاصة.

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