Из опыта создания кружка программирования для детей

Появление кружка


Предыстория этого кружка началась два года назад. К тому времени я уже несколько лет подрабатывал репетитором информатики и программирования, в основном ученики по информатике программировали на Pascal, он больше распространен в школах.
А осенью 2011 года у меня появился необычный ученик: ребенок в 4 классе очень хотел заниматься программированием, и узнав что я обучаю Delphi мы с его мамой договорились что попробуем обучить на нём. Ребенок оказался очень одарённым, и у нас получилось очень хорошие и плодотворные занятия. И многие идеи появились только благодаря его постоянному интересу к программированию.

К тому времени я работал в кружке робототехники Дворца Молодёжи Свердловской области. И у меня появилась мысль организовать такой кружок программирования у нас. Для создания этого кружка прежде всего надо было определить несколько вещей:
  • на какой возраст рассчитываем. Дело в том что я много изучал психологию (закончил психфак УрГПУ), и знаю что логическое мышление начинает развиваться (и наиболее хорошо развивается) начиная с младшего подросткового возраста. И занятия программированием будут в плане развития наиболее ценны для подростков. Это прежде всего это развитие способности держать в голове большие объёмы информации, и выстроенные между ними логические связи. Итак возраст был определён минимум от 11 лет и старше (рекомендуемый возраст 13-15 лет);
  • цели обучения программированию (особенно учитывая возраст детей). Первая цель как написано выше — развивающая. Вторая цель — заинтересовать, приобщить детей к этому занятию. Именно поэтому (да простят меня сторонники традиционного обучения, требующие сначала обучать на обычном языке, а потом уже на объектно-ориентированном) было четкое понимание, что именно программы с графическим интерфейсом будут интересны детям. Итак мы переходим к третьему аспекту:
  • в какой среде программируем. В качестве такой среды был выбран Lazarus. Во-первых синтаксис Pascal куда проще для детей, поэтому я решил отказаться от того же С#. От Delphi пришлось отказаться, потому что учреждение областного уровня не может позволить поставить пиратский софт, а на покупку софта для нового кружка скорее всего денег бы не нашлось. Поэтому был выбран бесплатный Lazarus



Следующий вопрос — как будем строить занятия. Несомненно на первых занятиях необходимо дать основной материал: научить детей ориентироваться в модели «объект — свойства — события», объяснить участие в этом операционной системы, и пониманию что такое переменные и как они связаны с памятью компьютера. Я сначала думал стоит ли объяснять на первых занятиях (как обычно делают при обучении объектным языкам) структуру библиотеки компонентов, механизмы инкапсуляции, полиморфизма и т.д. — но в итоге решил что на начальном этапе это лишний перегруз, и скорее всего дети просто не поймут. Поэтому мы об этом даже не говорим, не используем понятие «компонент», чтобы дети не запутались, вместо него термин «объект». То есть курс конечно упрощён, но зато так детям понятнее и интереснее. Я думаю что это не нанесёт большого ущерба. Ведь в школе же учат на математике что нельзя извлечь корень из минус единицы. А потом дети приходят в институт, и спокойно изучают комплексные числа, и вроде это не вызывает больших проблем с непониманием. Так и здесь я думаю стоит некоторые вещи упрощать, делая всё максимально простым и понятным. Ну и следующий важный аспект: каждая тема должна подкрепляться программированием. Если на первом занятии читать только теорию (как часто делают в институтских курсах ООП), то на втором занятии детей придёт уже в 2 раза меньше. Ну и наконец те программы, которые мы делаем должны быть интересны детям. Поэтому в курсе в основном мини-игры, программы-шутки, виртуальные энциклопедии и т.д.
После того как мы изучили основу, мы переходим к обучению по лабораторным работам.

Сожержание занятий


Полностью конечно все темы не распишешь, но что учим на первых занятиях я думаю стоит написать для понимания как мы учимся (одно занятие у нас идёт 45 минут):

Занятие 1. Привет, мир!

Общая теория: Для чего нужна ОС, её структура. Как работает графическая ОС. Что такое WinAPI. Принцип работы кроссплатформенных приложений. Объекты, свойства, события. Интерфейс Lazarus: что где находится, где брать новые объекты, где смотреть свойства, как работать с формой визуального конструирования.
Новые объекты: Form, Label.
Новые свойства: Caption, Font, Color
Задание: Создаем программу с надписью «Привет, мир!». Меняем шрифты надписи, фон окна. Учимся правильно сохранять проект программы.

Занятие 2. События.

Общая теория: Повторение про ОС. Объекты, свойства, события. Снова вспоминаем, где какое окно в интерфейсе Lazarus и что оно означает. От конструирования к программированию. Автоматическое создание процедур обработки событий. Что такое процедура, её структура.
Новые объекты: Button.
Новые свойства: BorderStyle, AlphaBlend, AlphaBlendValue
Новые события: OnClick
Задание: Добавляем в программу «Привет, мир!» две кнопки: «Закрыть» и «Перекрасить». Пишем для них обработку событий. (Кнопка «Перекрасить» меняет цвет фона и цвет шрифта). Экспериментируем с BorderStyle и прозрачностью.

Занятие 3. Убегающая кнопка.

Общая теория: Прорисовка объекта. Координаты объекта: абсолютные и относительные. Генератор случайных чисел.
Новые свойства: Height, Width, Top, Left
Новые события: OnMouseMove
Задание: Программа состоит из окна, в центре которого кнопка с надписью «Нажми меня». При наведении курсора кнопка убегает в случайное место. Дополнительно задание: сделать так, чтобы при изменений пользователем размеров окна программа работала корректно (то есть изменить аргумент рандома, например вместо конкретного числа указывающего высоту формы поставить свойство Form1.Height).

Занятие 4. Калькулятор.

Общая теория: Как работает оперативная память. Что такое ячейка памяти. Переменные: как правильно попросить у ОС ячейку в памяти: придумать имя, определить тип, определить размер. Типы числовых переменных: Byte, Integer, double. Как правильно объявлять переменные (пишем раздел var в процедуре). Разница между числом и текстом. Функции IntToStr и StrToInt.
Новые объекты: Edit.
Новые свойства: Edit.Text
Задание: Программа-калькулятор. Два Edit для ввода чисел. Четыре кнопки: +, — , *, /. И Label для вывода результата.

Занятие 4. Ветвление.

Общая теория: Ситуация выбора. Оператор If, и его конструкции. Правильное использование опературных скобок. Правильная структура программы, или для чего нужны отступы. Полное и неполное ветвление. Вложенное ветвление. Комментарии к коду, как делать, для чего нужны.
Задание: Доработать калькулятор. Сделать кнопку «Сравнить», при нажатии кнопки в ответ выводится, какое число больше. Дополнительное задание: сделать так, чтобы программа работала корректно: при равенстве двух чисел выводила, что они равны.

Занятие 5. Угадайка.

Общая теория: Повторение If. Изучение работы с многострочным текстовым полем Memo.
Новые объекты: Memo.
Новые свойства: Memo.Lines
Задание: Добавляем в программу «Привет, мир!» две кнопки: «Закрыть» и «Перекрасить». Пишем для них обработку событий. (Кнопка «Перекрасить» меняет цвет фона и цвет шрифта). Экспериментируем с BorderStyle и прозрачностью.
Программа состоит из окна для ввода числа, кнопки ОК, кнопки «Загадать» и многострочного поля. Компьютер загадывает число от 1 до 100. Пользователь угадывает это значение, вводя числа в поле ввода. После ввода числа компьютер выдает подсказку в Memo: например загадано число 10, пользователь ввел 20, компьютер выдаёт: «Моё число меньше!». Дополнительное задание: доработать программу, чтобы пользователь выбирал диапазон загадываемых чисел.

Конечно вся теория объясняется языком, максимально понятным ребёнку. Если мы рассматриваем объектную модель, то мы открываем разные программы, ищем в них одинаковые объекты, дети ищут что разного в этих объектах (для понимания что такое свойства). Если мы изучаем память, то мы представляем её в виде шкафчика с ячейками (на доске в это время презентация, в которой нарисован шкафчик), и т.д. Главное чтобы всё было максимально наглядным.

Ведём тетради, но пишем по-минимуму: из этих занятий записано структура обращения к свойству объекта из программы, структура рандома, и структура If. Так же у нас в тетради отдельно три словарика: для объектов, для свойств, и для событий. Там так же пишем кратко, например Color — цвет.

Что есть сейчас, и наши планы.


В кружке у меня занимается одна группа, в этом году 9 человек. В основном это 5-7 классы. Есть один третьеклассник (пришёл с робототехники), девятиклассница, и 1 человек из 11 класса.
По способности к программированию — в принципе как в обычных группах колледжа: несколько человек обладают хорошими способностями, остальные средними. По возрасту лучше всего программируют 11классник (ну оно и понятно), и на таком же уровне три мальчика из 7 класса.
Думал что тяжелее всего будет мальчику из третьего класса (он пришел потому что по времени не мог ходить на робототехнику, а бросать занятия у меня никак не хотел), но оказалось что он вполне успевает.

В планах — постараться расширить горизонт. У меня несколько учеников занимались/занимаются кроме этого кружка в кружке робототехники, и один из примеров которые я хочу попробовать сделать в проектах к концу года — внешнее устройство с взаимодействием через COM-порт. То есть на компьютере мы пишем программу, которая осуществляет взаимодействие с COM-портом, а на Arduino собираем само устройство, которое управляется/обменивается данными с компьютером. Это конечно пока только в планах, и я ещё не знаю как пойдёт — но это из тех вещей к которым хочется стремиться.

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

Пожелания, или для чего написана эта статья.



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

Ну и во-вторых, если кто захочет организовать такой кружок(например в ближайшей школе) — буду рад поделиться опытом.

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 36

    +10
    Занятие 1. Привет, мир!
    Что такое WinAPI


    Вам не кажется что для детей это перебор? Я про WinAPI. Есть риск сделать сломать им мышление в раз и навсегда.
    Зачем детям изучать существующие контролы (Edit, Button, etc)? Вам не кажется, что намного лучше будет донести до них концептуальные вещи, а выбор реализации оставить за ними?

    Не так давно проскакивала ссылка
    И я абсолютно согласен, что программированию надо начинать учить с этого, а не с кнопочек и полупрозрачности.
      –5
      Я вообще там ниче не понял, головоломки какие, пазлы…
        +7
        я преподаю программирование в университете и приходится делать тоже самое — изучать GUI вперед основ. потому что есть такой момент — нужно заинтересовать учеников, иначе они будут просто посещать занятия. заинтересовать инкапсуляцией, полиморфизмом или консольным приложением можно очень не многих. приходится вместе с ними создать пару программок с GUI, они загораются, дальше наталкиваешь их на сложности и начинаешь объяснять с основ.
          0
          Согласен, в университете нужен другой подход.
          Я не имею в виду ООП, скорее общий подход к программированию: алгоритмика, мат. аппарат, если хотите. Если неподготовленным детям рассказывать про ООП, то это может привести к тому, что будет красивое разбиение по классам и методам, которые будут пустые по функциональной составляющей.
          С другой стороны, в университете уже не дети, и они (студенты), согласитесь, должны быть замотивированы самостоятельно. Это не совсем правильно, когда надо «бегать» за студентами. Но это вовсе не означает, что надо забывать про совершенствование навыка подачи материала.

          P.S. Когда-то в период расцвета Visual Basic и Delphi я видел индивидов, которые начали освоение «программирования» c GUI. Больно им потом переосмыслять, что во главе угла вовсе не GUI. Не у многих получалось через это пройти, когда тот первоначальный интерес, про который вы говорите, в их глазах таит когда они видят что программирование — это не только пушистый мех GUI…
            0
            Должны быть мотивированы, но это не так чаще всего (сами были студентами, помним каково это), кроме того я веду пару прямо перед обедом, ну, какое тут может быть программирование?
            Это совсем не правильно уговаривать студентов поучиться, но не хочется впустую «молоть языком» и прыгать у проектора, поэтому пытаешься идти навстречу и искать точки соприкосновения интересов, всё таки хочется быть хорошим преподавателем.
            Я сам когда то пережил перелом сознания, поняв, что GUI это дело десятое и готов помочь осознать это студентам, но для этого мне нужно завладеть их вниманием.
            +1
            Могу показать чему учим мы на первом курсе матмеха УрФУ. Там нет GUI, но полно интересных задач. Пишите в личку, если вдруг интересно.
            +1
            В WinAPI нас интересует только принцип взаимодействия ОС с программой.
            Как это объяснить ребенку? Зовем ребенка к доске. Говорим: возьми маркер, нарисуй окно с заголовком такого-то размера. Нарисуй кнопку, с таким-то размером, и с такой-то надписью. Молодец! Так вот смотри, я делал запрос к тебе: какой объект рисовать, и с какими свойствами, а ты рисовал мне. Так и работает программа с WinAPI: она делает запрос в ОС что рисовать и как это должно выглядеть, а ОС выполняет эти команды.

            Насчет графических языков программирования… Я тоже думал, может быть сначала попробовать тот же скретч.
            Но рассматривая опыт программирования в робототехнике, где мы начинаем с графических сред, получается что на определенном этапе графическая среда становится тяжелее для восприятия чем текстовая. Во-первых структура понятна, когда блоков ещё мало, когда начинаем писать программы длиннее, то блоки занимают много места, и ориентироваться в программе наоборот становится тяжелее. Текстовая программа более компактная. Во-вторых некоторые вещи в графических средах весьма неудобны, например в том же графическом Robolab было довольно неудобно работать с подпрограммами, в которе нужно передавать параметры. В текстовых языках работа с подпрограммами куда более логична. Или была проблема с логическими выражениями, состоящими из нескольких условий (например программирование движения, которое зависит от показаний нескольких датчиков). В результате всего этого теперь приходится всех кто учился в графическом роболабе переучивать на текстовый RobotC.
            Мне почему-то кажется что если мы начнем программировать сейчас в графической среде, то мы так же придем к ситуации что возможности среды исчерпаются и придется переучиваться.

            Насчет выбора — дело конечно хорошее. Но факт в том, что концептуальные вещи все-равно надо учить на основе чего-то. Да и прежде чем выбирать на чем реализуем, надо иметь представление из чего выбирать. Дети же такими знаниями не обладают, то есть стоит вопрос на основе чего учить их этим знаниям. Вот мы как раз на основе Edit, Button и т.д. учим. Плюс такого выбора что мы обеспечиваем главную цель: ребенку интересно. Он уже с первых занятий приносит программы, которые что-то делают интересное для него, которые можно показать друзьям, и те скажут: ого, и это ты сам сделал?
            То есть как было написано в статье, мне кажется важнее привить интерес к программированию у детей, и вроде те вещи которые мы делаем этот интерес вызывают.
              +2
              Простите, если немного не в тему. Если позволите немного личной истории.
              Когда я учился в школе, было модно вводить такой предмет как «информатика». Директора школ наличием «информатики и экономики» козыряли перед родителями для подчеркивания необходимости передачи ребенка именно им, и обоснования родительских пожертвований на новый компьютерный класс.
              Это была первая половина 90х. Тогда программа обучения по «информатике» еще не была утверждена и менялась каждый семестр.
              Как сейчас помню, сначала мы изучали бейсик на БК0010, потом МинОбр сказало, что так не надо, давайте-ка рассказывать детям олигофренические истории, которые слабо притянуты к предмету. Потом вроде поставили 486DX (и даже Пентиум-1) и опять всех погрузили в бейсик, затем решили, что это не нужно, а Word, Excel, PowerPoint — наше все. Пока продолжался этот хаос, учитель учила нас (по своей инициативе) «классическим» блок-схемам и алгоритмике.
              Пока события развивались таким образом, самым ценным навыком вынесенным оттуда, были как раз те алгоритмические задачи, которые развили нужные способности и привили интерес.
              Должное надо отдать тому факту, что тогда компьютер был «в диковинку» и не у каждого он был дома.
              Тем не менее, когда я дорос до «нужного уровня» мне порекомендовали пойти в «кружок программирования» (не в школе), где Учитель (дважды доктор и профессор) обучал программированию, основываясь на индивидуальном подходе к ученикам. Причем не столько владению ЯП (Pascal), сколько мышлению для решения различных задач, используя ЯП как инструмент. При обучении использовался проблемный метод. Навык владения которым рос пропорционально количеству выполненных задач. Как сейчас помню, было очень интересно наблюдать за моделью упругого удара у двух шаров (в проекции — окружностей, — упрощенная модель), или же написания процедуры заливки (своей) сначала для выпуклого, а затем произвольного многоугольника.
              Не смотря, что в это время уже во всю жила Win9x, ДОСовский pascal был выбран не случайно (ИМХО, Паскаль — академический язык, предназначенный именно для обучения программированию). Разумеется, сейчас паскалевская графика смотрится крайне убого, на современных мониторах с HD разрешением, но возможно, есть какие-то продолжения идеологии, без оверхэда в виде графического интерфейса.
                0
                Ещё хочу в качестве примера указать на проект BrickPi — это на базе RaspberryPi(Arduino) сделали мозг/контроллер к периферии Lego.

                www.dexterindustries.com/BrickPi/

                Сам проект полностью open-hardware.

                То есть Лего конструктивом можно управлять через Linux систему (что есть RPi). Они приводят примеры программирования на: C, Python, Scratch.

                Так же есть проект sites.tufts.edu/blockytalky/ — который предоставляет аналог Scratch, но на базе веб-решения — Blockly — это визуальное программирование. Но фишка в том, что Blockly — переводит то что визуально «построено» на Python — и уже эту программу посылает на выполнение в RPi микрокомпьютер.

                То есть ученик по мере подхода к пределам визуальной среды программирования — может перейти на программирование напрямую на Python. Что делает сам подход более перспективным. Т.к. инфраструктура (робототехническая) может быть оставаться без изменений.
                0
                Blockly — хорошая штука, но у меня есть один вопрос: не лучше ли использовать «интернациональный» язык блок-схем для обучения детей основам программирования и составления алгоритмов? Есть же графические языки программирования на основе классических блок-схем. Например, такие. Причем у этой среды есть бесплатная версия.

                Это же естественный процесс — сначала изучать базовые основы, а потом использовать эту базу для погружения в более узкую специализацию.
                0
                Великолепная идея! Сам давно мечтал заинтересовать и обучить кого-нибудь программированию, да времени пока нет. Была идея ввести кружок в школе с ООП (ибо его стоит в школе и проходить), да «у детей и так бешеная нагрузка».
                Из игр банальные: тетрис, змейка, арканоид, сапер, различные карточные.
                Или вот, сам в детстве писал: игрок управляет кораблем, за которым охотятся охотники. Вектор скорости охотников всегда направлен на корабль, по модулю их скорости равны (или у корабля чуть больше). Кораблю нужно проходить через ворота, когда проходит — появляются новые, в рандомном месте. Корабль гибнет при встрече с охотником, количество очков считается по количеству ворот.
                А можно еще самим детям дать придумать/выбрать игру, заодно научить их понимать, что они могут сделать, а что пока нет.
                  +2
                  Спасибо за статью!

                  Думаю, стандартный вопрос: почему всё-таки выбран паскаль, а не скажем питон? Единственное, что я вижу в паскале это его традиционность в системе российского образования. В остальном и по лёгкости освоения, и по применимости, и по количеству библиотек питон, по моему мнению, на много голов превосходит паскаль. Да, можно сказать что в питоне мало вкуса железа (т.е. не надо заботиться особенно о выделении и освобождении памяти, типизации и прочем), но ведь целью является обучения программированию и освоение практических навыков, а не обучение деталям реализации тех или иных систем.

                  Кроме того, соглашусь, что в первую очередь желательно обучать программированию, а не рисованию кнопочек и рюшечек. Плюс, думаю, полезно было бы обучить азам командной строки и показать что компьютер Виндовсом не ограничивается. (т.е. на уровне загружаемся в условную убунту, пишем в текстовик программу, запускаем в консоли)

                  Если всё же хочется GUI, то для питона существуют отличные библиотеки, например, pygame, который и кнопки нарисует и поможет быстро создавать простенькие игрушки (вплоть до трёхмерных, а тут уже и OpenGL с линалом).

                  Касательно программ которые могут заинтересовать детей могу предложить змейку (для пафоса можно назвать мотоциклы как в Троне), тут и простая программа, и возможность вставить картинки мотоциклов в интерфейс, и мультиплеер через стрелки и WSAD. Может даже кто-то из старшеклассников захочет написать честный мультиплеер по сети.

                  UPD: В качестве чуть более факультативной темы можно ввести командную разработку, т.е. та же игрушка даётся маленькой группе людей, тут и разделение по модулям, и взаимопомощь с взаимоподтягиванием, а в перспективе и обучением азам DCVS когда возникнет необходимость. Плюс когда ты в команде будет значительно сложнее сачковать
                    0
                    Ну и кстати насчёт змейки, можно ещё добавить даже разработку ИИ разных уровней сложности, т.е. необходимо будет продумывать не только оптимальную стратегию поведения, но и систему поддавания, дабы человеку было интереснее играть. Ну и касательно опять же модульности, можно сделать так, что часть учеников берёт на себя написание игры, а доставшиеся разделяются на команды и пишут ИИ под интерфейс определённый первыми, после чего проводятся соревнования. Тут и заинтересованность, и написание интерфейсов и программ под них, и согласование документации, и командная работа, и драйв соревнования. В общем, простор для деятельности огромный.
                      0
                      GUI не то что бы хочется, это основной элемент который делает для ребёнка программирование интересным.
                      Если мы начнём обучение с консольных приложений, количество детей в кружке резко сократиться. И основную цель — заинтересовать детей мы не выполним.

                      Командную строку я показывал, когда вкратце рассказывал про эволюцию ОС. Показывал различные команды. Но как-то детей это не очень впечатляет. Думаю им пока картинки — кнопки интереснее. В планах есть идея попробовать их научить делать небольшие .bat файлы, и запускать их из приложения (как способ попробовать заинтересовать этим направлением).

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

                        Кроме того командная строка и GUI вещи не взаимоисключающие, в качестве примера можете посмотреть helloworld написанный с помощью pygame'а (в окошечке там не только текст, но и несколько цветных фигурок). В интерактивном режиме можно итеративно видеть как вводимая команда влияет на отображаемое в окне. Думаю, подобный стиль написания быстрее заинтересует детей, чем дельфиподобный подход, ибо к играм он ближе.
                          +1
                          По поводу Python, думаю один из лучших языков для начинающих — он очень активно сейчас продвигается на базе микрокомпьютера RaspberryPi, есть бесплатная версия Minecraft игры для RPi, и учитель информатики выпустил книгу с примерами работы с API Minecraft через Python и выложил её в открытом доступе, подробнее можно прочитать здесь:

                          Learning Python using Codecademy and Raspberry Pi Minecraft: a resource of great note

                          Вот пример того что можно сделать — классическая игра Змейка в мире Minecraft. Такие уроки информатики думаю будут запоминаться детям :)
                        0
                        Лично мне было интересно программирование, потому что я хотел создавать игры.
                        Я пробовал приобщить к этому одноклассников, но согласился только мой друг, который дальше 3 кнопок в Game Maker не прошел.
                        Чуть позже, давая знакомым книги и уроки по С++ с предложением создать игру, кое-как осилили этот язык те, кто по-настоящему хотел это сделать, кто-то бросил после cout << «123»;, кто-то запоролся на указателях.
                        Я написал это для того, чтобы сказать, что для большинства школьников интереснее играть в ВоВ или танки, чем 2 часа бороться с «а чо у меня SDL не подключается» после 2 месяцев на консоли, и их надо увлекать чем-то большим, чем консольные программы. Например, покажите им редактор Unity или Game Maker
                          +1
                          За начинание плюс, статья не очень, уж без обид. Я бы все таки взял C# и студию экспресс. Очень просто на примере WPF показать как будет «красиво», но это сугубо мое мнение. Да и в жизни больше пригодится.
                            +1
                            Очень приятно было узнать, что кружок у нас в Екатеринбурге :)

                            Я тоже замечен в преподавании программирования только на первых курсах университета. Если интересно, я могу показать примеры задач по своему интересных, но не требующих разбирательства с GUI. И способ организации занятий так, чтобы GUI можно было передвинуть на время после основ.
                              +1
                              один из примеров которые я хочу попробовать сделать в проектах к концу года — внешнее устройство с взаимодействием через COM-порт. То есть на компьютере мы пишем программу, которая осуществляет взаимодействие с COM-портом, а на Arduino собираем само устройство, которое управляется/обменивается данными с компьютером. Это конечно пока только в планах, и я ещё не знаю как пойдёт — но это из тех вещей к которым хочется стремиться.


                              Вот в этом проекте мы готовы вам полностью помочь :)
                              Так как у нас в планах так же создать такой набор для начальных/средних/старших классов (и с развитием для студентов). При этом полностью открытый проект.

                              На мой взгляд наличие такой реальной системы подключенной к компьютеру сделает изучение программирования намного интереснее.

                              Вот например в Штатах есть учебные мобильные роботы для уроков информатики Finch.

                              Будем рады пообщаться, мы из Екатеринбурга — Хакспейса MakeItLab.
                                +2
                                Я бы мог зайти на один или два урока и рассказать про разработку мобильных игр на Lua с Corona SDK. Если заинтересует их — уже сами продолжат изучать.
                                Если интересно — пишите.
                                  0
                                  Порекомендовал бы в качестве среды обучения PascalABC(http://pascalabc.net/).
                                  В качестве быстрого старта — то, что нужно!
                                  Сразу позволяет писать программы — без изучения особенностей IDE.
                                  Да и Паскаль мы все знаем — проще объяснить…
                                    +1
                                    Не думали использовать какой-нибудь визуальный язык, например Scratch (на хабре есть статья про него)? Это я к чему, когда я учился в школе, мы писали на Turbo Pascal, окошки делали на Turbo Vision, в университете была Delphi, сейчас же я пишу на Rails. Я ни о чем не жалею, но для «младшего подросткового возраста», наверное, лучше особо не отвлекаться на детали реализации текущих (или даже бывших) отраслевых лидеров.
                                    PS. Ах да, в школе была «черепашка» лого — для рисования. Очень теплые воспоминания.
                                      +1
                                      Не пользы для, а хохмы ради:
                                      Как дошкольника научить лямбда исчислению? Alligator Eggs! worrydream.com/AlligatorEggs/
                                        0
                                        Во-первых у меня большая просьба: если вы знаете программы, которые могут заинтересовать детей

                                        Возможно, вы это уже читали, но на всякий случай: есть неплохая книжка М.Мозговой «Занимательное программирование», ее легко найти в Интернете.
                                          0
                                          Эх, прочитать бы ваши комментарии тогда, когда я находился в самом начале пути программиста и не знал, куда деться! :(
                                            0
                                            Прочитал топик, вспомнил школьные годы :)
                                            Моим учителям цены не было, начинали с Кенгурёнка:

                                            image

                                            В этой среде программирования два режима работы: командный и программный. В командном режиме все команды выполняются сразу, а в программном режиме — после команды Пуск.

                                            Кенгурёнок очень хорош для понимания ветвления.

                                              0
                                              Помню, я в школе написал программу на бейсике-укнц, которая отображала определение случайно загаданного слова, а пользователь пытался по буквам угадать. Если букву не угадывал, рисовалась часть виселицы. В итоге, или слово угадаешь, или тебя повесят. Т.е. этакий совмещенный «Поле-Чудес», модный в то время, и детской игры «Виселица», в которую мы с сестрой играли. Там была база слов и их определений, была обработка введенных символов, было рисование графических примитивов (кружок, линия). Говорят, эта программа потом ходила по школам нашего городка как учебное пособие :)

                                              Дома я написал уже спектрумовском бейсике игру-стрелялку. Внизу экрана влево-вправо двигаешь плаформу (прямоугольник) с пушкой стреляющей вверх по нажатию пробела, а сверху из случайных позиций выезжают вражеские корабли, у меня это были просто квадратики, к-е идут вниз. Нужно поставить платформу напротив и расстрелять корабль. Если три корабля прорвались — проиграл. Ну и вроде всё это ускорялось постепенно. Нужно настрелять как можно больше кораблей. Здесь хорошо изучать перерисовку графических элементов, эмитирующих движение платформы, корабля, снаряда; просчет траекторий, замкнутый цикл в реальном времени, задержки, граничные условия.
                                              Что-то я еще там писал… но сейчас уже не вспомню, это были 1992-1995 года…

                                              Короче, имхо, школьникам нужно давать задания, которые популярны в данную эпоху. Ну какие передачи по телику смотрят, во дворе во что играют, в какие игры рубятся. Трансформеры там, война русских с американцами, птицами в cвиней стрелять :) вобщем то, что модно, молодёжно, современно. Может с ними стоит поговорить, на чём они залипают. Их можно этим подкупить, заинтересовать. У каждого времени свои герои.
                                                0
                                                В качестве источника для идей проектов можно использовать книгу Шеня «Игры и стратегии с точки зрения математики».
                                                  0
                                                  А вот я бы настойчиво рекомендовал для обучения использовать не экзотические, а реальные промышленные инструменты.
                                                  Есть бесплатная версия Visual Studio Express.
                                                  И есть даже горизонт для развития — Team Foundation Server Express (или Team Foundation Service в интернете) для обучения командному взаимодействию.
                                                    0
                                                    Идея отличная, моё уважение, коллега! По поводу мини-игр, которые были бы интересны детям и полезны при обучении: вот парочка, использованных мной при обучении программированию. Их не сложно будет написать и самим детям, что несомненно большой плюс.
                                                    Довольно простенькая мини-игра — тот же однорукий бандит: таймер, 3 edit-а, кнопка по нажатию на которую поочерёдно перестаёт обновляться значение в edit-ах (при первом нажатии очки уменьшаются на 1), когда все остановлены — начисляются очки за 3 одинаковые цифры. Можно расширить задание, добавив уровни сложности — скорость вызова таймера.
                                                    Ещё одна не сложная мини-игра: Быки и коровы.
                                                    Также можно расширить задание с игрой угадай-ка: добавить варианты ответа «горячо-тепло-холодно» используя CASE и уровень сложности — количество попыток и разрядность числа.
                                                      0
                                                      Да, ещё можно раскурочить анимированную гифку с прозрачностью и создать простейший screen mate с анимацией по таймеру.
                                                      +1
                                                      По мне, так лучше всё-таки начинать с чего-то более низкого и алгоритмического. Скорее всего тем, кто начал заниматься только из-за графической приманки, будет болезненно осознавать, что кнопочки и формочки это не главное. Если школьнику скучно думать, то и после того как он позанимается расставанием кнопочек по формочкам всё ещё ему будет скучно думать, а это самое главное в программировании.

                                                      Зря вы считаете, что прямо-таки очень мало школьников, которые хотят заниматься алгоритмикой и, вообще, думать, решать задачки. Вот, например, в Летнию Компьютерную Школу каждый год с России съезжается 400-500 школьников (да ещё и с конкурсом, и оплатой), чтобы кодить там решения всяких задачек и слушать лекции, спецкурсы. Вот примерная программа (D — самая слабая, A — самая сильная параллель). И, скажу вам, подавляющие большинство отзывов, в том числе и мой, крайне положительны по отношению к такой форме обучения и вообще, материалу.
                                                      В Санкт-Петербурге и Москве точно, но и в других городах, наверно, тоже, есть довольно много кружков такого же плана.
                                                        0
                                                        Все-таки, ЛКШ это для тех, кто постарше. С 7-8 класса и дальше можно уже заинтересовать алгоритмическими задачами. И мне кажется, именно на это и стоит делать упор в этом возрасте — ибо дальше это больше пригодится, чем формочки. А вот для тех, кто помладше, с формочками будет проще освоить азы — те же ifы, арифметику и т.п. А на циклах и сортировках можно в консоль уходить.
                                                        0
                                                        Спасибо за статью и за комментарии, у самого ребенку 12 лет будет. думаю с чего начать обучение программированию…
                                                        думаю начинать стоит с базовых вещей типа блок-схемы алгоритмы. А язык программирования значения не играет.
                                                        да и хочу raspberri pi для этого прикупить.
                                                          0
                                                          Как не странно, без блок-схем можно совсем обойтись, но это не важно.

                                                          с 12-ти, мне кажется, вот: isocode.ru/

                                                        Only users with full accounts can post comments. Log in, please.