Коли я навчався в коледжі, я був репетитором для курсу введення в програмування серед інших курсів. Проблема, яку ви описуєте, не є рідкістю. Залежно від вашої конкретної ролі, у вас можуть бути різні підходи, до яких ви хочете скористатися.
По-перше, якщо це поширена проблема, яка зачіпає значну частину учнів у класі, якщо у вас є доступ до цього, я би звернувся до професора, який викладає курс із конкретними відгуками про те, які поняття студенти не можуть зрозуміти, щоб він чи вона може або включити додатковий огляд цього матеріалу, коли він з’явиться знову в курсі, або вдосконалити навчальну програму на майбутні терміни.
Якщо ви будете викладати розділ для обговорення на додаток до свого лабораторного часу, це був би чудовий час, щоб викласти речі, які бентежать у лекції, і допомогти зробити їх більш конкретними та переконатися, що основи були зрозумілі.
Якщо ви працюєте з цими учнями єдиний час, коли ви знаходитесь в лабораторії репетиторів, ви все одно можете використовувати цей час, щоб навчити студентів або один на одного, або кілька за один раз, концептуальних будівельних блоків, які їм потрібні для розуміння. і виконати домашнє завдання.
Вони можуть відчувати себе таким загубленим у класі, що навіть не знають, де зупинитися і задати питання. Якщо це так, поверніться до основ. Де вони були в курсі, коли востаннє розуміли, що відбувається? Якщо вони не впевнені, або "ніколи" не зрозуміли, вам, можливо, доведеться пройти весь шлях до початку пояснення привіт світу, навчаючи їх таким речам, як, що таке змінна, як комп'ютер приймає їх список "інструкцій" і намагається робіть їх по порядку, але комп’ютер не такий «розумний», як ми, тому вам потрібно бути дуже буквальним і говорити речі точно так, щоб комп'ютер зрозумів і т.д.
Це насправді точка боротьби та розладів, яку я досить часто бачив на курсах програмування, що не мають спеціальності. Студенти пишуть якийсь код. Здається, "приблизно" правильно, але потім вони йдуть складати це, і це дає помилку, дуже кричущу помилку. І вони не мають поняття, що з цим погано. І годинами дивитися на їх код. Тоді нарешті з’ясуйте, що це щось здається тривіальним, як, наприклад, відсутня напівкрапка або дужка в неправильному місці. Потім вони знову збирають його, і все ще є помилка, це щось інше. Вони написали назву змінної по-різному вдруге, коли вживали її. І так далі. Тож вони просять у друга чи репетитора чи когось про допомогу, і вони можуть відповісти вгорі голови "о, просто додайте це там, і тоді воно спрацює". Тож їхній досвід полягає в тому, що програмування трохи "загадкове"
Це сфера як репетитор, де у вас є багато можливостей допомогти. Залежно від рівня їхньої фрустрації, я можу мати різні підходи, щоб допомогти їм зрозуміти, чому код не працює. Якщо вони щось отримують, я можу дати їм підказки і спробувати допомогти їм розібратися самостійно. Але якщо вони просто в кінці своєї мотузки про готовність відмовитись від розчарування, я часто даю їм пару халявих відповідей, а потім намагаюся принаймні задавати їм питання типу "Ви розумієте, чому ця зміна виправила вашу програму ? "
Для деяких студентів, особливо тих, що не мають спеціальності, вони можуть не мати методичної уваги до деталей, необхідних, щоб бути хорошим програмістом або насолоджуватися програмуванням. Ви можете перенести їх за допомогою стратегій, щоб допомогти їм звернути увагу на деталі та бути достатньо методичним для вирішення проблем, навіть якщо це для них завдання.
Але анально затримуються щодо того, що студенти відрізають свій код "належним чином" - так часто початківці програмісти створюють проблеми з вкладенням та сферою застосування, оскільки вони мають невідповідні дужки тощо, тому що вони не звертають уваги на те, що вкладено під чим. Надайте їм контрольний список "речей, щоб перевірити, коли програма не компілюється", наприклад, відступ усіх кодів належним чином і переконайтеся, що дужки відповідають, усі рядки закінчуються крапками з комою, особливо навколо номера рядка, де відображається перша помилка вгору тощо.
Навчіть їх складати рано і складати часто. Напишіть мінімальний код скелета (скажімо, привіт світ), складіть / тестуйте. Додайте кілька рядків, складіть знову. Набагато простіше знайти помилки, якщо ви дивитесь лише на невелике відро змін, а не на велике.
Допоможіть їм навчитися розбивати проблему на менші вирішувані проблеми. Це те саме, що ми робимо, як професійні програмісти, які вирішують набагато складніші проблеми, які ми не знаємо, як їх вирішити. Ви продовжуєте розбивати його на частини, поки не дістанетесь до чогось, що ви або знаєте, як вирішити, або зможете зробити деякі дослідження, щоб навчитися їх вирішувати. "Які кроки потрібно було б зробити, щоб дійти до робочого рішення?" Ну, спочатку вам знадобиться код скелета (привіт світ). Ви знаєте, як це зробити? Так, чудово, тому коли ми закінчимо розмову, ви можете почати з цього! Потім потрібно прочитати файл як вхідний. Чи пам’ятали ви, читаючи про це у главі 4? Не зовсім? Чому б ти не пішов подивитись на це після того, як ти привітав світ, і побачиш, як далеко ти можеш дійти до роботи, а потім передзвони мені, і я ' Я допоможу вам ще трохи, коли ви зациклюєтесь на цьому. Перші кілька разів вам може знадобитися скласти нумерований перелік для них кроків, необхідних для вирішення проблеми, щоб вони могли навчитися на прикладі розкладання проблеми.
Якщо вони отримують якийсь матеріал, але не весь матеріал на уроці, заохочуйте їх ставити запитання в класі, тому що дев'ять разів із десяти вони не єдина студентка, яка не розуміє, а професор, ймовірно, просто промальовував щось важливе.
Якщо вони витрачають "години", дивлячись на одну помилку, але не розгадуючи, це марно витрачає свій час, вони з цього не багато навчаються. Часто помилки є проблемою розуміння, і справа в тому, щоб придумати правильне розуміння для їх вирішення, і вони можуть не мати можливості для цих типів проблем. Запропонуйте інші загальні підходи, які слід застосувати, коли вони застрягнуть: попросіть іншого друга в класі про допомогу (ознайомтесь з деякими однокласниками, якщо це необхідно зробити), почніть домашнє завдання достроково, щоб вони встигли зупинитися, а пізніше вступайте в виховательська лабораторія та задавати питання у відкриті години, або йти до робочих годин професора. Якщо вони звикли до зубріння, що добре підходить для запам'ятовування предметів, вони вдарять про стіну розчарування, коли вони ' Ви зіткнулися з програмуванням, яке стосується більше вирішення проблем, ніж запам'ятовування. Покажіть їм, як шукати приклади синтаксису з їх підручника, stackoverflow тощо. Запропонуйте їм розмістити запитання на форумі запитань приватного класу, якщо такий є.
Навчіть їх, як звузити, де код перестає працювати. Коментуйте матеріали до тих пір, поки не повернетесь до чогось запущеного, а потім повільно додайте речі до тих пір, поки не отримаєте цей сегмент заново.
Дуже багато цих ідей можна перетворити на роздатковий матеріал, якщо їх буде багато. Стратегії - це як правило, частина професорів, що їх змальовують - вони витрачають свій час на синтаксис, семантику написання циклів, масивів, вводу / виводу тощо. Але недостатньо часу, витраченого на те, "що я роблю, коли намагаюся запустити мій код, і він просто не компілюється та не виходить з ладу? "
Якщо мова йде про концептуальні речі, особливо фундаментальні, на кшталт "що таке змінна" чи "що таке цикл?" не розуміючи, що заважатиме їм бути в курсі решти курсу. У лекційному курсі професор може не встигнути відповісти на кожне запитання чи допомогти лампочці згасати кожному студенту. І це частина того, чому репетитори так важливі для навчання програмуванню. Їм може знадобитися індивідуальна інструкція з додатковими аналогіями, щоб зробити конкретну тему конкретною.
Оскільки ви викладаєте на C ++, я б уявив, що заняття є абстрактною темою, яку деякі студенти намагаються "отримати". Часто абстрагування класів викладається на прикладах, відповідних якомусь випадковому об'єкту реального світу, наприклад "банкомат", і аналогії робляться об'єкту реального світу. У вас можуть бути змінні, щоб відстежувати, скільки грошей знаходиться всередині, у вас є методи, подібні до правил, які вказують банкомату, як реагувати на конкретні умови тощо. Іноді одна аналогія - це та, яка "дотримується" певної людини , а інші студенти краще зрозуміють інший.
По можливості малюйте для них малюнки. Як діаграма послідовностей того, що відбувається з часом, щоб допомогти їм побачити велику картину того, що робить код, який вони пишуть. Користувач натискає цю кнопку. Тоді програма повинна відповідати, виконуючи x, y і z. Намалюйте масив, як купу поштових скриньок на пошті, кожен з яких може містити лише одне число, і вказівники, як стрілки, що вказують на "адресу" на передній панелі поля. І т.д.