Обожаю царапины. Я любил его годами, даже до того времени, когда это было в основном веб-приложение. Я твердо верю в Dr. Подход Паперта к обучению и открытиям. И огромное спасибо команде за запуск 3.0. Это действительно отличное введение в вычислительное мышление.

Нет, это недооценивает. Это полноценная платформа и сообщество для создания, обмена и обучения навыкам программирования. Подходит для всех возрастов, развлечение для всех возрастов.

Однако на пути студентов должен наступать момент, когда они сталкиваются с новыми инструментами, более похожими на те, что используются в технических профессиях. На протяжении всей моей педагогической карьеры переход от визуального блочного программирования к текстовому был камнем преткновения. Я знаю, что я не один.

Если мы каталогизируем образовательные программные продукты, они аккуратно вписываются в блочные или текстовые категории. Tynker, который претендует на то, чтобы обеспечить именно такой переход, делит свои упражнения на блочные и текстовые. Несмотря на то, что во всех упражнениях с блоками есть удобная кнопка JavaScript, код доступен только для чтения! Также явно не хватает документации для JavaScript API.

Tinkercad, веб-инструмент Autodesk для 3D-моделирования и моделирования схем, немного лучше. В конструкторе схем вы можете добавлять программируемые компоненты микроконтроллера, такие как Arduino, и программировать в блоках или в тексте, а также в режиме, который покажет вам результирующий Arduino C ++ при изменении блоков. К сожалению, эта ссылка односторонняя; вы не можете редактировать текст и менять блоки. Так что, хотя это полезный визуальный инструмент, это не совсем тот мост, на который можно было бы надеяться. Между тем, в части программного обеспечения для 3D-моделирования генераторы форм обеспечивают прямой доступ к API JavaScript для создания сложных сеток. Однако для изучающих JavaScript не существует подмостков; то, что предоставляется, очевидно, предназначено для опытных программистов.

Что делать заинтересованному технологу в образовании? Как преодолеть зияющую пропасть между блочным и текстовым программированием?

Ты это возненавидишь, но ...

Нет Моста

Понятно это стремление к плавному переходу от одной парадигмы программирования к другой. Я был в этом поиске несколько лет. Когда я прекратил свои непрерывные поиски недостающего звена, я понял, что объект моего желания не существует по уважительной причине: я пытался исправить не ту проблему. Это было моим великим прозрением:

Программирование текста затруднено, потому что сложно набирать текст и не научиться грамоте.

В самом деле, что препятствует текстовому программированию? Это не концептуально, поскольку учащиеся могут понимать переменные, условные выражения, циклы и функции в блочных интерфейсах. Может быть что-то пугающее в текстовом редакторе без обучающих колес или в IDE со слишком большим количеством кнопок. Ни один из них не предназначен специально для молодых учеников. Тем не менее, студенты могут довольно быстро работать с другими профессиональными инструментами, такими как Photoshop.

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

Давайте представим, что нужно даже для простых упражнений по программированию. Как насчет угадывающего числа? Я напишу его на двух самых популярных языках обучения ВНЕ AP Computer Science.

Этот отгадыватель чисел сгенерирует случайное число, спросит у пользователя его предположение и отобразит результат. Мы не будем возиться с петлями или числами догадок. Одного прогона достаточно, чтобы доказать эту точку зрения.

Python

import random
# Generate random number
num = random.randint(1,10)
# Get user's guess
guess = input("Guess a number between 1 and 10: ")
# Compare and show result
if guess < num:
    print("Too Low!")
elif guess > num:
    print("Too High!")
else:
    print("Got it!")

JavaScript

// Generate random number
const num = Math.floor(Math.random() * 10 + 1);
// Get user's guess
const guess = prompt("Guess a number between 1 and 10:");
if(guess < num) {
    alert("Too Low!");
} else if(guess > num) {
    alert("Too high!");
} else {
    alert("You got it!");
}

Надуманный? Еще бы. Но вот некоторые вещи, которые я слышу от студентов, когда мы начинаем изучать эти языки.

Python

«Как вы запомнили все функции [randint, input]?»

«Я все время забываю о двоеточиях. А потом отступы ».

«Мой не работает [почти всегда забывают кавычки вокруг строк]».

JavaScript

«ЧТО делает эта строка случайных чисел ?!»

«Я все время забываю о точках с запятой и фигурных скобках».

«Мой не работает [почти всегда забывают кавычки вокруг строк]».

Обратите внимание, что абсолютно ни одна из этих проблем не касается концепций программирования; все они о синтаксисе. Если мы разберем источник разочарований, описанных выше, то почти все они связаны с распознаванием и воспроизведением образов. На каком-то уровне это и есть грамотность любого рода: распознавание общепринятых шаблонов символов (визуальных и звуковых) с последующим их понятным воспроизведением. Так уж получилось, что компьютер имеет очень требовательные шаблоны и практически не допускает ошибок.

Эта часть очень сложная, хотя и не особо высокого уровня. Даже сегодня, когда я изучаю новый язык программирования, привнесение синтаксиса в мышечную память является жизненно важной частью процесса обучения. Тем не менее, мне интересно, есть ли какой-нибудь способ снизить входной барьер другим способом.

Что, если бы практика набора текста соответствовала ожиданиям беглости, требуемой этими действиями? Собственно, давайте побольше. Чтобы учащиеся могли использовать большую часть развертываемых нами технологий, мы должны лучше подготовить их к пользовательскому интерфейсу. Пока существует клавиатура, она должна составлять значительную часть того, чему мы учим маленьких детей. Я знаю, что мы боимся экранного времени (может, без причины), но серьезно: сколько времени вы проводите за клавиатурой в своей взрослой жизни? Сколько по сравнению с количеством времени, которое вы проводите за ручкой?

Так и думал. Это не подготовка к будущему; это подготовка к настоящему.

Если мы действительно хотим сгладить переход от блочного программирования к текстовому, никакое волшебное приложение или гибридный язык программирования не справятся с этой задачей. Вместо этого мы должны построить соответствующие леса для повышения технической грамотности за годы, предшествующие большому скачку. Таким образом, когда ученики встретят мигающий курсор с бесконечными возможностями, они будут готовы.

Обучайте клавиатуре. Учите это хорошо. Остальное встанет на место.

После прыжка

Как только вы преодолеете пропасть и перейдете к текстовому программированию, вам придется преодолеть еще одну проблему: абстрактное мышление.

Мы вводим программирование раньше, чем студенты разовьют все необходимые когнитивные способности для традиционных вводных упражнений по информатике. Вот почему, например, учащиеся могут столкнуться с трудностями при использовании концепции массивов или рекурсии. Эти абстракции требуют в развитии чего-то, чего, в зависимости от возрастной группы, которую вы преподаете, еще не существует. Мы можем обойти это ограничение с помощью тщательного планирования уроков - в частности, удерживание упражнений в визуальном пространстве, несмотря на использование текстового программирования, обеспечит контекст и обратную связь для изучения учащимися.

Я бы порекомендовал графическую библиотеку типа p5js или Processing.py. Черт возьми, даже старая добрая Черепаха может быть мощным инструментом.

Используя эти библиотеки, не только текстовое программирование может иметь визуальный контекст, но также возникает новый творческий аспект: код может стать искусством.

Здесь так много возможностей, по другую сторону пропасти текстового программирования. Подготовьте своих учеников к прыжку, а затем переходите к нему.