Anatoly Levenchuk (ailev) wrote,
Anatoly Levenchuk
ailev

Робототехника для третьеклассников

До конца урока 16 (это примерно соответствует концу января в курсе программирования для семиклассников физ-матшколы) и тем самым планового окончания эксперимента с обучением программированию третьеклассника осталось 5 задач. Это означает, что нужно срочно определяться, что же делать дальше.

Я так понимаю, что есть два основных пути:
1. Математика и алгоритмика в их вычислительном варианте. См., например, http://www.google.com/edu/computational-thinking/ (и там Conrad Wolfram says the part of math we teach -- calculation by hand -- isn't just tedious, it's mostly irrelevant to real mathematics and the real world. He presents his radical idea: teaching kids math through computer programming).

Для меня вычислительная математика (включая алгебру) – это системы программирования типа Mathematica, Maple и в пределе – использование языка Modelica для дифуров (но не Matlab, который современная замена Фортрана. Матлаб каузален, а вот Моделика – акаузальный язык). Это направление для школьников пока у нас никто не разрабатывает, а ведь это естественный выход из начальной математики в физику -- и дальше развитие по инженерной линии. Моделика сейчас полным ходом стыкуется с SysML (который я терпеть не могу, но который преподносится как «язык системной инженерии»), и это неслучайно. Так что линия Mathematica+Modelica и выход в моделирование – это естественное развитие линии "чистой алгоритмики", ибо не связана со сложными структурами данных и явным поминанием онтологии, интеграции разных знаний, логики и т.д..

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

2. Другая же линия, также вырастающая из необходимости моделирования киберфизических систем – это математическая логика, философская логика и моделирование данных. Математика там дискретная. Это базы данных, Онтолан, САПРы, PLM и далее искусственный интеллект – от старинных систем продукций до новомодных оринетированных на лингвистику систем понимания естественного языка. По этой линии мы уже имеем некоторые заделы, и буквально в начале этой недели смогли сформулировать какую-то «взрослую программу» по одной из веток этого направления: http://dot15926.livejournal.com/27293.html

Сюда же я бы отнёс «классическую computer science» -- работа с компиляторами, интерпретаторами: DSL и их реализация. Ибо каждый язык программирования – это какой-то domain-specific язык, в том числе задействующий разные парадигмы вычислений. Тут волнуют уже не столько алгоритмы, сколько модели их представления – моделирование алгоритмов, как исполнимых данных, семантика исполнения, преобразования моделей и т.д.. Но тут пока внятного предмета и подхода я не могу сформулировать – разве что указать на проекты STEPS и движение language workbenches.
Из этого разнообразия, учитывая срочность вопроса и наличные ресурсы, для третьеклассника я бы выбрал робототехнику:
а) программирование чего-то абстрактного (типа манипуляции текстовыми строками) -- это не пройдёт, будет забастовка по-итальянски. Два абстрактных предмета типа математики явно не потянуть.
а) никакого особого восторга от программирования нарисованных сущностей у дитенки нет, и не только от робота КуМира, но даже и от каких-нибудь 3D сред (проверено: надоедает за 5 секунд).
б) выход программ в реальный мир, конечно, много круче, нежели выход программ на дисплей. Инженерия киберфизических систем будет покруче, нежели только программная инженерия.
в) есть соревнования по робототехнике, что обеспечит хоть какую-то мотивированность.
г) как раз вчера дитенка собрал очередную лего-конструкцию из 1015 деталей (какой-то крейсер из Звёздных Войн), так что руки собрать какого-то робота из Lego у него чешутся, нужно срочно это желание задействовать.

Итак, я зарегистрировал позавчера семейную команду робототехнического спорта "Агенты" (надеясь когда-нибудь дойти до программирования настоящих автономных агентов) -- http://robosport.ru/msr/, купил вчера NXT 2.0 -- http://www.apiks.ru/lego-mindstorm/lego-mindstorms-nxt-20-8547-lego-maindstorms-nxt-20.html (доставили через несколько часов после заказа) и поглядел на возможности программирования этих роботов.

Тут оказалась засада:
-- программирование из КуМира будет готово только к Новому Году (но эксперименты уже были, и они были успешными)
-- программирование на Scratch возможно (http://enchanting.robotclub.ab.ca/tiki-index.php), но это тоже явно эксперименты
-- штатное программирование (на языке G, среда LabVIEW) подразумевает визуальное программирование на потоках данных (http://www.labview.ru/labview/what_is_labview/rapid_development.php). Хочу ли я учить программировать на примере такой редкой парадигмы -- уж не знаю. Но 100% книг посвящены именно этой ветке.
--- самая профессиональная среда программирования этих роботов (она и применяется на соревнованиях) -- это язык Си, куда ж без него (и для него даже есть даже какие-то уроки http://www.robotc.net/education/curriculum/nxt/). Заодно на этом языке программируются и разные другие роботы.
-- есть и много других языковых поделок и недоделок: http://www.teamhassenplug.org/NXT/NXTSoftware.html (и этот список далеко не полный, я даже встречал где-то программирование NXT 2.0 на Haskell).

Куда податься бедному родителю?! Я ведь сам не программист, и не робототехник. Так что понятия не понимаю, что делать дальше. Сердце моё склоняется изо всех возможных выборов к профессиональной среде Си (не зря же мы долбили полгода процедурный Ершол!), но разум говорит, что вся тусовка там работает на LabVIEW и с этим будет сразу как-то попроще. Но учить программированию на этом языке как?! Перерисовывая диаграммы-программы из роботостроительных книжек?! Приучая к тому, что программирование -- это рисование весьма специфических диаграмм?! Хотя опять же: знакомство с разными языками программирования и разными парадигмами будет идти в плюс. Но он еще пакетную парадигму (Ершол -- пакетный язык, вроде Модулы или Ады) толком не освоил, куда уж тут разнообразить парадигмы.

Так что я в задумчивости, а на размышления у меня осталась одна неделя.

Ближайшие соревнования по робототехнике окружного уровня будут в марте, московского уровня -- в апреле 2012. Как я понял, они проходят так: детей отделяют от взрослых, и дают им два часа на сборку роботов из полностью разобранного состояния и программирование этих роботов (условие задачи обычно модифицируется, чтобы нельзя было использовать подготовленную дома взрослым программу робота: неумеющие программировать детки сразу отсеиваются, ибо не в состоянии внести изменения в домашние заготовки). Вот и выйдем на объективную (а не мою личную) оценку: может дитенка программировать, или не может. Других способов попасть на олимпиаду по программированию для третьеклассников я не нашёл.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 19 comments