Мене викладали на C ++ у середній школі як першу мову програмування, хоча це було більше схоже на "C +", тепер, коли ви це згадуєте; ми використовували cout
для запису тексту до консолі та файлів, але також досить багато функцій C (це getch()
було моїм улюбленим).
Я думаю, що найефективнішим (і, можливо, цікавим) способом викладання основ є використання цільової навчальної програми: почніть із показу, як виводити матеріали, потім клавіатури, потім просто введення / виведення файлів тощо. Перехід до простого тексту - заснована гра (або еквівалент робототехніки). Потім, коли вони запитують: "Як мені зробити X?", Ви можете розділити X на приклади, які вони вже бачили, наприклад "Спочатку вам потрібно буде отримати дані від користувача, як ми це зробили в Z, потім ... "(очевидно, що це не так просто на практиці, оскільки X, ймовірно, буде щось, для чого їм потрібні додаткові знання, наприклад," 3D-графіка ", але ви все одно можете пояснити, як це буде працювати на високому рівні спосіб).
Приклади, які ви їх показуєте, починатимуться як магія, вставлена в чорну скриньку, таємниці якої розгадуються, коли поступово з'ясовуються фрагменти головоломки програмування. Наприклад, ваші студенти вивчать основи if
s досить швидко, але, ймовірно, не зрозуміють, що булевий вираз не обмежується виключно використанням в умовах if
's (що веде до класичногоif (blah) return true; else return false;
коду).
Тонкості того, чи ви вибираєте масив чи вектор як контейнер, спочатку здаватимуться студентам неактуальними. Вектор / масив буде просто способом наявності безлічі змінних як однієї змінної, доступних через індекс. Дотримуйтесь того, де можете. Покажчики не будуть зрозумілі й пізніше. Це не означає, що ви не повинні пояснювати речі; просто, що ви не можете все пояснити відразу, і речі, які ви пояснюєте, не будуть повністю поглинені. Люди навчаються органічно, а не лінійно. Я використовував cout
пару років перш ніж я правильно зрозумів, що таке перевантаження оператора!
О, і не бійтеся повторення. "Це як програма Hello World, яку ми зробили - пам'ятаєте, як ми писали текст на консоль?" (ні ...) "Давайте переглянемо це ще раз, щоб переконатися". ... І задайте питання! Нехай студенти займаються цікавими прикладами та великою кількістю взаємодії.
C ++ є складною мовою, і незалежно від того, чим ви займаєтесь, значна частина цієї складності (і загальної програми програмування взагалі) буде втрачена на ваших учнів. Все, що ви їм покажете, буде для них новим; більшість з них не зануриться на глибокий рівень розуміння (принаймні, не відразу). Як працює пам’ять, як взаємодіють компоненти ПК, що таке стек та купа, покажчики, класи, навіть петлі та ланцюги, якщо не, більшість не буде належним чином зрозуміти . Це добре! Їх не потрібно розуміти, щоб їх використовувати - дивовижна кількість класних програм може бути написана з надзвичайно потворними 1000-рядковими функціями з чотирикратними вкладеними зайвими if
s та 43 змінними, названими такими речами, якx_2r
. Важливим є те, що студенти постійно навчаються та вдосконалюються. Чорні ящики прекрасні, якщо вони з часом стають прозорими (або принаймні напівпрозорими сірими). До кінця курсу вони можуть не знати, що таке дизайнерські малюнки, але вони повинні мати можливість озирнутися на програми, які вони написали в перші кілька тижнів, і поспішати на свій код. Вони повинні досить детально зрозуміти, як працює перша програма, яку вони написали (тоді, коли вони написали її, вони не мали уявлення). Але вони все не знають - поки що .