Репетиторство студентів, які борються з основами C ++ [закрито]


26

Я навчаю кількох студентів, які мають значні проблеми з вивченням основ своєї першої мови програмування: C ++. Я знав багатьох відмінних та яскравих студентів, які провалили чи кинули свій перший курс CS. Усі, кого я навчаю, розповідають про свій досвід на уроці: викладач рухається дуже швидко, нічого в лекціях не має сенсу тощо. До цього класу CS, більшість із цих проблемних студентів не виявляли інтересу до комп’ютерів, як нічого іншого, ніж текстові процесори, веб-браузери чи інша форма розваг. Комп'ютер - це чорна скринька, яка працює, тож навіщо з цим возитися?

Я найкраще здогадуюсь, що у них виникають проблеми, пов’язані з абстракціями інформатики із знайомими поняттями. Тобто, цей студент може знати, як вивчити математику, біологію чи фізику, але ці методи не працюють, коли мова йде про програмування.

Хтось має якісь пропозиції чи поради? Студенти, яким я допомагаю, не заслуговують на те, щоб провалити цей клас. Зрозуміло, що викладач не враховує стиль навчання цих студентів. Тобто інструктор не в курсі своїх учнів.


2
Коментатори: якщо у вас є відповідь, залиште її як відповідь: не залишайте її як коментар. Якщо ваша відповідь вже додана, проголосуйте її. Якщо ви хочете обговорити тему цього питання з іншими, скористайтеся чатом .

1
Ні? З мого досвіду є достатньо людей, які програмують і не повинні ...

Відповіді:


42

Є кілька речей, з якими бореться практично кожен новачок. Студенти повинні знати, як читати код, перш ніж вони зможуть навчитися писати код.

  • Послідовність характеру імперативних мов. У людей виникають проблеми з розумінням того, що функції виконуються послідовно, один за одним, як рецепт. Один із способів подолати це - показати якийсь код, який працює через налагоджувач.
  • Оператор присвоєння ( =) в мовах стилю С вкрай вводить в оману. Вам потрібно дуже ретельно пояснити, що a = 5означає "призначити 5 змінній a, а не " a дорівнює 5 ".
  • Для початківців безпечно описувати функції як структуровані блоки коду, до яких можуть переходити інші функції. Також у початківців виникають проблеми з розумінням того, що в C ++ аргументи функцій ідентифікуються за порядком, а не по імені.
  • Більшість імперативних мов програмування мають деякі декларативні компоненти та деякі процедурні компоненти, і C ++ не є винятком. Переконайтеся, що студент розуміє, що деякі частини коду описують структуру програми, а інші частини (функції) описують, що програма повинна робити.
  • Проходження програми за допомогою налагоджувача є надзвичайно важливим і часто занедбаним інструментом навчання .
  • Вирази мають типи . 3+3це ціле число, 3.5 + 3є подвійним, "3" + "3"(в C #) - рядок, x == 5 * 3 + 25булевим (або цілим числом в C ++). Витратьте багато часу, щоб переконатися, що студент цілком комфортний з цим поняттям.
  • Змінна область - це те, що початківців весь час плутають. Поясніть студенту, як працює сфера, і переконайтеся, що вони знають, що xвизначений в одному просторі відмінний від xвизначеного в іншому.
  • На кожну змінну посилається щонайменше три рази протягом свого життя: декларація, призначення (часто робиться в тому ж рядку, що і декларація), споживання. Якщо чогось із цього немає, то десь є концептуальна помилка. З тієї ж причини, якщо ви аналізуєте робочу програму, ви завжди можете шукати ці три речі в коді, щоб визначити призначення змінної.
  • forциклі не слід навчати, поки не будуть whileнадані належні приклади ітерації за допомогою циклів. Синтаксис стенографії заплутаний, і це залишає учнів цікавитись, чому вони не можуть просто використовувати whileпетлі. Наявність шахрайського аркуша, який описує forцикл з точки зору whileциклу, може бути корисним.
  • Масиви та покажчики досить легко навчати, але вчитися кошмаром. Іншими словами, поки вона не натисне, важлива практика.
  • Ідея, що код - це текст, і що складена програма насправді є файлом , невловима для початківців. Обов’язково покажіть їм .cpp, .h та бінарні файли в оболонці.

Компоненти OOP C ++ - це зовсім інший звір, і я сподіваюся, що інструктор не потрапить туди - тому що OOP найкраще навчати, використовуючи мови, які були розроблені з нуля, щоб бути OOP. З мого досвіду, викладання OOP через C ++ ніколи не пройшло добре.


2
"Люди мають проблеми з розумінням того, що функції виконуються послідовно"? Я думаю, що це саме те, з чим практично ніхто не має проблем (крім, мабуть, людей, які вже вивчили якусь функціональну мову, перш ніж розпочати процедурні процедури). Але я згоден у всьому, що ти кажеш.
близько

3
+1 для кроку з налагоджувачем, вони отримують відчуття різниці між самою програмою та її виконанням.
Майк Данлаве

4
@leftaroundabout Ви здивуєтеся. Математика здебільшого є декларативною, тому імперативні мови можуть скинути всіх, хто вивчив алгебру.
Рей Міясака

2
Ця відповідь, здається, є лише просто "брязканням понять". Концепції, безсумнівно, є правильними і, безумовно, важливими, але викладати цей шлях мало схоже на намагання навчити когось керувати автомобілем, брязкаючи правила дорожнього руху.
riwalk

@ Stargazer712 Усі вивчають правила дорожнього руху, перш ніж їм дозволено спробувати дорожній тест. Я міг би представити пухнасті широкі ідеї на кшталт «практика є ключовою» або «будьте креативними» або «мислите логічно», але ці речі, мабуть, досить очевидні для будь-якого викладача, а також для більшості студентів. Можна також навчити абстрактні речі, такі як дискретна математика або теорія мови, як попередник програмування, але це стає важливим лише тоді, коли механіка настільки складна, що проблеми не можна вирішити самою інтуїцією. Рано чи пізно люди повинні перестати бути дзен і почати викладати зміст .
Rei Miyasaka

19

Ви раніше навчали програмуванню?

Я викладав програмування для спеціальностей CS та не для CS протягом чотирьох років. У першому семестрі мій досвід був подібний до твого, поки я не навчився кількох речей.

Те, що мені здавалося вакуумно простим, для початківців зовсім не було простим.

Незалежно від мови, вам потрібно поставити ментальні рамки - такі настільки очевидні речі, що ви навіть не усвідомлюєте, що їх знаєте, як-от:

  • Комп'ютери займаються лише однією справою. (Усі, хто каже, що вони мають паралелізм і конвеєринг, йдіть. Поверніться, коли учні щось знають.) Комп'ютери можуть робити лише невелику кількість різних речей, і вони не можуть почати робити один крок, поки попередній не буде закінчений. Я говорю це лише тому, що комп'ютери, здається, роблять так багато справ, і роблять їх миттєво, що для початківця схоже, що вони роблять все і відразу, і читають також ваш розум.

  • Змінні важливі. Важливо розуміти, що назва змінної та її зміст під час виконання - це дві абсолютно різні речі. Початківці борються з цим. Якщо я скажу "Напишіть програму, щоб ввести своє ім'я, а потім сказати привіт вам", їм потрібно зрозуміти, що їм потрібна змінна, щоб зберегти своє ім'я, і ​​вони повинні придумати ім'я змінної, і вони спокушаться називати його після себе і цікавитись, що означає "вхід".

  • Існує величезна різниця між часом, коли ви пишете / редагуєте програму, і часом, в який вона виконується. Під час своїх перших вправ про них потрібно нагадувати про це досить часто.

Мова, якою я користувався, була БАЗОВОЮ, адже для початківців вона дуже проста. Не важко перейти до інших мов після того, як вони створили набір основних можливостей програмування.

Ми часто писали програму на дошці, а потім «грали в комп’ютер». Тобто, поставте X поруч із поточним оператором, зробіть це вручну, а потім перемістіть X до наступного оператора. Змінні були прямокутниками на дошці, куди ми б записували поточний вміст. Коли завдання сталося, ми його стерли б і додамо нове значення.

Один з трюків, який я розробив, - це модельований десятковий комп'ютер, що містить 1000 місць пам’яті, кожен з яких може мати 4-значний номер. Був невеликий набір "опкодів", таких як завантажувати акумулятор, додавати, зберігати, стрибати і т. Д. Я б змусив їх написати мало програм на цій "машинній мові", а потім зробити його однокроковий, щоб побачити, як він працює. Потім пізніше такі поняття, як змінні, стрибки тощо, пояснити набагато простіше.

Сподіваюся, що це допомагає.


Мені подобається ця імітація комп'ютерної ідеї. Чи є у вас формальна мова для цього, чи ви просто обговорюєте ідеї в псевдокоді / звичайній англійській мові?
Рей Міясака

@Rei: Я написав (в BASIC) тренажер під назвою Simple. Це все було інтерфейсом клавіатури. Користувач може вводити значення в "пам'ять"; тоді вони могли б зробити один крок і вивчити акумулятор і пам'ять у кожній точці, якщо вони захочуть. Я думаю, що це було дуже важливо, оскільки вони змусили їх це робити , а не просто говорити про це.
Майк Данлаве

Ах гаразд. Дякую, я повинен спробувати щось подібне.
Рей Міясака

На мою думку, це має бути відповідь №1.
riwalk

12

На мою думку, C ++ - це надмірність, як перша мова.

Якби я був у вас і мав достатньо часу під рукою, я б задумався про введення концепцій програмування та CS за допомогою Python (або подібного).

Коли поняття зрозумілі, тобто коли їм зручні основні структури даних, непрямість, основні алгоритми тощо, я повільно запроваджуватиму C ++, і вони дуже швидко зможуть співвіднестись з тим, що вони вже навчилися б.


2
Я погоджуюсь, але професори зазвичай не мають права вибирати, на якій мові викладати, а тим більше - ТА.
Рей Міясака

4
Я не згоден з Python. Я пройшов свій перший клас CS 101 на C ++, а потім перейшов до школи, яка викладала CS 101 на Python. Студенти Python були так заплутані навіть у основах, коли ми всі брали один і той же клас CS 201 ... Але всі студенти C ++ отримали успіх.
OghmaOsiris

@OghmaOsiris, чесно кажучи, я не знаю достатньо про Python, але, можливо, те, що ви були свідками, може бути просто проявом упередженості самовибору. Зрештою, C ++ є пекельно страшним для деяких студентів (особливо для найбільш недосвідчених студентів з програмування).
Стефан Бранчик

@Oghma Яким був 201 клас? Якщо це щось низькорівневе, воно, мабуть, має бути власною гілкою, яка є обов'язковою умовою.
Rei Miyasaka

1
@OghmaOsiris: Хммм, я не погоджуюся, добре не погоджуюся, поділюсь різним досвідом моєї універсальної переходу на python як першу мову, наскільки я знаю, дуже корисно (на перший погляд, Java не C ++). Я не думаю, що індивідуальний досвід вважається підґрунтям того, що один краще, ніж інший, тобто нескінченна вогняна війна. Я можу заперечити, що Python може бути чудовою мовою програмування для початку, тому що він не стає на вашому шляху, він насправді робить це краще, ніж більшість мов програмування, що отримує багато студентів ....
Trufa

4

Ось що я порадив би:

  1. Дайте їм усі необхідні деталі, щоб розібратися
  2. Заохочуйте їх спробувати зрозуміти деталі
  3. Переконайтеся, що вони містять деталі у компактному вигляді, коли вони потребують

В основному я б радив вам створити єдиний папір a4, який має всі необхідні деталі. Якийсь довідковий посібник, у якому є всі деталі. Деякі книги також можуть допомогти, наприклад, "Книга мови програмування на С" надзвичайно допомогла, оскільки вона мала всі необхідні деталі у компактному вигляді. Стиснення інформації є необхідною частиною у створенні паперу a4, який містить усі деталі.


3

Програмування істотно відрізняється від інших загальних областей, з якими стикається студент. Багатьом студентам до коледжу вдалося просто звернути увагу на уроці і, можливо, виконати кілька домашніх завдань з легкими проблемами та відповідями на звороті книги. Йдеться більше про запам’ятовування процесів, а потім їх створення. Це також перший раз, коли багато студентів неодноразово отримують неправильну відповідь (синтаксичні помилки, логічні помилки, помилки сегмента тощо). Це може вичерпати мотивацію учнів під час роботи над програмами.

Щоб по-справжньому знати, що відбувається з програмуванням, їм потрібно буде ПРАКТИЧУВАТИ багато. Часто забувають про те, щоб вони виписали код psuedo будь-якою рідною мовою. Попросіть їх продовжувати розширюватись, поки вони не отримають досить детального вирішення проблеми. Тоді справа в тому, щоб перевести це в реальний код.


3

Коли я навчався в коледжі, я був репетитором для курсу введення в програмування серед інших курсів. Проблема, яку ви описуєте, не є рідкістю. Залежно від вашої конкретної ролі, у вас можуть бути різні підходи, до яких ви хочете скористатися.

По-перше, якщо це поширена проблема, яка зачіпає значну частину учнів у класі, якщо у вас є доступ до цього, я би звернувся до професора, який викладає курс із конкретними відгуками про те, які поняття студенти не можуть зрозуміти, щоб він чи вона може або включити додатковий огляд цього матеріалу, коли він з’явиться знову в курсі, або вдосконалити навчальну програму на майбутні терміни.

Якщо ви будете викладати розділ для обговорення на додаток до свого лабораторного часу, це був би чудовий час, щоб викласти речі, які бентежать у лекції, і допомогти зробити їх більш конкретними та переконатися, що основи були зрозумілі.

Якщо ви працюєте з цими учнями єдиний час, коли ви знаходитесь в лабораторії репетиторів, ви все одно можете використовувати цей час, щоб навчити студентів або один на одного, або кілька за один раз, концептуальних будівельних блоків, які їм потрібні для розуміння. і виконати домашнє завдання.

Вони можуть відчувати себе таким загубленим у класі, що навіть не знають, де зупинитися і задати питання. Якщо це так, поверніться до основ. Де вони були в курсі, коли востаннє розуміли, що відбувається? Якщо вони не впевнені, або "ніколи" не зрозуміли, вам, можливо, доведеться пройти весь шлях до початку пояснення привіт світу, навчаючи їх таким речам, як, що таке змінна, як комп'ютер приймає їх список "інструкцій" і намагається робіть їх по порядку, але комп’ютер не такий «розумний», як ми, тому вам потрібно бути дуже буквальним і говорити речі точно так, щоб комп'ютер зрозумів і т.д.

Це насправді точка боротьби та розладів, яку я досить часто бачив на курсах програмування, що не мають спеціальності. Студенти пишуть якийсь код. Здається, "приблизно" правильно, але потім вони йдуть складати це, і це дає помилку, дуже кричущу помилку. І вони не мають поняття, що з цим погано. І годинами дивитися на їх код. Тоді нарешті з’ясуйте, що це щось здається тривіальним, як, наприклад, відсутня напівкрапка або дужка в неправильному місці. Потім вони знову збирають його, і все ще є помилка, це щось інше. Вони написали назву змінної по-різному вдруге, коли вживали її. І так далі. Тож вони просять у друга чи репетитора чи когось про допомогу, і вони можуть відповісти вгорі голови "о, просто додайте це там, і тоді воно спрацює". Тож їхній досвід полягає в тому, що програмування трохи "загадкове"

Це сфера як репетитор, де у вас є багато можливостей допомогти. Залежно від рівня їхньої фрустрації, я можу мати різні підходи, щоб допомогти їм зрозуміти, чому код не працює. Якщо вони щось отримують, я можу дати їм підказки і спробувати допомогти їм розібратися самостійно. Але якщо вони просто в кінці своєї мотузки про готовність відмовитись від розчарування, я часто даю їм пару халявих відповідей, а потім намагаюся принаймні задавати їм питання типу "Ви розумієте, чому ця зміна виправила вашу програму ? "

Для деяких студентів, особливо тих, що не мають спеціальності, вони можуть не мати методичної уваги до деталей, необхідних, щоб бути хорошим програмістом або насолоджуватися програмуванням. Ви можете перенести їх за допомогою стратегій, щоб допомогти їм звернути увагу на деталі та бути достатньо методичним для вирішення проблем, навіть якщо це для них завдання.

Але анально затримуються щодо того, що студенти відрізають свій код "належним чином" - так часто початківці програмісти створюють проблеми з вкладенням та сферою застосування, оскільки вони мають невідповідні дужки тощо, тому що вони не звертають уваги на те, що вкладено під чим. Надайте їм контрольний список "речей, щоб перевірити, коли програма не компілюється", наприклад, відступ усіх кодів належним чином і переконайтеся, що дужки відповідають, усі рядки закінчуються крапками з комою, особливо навколо номера рядка, де відображається перша помилка вгору тощо.

Навчіть їх складати рано і складати часто. Напишіть мінімальний код скелета (скажімо, привіт світ), складіть / тестуйте. Додайте кілька рядків, складіть знову. Набагато простіше знайти помилки, якщо ви дивитесь лише на невелике відро змін, а не на велике.

Допоможіть їм навчитися розбивати проблему на менші вирішувані проблеми. Це те саме, що ми робимо, як професійні програмісти, які вирішують набагато складніші проблеми, які ми не знаємо, як їх вирішити. Ви продовжуєте розбивати його на частини, поки не дістанетесь до чогось, що ви або знаєте, як вирішити, або зможете зробити деякі дослідження, щоб навчитися їх вирішувати. "Які кроки потрібно було б зробити, щоб дійти до робочого рішення?" Ну, спочатку вам знадобиться код скелета (привіт світ). Ви знаєте, як це зробити? Так, чудово, тому коли ми закінчимо розмову, ви можете почати з цього! Потім потрібно прочитати файл як вхідний. Чи пам’ятали ви, читаючи про це у главі 4? Не зовсім? Чому б ти не пішов подивитись на це після того, як ти привітав світ, і побачиш, як далеко ти можеш дійти до роботи, а потім передзвони мені, і я ' Я допоможу вам ще трохи, коли ви зациклюєтесь на цьому. Перші кілька разів вам може знадобитися скласти нумерований перелік для них кроків, необхідних для вирішення проблеми, щоб вони могли навчитися на прикладі розкладання проблеми.

Якщо вони отримують якийсь матеріал, але не весь матеріал на уроці, заохочуйте їх ставити запитання в класі, тому що дев'ять разів із десяти вони не єдина студентка, яка не розуміє, а професор, ймовірно, просто промальовував щось важливе.

Якщо вони витрачають "години", дивлячись на одну помилку, але не розгадуючи, це марно витрачає свій час, вони з цього не багато навчаються. Часто помилки є проблемою розуміння, і справа в тому, щоб придумати правильне розуміння для їх вирішення, і вони можуть не мати можливості для цих типів проблем. Запропонуйте інші загальні підходи, які слід застосувати, коли вони застрягнуть: попросіть іншого друга в класі про допомогу (ознайомтесь з деякими однокласниками, якщо це необхідно зробити), почніть домашнє завдання достроково, щоб вони встигли зупинитися, а пізніше вступайте в виховательська лабораторія та задавати питання у відкриті години, або йти до робочих годин професора. Якщо вони звикли до зубріння, що добре підходить для запам'ятовування предметів, вони вдарять про стіну розчарування, коли вони ' Ви зіткнулися з програмуванням, яке стосується більше вирішення проблем, ніж запам'ятовування. Покажіть їм, як шукати приклади синтаксису з їх підручника, stackoverflow тощо. Запропонуйте їм розмістити запитання на форумі запитань приватного класу, якщо такий є.

Навчіть їх, як звузити, де код перестає працювати. Коментуйте матеріали до тих пір, поки не повернетесь до чогось запущеного, а потім повільно додайте речі до тих пір, поки не отримаєте цей сегмент заново.

Дуже багато цих ідей можна перетворити на роздатковий матеріал, якщо їх буде багато. Стратегії - це як правило, частина професорів, що їх змальовують - вони витрачають свій час на синтаксис, семантику написання циклів, масивів, вводу / виводу тощо. Але недостатньо часу, витраченого на те, "що я роблю, коли намагаюся запустити мій код, і він просто не компілюється та не виходить з ладу? "

Якщо мова йде про концептуальні речі, особливо фундаментальні, на кшталт "що таке змінна" чи "що таке цикл?" не розуміючи, що заважатиме їм бути в курсі решти курсу. У лекційному курсі професор може не встигнути відповісти на кожне запитання чи допомогти лампочці згасати кожному студенту. І це частина того, чому репетитори так важливі для навчання програмуванню. Їм може знадобитися індивідуальна інструкція з додатковими аналогіями, щоб зробити конкретну тему конкретною.

Оскільки ви викладаєте на C ++, я б уявив, що заняття є абстрактною темою, яку деякі студенти намагаються "отримати". Часто абстрагування класів викладається на прикладах, відповідних якомусь випадковому об'єкту реального світу, наприклад "банкомат", і аналогії робляться об'єкту реального світу. У вас можуть бути змінні, щоб відстежувати, скільки грошей знаходиться всередині, у вас є методи, подібні до правил, які вказують банкомату, як реагувати на конкретні умови тощо. Іноді одна аналогія - це та, яка "дотримується" певної людини , а інші студенти краще зрозуміють інший.

По можливості малюйте для них малюнки. Як діаграма послідовностей того, що відбувається з часом, щоб допомогти їм побачити велику картину того, що робить код, який вони пишуть. Користувач натискає цю кнопку. Тоді програма повинна відповідати, виконуючи x, y і z. Намалюйте масив, як купу поштових скриньок на пошті, кожен з яких може містити лише одне число, і вказівники, як стрілки, що вказують на "адресу" на передній панелі поля. І т.д.


2

З усіх чудових варіантів для мов програмування там, цей коледж використовує C ++ як свій вступний клас CS для спеціальностей, що не належать до CS ?? В руках талановитого інструктора це може бути віддалено мислимо-- але чому це зробити так важко?

Коли я дізнався "Паскаль" у своєму інтро-CS класі коледжу, ми провели перші 3 тижні, працюючи з роботом " Карел ". Це було дуже просте середовище програмування, схоже на логотип, де всі основні поняття (включаючи рекурсію) були ретельно вивчені перед тим, як це зробити в Паскалі. У "Роботі Карел" ви керуєте роботом у двовимірному просторі, використовуючи невеликий набір простих команд. Це дає студентам корисну конкретну основу, яку вони можуть використати для того, що буде далі.

Можливо, зараз існують більш сучасні інструктивні мови програмування, які виконують роль «Карела-робота»? Однак, мабуть, занадто пізно для ваших студентів.


У нас була подібна програма під назвою Аліса.
OghmaOsiris


@OghmaOsiris Посилання Alice розірвана. Запис "додано до URL-адреси.
Zoot

Так, без цього закінчення ")" було відрізано.
OghmaOsiris


2

На додаток до сказаного, я припускаю, що як початківці їм потрібно лише подряпати поверхню, тож відповідно адаптуйте свою навчальну програму, щоб уникнути складних речей.

0 - поставте їм просту задачу (скажіть, оцініть вираз).

1-дайте їм час, щоб це зрозуміти.

2-дайте їм відповідь.

3-й переходьте рядок відповідей за рядком

4 -попросіть порівнювати вашу відповідь з їхньою увагою

5 -попросіть вивести урок з цієї проблеми

6-додайте ще один крок до проблеми SAME, скажімо, умова, що вимагає оператора IF

7-повторіть вищезазначене завдання з кількох завдань. До того часу вони зрозуміли б основи мови та використання середовища. Буде готовий до того, що буде далі.

Також,

-винайте бонусну просту проблему для них спробувати вдома кожні 2 заняття або близько того

-взятись із кожним учнем, щоб побачити, який сенс заважає йому йти далі

-забезпечити простий довідковий матеріал, забути складні теми та складні книги

- часто отримуйте їх відгуки та використовуйте їх

-запросіть їх підготуватися до наступної теми до того, як вони прийдуть на заняття


2

Що мені допомогло, коли я пройшов CS 101, це вивчити логіку, перш ніж навіть дивитись на код. Ми пройшли через таблиці істинності та обчислення прийменника просто так, щоб почати думати "це правда чи помилка", а не "це дорівнює тому чи іншому".

Саме так було, коли за мене все клацнуло. Як тільки я зрозумів, що програмування - це лише маніпулювання справжніми / хибними значеннями в основі, то все стало відносно просто.

І це зробило це так, що неважливо, якою мовою я користуюся, логіка скрізь однакова. Синтаксис може бути заплутаним, але я можу сказати такі речі, як "Гаразд, в Obj CI надсилають повідомлення таким класам, а повідомлення C ++ надсилалися так само інакше. Але алгоритм взагалі не змінився". тощо.


2

Десь є стаття ACM або IEEE, яка вказує на деякі деталі, чому початківцям (навіть випускникам CS, які починають в цій галузі) потрібно сидіти за старшим програмістом і спостерігати за тим, як у них виникає проблема.

Професіонали часто паруються для складних проблем. Студенти занадто часто кажуть, що не робити. Переваги спарювання (по черзі на клавіатурі): 1. Учень відразу розповідає, що робить неправильно. Миттєвий відгук. 2. Коли учень спостерігає за вчителем, він вивчає речі, які вчитель ніколи не думав би зазначити.

Замість того, щоб дозволити школяреві розвивати погані практики, вони стискаються в зародку. (Я перевернув би тут номер 1 з №2 і дозволив студенту дивитися інструктор / ТА ПЕРШИЙ )

Викладання CS з статичним набором слайдів Powerpoint не піддається тимчасовому процесу написання програми. (Звичайно, є хитрощі, які ви можете виконувати з ростом функцій по черзі, але вони зазвичай незручні.)

Учні повинні знати, з чого почати писати, а де зупинитись і скласти. Наші мізки в основному проводяться для того, щоб читати зліва направо зверху вниз, але програма, як ціле, вибирайте власну пригодницьку книгу, забиту в одну сторінку!

Занадто часто новачок копіює всю програму, а потім компілює. Навіть професіонал може дати першу тріщину в ньому таким чином, перш ніж зрозуміти, що вони повинні були залишити всі функції порожніми, і склали програму, а потім ітеративно додали в робочий скелет.

Також пов’язана смішна ідея, що КС слід викладати без комп’ютера та просто олівця та паперу. Цікаво, скільки дійсно професіоналів з програмування насправді вважають, що це найкращий спосіб, або якщо це просто те, що роблять інструктори з CS, тому що вони самі не люблять працювати з комп’ютерами? Будь-яка спроба вилучити комп’ютер із зображення - середня. Це робить програмування менш цікавим і менш інтерактивним, ніж має бути. Ми давно минули дні введення даних на перфокарт і терпляче чекаємо. Сьогоднішні професійні розробники - шанувальники миттєвого задоволення. На щастя більшість студентів теж.

Очевидно, що малювання симпатичних конструкцій олівцем і папером до і під час процесу розробки є потужним інструментом як для професійних, так і для початківців програмістів. Такий час, як "руки на клавіатурі", також слід витратити на пару! Можливо, тут може бути сенс дозволити школяреві спробувати перший раунд, перш ніж спостерігати за вчителем, хоча навіть при цьому, мабуть, варто побачити реальний мислительний процес вчителя.

Нарешті, гарячі клавіші та рекомендації щодо редагування, які використовує професійний розробник, не є «шумом» для навчання студентів. Найголовніше, що вони залучають і цікавлять студента. По-друге, вони підвищують обізнаність щодо загальних потреб розвитку. Крім того, найбільш основні з цих практик часто легко виконати, але спочатку не очевидні. Молодий студент магазину деревини може легко навчитися видаляти цвях молотком, але в більшості випадків спочатку потрібно сказати, що це за кігті. Деякі надзвичайно легко робити речі просто не банально вчитися, не навчаючись. Навіть професійні розробники весь час забувають про ці "хитрощі" і отримують перевагу від інструментів рефакторингу, таких як перерозподіл, щоб видалити зайвий чи недосяжений код тощо.


1
btw, Якщо хтось міг би вказати мені на заголовок цієї статті, я би вдячний!
Девід,

2

Комп'ютерне програмування часто є одним з перших курсів, де когнітивна майстерність синтезу необхідна для проходження курсу. Цей навик дуже важко надати комусь іншому. Ви можете пояснити всі наявні у них компоненти та як вони працюють. Ви можете навести безліч прикладів того, як інші люди використовували синтез для об'єднання цих компонентів у більш корисне ціле, але є лише стільки, що ви можете зробити, не роблячи щось «клацання» у свідомості студента.

На мій досвід, саме навичка синтезу найчастіше уникає людей, які не «отримують» програмування. Вони мають ідеальне розуміння частин, таких як змінні, функції та петлі, але вони задають питання на кшталт: "Я розумію, чому це працює, але як ти знав, що потрібно там поставити цикл?" Вам просто потрібно практикувати, поки ви цього не отримаєте.


2

Щоб неправильно цитувати Аарона Гіллегас, нагадуйте їм, що вони не дурні, це просто важко. Програмування важко навчити свій розум, це зовсім інший спосіб мислення, і хоча вони можуть боротися з основами, вони, мабуть, цілком усвідомлюють, що вони є, і це зробить їх досить зневіреними.

Я говорю це як хтось, хто провалив свій курс ІС-курсу першого курсу, я раніше багато програмував і отримав усі концепції (VB, так, дитина), але C ++ просто не натискав би мене. Я в кінцевому підсумку повернувся до самих основ і працював звідти, потім клацнув, але якби хтось сказав: "Ти не ідіот, це просто важко", це полегшило б моє життя.


0

Ви сказали, що "цей студент може знати, як вивчити математику, біологію чи фізику, але ці методи не працюють, якщо мова йде про програмування".

Для цього є причина, програмування вимагає чогось, чого не вимагає інша дисципліна: творчість і ... фантазія . Можливість "уявляти речі на роботі". Я особисто вважав, що така вимога є більш присутнім (звичайно, за всіма винятками) у людей, які приїжджають із технікуму (зокрема, електроніка та електромеханіка: вони повинні "уявляти електричні потоки та як вони керують один одним", оскільки вони не можуть бачити їх!), ніж з "чистої науки" (де все схоже на те, щоб повернути математику).

Для цих останніх випадків треба допомогти "зоровому пізнанню". Важливо не просто зосередитись на понятті та тексті (тип -> компілювати -> подивитися, помилки не можуть працювати, якщо ви не в змозі «прочитати» помилки), а передбачити спосіб візуалізації речей, будь-коли під час проектування ( імітуючи те, що відбувається на машині: будьте готові з дошкою та набором кольорових пост-це) та під час виконання.

Щоб ця остання частина була успішною, необхідно надати істотне поняття операційних систем та "як програми врізаються в машину" (і що це за машина насправді). І повинен бути наданий другий не залякуючий IDE. Зазвичай я "налаштований блок-код" з багатьма видаленими речами, щоб "не відволікатися". Поняття проекту, виготовленого з джерел для створення об'єктів, пов'язаних з бібліотекою, повинно бути надано ДО ПЕРЕД, ніж говорити про мову.

Традиційний привіт С ++ вимагає точки входу та пристрою виводу. Студент повинен уже з цим ознайомитися. Успіх такого роду курсів залежить від перших днів. Вам потрібно стимулювати візуалізацію того, що відбувається всередині комп'ютера, щоб вони зрозуміли, що таке програмування.
Решта - синтаксис (наука) та абстракція (фантазія)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.