Во время Весенней научно-образовательной школы МГУ «ЛАНАТ» мы провели курс программирования для младших классов. Ребята научились программировать на языке Python и собирать интересные гаджеты на платах Intel Galileo и Intel Edison. О том, как это происходило, с какими проблемами мы столкнулись, и какие проекты получились у ребят, читайте под катом.


Работа в самом разгаре. На столе ждет машинка с дальномером.

0.053 платы на человека


У нас была всего одна плата Intel Edison, одна плата Intel Galileo, радиодетали, 8 компьютеров и 19 детей (некоторые с ноутбуками). Проще говоря, людей было много, а железа – мало. Нужно было наладить проверку написанных программ в больших масштабах.

Сначала рассматривали два очевидных варианта:

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

Главной проблемой было то, что оба варианта просто занимали слишком много времени. Спасло нас то, что на Edison стоит полноценный Linux и имеется модуль Wi-Fi: решили перекидывать файлы по SSH. Немного помучившись с настройкой роутера, нам удалось объединить все компьютеры и плату в одну сеть, запустить на плате sshd и подключиться к ней. Пробуем помигать светодиодом… всё работает!

Теперь нужно было как-то обеспечить детям доступ к плате по SSH. Здесь нас выручил старый добрый Notepad++, который, к нашему удивлению, обзавёлся поддержкой редактирования файлов через SSH. Конфигурацию и дистрибутив скопировали на ноутбуки с помощью обычной USB-флешки. Получилось, что подключиться к плате можно буквально в одну кнопку. В целях безопасности для учеников создали отдельного пользователя с минимальным набором прав и отдельные директории для хранения программ — по одной на класс.

Запуск программ на самой плате остался привилегией преподавателя, но работа уже пошла намного быстрее.

Первые шаги


Для обучения мы выбрали язык Python – достаточно простой, чтобы его можно было быстро объяснить, но достаточно функциональный, чтобы делать на нём действительно сложные проекты. Для взаимодействия с «железом» мы написали несколько своих библиотек с минимальным API.

На первом, вводном занятии, ребята изучили основы синтаксиса Python, познакомились с возможностями Galileo и Edison, узнали про разнообразные дополнительные модули. В конце занятия ребята смогли сделать главное дело в жизни каждого электронщика – помигать светодиодом.

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



Под спойлерами – несколько программ, написанными ребятами в ходе занятий:

«Светофор»
    import blink
    import time
    r=blink.Pin(6)
    y=blink.Pin (5)
    g=blink.Pin(4)
    y.mode("out")
    g.mode("out")
    r.mode("out")
    while 1:
        r.write(1)
        time.sleep(2)
        r.write(0)
        y.write(1)
        time.sleep(2)
        y.write(0)
        g.write(1)
        time.sleep(2)
        g.write(0)

Чем ближе подносим руку к дальнометру, тем быстрее мигают светодиоды
    import blink
    import time
    import ranging
    l=blink.Pin(0)
    d=blink.Pin(1)
    l.mode("out")
    d.mode("out")
    ranging.set_echo(4)
    ranging.set_trig(2)
    while 1:
        l.write(1)
        d.write(1)
        time.sleep(ranging.distance()/30)
        l.write(0)
        d.write(0)
        time.sleep(ranging.distance()/30)

Закрытие смены


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


Паша Бухтенко с работой “Светофор”


Юра Замятин и Саша Сенюков с игрой “Ковбои”


Андрей Ермаков с роботом-чертёжником

Научное будущее


Мы открыли набор на летнюю научно-образовательную школу «Ланат», которая пройдёт 16 июля — 5 августа. На летней школе будет целых два направления по программированию – наш курс с платами от Intel и курс прикладного программирования. За две недели ребята разработают свои проекты, лучшие из которых будут рекомендованы на конференцию «Ученые Будущего». Чтобы получить шанс поехать в школу, нужно принять участие в конкурсе.

Спасибо за внимание!

Комментарии (17)


  1. nerudo
    09.04.2015 11:32

    Достаточно лишь 2-3 раза дать детям попрограммировать и дальше они не смогут отказаться!


    1. MAD_GooZe
      09.04.2015 11:35
      +5

      Некоторым детям, чтобы они не смогли отказаться программировать, иногда даже 2-3 раза по шапке дать недостаточно:)


      1. GrakovNe
        09.04.2015 18:42
        -1

        Таким детям и программировать не стоит) Ну их


  1. Boomburum
    09.04.2015 11:42

    Тот неловкий момент… когда даже дети программируют на питоне, а я до сих пор не могу запомнить, как этот язык правильно пишется на английском ) Ох не моё это, программирование, хотя иногда так хочется.


    1. Revertis
      09.04.2015 12:19

      Дело именно в этом, программирование и лингвистика очень тесно связаны.


    1. Rumlin
      09.04.2015 13:50

      Запомните «Шоу Пайтона», особенно если посмотрите, то не забудете.


  1. scratch_book
    09.04.2015 14:20

    Зачем Вы сразу с Питона начинаете? Покажите детям Scratch!
    Он более наглядный и понятный.
    Кстати, он на Галилео запускается?


    1. art1415926535 Автор
      09.04.2015 16:03
      +2

      У Scratch нет нормального FFI.
      А форкать весь Scratch и переделывать его под работу с железом мы не хотели.


      1. scratch_book
        09.04.2015 17:55

        А какого возраста были дети? Точно начальная школа?
        Дома они продолжили изучение Питон самостоятельно?


        1. art1415926535 Автор
          09.04.2015 18:21

          Со 2 по 6 класс. Многие спрашивали как продолжить программировать, где купить такие платы, что читать.
          Много кто приезжает к нам на школы снова и снова, так что в следующий раз будут дальше изучать питон и делать намного более сложные и интересные проекты.


    1. sergei76
      10.04.2015 11:12

      Поддерживаю насчет Scratch. Хотя, пожалуй, зависит от возраста детей. Сын (только исполнилось 7 лет) научился неплохо программировать на Scratch за пару месяцев, теперь вот думаю, в каком направлении развиваться дальше. Python — один из вероятных вариантов. Еще Processing.

      Кстати, есть версии Scratch для Arduino: ArduBlock и S4A, на самом деле мы с сыном именно с них начинали, как ни странно. То есть сначала было программирование микроконтроллера, а потом уже «просто» программирование на PC.


  1. ArcherServant
    09.04.2015 20:11

    > достаточно функциональный
    Питон относится скорее к императивным языкам.


    1. art1415926535 Автор
      09.04.2015 20:18
      +1

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


      1. ArcherServant
        09.04.2015 20:26

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


        1. Rumlin
          09.04.2015 20:49

          Слишком сложно, надо учитывать возраст и развивать логику не вдаваясь в технические особенности реализации. Вот хороший пример:
          image

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

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


          1. ArcherServant
            09.04.2015 22:02
            -1

            Теория — нужна.
            А то получится не вполне правильный порядок обучения.
            Функциональную часть в питоне использовать можно и нужно, учить ей, соответственно, тоже можно и нужно, а объявлять потом «А вот это, дети, называлось функциональной парадигмой» — странно.


  1. MAXH0
    10.04.2015 09:29

    Почитал про вашу олимпиаду и IT — школу.
    Вообще странно, что МГУ и СУНЦ МГУ не имеют своего блога на Хабре и публикуются на Гиктаймсе в блоге Интелла.
    Дело делаете полезное и нужное.