Здравствуйте, Antei, Вы писали:
A>Дочка (12ть лет) попросила научить кодить. A>Посоветуйте, с чего начать? A>Спасибо.
Корова не моя, подборку сделал и опубликовал в фейсбуке Дмитрий Карпов. В его сообщении указан возраст 6-9 лет, но как начальное обучение годится для любого возраста, плюс там много где есть и на более серьезный возраст задачки/курсы.
Собственно пост:
Налетай! Отличные новости, сел и собрал для родителей дюжину игр, которые учат ребенка 6-9 лет основам программирования и кодинга, есть пара хардкорных ветеранов игрового обучения и милые новинки. Шерим, лайкаем любовью, радуемся вместе. Платформы не указывал — все рабочее, все на пользу.
http://www.crayonphysics.com/ Игра просто шедевр, развивает у ребенка инженерное мышление, готовит к пониманию программирования поведения в физических условиях различных систем и физических движков, не столько про программирование, сколько про логику решения задач через итеративный процесс, что является важнейшей воспитательной дисциплиной.
http://code.org/ — приятный интерфейс и масса простых игр о базовых принципах работы языков программирования, вообще нужный, не коммерческий, образовательный проект для детей
http://lightbot.com/hocflash.html игра на старике Flash, но с приятной графикой и простым обучающим материалом по построению алгоритмов движения робота, вниманию к сценарию и воспитывающему пошаговую отладку поведения персонажа, развивает у школьника понимание принципиальных основ программируемого интерактивного взаимодействия.
http://codecombat.com/ — ветеран на рынке, развивающий игровое обучение настоящему коду Pythonчик, JavaScript, Lua, экзотику CoffeScript
https://scratch.mit.edu/ — фактически классика для развития мышления будущего программиста, продуманная, с хорошим сообществом и массой примеров.
https://www.gethopscotch.com/ — обязательный инструмент на Ipad ребенка, приятный дизайн, базовое изучение основных понятий кодинга, вложенность, переменные, простые визуальные подсказки.
http://www.piktomir.ru/ стоит отметить и этот российский проект, причем разработанный по техзаданию РАН, но мне не нравится визуальный дизайн — достоинство приложения это русский язык, весьма спорное при изучении основ программирования в котором английский это 70% быстрого успеха. Но проект вызывает уважение и полезен для дошкольников и младших классов.
http://www.robozzle.com/ — приложение для составления алгоритма движения стрелки, обучает ребенка пониманию теории алгоритмов на практике
https://www.kodable.com/ — вероятно подойдет для малышей, которые смогут играя составлять простые сценарии поведения милых шарообразных персонажей, знакомясь с принципами интерактивного прототипирования поведения объекта.
Здравствуйте, Antei, Вы писали:
A>Дочка (12ть лет) попросила научить кодить.
На моей памяти эта тема поднималась тут раза три. С ходу нашел только одну: http://rsdn.org/forum/life/6746391.1
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, LaptevVV, Вы писали:
A>>>Посоветуйте, с чего начать? LVV>>Есть несколько книжек по Питону, специалоьно написанных для детей и родителей:
Pzz>Интересно, а если начать программировать на динамически типизованном языке, не будет ли нанесена неизлечимая травма нежной детской психике?
Насколько я вижу на реальных подростках — нет.
А вот что реально наносит — (disclaimer: речь только о процедурных языках) —
1. Слабые структуры данных. Для современных задач языки, где самое выдающееся в стандартном комплекте это массивы и структуры — это уже уровень ассемблера, не выше. Для нормальной работы обязательны как минимум словари.
Соответственно, Паскаль (без продвинутых версий типа последних Delphi) и Си — первые кандидаты на поход в лес.
2. Аналогично, отсутствие библиотеки стандартных алгоритмов и необходимость выполнять закат солнца вручную на каждый чих. Те же аутлаеры среди языков.
3. Чрезмерная низкоуровневость и/или громоздкость реализации высокоуровневости, в первую очередь для работы с динамической памятью, и прочим за пределами манипуляций с массивами. Случай C, C++, того же Паскаля. Не берусь 100% утверждать, что язык для первого обучения обязан быть с GC, но это достаточно близко к сути — следить за памятью в сколь-нибудь сложных действиях это примерно как заставлять обучаемого езде на машине одновременно готовить салат.
4. Слабая типизация. Это жуткий бич всяких Javascript, PHP, Perl — примеры общеизвестны (1, 2, 3 и т.п.) Но и в статически типизированных они встречаются. Это, например, проблемы типа "ну почему при делении 13 на 2 получается 6?" Объяснения, что для деления без отбрасывания остатка надо кого-то конвертировать в плавучее, понимаются не сразу. Этим особенно страдает весь клан потомков C, где сохраняют идиотское совмещение двух операций.
5. Проблемы типа "тут integer переменная переполнилась без предупреждения, и в результате бред".
Не надо говорить, что от динамичности это не зависит — сам знаю. Но почему-то в Python и Erlang одинаково "целые" это до 2**128, и можно не думать об ограниченности реализации.
Языки с исключениями на переполнении тут всяко лучше, но часто и это тяжело на первом уровне.
Стиль Си, когда от переполнения он может
начать творить что угодно, категорически за пределами допустимого (грубо говоря, для начинающего компиляция без -fwrapv недопустима).
6. Любая громоздкость типа "вот тут надо записать 1000 волшебных слов, вы поймёте их смысл через пару лет, пока же просто учтите, что они нужны". Хотя тут палка о двух концах — если есть время и желание, можно, наоборот, дать поиграться с этими словами и посмотреть, что будет — если изменение в них приводит к интересным результатам, а не просто к syntax error.
Java, C# с громоздкими обёртками в виде класса и main() — хороший пример таких обёрток (хотя и не самых многословных).
7. Прочие странные нелогичности на ровном месте, нарушения POLA. Например, то, что в Pascal нельзя написать a<b and c=d, а надо (a<b) and (c=d), или в нём же запрет на ';' перед else. В нём же то, что сначала readln(x), а потом readln(f,x), где f — файл — это реально сбивает с толку.
8. Незакрытые структуры кода, необязательные скобки вокруг тел исполнений по if, while... — обязательные резко лучше, даже если много ситуаций по 1 оператору внутри. Тут в минус всем C-подобным и Паскалю. Синтаксис на отступах — как у Python — решает эти проблемы, хоть и другим методом. Пачка новых языков типа Go, Swift — решает явной обязательностью.
По сумме сказанного и по современному набору языков оптимальный вариант — Python. Где-то второй за ним, наверно, Java — ему в минус синтаксическая громоздкость и бо́льшая сложность втыкания в реальные (для подростка!!!) задачи. Хотя в моём случае игра под Android оказалась достаточной целью. C# где-то на том же уровне или чуть хуже. Следом Pascal в современных исполнениях — тут надо говорить о конкретном Delphi, конкретном Lazarus и т.п. — при возможности стерпеть пункты 7 и 8 (хотя линия Modula — Oberon была бы лучше). Остальные где-то за пределами нормального.