Я викладав вступне програмування на рівні коледжу. Це був хлібо-масляний курс, всі викладачі зробили це, і я думаю, ми це зробили досить добре. Ми дотримувались загального тексту та мали загальні іспити, але у кожного був свій класний метод, який працював. З того часу минуло багато часу, але час від часу я потрапляю до репетитора до якогось малюка з програмування, і вся картина приблизно однакова.
Те, як я це роблю, - це починати знизу якомога конкретніше. Те, що знають студенти, - це структура. У них вже багато понять. Я будую подальші концепції над ними, і я стримую такі концепції, які можуть бути контрпродуктивними. У той же час я змушую їх вчитися, роблячи .
Я побудував маленький комп'ютер з чіпом Intel 8008, деяким EPROM та кількома схемами. Я програмував його на невеликий дует, коли мікросхема вводу / виводу була підключена до пари динаміків. Я б пояснив, як мала програма працювала, з внутрішньою петлею, щоб відлічити лічильник. Це діяло б як затримка. Тоді він буде перемикати вихідний біт і робити це знову. Це зробить це на деякий час, а потім переключиться на іншу затримку, даючи ще один крок тощо. У мікросхеми пам'яті було трохи таймера, і якщо я вставив конденсаторний відвід під один з входів таймера, програма запускала б веєеері повільно . Клас міг чути, як динаміки клацають, клацають, клацають ... Я хотів, щоб клас зрозумів, що комп'ютер робив дуже прості речі один крок за часом. Тоді я би відключив провід конденсатора, і "музика" вибухнула б. (оплески)
Тоді я побудував симулятор для дуже простого десяткового комп’ютера, маючи 1000 місць пам’яті, кожен з яких мав підписаний 4-значний десятковий номер. У ньому були дуже прості опкоди, такі як "додати до акумулятора", "перестрибнути, якщо негативно" тощо. Я б змусив їх писати невеликі програми на цій "машинній мові", як-от додати два числа або скласти список номерів. Тоді вони могли спостерігати, як він працює одним кроком, або утримуючи клавішу Enter, щоб спостерігати, як вона працює «швидко».
Сенс цього полягав у тому, щоб створити концепцію, що комп'ютери можуть виконувати лише дуже малу кількість різних основних операцій, і вони роблять їх по одному. Це полягає в тому, щоб протистояти враженням, що комп’ютери складні, і що вони все роблять одночасно, і читають вашу думку в угоді.
Звідти ми перейшли до програмування "справжньою" мовою (BASIC :), починаючи з дуже простих, але цікавих програм, опрацьовуючи умовні умови, цикли, масиви, файли, об'єднуючись тощо. Завданням було встановити достатній набір навичок, щоб вони могли взяти на себе проект за власним вибором, адже це єдине, що робить програмування цікавим - використання, до якого ви можете його поставити. Я б викинув кілька ідей для проектів, а потім вони їх звідти візьмуть. Я б просив писати ідеї, а потім звіти про хід, щоб не відкладати їх на останню хвилину, а потім панікувати. Я думаю, що проекти були найкращою частиною, адже вони навчалися під власні сили.
Це початкове обгрунтування в дуже конкретному розумінні того, що роблять комп'ютери, значно полегшило викладання концепцій, які в іншому випадку були б реальними ударами швидкості, як масиви або (в подальшому курсі) покажчики. Ми схильні прославляти поняття "абстракція" як цю чудову річ, але її потрібно будувати на конкретному фундаменті, а не на повітрі.