Для совсем новичков - однозначно Scratch. Все базовые языковые конструкции в связке с удобным UI-ным формированием программы и возможностью быстро посмотреть красивый результат а-ля "сделали цикл - побежал котик". Очень напоминает старые "исполнители" по типу уже упомянутой одним из авторов черепашки, но на качественно новом уровне.
Дальше - сложнее. В средних и старших классах стоит начать уже изучать полноценный язык программирования, и вот с его выбором проблемы уже возникают довольно серьёзные.
Я бы явно учитывал в плюс при выболе перечисленные ниже критерии.
- Язык относится к какому-либо популярному семейству. Потом перескочить с условного C++ на условную Java новичку будет гораздо проще, чем с условного Basic на условный Python - так как алгоритмы, конечно, останутся, но весь синтаксис пойдёт на помойку, а у новичка он очень большой процент знаний составляет.
- Язык имеет более-менее вменяемые современные компиляторы, IDE и документацию. Понятно, что не самые последние, о проблемах школ с техникой тоже помним, но работать под условным Borland C++ 3.1, который запускается на современных машинах только с кучей танцев, явно не стоит.
- Возможность написать пусть и простенькое, но реально работающее приложение. Если тот же школьник может сказать всем в классе: "смотрите, вот у меня на телефоне есть крестики-нолики, которые я САМ написал" - это сделает для популяризации программирования среди его друзей гораздо больше, чем любые лекции учителя о пользе условного Паскаля.
- Сам со себе язык не содержит явных ошибок/нелогичностей в ядре (привет, JavaScript) и неочевидных подводных камней (типа случайно забытого & в scanf в C). Такие вещи без проблем обходятся внимательностью и наработанным опытом, но грузить этим школьников всё-таки не стоит.
- Поддержка статической типизации. Потом, если понадобится, переучиваться на динамическую на порядок проще, чем обратно.
- Простота установки, настройки IDE и создания первых приложений. Потом можно разобраться, но необходимость на самом первом этапе прописывать что-то в переменных окружения, чтобы нормально заработала условная Java, или писать обработку исключений/использовать сторонние классы при чтении с консоли в ней же очень сильно отвращают от языка новичков.
В этом плане мне больше всего нравится C#, так как там лёгкая установка "из коробки" сочетается с простотой написания базовых приложений с потенциалом перехода на Unity для создания простейших игр, или на кросс-платформенный Xamarin, если понадобится что-нибудь простенькое сделать под мобильник, да и примитивные сайты тоже могут быть без проблем созданы на вполне себе школьном уровне. Главное, чтобы всё это потянул учитель и стоящая в школе техника.