понедельник, 12 мая 2008 г.

Дети, программирование и наука


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

Наблюдение 1

Рефлекс сосания груди. Он есть с рождения. Сам процесс очень занимательный. Вы видели, как дозаправляются в воздухе самолеты? Процесс похож. Ребенок щекой чувствует сосок, поворачивает голову в его сторону. Затем отклоняется от груди и, как коршун, со всего размаха, кидается на грудь, пытаясь присосаться к ней. Если попытка не удалась, то голова ребенка "отпружинивает" назад, и он снова повторяет попытку. Это показывают на видео на курсах молодых родителей, но на практике обычно мамы сами дают грудь. Но я заметил кое-что еще. У младенца голова по отношению к телу большая и тяжелая. Ребенок ее не может держать. Поэтому отклонение и набрасывание на грудь для него весьма энергозатратная операция. Буквально, после 2-3 подходов-отскоков младенцу требуется передышка. Следовательно, задача точного "прицеливания" на грудь для него важна. Попробуйте сами с завязанными глазами попить воды из фонтанчика, не облившись водой. Как решает ее малыш? Известным математическим методом деления отрезка пополам, которым он пользуется интуитивно! Вот, он ведет щекой по соску до угла рта, но не пытается захватить его сразу- сил мало, надо только с размаху. Он ведет сосок дальше, до другого угла рта. Затем, оценив размеры рта таким образом, движется в обратном направлении на половину времени: если путь через весь рот длился 1 секунду, то обратно он с такой же скоростью движется 0,5 секунды. В результате сосок оказывается примерно посередине рта. Тогда ребенок немедленно (пока прицел не сбился :) ) отклоняется и набрасывается на грудь. Если не получилось, то тут же делается еще пара попыток, как в артиллерии- с корректировкой цели.

Наблюдение 2

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

Наблюдение 3

Ребенок явно учится простейшим движениям, так, как мы, программисты, бы программировали робота: от низкоуровневых алгоритмов, до сложных алгоритмов, образующих, фактически, свой язык программирования, свою среду программирования. Вот, лежит малыш, видит свою руку и начинает просто сгибать и разгибать всю пятерню. Когда у него это получается, пробует дотронуться одной рукой до другой. Трогает свое лицо- это очень не умело, и, зачастую, приводит к расцарапыванию лица. Позже пробует ласкать маму, но движения неумелые и получается, что больше бьет ее. Далее:
  1. Изучение своего языка. Ребенок засовывает руки в рот и ощупывает свой язык.
  2. Пробует, настраивает голос- просто кричит с разной громкостью, затем с изменением интонации, далее- более сложные звуки.
  3. Учится брать предметы. Сначала не догадывается, что, чтобы взять другой предмет надо оставить предыдущий. Позже, когда даешь ему другой предмет, он просто разжимает руку и бросает предыдущий предмет.
  4. Изучает ноги. Подтягивает к лицу, рассматривает, ощупывает.
Так, постепенно, шаг за шагом, ребенок отрабатывает простые алгоритмы, выстраивает из них сложные. И уже через 4 месяца сложность действий малыша возрастает настолько, что выделить простые движения, алгоритмы становится невозможно.

Наблюдение 4

Узнавание. Ребенок сначала не распознает лиц. Затем просто распознает любое лицо. Затем отличает лицо близкого человека (мамы, папы) от других лиц (чужих). Распознавание идет медленно, до 30 секунд. Как у программиста, у меня напрашивается аналогия с жестким диском, оперативной памятью и кэшем. Разумеется, сначала алгоритм кэширования несовершенный, и для распознавания образа мозг ребенка часто обращается к более медленной оперативной памяти. Со временем алгоритм совершенствуется, у хранимой информации появляется приоритет, и тогда при пробуждении ребенка происходит упреждающая "подзагрузка" образа родителя в кэш. Смешно говорю, да? Но тем ни менее, внешне это все выглядит весьма похоже: вот, малыш открывает глазки, они совсем пустые и невидящие. Затем взгляд начинает приобретать осмысленность, лицо начинает подергиваться улыбкой. И вот, наконец, программа в оперативную память загружена, распознавание образов произошло и ребенок расплывается в широкой улыбке, узнав близкого человека. С возрастом скорость загрузки и распознавания уменьшается до, примерно, 5 секунд.

Наблюдение 5

Ребенок начинает активно копировать родителей примерно с 6 месяцев. Вы спрашиваете ребенка: "Больше не хочешь пить?" и мотаете головой. И вот, уже вы замечаете как малыш сидит и трясет головой, копируя вас. Вы вытираете руки- и малыш начинает имитировать вытирание рук.
Вот так, в одном маленьком ребенке сходится воедино наука и программирование. И, напоследок, приведу пример уже известного многим видео, демонстрирующего достижение роботостроения.