Привет, Хабр! Меня зовут Сергей Ребров, я работаю в команде машинного обучения в МТС. У меня две дочки, которых стараюсь знакомить с миром разработки, поэтому решил написать статью про обучение азам программирования детей и подростков. Есть личные кейсы, есть информация к размышлению, описываю и полезные, на мой взгляд, инструменты. Если для вас эта тема интересна - прошу под кат! Сначала ответим на вопрос «когда?» Попробовать привить любовь к IT можно уже с 3–5 лет. Понятно, что в этом возрасте не стоит пытаться учить ребёнка писать на JS или C++. Речь идёт о базовых вещах: сначала заинтересовать пазлами, конструкторами, головоломками. Если всё это «заходит», можно попробовать постепенно усложнять задачи, переходя от Lego Duplo к «взрослому» Lego, не исключая и Lego Mindstorms. На Aliexpress продаются готовые наборы для сборки роботов любой сложности — от самых простых до таких, что и не всякий взрослый справится. Ну и если вы видите, что всё получается, стоит попробовать изучать базовые элементы разработки на примере визуальных языков. Начать никогда не поздно, особых возрастных ограничений нет. Кто-то начинает интересоваться IT в 6–7 лет, а кто-то и в 15 (говорим о детях и подростках). У автора этой статьи — две дочери, 10 и 6 лет, обеих пробовал заинтересовать сначала конструкторами, затем Scratch и Minecraft. Ниже расскажу о том, что ещё можно предложить и что получилось лично у меня с обучением дочерей (забегая вперёд — мы ещё на начальном этапе обучения). Визуальные ЯП — специальные инструменты, которые помогают формировать у ребёнка правильный тип мышления, включая обучение алгоритмическому подходу. Причём многие языки можно использовать с малых лет — у них интуитивный интерфейс, в котором можно быстро разобраться ребёнку любого возраста. Это бесплатная платформа для обучения программированию детей школьного возраста. Дети могут создавать как простые зацикленные сценки с участием животных, так и достаточно сложные игры. Для работы предлагается визуальный конструктор — из отдельных блоков пользователь задаёт алгоритм движения разных персонажей. Если сложно, то можно использовать Scratch Junior, где визуализация алгоритмов задаётся при помощи стрелок клавиатуры и отдельных предметов. К слову, мне удалось заинтересовать Scratch обеих дочек, причём начали сразу с обычного Scratch, а не Scratch JR. Занимались с преподавателем онлайн, также работали и вместе. В итоге дети научились создавать интересные игры. Это не были шедевры игростроя, но дочки смогли научиться делать многое сами, причём обеим это нравилось и нравится. Младшая пока что остаётся на Scratch, постоянно совершенствуя свой уровень. Ну а старшая пошла чуть дальше. Здесь можно создавать уникальные здания, а также разрабатывать алгоритмы для создания игр внутри среды Minecraft. Есть ещё и возможность использовать Python, но обучение языку вводится не сразу. Сначала дети работают с визуальными инструментами Minecraft. Достоинство Minecraft в том, что он развивает воображение, а также даёт понимание причинно-следственных связей ребёнку. Многим детям интересна эта игра, а возможность что-то делать самостоятельно так и вовсе захватывает. Старшая дочка сейчас находится на этом этапе, ей очень нравится. Пока что дело до обучения Python не дошло, но, думаю, что через месяц-другой можно будет стартовать и в этом направлении. К слову, обучение не проходит идеально, иногда всё это старшей дочке надоедает, она подзабрасывает, но потом снова начинает с того же места. Я особо не заставляю заниматься, поскольку не хочется подавлять инициативу и делать что-то из-под палки. Эта стратегия, насколько вижу, себя оправдывает — дочка делает всё более сложные вещи в среде Minecraft, так что прогресс налицо. Ну а в плане обучения мы никуда не спешим, так что всё нормально. Ещё одна платформа для детей, которая помогает изучать азы программирования. На платформе есть как игры, так и курсы. Она даёт возможность осваивать синтаксис и писать код с соблюдением общепринятых в мире IT практик. Поддерживается сразу несколько языков программирования, включая JavaScript, Python, Java, CoffeeScript и Lua. Обучение организовано в виде уровней. На каждом уровне игрок получает новую задачу. Например, найти гриб, который поможет победить врага или сбежать из темницы. Ребёнок управляет волшебником, заклинания которого — это команды JavaScript и Python. Заклинания нужно запомнить, чтобы не попасть в сложную ситуацию. Ещё одна очень популярная платформа для создания собственных онлайн-игр. Для этого используется язык программирования Lua, который достаточно сильно похож на JS. Создав новый игровой мир, пользователь может делиться им с другими. На данный момент Roblox — одна из наиболее популярных игровых платформ для детей разного возраста. Этот интерес позволяет вовлечь детей, да и подростков тоже, не только в игру, но и в процесс создания игр. В частности, создавать можно персонажей, а также большое количество 3D-объектов с текстурами, тенями и разными эффектами. Для этого дети изучают основы языка программирования, после чего пишут сценарии будущей игры, воплощая идеи в реальность. Это платформа, подобная Scratch, где тоже используются цветные блоки, которых здесь много. Программа для каждого элемента игры открывается в отдельном окне, что довольно сильно упрощает работу юным программистам. На платформе ребёнок может создать игру с нуля или потренироваться на учебном проекте. Платформа предоставляет фон, слои, персонажей. Всё это нужно расставить по местам и анимировать при помощи кода. Существует возможность загружать готовые скрипты и выгружать свои. Если ребёнку не чуждо чтение, то стоит дополнить инструменты, о которых говорилось выше, книгами. Вот небольшая подборка актуальной литературы. Автор: Денис Голиков Книга, которая предназначена для детей лет 10–12, а также их родителей, если они хотят помочь в процессе обучения. Автор разработал красочный и понятный учебник, который даёт возможность создавать свои первые игры и анимации. Автор: Джейсон Бриггс Самоучитель используется во многих школах, рекомендуют его и частные преподаватели. Достоинства учебника заключаются в хорошей структуре, понятном объяснении сложных вещей, большом количестве иллюстраций и наличии практических заданий. Авторы: Эрик Фримен, Элизабет Робсон           Более серьёзное издание, в котором 600 страниц. Оно уже рекомендуется подросткам и взрослым людям. Авторы добавили к теоретической части большое количество иллюстраций, примеров и графических изображений. Они помогают освоить излагаемые основы этого популярного языка программирования. Автор: Джон Дакетт Если ребёнку или подростку интересно создание веб-сайтов, то это издание как раз то, что может пригодиться. В нём большое количество теории, есть практические задания, а также большой объём иллюстраций. Кроме книг и платформ стоит использовать YouTube, возможно, привлекать к обучению частных преподавателей. Я так и делаю. Кстати, если преподаватель действительно хороший, он ускоряет процесс обучения, подавая структурированный материал в формате от простого к сложному. И в ходе обучения, конечно, важно, чтобы ребёнок не потерял интерес. Такое случается довольно часто, к сожалению. Но преподаватель помогает удерживать интерес на одном уровне. Главное — не заставлять учить программирование и связанные с ним темы. Ребёнку должно быть интересно, и тогда обучение пойдёт гладко. Мои дочки, например, учатся не так, чтобы быстро, но прогресс заметен. Могут уже кое-что показать интересное — небольшие игры, креативные сюжетные линии и т. п. Пока не знаю, станет ли IT их главным увлечением в жизни, но уже понятно, что программирование, по крайней мере основы, им нравится. Также ребёнку важно видеть результаты своих занятий. И платформы, которые описаны выше, позволяют это реализовать. Уже через 2–3 занятия ученик понимает, что научился делать что-то новое, и чем больше посвящает времени обучению, тем больше видит результатов. И да, если в процессе обучения сын или дочь захотят сменить платформу или направление обучения, ничего страшного. Если «гнуть свою линию» без учёта интереса ребёнка, ничего хорошего не получится. С течением времени можно пробовать усложнять обучение, добавлять новые элементы. Например, познакомить ребёнка с Raspberry Pi и Arduino, а также невизуальными языками программирования. Мы с дочками пока до этого уровня ещё не дошли, но Raspberry Pi у меня есть, так что всё впереди. И если у вас есть дети, а также успешный (или нет) опыт их обучения разработке, расскажите об этом, поделитесь в комментариях.