Вопрос: Что можно сделать с детьми на уроках информатики?

Лучший ответ: Дайте реальную и полезную задачу — этого так не хватает современному образованию!
Разбейте их на группы-фирмы, где они должны будут сами распределить роли — научатся саморганизации и заинтересуете всех учеников, а не только вьедливых ботаников.
Пусть они запустят, допустим, приложение в Google WebStore с каким-нибудь полезным функционалом — научатся анализу рынка.
Распределив роли на менеджеров, аналитиков и маркетологов, вы сохраните интерес у всех участников на протяжении всего обучения. Важно давать простые индивидуальные задания.
Фирмы должны соревноваться за какой-то приз, звание или титул.
Сделайте из знания ценность, пусть каждую неделю они борятся за вашу помощь в их проекте или за высокие отметки.
Процесс реализации приложения делится на следующие части:
— Выбор решаемой задачи.
— Формирование сильных отличительных сторон приложения.
— Описание функционала (проектная документация).
— Этапы и сроки реализации.
— Программирование и проверка (тестирвоание) каждого этапа.
— Проверка работоспособности всего приложения.
— Публикация и запуск проекта.
Заданием может быть реализовать будильник или калькулятор на html+js — браузеры есть у всех. Если все фирмы будут реализовывать один вид проекта, то это научит их еще и конкуренции, промышленному шпионажу и прочему. Пусть под конец проголосуют чтобы определить победителей.

Худший ответ: На мой взгляд, надо исходить из начальной подготовки ребят. Что они уже знают и умеют.  Исходя из уровней подготовки формировать группы и ставить перед ними задачи.
Ключевой аспект - задача должна быть интересной.
Опять-же, на мой взгляд, выбор языка программирования ребятами - не принципиален. Важно, чтобы поставленная задача была решена правильно и не пропал интерес к дальнейшему обучению и решению более сложных задач.
Практически изучить любой язык программирования, имея страсть к этой науке не представляет особого труда. И, задача учителя, на мой взгляд, этот интерес поддерживать и развивать. Пусть хоть на бейсике пишут, если он вызывает у них живой интерес. Наличие и поддержание интереса намного важнее "правильности" выбранного языка. Рассказать о том, какие языки программирования существуют, чем они отличаются, как и где используются. Дать им попробовать и выбрать самим.
Итак, если упрощённо, то создание приложения делится на следующие этапы:Сбор требований к задачеПроектирование структуры приложения (подробнее об этом я скажу ниже по тексту)Распределение задач (модулей) между участниками группы с определением сроков реализацииРеализация модулейТестирование модулейИнтеграция их друг с другом и тестирование собранных вместе модулейСоздание справочной документации к приложениюЗапуск в эксплуатацию
Начинающие часто проектируют приложение снизу-вверх. Если вообще проектируют. То есть они начинают строить дом не имея общего плана, а вот им хочется сделать крыльцо, они начинают его строить, потом начинают строить первый этаж, а он с крыльцом не стыкуется толком, надо переделывать крыльцо, потом опять переделывать первый этаж и так далее со всеми остановками.
Это приводит к тому, что они закапываются в проблемах и, в конечном итоге, терпят неудачу и теряют интерес к проекту.
Надо объяснить им, что проектирование делается сверху вниз. То есть идём от общего к частному. Проектируем сперва дом (коробку), затем планировку этажей, потом планировку квартир, потом комнат и так далее. Пока не опустимся на уровень, ниже которого опускаться уже нет смысла.
В таком случае нет риска упустить что-либо важное, и всегда есть общее видение проекта, из каких частей он состоит, и как продвигается работа.
Запуск в эксплуатацию можно организовать так, чтобы ребята принимали программы друг друга. Полезно бывает посмотреть, как незнакомый с программой человек с ней работает. Заодно смогут понять важность создания понятных интерфейсов и создания понятных описаний к своим продуктам.
Какие задачи давать, зависит от уровня подготовки. Можно создать некий набор задач, и предложить им выбрать самим ту задачу, которую им-же будет интересно делать.
Это могут быть игры. Для новичков - пусть будут логические игры, с выводом в консоль. Например, игра Ним. Для более опытных, можно дать игры посложнее.
По моим наблюдениям, абстрактные материи детьми воспринимаются без особого интереса, зато, если в программе можно сделать что-нибудь "прикольное", это интересно, и этим будут заниматься.
В этом отношении полезны различные графические и звуковые возможности выбранного языка программирования. Пусть реализуют задачи сперва с работой в текстовой консоли, затем переделывают на работу с графикой.
Когда "наживка" будет проглочена, и ребята в массе своей будут хорошо разбираться в предмете и инструментах можно будет потихоньку отходить от игровой обстановки и переходить к другим, не-игровым задачам.
Рассказать о различных направлениях в разработке, о задачах и о том, как они решаются.
И пусть ребята выбирают, какое направление им более интересно.
Кому-то будет интересно писать игрушки, кого-то может заинтересовать написание программ для автоматизации какой-либо деятельности, кто-то заинтересуется генетическими алгоритмами и искусственным интеллектом.
Материалов в интернет сейчас достаточно, правда бОльшая часть их на английском языке.
Успехов вам в этом непростом и важном деле :)