September 4th, 2012

2019

Об тест Тьюринга

После вала публикаций по доказательству неадекватности теста Тьюринга, недавней "почти-почти победы" (набор 29.2% обманувшихся судей вместо положенных Тьюрингом для прохождения его теста 30%) программы Евгений, один из судей очень точно сформулировал (http://www.calgaryherald.com/technology/Computers+almost+passed+famed+intelligence+test+they+really+thinking/7123647/story.html):
Perhaps, however, we’re closer than we think to “true” AI. After the Wright Brothers’s airplane lifted off in 1903, skeptics continued to debate whether we were “really” flying — an argument that simply faded away. It may be like that with AI. As Hayes [Pat Hayes of the Institute for Human and Machine Cognition in Pensacola, Florida] argues, “You could argue we’ve already passed the Turing test”. If someone from 1950 could talk to Siri, he says, they’d think they were talking to a human being. “There’s no way they could imagine it was a machine — because no machine could do anything like that in 1950. So I think we’ve passed the Turing test, but we don’t know it.”
Нужно запомнить это сравнение с рассуждениями об "истинном полёте". Я никак не мог сформулировать, как мне объяснять неадекватность всех этих споров про "истинное мышление", "истинное творчество", "истинные эмоции" и т.д.. Сейчас понятно: правда ли, что вы летите на самолёте? Или это таки не "истинный полёт"? Правда, что вы разговариваете со своим смартфоном? Или это не "истинный разговор", и вы просто "шевелите голосовыми связками", потому как нельзя же "обращаться" к неживым предметам?

Ещё можно пуританам предложить разобрать словосочетание не "думает машина", а "думаю машиной"...
2019

Образовательные ступеньки в информатике для малолеток

Самое трудное в образовательной практике -- это предложить какую-то связанную последовательность курсов. Так, курс алгоритмики в ПиктоМире -- это всего две недели, а курс алгоритмики с роботом на КуМире -- это ещё полгода, на уровне начальной школы. Что делать после этого?! Бросать информатику на пять следующих лет, потом добавить еще полгода какого-нибудь программирования на уровне средней школы, и опять бросать? Ниже -- мои соображения сегодняшнего дня, и более прагматичные: я постарался быть максимально приближенным к нынешним софтовым реалиям, а не изобретать новые обучающие среды и новые языки программирования. Прошлый раз я много более радикально фантазировал на эти темы примерно год назад -- http://ailev.livejournal.com/955671.html.

Главная мысль -- что нет никаких "одиноких курсов, сферических в вакууме". Это всё короткие (по сравнению с общим временем образования) ступеньки каких-то учебных многоуровневых лесенок, и нужно чётко понимать: что перед, и что после каждой ступеньки, и исходить из удивительной скоротечности каждой отдельной ступеньки.

Основной принцип этой "ступенчатости": решение множества задач для каждой "ступеньки", при росте как выразительных средств (от игрушечных языков до настоящих), так и сложности решаемых задач (по мере роста "настоящести"). Искусство тут -- как не застревать на отдельных ступеньках, так и не пытаться скакнуть через ступеньки (типа начинать обучать малолеток сразу Ершолу в КуМире без пиктографического языка из ПиктоМира, и Питону без Ершола).

1. Алгоритмика -- ПиктоМир.
Это две недели, но без этой махонькой ступеньки малолеткам очень трудно прорваться к настоящей алгоритмике с использование текстового языка. Подробности -- http://ailev.livejournal.com/922715.html (и парочка видео с семинаров: http://ailev.livejournal.com/966698.html, http://ailev.livejournal.com/973947.html).
Это должен быть пиктографический язык, минимизирующий собственно "язык программирования". Исполнитель почти ничего не умеет делать, мир/обстановка крайне бедна. И это хорошо, это всего на пару недель поиграться, бедность тут не порок, а тщательно разработанное достоинство.

Дитёнка после этого соображает про последовательность команд, исполнителя, алгоритм и вспомогательный алгоритм, повторения и условия.

2. Алгоритмика -- нарисованный робот в КуМире.
Это примерно полгода, никаких структур данных, и почти никакой численной математики (за исключением нескольких задач в самом конце курса -- на "радиацию").

Подробности -- http://ailev.livejournal.com/948015.html, а про особенности перехода от ПиктоМира к КуМиру я рассказал в http://ailev.livejournal.com/1013690.html. Почему не страшно этому учить малолеток (ибо некоторые волнуются, что "у обученного этим страшным вещам дитёнка не будет детства") -- http://ailev.livejournal.com/966480.html

Дитенка после этого может писать простейшие программы на императивном языке со "структурным программированием", но ничего не понимает в структурах данных. Это должен быть Ершол, а не "настоящий язык программирования" -- т.е. сам язык программирования должен быть беден и минимален (зато русскоязычен, плюс крайне конкретизированная диагностика ошибок).

3. Алгоритмика -- embedded systems, настоящий робот LEGO.
Правильно было бы оставить язык Ершол и среду КуМира, но нарисованного робота заменить на колёсного из LEGO. Я бы намеренно ограничился датчиком освещения, датчиками пульта управления (в качестве которого мог бы выступать смартфон с тачскрином, например), видеокамерой (тоже от смартфона) и двумя колёсами как эффекторами. Это я так учитываю свою неудавшуюся попытку сразу скакнуть через несколько ступенек (http://ailev.livejournal.com/983196.html).

Примерная последовательность серий задач курса:
-- расчёты скорости передвижения при параллельной работе колёс по прямой (при этом колёса будут разных диаметров – маленькие, большие и очень большие)
-- расчёты скорости передвижения при поворотах разного радиуса (змейки), также при разных колёсах.
-- калибровки невязки между колёсами и прохождения сложных маршрутов
-- алгоритм ПИД и прохождение по нарисованной кривой. Калибровка алгоритма (разные кривые). Это традиционное первое соревнование роботов.
-- пульт дистанционного управления (там много особенностей, ибо управление должно быть пропорциональным)
-- подключение телефона с видеокамерой, прохождение по нарисованной пунктирной линии – это традиционное второе соревнование роботов.
-- повторение всего предыдущего набора задач для Python (меняем язык, но оставляем предметную область: просто повторяем все задачи, формулируя их на "настоящем языке программирования" -- понятно, что этот Python практически не будет использоваться в части его структур данных, это пока алгоритмика).

Тренируется:
-- плавающая арифметика (хинт: в начальной школе этого нет)
-- математика обороты-диаметры-пути-скорости, коэффициенты (ага, понятие "коэффициента" в начальной школе -- это не так просто)
-- освоение разных исполнителей (датчики освещенности, пульта управления, видеокамера; эффекторы – колёса и дисплей робота)
-- пропорциональность (ПИД и работа с пультом), реальное время
-- разборки с пикселями при работе с видео
В итоге -- понимание, как программируются современные механизмы (embedded systems), а также переход к относительно современному языку/среде программирования (Python). Но это только алгоритмика, ибо ни о каких структурах данных речи ещё не идёт.

4. Информатика = алгоритмика + структуры данных.
Берётся какая-то оффлайновая игра, и к ней пишутся скрипты на Python -- моды, NPC и т.д.. Мир опять становится "нарисованным", но уже 3D, и отнюдь не "простым": богатые структуры данных нужны именно для представления сложного мира -- это совсем по-другому "интересно", нежели какие-то бедные "нарисованные миры" в курсе алгоритмики, что я отмечал при выборе робототехники на третьей ступеньке в http://ailev.livejournal.com/967480.html. Интерфейс скриптования игр содержит большое количество развесистых структур данных, и дитятко учится с этими структурами данных работать. За идею спасибо justy_tylor. Другим кандидатом в языки выступал Lua, но целью данного "семестра" является уже не "алгоритмика", а разбирательство со структурами данных -- поэтому Python, в нём это побогаче будет. Но недостаточно богато, чтобы вляпаться в "перескок через ступеньку сложности" и попасть в какой-нибудь материал, доступный только для студентов (не забываем, что мы учим деток, это даже не старшая школа!).

Далее -- можно повторить всё то же самое для какой-то из MMORPG (программирование-в-большом!), и даже можно поменять язык программирования (ибо к этому моменту будет опыт как смены языка, так и смены "мира/исполнителей", хотя и по отдельности -- и речь идёт о таком же скачке, только "комбинированном").

5. Информатика как таковая -- с выходом на программную инженерию.
И только теперь можно думать о лингвистике, компиляторах, базах знаний/онтологиях и прочих специфических задачах. Ну, и об инженерии (требованиях, архитектурах и т.д.) тоже позже (см. последовательность, которую я предложил в постинге "верхнее образование инженеров-программистов" http://ailev.livejournal.com/937201.html).

Увы, учебный софт и наборы задач существуют пока только для первых двух ступеней, а вот для третьей и четвертой -- придётся изобретать по ходу дела, и срочно (см. http://ailev.livejournal.com/1020631.html). Для пятой -- пока даже не обсуждаем.