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