Играем в программирование

У программистов есть дети. В этом плане статистика непоколебима.
И эта статья будет интересна как раз тем, у кого есть ребенок в возрасте 5-~9 лет, тем кто уже задумывается или уже задумывался над вопросом как посвятить ребенка в азы программирования.

image

Зачем это нужно?


Если вы еще задумываетесь над этим вопросом ( I guess, no) — Programming for everyone, be creative.

В чем сложность?


Вы можете в совершенстве знать несколько языков программирования, быть превосходным спикером, и натренировать десятки джуниоров, но, когда дело касается вопроса обучения детей, прочувствовать, что ваша “терминология” хромает, и весьма затруднительно подобрать правильные примеры и объяснения, чтобы сформировать у ребенка понимание предмета.

Возможно, не дурная идея как на картинке в топике читать детям Java 2 на ночь вместо сказок, но, наверное, нужно быть настоящим гуру, чтобы сделать это интересным и захватывающим детское воображение, больше чем истории про Бабку Ежку.

Если ребенку не интересно — слушать он не будет…
RSA Animate — Changing Education Paradigms

Так с чего же начать?


Шаг 0
Знакомство с компьютером можно начать с игровых программ:

Дети хорошо понимают визуальные примеры и инструменты похожие на игру.
Пример — Scratch, уже упоминался на Хабре, правда, только в рамках программирования под Адруино:

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

Задачки, с которых можно начать:

Примеры приведены “как есть”, не обессудьте. Далее “Кот” — визуальный объект в среде Scratch.
(Hello, world! намеренно пропущен)
  1. Движение. Сделать, чтобы Кот двигался по экрану
    • прошел N шагов;
    • ходил перебирая лапками;
    • двигался из точки в точку.
  2. Загадка. Кот должен загадать загадку и проверить ваш ответ. Пример, scratch.mit.edu/projects/14709879
  3. Рисование:
    • многоугольники: нарисовать треугольник, четырехугольник, N-угольник;
    • узоры, повторяющиеся фигуры, нарисовать дом. Пример, scratch.mit.edu/projects/12641639
    • “графический редактор” с выбором цвета.
  4. Упражнения со строками:
    • Соединение строк. Кот спрашивает имя мальчика, имя девочки и соединяет их в фразу. Пример, scratch.mit.edu/projects/13642667
    • Подсчитать количество вхождений заданной буквы в слове.
    • Перевернуть слово. Пример scratch.mit.edu/projects/13844321
    • Проверить слово палиндром или нет.
  5. Таблица умножения: Кот спрашивает цифру и рассказывает таблицу умножения на эту цифру. Пример, scratch.mit.edu/projects/14038043
  6. Игры. Кот двигается по лабиринту или между экранами, собирая “бонусы”. Пример scratch.mit.edu/projects/14662137
  7. Часы со стрелками. Пример scratch.mit.edu/projects/12769526

Полезные правила (кажется простые, но некоторым из этих правил сложно следовать):
  • сначала пример;
  • ребенок хорошо понимает если ему хорошо объясняют — не нужно требовать много и сразу;
  • если ребенок вас не понимает — сделайте паузу до “завтра”, и придумайте новое объяснение;
  • для ребенка обязательно нужно время на просто “поиграть” в свое удовольствие, поэкспериментировать;
  • сложные задачи (такие как создание игры) — это здорово, и интересно, но для усвоения ребенком, имхо, лучше подходят простые задачи и главное многократное решение/повторение их вариаций.

И напоследок, важный алгоритм, который стараюсь хранить в уме.
image

Хочется услышать от хабровчан предложения интересных задач для детей.

UPD: Спасибо за комментарии. Попробую взять на вооружение:
Поделиться публикацией

Комментарии 52

    +80
    На фото малыш возмущен: «Как нет множественного наследования?!».
      +41
      А девочка: зато константы в интерфейсах можно создавать, забавно!
        +1
        А что, вы усматриваете в этом какое-то нарушение логики/контракта/концепции? Есдинственное, что мне приходит в голову — это злоупотребление этим свойством интерфейсов в плане хранения там коллекций. Но я даже не представляю, кто и зачем это может сделать.
          +19
          У, какой ты серьёзный!
            +2
            Я такой, да. За что и отхватил минусов :). Простите меня.
          +17
          … и только папа ничего не понимает, он вообще из Delphi… :)
          +2
          Неа, вполне возможно малой системщик и его возмутило что в Java нету unsinged типов
          +4
          Для обучения детей — Лого. Сколько удовольствия доставляло рисовать этой черепашкой! Какое удивление было увидеть шахматы на Лого в первый раз.
            0
            лого уже староват, а scratch это тот же лого, но посовременней и получше
            +3
            Помню, встретил как-то на просторах Интернета роадмап для падаванов. Занятное чтение.
              0
              Интересно, зачем там вот это:
              освоить музыкальный инструмент (предпочтительно фортепиано, (электро)гитара)

                +1
                А почему бы и нет? Я бы был рад, если бы в детстве научился играть на гитаре, а не осваивал уже сам во взрослом возрасте.
                С другой стороны в детстве были другие интересы, и обучение муз. инструменту я бы, вероятнее всего, воспринял бы в штыки, и ничего хорошего бы из этого не вышло.
                  +1
                  Я думаю, что причиной является широта взглядов, так сказать. Да и ничего плохого тут нет, в любом случае.
                +1
                тем кто уже задумывается или уже задумывался над вопросом как посвятить ребенка в азы программирования

                Только может возникнуть одна маленькая проблемка — лично ребенку это не нужно. Ну не интересно ему это и/или алгоритмическое мышление может быть слабо развито.
                  0
                  Поддерживаю.

                  Сам я успешно вырастил несколько джуниоров, а из некоторых выросли и более продвинутые спецы, получилось, конечно, не совсеми, даже теми, кто «хотел».
                  Безусловно, здорово научить ребенка любимому ремеслу, и OMG как же это прекрасно, но здесь нужно не перегнуть палку.

                  Если детенку это действительно не интересно, он имеет склонности к гуманитарным наукам или, например, к спорту, здесь нужно быть очень внимательным. Даже в случае, если он усилием воли заставит себя это изучить, это может породить сильный внутренний конфликт, который в зрелом возрасте может вылиться в, назовем это так, сломанную психику.
                    +1
                    >склонности к гуманитарным наукам

                    Склонности формируются в детском возрасте. Если изначально мягко направлять, то будут склонности к любым наукам.
                    Я не имею в виду что надо топать ногами и кричать «нет, ты будешь программистом!!!» — тогда, как раз, наверняка не будет. Но если грамотно сформировать досуг ребенка в первые годы жизни, то он пойдет по этому пути.

                    Все знакомые мне хорошие программисты (те, кто стали ими с детства, а не во взрослом возрасте и не в университете) именно в детстве и сформировали интерес к такого рода вещам.
                      0
                      Я с вами, пожалуй, не соглашусь. Ну то есть семья, конечно, влияет в определённой степени, но мне так думается, что в каждом ребёнке практически на генном уровне уже заложены его способности. И очень важно, чтобы «заложенные» способности не вошли в конфликт с «мягко направляемыми». Я это неспроста пишу — дело в том, что у меня RAID 1 близнецы. И хотя в семье всё строго поровну и воспитание вроде как одинаковое и досуг одинаковый (с близняшками это очень важно — не отдавать никому предпочтение), но к своим шести годам они уже абсолютно разные. Я пытаюсь найти ответ — почему они идут явно разными путями и не могу. Они разные как чёрное и белое. Один — рассудительный, второй — сплошные эмоции. Один любит считать, второй — рисовать. Различие особенно заметно, когда они в шахматы друг с другом играют — один просчитывает ходы чуть вперёд, а второму пофиг. Ненавязчиво пытался подсовывать Лего (да, папа хочет mindstorm nxt) — никакого интереса у обоих. Пытался мягко направлять их в музыку. Один вроде направляется, второй — нет. Ну и так далее. Если с детства учить ребёнка играть на пианино, — он, конечно, технически научится, но станет ли он гениальным музыкантом? Тут остаётся лишь очень внимательно наблюдать, и как только станет заметно, в какой области у ребёнка интерес — так просто развивать. Так что, наблюдая за синхронным развитием близнецов, могу почти наверняка утверждать, что вся «склонность» (или даже «гениальность» если хотите) — она уже изначально от рождения заложена. Важно лишь распознать вовремя.
                  +7
                  И жили они долго и счастливо, пока их сброщик мусора не уничтожил :-)
                    +7
                    Ну… Сборщик мусора не так эффектно, как гарбаджколлектор (=
                  0
                  Меня заинтересовала Kojo. Идеология как в Logo, по возможностям приближается к Processing и современный язык, позволяющий писать в разных стилях.
                  К сожалению, протестировать на дочке (15 лет) не смог — у нее нет времени и совсем другие интересы.
                    0
                    Мне кажется здесь стоит упомянуть Colobot.
                    PS А пока дети играют можно помочь в портировании и развитии colobot.info/joomla/
                      0
                      Проблема обучения детей программированию имеет основную загвоздку в том что даже пример «hello world!» очень абстрактен и дети не могут понять эту абстракцию. А уж что то про задания типа «напечатать на экране первые 10 простых чисел» решается в лоб «print 1, 2, 3, 7, 11 и т.д», а уж ни как алгоритмически.
                      Ребенок должен видеть результат свой работы в понятной ему системе координат.
                      Данная задача как то частично решается для примера в языке Logo (он же LogoWrite, Kturtle). Но и для настолько итеративной и визуальной среды нет нормальных методических материалов, которые бы были понятны детям до 14 лет. А те разработки что были, просто выкидываются (при том что результаты были очень хоронящие) в угоду какому то безумию «Я закончил школу и знаю С/С++».
                        +13
                        Сорри за оффтоп, но вы 5 пропустили
                          +10
                          И 1 – не простое.
                            +1
                            >Но и для настолько итеративной и визуальной среды нет нормальных методических материалов, которые бы были понятны детям до 14 лет

                            С лет с 10-12 уже можно и без черепашек кодить, по-нормальному. Слишком увлекаться упрощениями тоже плохо.
                            0
                            Кажется, на Хабре еще не упоминалась новая книга: Яша учится программировать (на Процессинге).
                              +1
                              Вспомнил, что еще лет 5-7 назад была такая книга, как Squeak: Learn programming with robots на Смоллтоке с идеями Лого, мне тогда очень понравилась, но, кажется, не завоевала интерес масс. А жаль. Можно скачать бесплатно с сайта автора или купить на амазоне.
                              0
                              Очень хвалят Python for Kids от NoStarch Press. Как оказалось, ещё и по JavaScript аналогичную книгу готовят.
                                0
                                python, IMHO, отличный выбор для начинающего программиста. Он может быть простым, может быть сложным, в целом дает понимание азов программирования, различные парадигмы. Конечно, не стоит сразу грызть гранит функционального программирования, но простые скрипты, работа с файлами и БД или даже микро-Django сайт наваять можно даже в рамках школьного (профильные школы) и университетского образования. Была бы моя воля, я бы преподавал его в учебных заведениях вместо basic, pascal, delphi, которые в целом морально устарели. И может быть даже вместо C++ (it depends).
                                  0
                                  Сейчас ради интереса посмотрел цену на ту же книжку на амазоне, сравнил (мало ли, вдруг тут кто-то захочет купить).

                                  Родной сайт:
                                  No Starch Press | Python for Kids

                                  Амазон:
                                  Amazon | Python for Kids

                                  Плюс (если берёте бумажную книжку):

                                  Доставка (беру свой почтовый индекс для сравнения): на родном сайте $5.60,
                                  на Амазоне $3.99 (или бесплатно, если у вас Prime, или если общий заказ больше $35).

                                  Налоги: на родном сайте вроде ноль (до чекаута дошёл, нет ничего),
                                  на Амазоне $2.03 (опять же, это с учётом моего адреса).
                                    0
                                    Вчера там была скидка в 50% к дню благодарения. К бумажной книге бесплатно прилагают электронную. Налога нет, только доставка. Можно ещё на Oreilly взять, у них постоянная скидка 50% на электронные книги для подписчиков.
                                  0
                                  www.flickr.com/photos/valery35/sets/72157601359453522/
                                  www.flickr.com/photos/valery35/sets/72057594121804256/
                                  Немного из моей старой самодеятельности.
                                  Еще Visio и Питон можно. В Питоне встроенный калькулятор хорош для начала.
                                    +3
                                    Автор, а у вас-то дети есть? Методика на них опробована?
                                      +7
                                      Да, сыну 7 лет (2-ой класс). Учимся, ему пока нравится.
                                      +1
                                      >как посвятить ребенка в азы программирования.
                                      Я вот в первую очередь задумался бы над вопросом не «как», а «зачем» и «стоит ли».
                                      Детям, как мне кажется, намного важнее здоровье, спорт, кругозор и зачатки правильного «любопытства». А сесть в кресло за квадратный ящик человек может в любом возрасте без родителей.
                                        +4
                                        Программирование развивает логику и мышление. Это само по себе не менее важно, чем спорт.
                                        Плюс является полезным навыком само по себе, хотя бы на уровне простых скриптов, позволяя понимать, что происходит в системе, а не просто жать на кнопки.
                                        –1
                                        Рассказывал доклад на аналогичную тему на SECR (презенташка www.slideshare.net/shwars/secr2013-childprog), DevCon (видео www.techdays.ru/videos/4393.html), TechEd и т.д. Основные моменты: (1) важно говорить не только про программирование, но и про привитие ребенку понимания того, что компьютер — инструмент для творчества; (2) не раскрыта тема Kodu Game Lab и MineCraft — есть простые и понятные детям переходы от игр к некоторым моделям программирования; (3) роботы (LEGO и т.д.) — отличный способ привлечь, начиная от естественной модели Lego-конструирования. Ну и также интересно было бы поговорить про functional-first подход.
                                          +1
                                          > Соединение строк. Кот спрашивает имя мальчика, имя девочки и соединяет их в фразу. Пример, scratch.mit.edu/projects/13642667/
                                          — Назови имя девАчки.
                                          Создателям самим учиться нужно.
                                            +1
                                            Есть великолепная игра — ColoBot. Там нужно выполнять миссии на чужой планете, причем сделать все основным юнитом — человеком — весьма затруднительно. Зато можно наделать летающих — плавающих — стреляющих роботов, запрограммировать их и, таким образом, автоматизировать значительную часть процесса.
                                              +3
                                              Предвкушаю драки в детском саду: «Джабисты» против «Дотнетчиков». А потом споры у директора с другими родителями, что ваш стек технологий гораздо больше подходит для обучения ему детей… ммм
                                                +1
                                                Mindstorms — вещь. Сначала приобретаются базовые навыки алгоритмизации в рисовалке алгоритмов, а потом, если желание будет, можно и на текстовый язык подсаживать.
                                                  0
                                                  Предложил пятилетней дочери программировать поведение робота Вертика в Пиктомире.
                                                  Начала с энтузиазмом, но на заданиях с подпрограммами уже не потянула. Оставил пока, чтобы не отбить охоту в дальнейшем.
                                                    0
                                                    Неужели про eToys никто не слышал?
                                                      0
                                                      Мне ли тебе рассказывать, что eToys давно стал Scratch'ем )
                                                        0
                                                        Только если Smalltalk давно стал Ruby )
                                                          0
                                                          Не, ну Скрэтч же до сих пор на Сквике… И это развитие идей eToys, разве нет. При этом: разве сам eToys разве кто-то развивает? Какой смысл, если есть живой проект Скрэтч?

                                                          PS. В 2005-м учил детей в пионерлагере eToys :)
                                                            0
                                                            Scratch уже на жабе, по-моему, и онлайн. За eToys не слежу, что там сейчас — не в курсе. Но, на мой взгляд, eToys — поинтереснее, продвинутый уровень. То есть, начинать есть смысл со Скратча, а когда будет надоедать — можно к eToys переходить. Но это непроверенное мнение, мы пока на Скратче застряли… :) Не очень дочка интересуется программированием пока.
                                                      +2
                                                      Зомбирование какое-то. А вот вдруг у вас следующий Микеланджело рос, а вы его рас — и писать интерфейсы на JS ;)

                                                      Шучу конечно, но доля правды здесь тоже есть. По моему мнению ребенка прежде всего надо развивать вширь (кругозор) и не вглубь (мастерство).
                                                        +1
                                                        Я тоже сторонник того, что в детстве нужно понадкусывать все яблоки — но ведь при развитии «вширь» нужно выбрать наиболее вкусные примеры, не так ли? Условно говоря, можно показать книгу с опытами по физике для детей, а можно показать учебник для физфака. Мне кажется, тут речь не про интерфейсы, а про наиболее удачную экскурсию в модель мышления программиста (физика, лирика, просто хорошего человека и так далее).
                                                        0
                                                        blogs.msdn.com/b/alfredth/archive/2011/06/01/so-you-want-to-teach-your-kids-to-program.aspx
                                                        www.snell-pym.org.uk/archives/2012/08/01/getting-kids-into-programming-and-what-the-raspberry-pi-is-lacking/
                                                        Довольно старые статьи про обучение программированию детей.

                                                        c-jump.com/
                                                        Настольная игра про программирование.
                                                          0
                                                          Интересно, здесь есть разработчики, у которых есть дети разработчики, или хотя бы осознанно-будущие? Или профессия слишком молодая?

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                          Самое читаемое