С чего начать ребёнку программировать?
========================================

 Сын мечтает закодить свой сервер в Майнкрафте. Я понимаю, что для его 7 лет и отсутствия какого либо опыта в программировании, цель выбрана слишком крутая, но задор надо использовать.  
  

В связи с чем хочу спросить у имеющих отношение к разработке игр, какой путь к достижению этой цели (не обязательно Майнкрафт, а геймдев в целом) выбрать?  
  

Имеет ли смысл практиковаться в псевдопрограммировании на сайтах типа code.org?  

И приминительно к Майнкрафту: там же есть возможность писать скрипты на разных языках. Чему отдать предпочтение, что перспективней?  
  

Что касается меня, то я буду помогать по мере возможности, знаю несколько языков (PHP, C++, C#, Perl, JS, Pascal, Basic:) ), но не люблю их всех :), и представления не имею как сейчас пишутся игры. 

 Есть такое мнение, что практическое применение какого-либо яп в конечном итоге влияет на мышление человека...  

Для начинающих лучшим решением пожалуй будет освоить первым - функциональный яп.  

Почему функциональный ? Потому что функциональный яп не содержит "ничего лишнего" и тем самым поможет освоить суть алгоритмов и выработать соответствующее мышление, т.е. научит мыслить Логически.  

Подводя итог вышесказанному начинающим программистам лучше начать с изучения одного из функциональных яп - Haskell или Scala, Lisp...   

А уже после можно переходить на яп **С** (Си), который поможет понять многие другие очень важные детали...  

И уже освоив на достаточном уровне яп **С** можно переходить на другие яп (С++, Java, С#...)  

Да, и ещё желательно (обязательно) освоить англ.яз и параллельно осваивать - Дискретную математику.  

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

[www.ozon.ru/context/detail/id/32092949](http://www.ozon.ru/context/detail/id/32092949/)  

А если интересует геймдев (разработка игр), то посмотрите тут:  

[https://thequestion.ru/questions/205745/chto-uchit...](https://thequestion.ru/questions/205745/chto-uchit-i-s-chego-nachat-chtoby-popast-v-game-dev-i-uchastvovat-v-razrabotke-igr)  

<https://habrahabr.ru/company/miip/blog/313326/>  

<https://habrahabr.ru/post/319582/>  

[https://dou.ua/lenta/articles/gamedev-for-programm...](https://dou.ua/lenta/articles/gamedev-for-programmers/?from=footer)  

Ну и видео:  

[https://www.youtube.com/playlist?list=PLR4wcBxrUGP...](https://www.youtube.com/playlist?list=PLR4wcBxrUGPCGYRfOFwYKzoy1qVryJ6tf) 

 Вообще-то сервера в Minecraft'e не кодят.. но это так, к слову.  
  

Хочу предложить немного другой подход, который возможно вас заинтересует.   
  

К сожалению, интересы ребенка могут отличаться от ваших планов, но, если уж очень хочется, то в 7 лет лучше уделить внимание модам в Minecraft. Например: **GregTech, Build Craft, Industrial Craft 2** - отлично развивают логику.  
  

Когда процесс уже пойдет активнее, попробуйте предложить ему мод **Computer Craft**, это что-то вроде виртуальной машины внутри игры, которую можно программировать - очень увлекательно.  
  
![maxresdefault.jpg](https://i.ytimg.com/vi/jdd923x7n0w/maxresdefault.jpg) 

 Загуглите приложение MCreator, оно поможет вашему сыну создавать модификации для игры Minecraft, не зная самого языка программирования.  

А чтобы идти глубже - нужно знание Java, Bukkit API & Forge API 

 - есть [TigerJython](http://www.tigerjython.ch/engl/index.php?inhalt_links=navigation.inc.php&inhalt_mitte=home/home.inc.php) (Python) специальная среда созданая для обучения программированию. Можно программировать Raspberry, NXT, писать симуляции, рисовать, работать со звуком и пр. все это из коробки.  

- есть [LÖVE2D](https://love2d.org/)  (Lua) он заточен под разработку игр. Бонус-[туториал](http://sheepolution.com/learn/book/contents)   

- есть [Gosu](https://www.libgosu.org/ruby.html) (Ruby) Библиотека для разработки 2d игр  

- есть DevelNext (PHP) RAD - что-то типа дельфи. Еще и "наша" разработка. Впечатлило.  

- можно написать свой мод для майнкрафта на Яве, в принципе там ничегои сложного, даже книжки про это есть.  

  

игры сейчас пишутся также как и раньше, в туториале oт mozilla очень хорошо все разложено.  
  

Добавлю из собственного опыта, что очень полезно начать с определения требований к конечному продукту. Так можно будет прояснить наличие предрасположености к структурированому мышлению у ребенка , и если да, по итогам будет конкретная задача. Всем от этого будет только проще. 

 Пусть ребенок сделает своего рода "первый шаг": найдет и выберет что-нибудь САМ. 

 Моему 10, задатки есть, но пару моих попыток не увенчались успехом. Я не наседаю, просто время от времени придумываю какой-то ход и пробую. Например выбирал простенькие примеры и на css+js показывал, что можно делать... В таком стиле, в общем.  

Что пошло: игровой движок Construct2, при чем он у меня в закладках лежал, пока сын не спросил, какие есть игровые движки.  

Разбирался сам по урокам, я буквально в нескольких моментах принимал участие.  

Сейчас у него заготовок 6-7. Небольшие работающие игровые кусочки.  

<https://www.scirra.com/construct2>  

Там в основном алгоритмы и события, но без прямого программирования. 

 Всему свое время. Лучше не сыну литературу по программированию, а себе по возрастной психологии купите. Тут на лицо игровая зависимость у ребенка, он живет в мире майнкрафт и хочет как-то себя реализовать там. Значит много времени играет в эту игру, а детям вообще противопоказаны виртуальные игры. 

 Раз уж любит Minecraft, то есть тематическая книга «Minecraft. Программируй свой мир». Вот обзор на Хабре: <https://habrahabr.ru/company/piter/blog/269757/> 

 Алгоритмы и задачи на логику ваше все, если хотите технаря вырастить :)  
  

- читаем, разбираем и задаем вопросы на понимание [Энциклопедии профессора Фортрана](http://fishki.net/13304-jenciklopedija-professora-fortrana-27-skanov.html)   

- пилим вместе игру в [Kodu Game Lab](https://www.kodugamelab.com/)  

- достаточно мотивирует мододел любимых игр, так как результат можно наблюдать сразу и корректировать вслед полету фантазии  
  

p.s. насчет сервера мое имхо, довольно быстро наскучит, так как лучше производить новый контент который радует глаз, чтобы поддерживать мотивацию 

 Нужно его научить трем вещам:  

1. Алгоритмам  

2. Не задавать неконкретных вопросов и вопросов в которых он не компетентен  

3. Гуглить  
  

После чего еще раз задать вопрос, я не понял, что вы имеете в виду под "закодить сервер Minecraft"... 

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

Ни в коем случае не нужно давать ребенку кирпичи под полтора тысячи страниц.   

У вас должна быт цель больше практическая, нежели теоретическая, чтобы ребенок сделал все сам, а иначе он погрязнет в пучинах теории, так и не создаст сервер, да еще и разочаруется в программировании как таковом.  

По минимуму, т.е. не нужно рассказывать что такое инкапсуляция, если от вас требуется создать один просто класс. 

 Самые азы изучить можно в простой игровой форме. Начать рекомендую с LightBot.  

Ну и еще почитайте: <https://habrahabr.ru/post/251583/>  

Если осилит азы - дальше простор для фантазии. 

> В связи с чем хочу спросить у имеющих отношение к разработке игр, какой путь к достижению этой цели (не обязательно Майнкрафт, а геймдев в целом) выбрать?

**Советую начать с [Unity](https://ru.wikipedia.org/wiki/Unity_(%D0%B8%D0%B3%D1%80%D0%BE%D0%B2%D0%BE%D0%B9_%D0%B4%D0%B2%D0%B8%D0%B6%D0%BE%D0%BA))**, т.к. очень много уроков уже по нему и визуальная/наглядная разработка даёт бОльший стимул для любого, чем чистый код.  

Уже создавая что-то примитивное, волей-неволей он будет автоматом учить C# (пока в базе, также C# используется в львиной доле "движков" game-dev) и а читая API - также, волей-неволей, изучать технический английский язык.  

Т.е., в плане покрытия направлений и результата, Unity обладает лучшим балансом для начинающих game-dev-программистов.  
  
**Итого:** [полная визуальная разработка и возможность сразу видеть результат]+[перспективный ЯП: C#]+[техн.английский]+[логика]+[обширное community] = Unity.  

Оф. уроки на русском: <https://unity3d.com/ru/learn>  
  
[Игровые движки](https://en.wikipedia.org/wiki/List_of_game_engines) (табличная сводка с википедии). 

 Вот хороший курс по JAVA для начинающих [https://www.youtube.com/playlist?list=PLawfWYMUziZ...](https://www.youtube.com/playlist?list=PLawfWYMUziZqyUL5QDLVbe3j5BKWj42E5)   
  

там же есть конструктор для понимания основ 

 Бегло просмотрел ответы и не заметил среди них [amperka.ru/product/tetra-kit](http://amperka.ru/product/tetra-kit)  

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

 Спасибо всем за ответы! Большинство попробовали, но, похоже, ребёнок маловат ещё для всего этого...  

Заинтересовался разве что локальным сервером с консольными командами для Майнкрафта (кстати, есть что-нибудь работающее на свежих версиях?). Ну и Scratch вроде неплохо пошел: мгновенность результата и рисовалка спрайтов с записывалкой звуков притягивают.