Комментарии 253
Я бы предложил в этом случае обычный JavaScript нежели Java, там есть всяческие послабления вроде кириллических объектов и в случае чего до графического контекста можно добраться относительно безболезненно. Ну и параллельно записать на курсы английского по возможности.
Раньше даже как-то не задумывался, но да, я так же начинал.
"Уложись в 16kb памяти". С пяти лет. И многие по-моему так. Basic, asm, pascal — еще не умея читать и писать толком.
А вот как это у неё получилось?
Моей дочери 2г9м, но читать она и не планирует.
Не, она конечно любит говорить а тут написано ЧТО-ТО ТАМ
, но чаще всего там написано не то — то есть она не читает, а предполагает что там есть надпись и делает вид что читает.
Зато разговаривает почти с года, но с чтением пока никак.
Что можете посоветовать для развития чтения?
Хотя, конечно, быть может, что это всё индивидуальные различия.
А вот вполне умная младшая сестра шести лет сейчас ещё не читает, даже со слогами проблемы. Мы стараемся уделять ей время и заниматься с ней. Она ходит на разные кружки (рисование, танцы и т.д.), интересуется разными вещами, но вот с чтением пока никак.
В общем, не нужно сразу «наезжать» на IgorKh — скорее всего, он вполне ориентируется в том, что его ребёнок может, а что нет, и от этого отталкивается в своих требованиях.
Эдсгер Вибе Дейкстра
> Можно начать учиться программированию(да и чему угодно) в момент поступления в ВУЗ и при этом стать нормальным специалистом.
> Если ребёнку уже нравится программировать, то пусть себе программирует на том, на чём ему нравится. Если же хотите его с программированием познакомить, то тут и Scratch для начала подойдёт.
Меня в итоге совершенно восхитила концепция функций и изоляции фрагментов кода
(старательно пряча фанатичный отблеск в глазах) Молодой человек, давайте поговорим с вами о функциональном программировании!
Жаль, я так до сих пор и не понял, зачем мне нужны классы :-/
Точно пришло время поговорить о ФП.
Несколько свидетельств о регистрации ПО для ЭВМ гордо висит на стенке)
Как у Ненашева из «Гения»? :)
github.com/meklon/morphostain
А вот зачем нужно офигенное дерево наследования в стиле enterprise Java я до сих пор не осознаю.
За репозиторий спасибо: приятно видеть научный код документированным, поддерживаемым и довольно чисто написанным.
Пишу молотилки и embedded на С, скрипты на питоне, прототипы и одноразовые вещи на матлабе.
я так до сих пор и не понял, зачем мне нужны классы
— Вылить воду из чайника.
— Инициализировать класс «чайник без воды».
:)
И скажем у всех классов есть общий интерфейс, имеющий функции «подключить к источнику питания» и «включить нагрев».
Стоп-стоп, как же не-электрические чайники?
Абстрактный класс для чайника — это, наверное, «емкость для жидкости, способная переносить нагревание до известных пределов».
розетка
Но… но ведь… розетка… это уже опять другой объект…
Если у вас в вашим «мире» сущетсвуют только чайники это одно, а если ещё и бутылки с кастрюлями, то совсем другое :)
Не вижу никаких проблем вышеописанный мной абстрактный класс превратить в том числе и в кастрюлю :)
«подготовить подачу энергии»: наложить дров, открыть газовый кран, подключить к розетке, загрузить ядерное топливо.
По мере обследования всевозможных вариантов устройств по подогреву воды могут появиться неожиданные методы которые не актуальны для других устройств подогрева воды. И вот мы уже подгоняем целый «паровоз» к дому чтобы всего лишь подогреть воды от электричества. Но сам паровоз рассчитан и под другие виды топлива и способы передачи энергии, но если нам нужно только электричество мы всеравно вынуждены таскать за собой всё это безобразие.
p.s. ах, черт, опять 2 хабракванта :)
С него без всяких проблем легко перейти на Паскаль,
а может сразу на Паскаль? все же это более логичный вариант :)
Потому что Бейсик дает возможность сразу писать алгоритм «как есть».
Так и Паскаль тоже самое, НО ближе к человеческой логике.
Все алгоритмические конструкции как слышатся так и пишутся.
Более того АВС Паскаль уже можно определять переменные в любом месте (что по мне это ЗЛО)
А если вспоминать первые версии Бейсика там тоже определение переменных было в отдельной области.
«Swift Playgrounds»
Это был мой первый учебник.:-) Но там все на английском и русификации не предусмотрено. Ребенку надо будет еще и английский выучить. С одной стороны хорошо, с другой стороны это может отпугнуть. Хотя это приложение не научит программировать. Так как там не используется реальный синтаксис. (частично есть, но в целом это псевдосинтаксис). Хотя поможет понять принципы и алгоритмы работы.
Затем raspberryjammod и python для Minecraft по книге Ричардсона Программируем с Minecraft. Создай свой мир с помощью Python
А уже после написали свою игру Пятнашки, для школьного проекта на pygame. Написать даже такую игру с нуля мой уже почти 12-ти летний сын пожалуй пока не в состоянии, поэтому структура проекта (основные классы и их свойства и методы) были разработаны мной, и было описано что они должны делать. А код методов уже он писал сам, не без моей помощи конечно. Код проекта если кому вдруг интересно github.com/Yabra/15
Еще немаловажным является знание английского языка, если можешь перевести каждую команду на родной язык, то работать гораздо проще.
Как по мне, так главная проблема в изучении языка программирования- это научиться взаимодействовать с окружением.
Не согласен. Это вы уже о программировании как профессии говорите. Я же — о вовлечении в эту область знаний, стимулировании проявленного интереса. Интеграции со всем и вся, фреймворки и прочее будут сильно потом, если захочет погружаться.
PS. В пору моего детства выходил польский журнал «Горизонты техники для детей». В нём был цикл обучающих статей про компьютеры, в том числе там рассказывалось про программирование. Героями в этом цикле статей были дети и жители страны компьютера. Это всё подавалось в виде очередной интересной истории, в которую попадали дети.
: 2 3 ;
И тут-то до меня дошло, что наверняка в той книжке имелась в виду приблизительно та же операция (грубо говоря, #define 2 3;). Правда, точно я сказать не могу, ибо той книжки у меня больше нет.
Надеюсь, не стоит упоминать, что сия книжка ни на грамм не помогла мне научиться программировать. Зато теперь всегда, когда я в питоне пишу ключевое слово def, я вспоминаю злых колдунов.
И Ваш комментарий как раз говорит о том, что должен быть детский специалист, чтобы не было злых колдунов заколдовавших двойку. Задачки должны быть позитивные и заставляющие думать.
Фролов М. И. Сказки Дядюшки Компьютера. docplayer.ru/40087544-Zdravstvuyte-dorogie-rebyata.html
Оказывается, никаких двоек деф не заколдовывал. И вообще никаких DEF там нет.
Может быть, проще всего взять для целей топикстартера взять содержимое этой или похожей книги и перенести эти в примеры в упрощённую среду разработки (может быть, и вообще браузерную)?
P.S. Должен сразу сказать, что испытываю любовь к Python, и думаю, что в качестве первого языка для ребёнка стоит использовать всё же именно его, а не Java. Мне не нравится идея о том, чтобы «не влезать сразу в дебри ООП» при том, что на ребёнка сразу вываливаются обязательные «public static void main» и «public class». Это нужно будет или как-то объяснить или сказать что-то вроде «так надо, я тебе потом объясню» — и то, и другое как-то некрасиво выглядит.
Это нужно будет или как-то объяснить или сказать что-то вроде «так надо, я тебе потом объясню» — и то, и другое как-то некрасиво выглядит.
В любом языке будут такие вещи, про которые придется сказать "Те, кто разрабатывал язык просто решили сделать так, а не иначе".
Наилучший вариант: "вот эти все слова вокруг участка с кодом нужны как оформление, чтобы мы могли запускать эту программу".
Ну нет, это немного другое. Это скорее ответ на вопрос вроде «почему list comprehensions в квадратных скобках, а set comprehensions в фигурных?» И то, есть определённая логика и история за каждым решением, так что, не вдаваясь в дебри, правильней сказать «исторически так сложилось», а то у ребёнка сложится ощущение, что язык какие-то самодуры создают.
>«вот эти все слова вокруг участка с кодом нужны как оформление...»
Ну это не совсем правда ведь. Тогда «я тебе потом объясню» всё же лучше, на мой вкус.
Может быть, проще всего взять для целей топикстартера взять содержимое этой или похожей книги и перенести эти в примеры в упрощённую среду разработки (может быть, и вообще браузерную)?
P.S. Должен сразу сказать, что испытываю любовь к Python, и думаю, что в качестве первого языка для ребёнка стоит использовать всё же именно его, а не Java.
А я к Java то же нежное чувство питаю. Уверен и она, если правильно преподнести, вполне сгодится на роль первого языка программирования.
Насчёт книги — не нашёл подходящую по Java. С удовольствием бы «портировал».
print('Hello World!')
Объяснять нужно только что такое print, да и то человеку, имеющему минимальные знания английского это будет интуитивно понятно. Жирным плюсом Python, по моему опыту (опыту изучения, не преподавания), является то, что он не вываливает на новичка кучу ненужных ему понятий, а позволяет вникнуть в них постепенно. Тот же цикл for для новичка выглядит достаточно просто:
for i in range(1, 10):
print(i)
Интерпретируется просто: перебираем i в диапазоне от 1 до 10. Позже новичок узнаёт, что перебирать можно не только числа, но и элементы списков или символы строк. А ещё позже — что в цикле for можно перебирать любой iterable — объект, реализующий определённый контракт. В конце концов, он учится писать свои iterable. На каждой ступени новичок знает только детали, необходимые ему для работы, ему не мешают совершенно лишние для начинающего понятия классов, объектов, модификаторов доступа, без которых проблематично написать программу на Java.
А ещё у Python есть прекрасный интерактивный режим, ИМХО более дружественный, чем JShell.
Ну и ещё мысль, безотносительно языка программирования. Людям, которые только начинают изучать программирование не понятны вещи, которые нам, опытным программистам, кажутся очевидными, аксиоматичными. Года 3 назад моя сестра в университете изучала Java. Она умудрялась регулярно ставить меня в тупик самыми элементарными вопросами, вроде того как работает передача по ссылке или что такое this. У меня, человека, который лет 7 профессионально пишет на Java подобные понятия отложились так глубоко на подкорке, обрели исключительно образную, понятийную форму, что объяснять это словами мне было проблематично. Возможно, это только мой личный опыт, но именно из-за него я бы не стал собственные глубокие познания в языке позиционировать как аргумент за использование языка для обучения программированию. Опытному программисту не сложно изучить новый язык, а смена контекста помогла бы встряхнуться, посмотреть свежим взглядом на неочевидные моменты, прописать их подробнее.
А надо обязательно начинать с написания «Hello world»?
Простейшая — но при этом полноценная — программа.
Да, это копипаст, но он позволяет сразу увидеть результат, пока что (пока!) не заморачиваясь объектами, классами и переменными… переменные вообще, строго говоря, не нужны… хехе :)
Этот подход сродни подходу в компьютерных играх, когда в самом начале ты крутой, у тебя все возможности, но очень быстро происходит что-то плохое и ты начинаешь путь с нуля. Простейший пример — NFS MW, там как раз первые пять минут ты ездишь на крутейшей тачке, но потом она ломается :)
Почему не начать с объяснения что такое класс, что такое метод, что такое переменная и так далее?
Потому что (ИМХО) начинающим надо давать не ООП, а программирование. То есть, объяснять, как выполняется программа, как хранятся и изменяются её данные, учить декомпозировать задачу, сторить алгоритмы, отлаживать их. ООП нужно для того чтобы структурировать сложные программы, а задачи, которые будет решать новичок, долгое время будут умещаться в один метод main одного объекта (если мы говорим о Java). При этом Java заставляет использовать ООП даже для простейших операций ввода:
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
Чтобы новичок понял, что тут происходит, нужно объяснить ему про синтаксис объявления переменных, классы, создание объектов, конструкторы, потоки ввода-вывода, вызовы методов, различие классов и объектов. Ах да, ещё не забыть упомянуть, что классы надо импортировать, попутно объясняя про пакеты. Если это не объяснить, код будет бездумно копипаститься, что, на мой взгляд, вредно для процесса обучения. А если объяснять, то на новичка единовременно вывалится огромный поток информации, который он в какой-то момент перестанет усваивать.
Тем временем в Python (да, я буду топить за Python как первый язык) это выглядит так:
s = input()
Объясняем, что такое переменная, что такое функция, как происходит вызов функции и присвоение значения. Всё. Новичок продолжает изучение программирования не отвлекаясь на ООП.
Всё сразу вываливать на начинающего я бы не стал. Первый десяток-другой задач начинающий будет решать без написания собственных функций, используя минимальный набор встроенных (ввод-вывод, математика). На этом этапе можно применить метафору «чёрного ящика», на вход в который подаются какие-то значения (ну, или не подаются), внутри они как-то обрабатываются и возвращается результат обработки (ну, или не возвращается). Можно показать, в каком порядке программа будет разбирать выражение с функцией, сказать, что при выполнении программы вызов функции «заменяется» на результат её выполнения с переданными параметрами. Не отходя от метафоры «чёрного ящика» (буквально, не показывая синтаксис объявления функций, на простых картинках) показать какие бывают функции, что они могут делать. Объяснить, что в функции выносится часто используемый код, чтобы его не копипастить. Для начала использования готовых функций этого должно быть достаточно.
Первые самостоятельно написанные функции, скорее всего, будут «плоскими», то есть, не будут вызывать другие функции. В этот момент нужно объяснить про области видимости переменных (в случае с Python; в случае с Java это нужно объяснять раньше, рассказывая про циклы и условне операторы). Дать несколько упражнений на определение, какие переменные видны из функции (в случае с Python пока не рассказывать, что функции можно объявлять внутри функций, циклов или условных операторов, это оставить на потом, когда сформируется более чёткое понимание областей видимости). После этого можно показывать, что будет происходить, если из функции вызвать другую функцию. На этом этапе тот факт, что из функции не видны переменные из области, в которой функцию вызвали, не должен вызывать диссонанса. Нужно мотивировать начинающего активно использовать отладчик для понимания хода выполнения программы и изменения видимых переменных. И только на этом этапе можно рассказывать про стек вызовов.
У вашего отца был сильный математический бэкграунд, отсюда и непонимание императивных функций. У ребёнка, только начинающего изучать программирование, такого бэкграунда нет, поэтому ему
Почему не начать с объяснения что такое класс
Начинать с этого сразу — слишком абстрактно. Идея классов и объектов должна опираться сначала хотя бы на переменные. Плюс надо как то объяснить необходимость оформлять их именно в классы. Вот лично я не знаю как объяснить только классы, не объясняя по пути все остальное. Под "объяснить" я имею в виду не просто пересказать вслух теорию, а добиться понимания и умения применять ее.
Почему не начать с объяснения… что такое метод
Прежде чем объяснять что такое метод, надо знать хоть какие-то команды, понимать что команды выполняются одна за другой. В программах с наглядными агентами, необходимость группировать команды в функции (методы, процедуры, подпрограммы) показать проще, чем в программах с выводом текста на экран.
Я не пробовал, но предполагаю, что если функции можно будет просто оформлять, то циклы и ветвления можно объяснять после них. Впрочем это не про java, а скорее про какой-нибудь Scratch или питон.
Просто для меня непонятен подход когда детям дают код и просят его переписать один к одному и запустить.
Не помню где читал, но есть три стадии обучения: повторение, изготовление похожего под присмотром, создание нового самостоятельно.
Переписать один к одному и запустить — это первая стадия "повторение".
После нее обычно следует задача, в которой из изученных частей нужно сделать что-нибудь похожее. Ну и потом несколько задач на закрепление с постепенным повышением сложности.
В этом моменте, кстати, раскрывается еще одно преимущество очного обучения. Копипастить с бумаги, с доски и с соседнего экрана ну никак не получится.
Разные имена переменных тоже затрудняют копипаст из задачи в задачу. В конце концов, ничего страшного если в процессе решения отдельные команды будут копироваться и вставляться. Обучение ведь идет не навыку печати букв на клавиатуре, а построению алгоритмов.
До элементов ООП дело доходит очень не сразу.
аксиоматичность — это не всегда понимание.
и что ценно: объяснение (и подготовка к объяснению) позволяет самому понять глубже.
рискую получить тапками, но гляньте еще «1С Программирование для начинающих» Радченко (это, конечно, «парапрограммирование», но как обучение вполне пойдет)
я его, к сожалению, увидел слишком поздно (сын уже достаточно большой был, лет под 15, и уже ардуинил).
Игровая форма весьма неплоха (точнее, Ю даже предпочтительна) для определенного возраста. Не зря же существуют игровые методики обучения и математике, и языкам.
а «писать код» — это уже более серьезное занятие, требующее другой мотивации.
а «10 параметров хуже чем две структуры по 5 свойств и т.п» (что вообще говоря не всегда верно) не объясняется, например, и у Ричи с Керниганом. Тот, кто полезет в программирование более серьезно — тот будет читать «более другие» книжки. Чтение Радченко не отменяет чтения Дейта.
Так то оно так, но нужно учитывать еще и сообщество вокруг этого очень специфическое, а также большую заточенность на предметную область и очень упрощенный язык. Короче если хочется программировать для удовольствия — это, имхо, не тот выбор. Единственный плюс — двуязычный синтаксис, но плюс это только если человек не знает английского.
заточенность на предметную область — да, есть. это не плохо и не хорошо — это просто особеннось. упрощенный язык — так для целей обучения вполне хватит. (впрочем, я на нем лет 15 назад ассемблер-дизассемблер писал. задача для 1с неспецифическая, но вполне реализуемая)
Почему 1с плоха для обучения и изучения:
1) То что интересно тебе, не входящее в предметную область, не напишешь, либо напишешь только с дикими костылями;
2) Тот же аргумент что обычно про паскаль приводится. Зачем учить язык чтобы потом его не использовать?
3) Про сообщества: на том же инфостарте статьи о хороших практиках разработки днем с огнем не найдешь. В основном только от серебрянной пули, да от людей что на infostart event выступают год за годом. На мисту я вообще перестал почти сразу заходить. Есть еще какие то сообщества в рунете о которых я не знаю?
4) Без оплаты разных подписок в 1с недоступна ни документация толковая, ни EDT, ни платформа.
для обучения есть как коробочная версия для обучения (стоит практически копейки), с платформой, доками и т.п. Ну и эмуляторов гуляет достаточно.
по сообществам — когда-то была Т1С, откуда потом все переехали в мизду, но сейчас даже не знаю. но нагуглить ответ можно практически на любой вопрос.
Я не говорю, что 1с — лучший способ обучения. но по крайней мере, в отличие от велосипеда автора — это готовый продукт с документацией, с методиками, даже с книжкой «для начинающих». будет интересно — ученик сам выберет себе инструмент и направление.
С одной стороны, наверное, имеет смысл говорить о всяких там статических типах и прочих проверках, о памяти, об адресации в ней, о том, что массивы-словари-етц — это всё не на халяву.
На самом деле поддерживаю, но имхо, это если уже есть увлеченность программированием, ну или той же математикой+компами и подобным. А вот если стоит цель заинтересовать и показать как это все няшно человеку который это еще не знает — тут лучше все же что то динамически типизируемое, применимое в реальной жизни непрограммиста, и при этом общего назначения.
Лично я на Станции Юных техников не понимал, зачем программировать.
Я понимал что делают операторы FOCAL, но никак не осознавал — «зачем?!»
Зачем программировать я понял после пятилетнего перерыва, когда занимался аналогичной ерундой, но на Pascal. И скорее всего потому, что задача была из реального мира — обход доски конём.
Но ваш редактор штука всё равно полезная для практикума изучающих эту вашу Java. Разве что добавьте пошаговость и значения переменных.
задача из реального мира — обход доски конём
А теперь вдумайтесь в эту фразу :)
«вывести звёздочки на алфавитно-цифровом дисплее таким образом, чтобы они сформировали изображение ёлочки».
или
«непременно в подпрограмме сложить два числа».
Что это? Для кого это? Зачем кому-то это могло понадобиться? Калькулятор этим психам чем не нравится?
«посчитать количество букв „а“ в предложении». Мы этого на уроках русского не делали.
А доска вот — это доска, «Берёшь в руки — маешь вещь!»
Я-то руками задолго до этого реально обходил, точнее пытался. Многократно.
Задача лично для меня весьма и весьма реальная (хотя не смертельная, конечно же :-D)
В этом аспекте набивший оскомину Colobot сразу же наглядно, доходчиво и интернационально показывает зачем кому-то могло понадобиться программировать. И почему не программировать нельзя.
1) Почему вы выбрали именно java, а не, скажем, python (такой же современный и используемый в production)?
2) Возможно, будет проще не писать свою недоIDE, а написать плагин к idea/eclipse/netbeans. Да, в них более сложный интерфейс, но доступны сразу все современные возможности разработки. Не думаю, что это остановит тех, кто действительно хочет программировать.
Кстати для обучения Java, Kotlin и Python у JetBrains есть специальные IDE: https://www.jetbrains.com/education/
Спасибо за ссылочку. Надо будет посмотреть на досуге.
1) Почему вы выбрали именно java, а не, скажем, python (такой же современный и используемый в production)?
Потому, что я умею в Java. Знаю её возможности и умею их применять. Способен решать довольно сложные задачи на этой платформе. Плюс смогу ответить на любые вопросы по языку, если понадобится.
2) Возможно, будет проще не писать свою недоIDE, а написать плагин к idea/eclipse/netbeans. Да, в них более сложный интерфейс, но доступны сразу все современные возможности разработки. Не думаю, что это остановит тех, кто действительно хочет программировать.
Наверняка проще было бы. Но не так интересно.
Рассматривал вариант плагина к настоящей IDE, но быстро отверг — слишком уж много «второстепенных» и «отвлекающих» факторов. Это как учиться пилотированию сразу на магистральном лайнере, а не на маленьком планёре. Усвоит азы — может и на IDE пересесть, кто же против?
Плюс вопрос полной русификации в этом варианте не решается, а я считаю его очень важным для успешного вовлечения.
metaboloid двумя руками ЗА за вашу работу.
Так как сам занимаюсь с детьми (правда я проповедую начинать с Паскаля) но чем смогу тем помогу.
Опыт работы небольшой есть (25 лет), java знаю на уровне новичка.
Думаю, что среда разработки прямо или косвенно должна помогать решать вопрос мотивации. Например, сайт по обучению Scratch, позволяет легко поделиться результатом с миром, обладает возможностями соцсети(«лайки, каменты, топы»). Это работает, хотя не уверен, что это правильный путь. Вопрос мотивации остается открытым, прошу поделиться успешными решениями.
учиться чему-то вместе гораздо интереснее. «взаимообогащающе».
а хороший преподаватель или по меньшей мере наставник — всегда полезен (но не всегда возможен)
2) Удовольствие от самого процесса, от того что что то выходит, от конечного результата. Другого подкрепления мне как то и не нужно было. Узнал что то новое — получил удовольствие, приобрел навык — аналогично.
К счастью, нива программирования настолько широка, а жизненные ситуации настолько разнообразны, что первые места найдутся всем, способным написать программу, у которой будет хотя бы один благодарный пользователь, выбравший её среди прочих.
Я считаю, что главное в вашей ситуации — не забывать о своей цели. Вы ведь своего ребенка хотите научить, а не весь мир осчастливить. Может быть неподалеку есть кружки с профессиональными преподавателями, и вам лучше сходить к ним.
Попробуйте для начала Scratch или какой-нибудь программируемый пластиковый конструктор или что-нибудь с майнкрафтом.
Если уж делать свою IDE с подсветкой и компиляцией, то надо уходить от печати сообщений в консоль.
Во первых, это уже умеет делать любая другая IDE, хоть IntellijIDEA, хоть Netbeans. Веб-браузер отлично справляется с режимом "Чтение учебных материалов", а обычная IDE — с подсветкой и работой с консолью.
Во вторых, консоль слишком абстрактная штука. Даже взрослым, которые вроде бы обладают усидчивостью и терпением, консоль выглядит оторванной от реальности. Хорошо еще, что большинству взрослых можно объяснить что "сейчас мы тренируемся на кошках, а потом будет нагляднее". Сомневаюсь, что дети это поймут.
Чтобы получилось нагляднее, стоит копать в сторону программируемых агентов. "Бытовой" навык программирования на мой взгляд состоит в том, чтобы сформулировать последовательность действий для достижения какого-либо результата, а не в языковых конструкциях. Поэтому и в среде для обучения упор стоит сделать не на печать текстов, а на управление неким исполнителем. Черепашья графика в этом смысле лучшее сочетание простоты и наглядности. Усложнять можно в сторону роботов, которых нужно куда-то привести и т.п. Но тогда у вас получится что-то вроде Scratch на java.
Непонятно, почему вы делаете "отдельное" приложение. Можно ведь сделать плагин к существующей IDE. Из коробки будет и работа с файлами, и компиляция, и подсветка синтаксиса и, может быть, еще какие-нибудь удобства. Можно будет заняться тем, что действительно важно для среды обучения.
Скептически отношусь к идее написания учебных материалов, имея только одного ученика. Нужно много обратной связи, чтобы получилось что-то полезное. Лучше уж взять какой-нибудь учебник и "портировать" его на вашу платформу.
имхо, проект из разряда «чем бы дитя не тешилось».
Я считаю, что главное в вашей ситуации — не забывать о своей цели. Вы ведь своего ребенка хотите научить, а не весь мир осчастливить.
Одно другому не мешает вроде как.
Если уж делать свою IDE с подсветкой и компиляцией, то надо уходить от печати сообщений в консоль.
Ничего сложного в идее консоли не вижу. К тому же это непременный атрибут любой работающей java-программы с которым довольно легко работать (на вывод). Значит он должен быть представлен в среде обучения.
В планах на более отдалённое будущее есть создание модулей с программируемыми «агентами», которые будут как-то визуализированы. Это вполне может выступать «альтернативой» консоли.
Можно ведь сделать плагин к существующей IDE.
Про это писал в комментарии выше.
Можно будет заняться тем, что действительно важно для среды обучения.
Чем? Какие есть предложения?
Скептически отношусь к идее написания учебных материалов, имея только одного ученика. Нужно много обратной связи, чтобы получилось что-то полезное. Лучше уж взять какой-нибудь учебник и «портировать» его на вашу платформу.
Я пока настроен оптимистично. Несколько первых уроков написано. Идёт туго, но есть прогресс. Рецензию и отзывы было бы конечно интересно получить.
Что бы вы предложили «портировать» в качестве уроков по Java для самых начинающих?
Ничего сложного в идее консоли не вижу. К тому же это непременный атрибут любой работающей java-программы с которым довольно легко работать (на вывод).
Мой тезис был не столько про то, что консоль сложная.
- Зачем делать еще одну IDE для работы с консолью, если есть готовые?
- Типичные начинающие "не верят", что консоль это реальное применимое программирование. Если бы я мог потратить кучу времени на создание своей IDE для обучения, я бы сделал что-нибудь более наглядное.
Можно будет заняться тем, что действительно важно для среды обучения.
Чем? Какие есть предложения?
Например отслеживание прогресса, поощрение успехов, наглядные задания.
Что бы вы предложили «портировать» в качестве уроков по Java для самых начинающих?
Дело не столько в "портировать", сколько в том, чтобы не делать самому с нуля. Можете взять книгу по C#, которые в комментариях советуют.
Я несколько лет осматриваю различную литературу по программированию, но не припомню книги, подходящей под озвученные вами требования:
- язык java
- работа с консолью
- для детей
- не похожая на игру
- не заточенная под трудоустройство
В первую очередь потому, что профессиональные преподаватели с опытом уходят от java и консоли в сторону игровых платформ типа codecombat, майнкрафта, scratch и т.п.
Пункты 4 и 5 этих требований, кстати, взаимоисключающие.
Я пока настроен оптимистично. Несколько первых уроков написано. Идёт туго, но есть прогресс. Рецензию и отзывы было бы конечно интересно получить.
С моей точки зрения это выглядит как если бы человек без педагогического образования, без опыта преподавания отбросил весь опыт сообщества и начал делать свой велосипед для своего сына.
Стали бы вы сейчас писать свою новую операционную систему для домашнего ПК?
С моей точки зрения это выглядит как если бы человек без педагогического образования, без опыта преподавания отбросил весь опыт сообщества и начал делать свой велосипед для своего сына.
И детей рожать и потом воспитывать нельзя без педагогического образования?
Кто говорил о том, что нельзя?
Изобретайте на здоровье. Ваш же ребенок.
Я могу только посоветовать взять что-нибудь более подходящее для обучения детей программированию и почитать где-нибудь как это лучше подать.
Присоединяюсь к комментирующих, не стоит тратить время на разработку собственной IDE, лучше сосредоточиться на поиске учебных материалов для детей. Проблему установки и настройки IDE для начинающих решает облачная IDE.
https://habr.com/post/310438/

Java (как и ряд других языков) мне не магией, непонятной непосвященному. Тот же «public static void» — вот как это сходу объяснить ребёнку, не уходя в синтаксис и архитектуру компьютера?
Тот же «public static void» — вот как это сходу объяснить ребёнку, не уходя в синтаксис и архитектуру компьютера?
В школе учительница спрашивает учеников, кем
работают их родители. Руку тянет девочка:
– У меня папа доктор.
– Это хорошая профессия, – говорит учительница.
– А у меня папа водитель, – хвастается один из
мальчишек.
– Какая интересная профессия. А чем твой папа
занимается? – спрашивает учительница Вовочку, на
что тот невозмутимо отвечает:
– Он в борделе на пианино играет.
Учительница в шоке; в тот же день она идет к
Вовочке домой и возмущенно говорит отцу:
– Как вы можете в таких условиях воспитывать
ребенка?! Вы действительно играете на пианино в
борделе?!
Папа Вовочки смущенно:
– Видите ли, я программист. Специализируюсь на
сетях TCP/IP, пишу распределенные сетевые
приложения для операционных систем UNIX, но как
это объяснить семилетнему мальчугану?
©
Дальше моргания лампочкой редко развиваются дальше!
Scratch и другие визуально-игровые системы — Для моих целей такое мало годится т. к. я вижу в них слишком большую развлекательную составляющую.
Окей, Вы вырастите талантливого и умелого программиста на Java. Он будет получать 100500 денег. Но будет ли у него воспоминания о детстве, играх и развлечениях? Внешний вид окна прототипа в режиме работы с исходным кодом навеял воспоминания о школьных скучных уроках информатики. Дети могут учится играя. Больше играйте с ребенком и в процессе игры обучайте его. Вы рискуете превратить погружение в удивительный мир программирования в обязаловку для своего ребенка. Поиграли-поиграли, а теперь сели программировать :(
Не факт, конечно, что мое мнение применимо к Вам или Вашему ребенку. Знаю я детей которые в 12-13 лет серьезней чем мои ровесники.
Но будет ли у него воспоминания о детстве, играх и развлечениях?
Будут, не сомневайтесь. Игры и развлечения стараюсь максимально отделить от компьютеров и гаджетов. Заставлять программировать конечно же никто не собирается.
А что по поводу javascript думаете? так же есть книга javascript для детей. Привлекает тем, что можно в браузере запустить или друзьям на мобильном браузере показать
Ощущение, что вам больше интересно разработать среду, чем научить ребенка. Основная задача — составить план обучения, подготовить интересные задания, чтобы результат радовал ребенка. И это не так просто. Содержание важнее технологической обертки.
Разработать среду, конечно же, мне интересно. Но это сравнительно небольшая задача, которая уже сейчас решена примерно на 33.3% (за несколько недель работы вечерами).
Параллельная работа, которая тоже уже начата — это цикл уроков, которые и будут «учить» программированию на Java и объяснять всякие сопутствующие вещи. Вот это гораздо более объёмный и сложный труд. Я это вполне осознаю. Мне интересно это делать потому, что я таким образом прорабатываю сценарии разговоров с ребёнком на технические темы. Придумываю как я буду отвечать на его вопросы. А они точно будут задаваться.
Мне лично довелось потыкать и паскаль и PascalABC — там задачник прилагался, и так же классически порулить черепашкой можно было.
«подарите мамы сыносьям гитары, пусть своей дорогой чадушка пройдет» © Бригадный подряд
Ассемблер синтаксически проще С, но там надо знать архитектуру, чтоб грамотно тыкаться в регистры. В С мне не нравится две вещи:
— Препроцессор — фактически язык внутри языка, и от него сложно уйти
— Магия, завязанная на архитектуру: static/volatile/const, указатели — пусть пока компьютер побудет волшебной коробкой. Понадобится скорость — тогда доступ к памяти и освоит, вместе с векторизацией и параллельным исполнением.
Мое имхо: учить надо на С
Читатель, если вы сейчас выбираете язык для изучения, ни в коем случае не начинайте с C. Автор цитированного комментария недооценивает подводные камни, которые таит в себе C для новичков.
Прикольная идея! А как можно присоединится к вашему проекту?
Лучшее — враг хорошего. Вы считаете себя плохим специалистом? Если нет, то вспомните в каких условиях изучали программирование вы.
Самое главное в программировании — усидчивость и мотивация. Если ребенок сам пришел с просьбой научить — уже более 50% главного дела сделано.
Просто подкидывайте задачки, показывайте простенькое, смотрите как сделал.
Дети — НЕ глупые. У них недостаточно опыта, возможно есть проблемы с мотивацией и пониманием иерархии в обществе.
Но по соображалке в плане логики — 10 лет это уже полностью развитый человек.
Со старшей про программирование почти никак, но она феноменально извлекает информацию из сети и не только, активно обходит барьеры в домашней сети и на телефоне. К 11-ти он не понаслышке знает, что такое DNS, перепрошивает телефон и пр.
Сыну сейчас 9. Где-то с 7-ми лет он плотно сидит на майнкрафте. Геймификация обучения не составляет труда. Так же неплохо зашли Arduino уроки. Светофор, машинка и пр. Прекрасно позволяет разобраться с циклами, условиями, переменными и даже подпрограммами. Иногда Scratch, но этого и в школе хватает. Жду нормальный API для танков:)
Средней дочке всего 6 и руки у неё с рождения из правильного места. Scratch и простейшие примеры на Arduino, но не так часто, как хотелось бы.
И главное — не переусердствовать. В этом возрасте можно много что потенциально интересного попробовать.
Чарльз Петцольд – «Код. Тайный язык информатики» — очень интересно про компьютеры вообще.
Чарльз Петцольд – «Программирование в тональности C#» — оно конечно про C#, но очень подробно, понятно и как раз для 10-12 лет. Замечательная книжка. Такой же про Java не знаю.
А если уж свою IDE для обучения писать, то мне очень понравилась идея thonny. Оно для python, но для начинающих там очень наглядно отображаются состояния переменных, вызываемые функции и дебагер.
Как отец двух детей 14 и 8 лет. Поделюсь опытом.
LightBot, Scratch, Arduino суть одно и то же, инструмент который позволит показать что за сложным поведением объектов может стоять простая логика. Отличный вариант для детей младше 12-13 лет. Раньше начинать серьезно заниматься программированием наверное бессмысленно.
Игрострой вообще любой язык.
Игры можно писать на всем. Skratch с возможностью поделиться проектами будет отличным вариантом. Начать можно с простых видео уроков, когда ребенок просто повторяет за преподавателем. Есть уроки на youtube. Все же как показал мой опыт, сначала ребенку интересно сделать "самому" (без родителей) и похвастаться. Когда ребенок наигрался в "обезьянку" и понял что дальше повторять за кем то не интересно. У него появляется желание делать что то самому и приходит понимание что создавать объекты соединять блоки воедино он умеет, а как реализовать собственные идеи он не понимает. Тут выход родителей. Нужно показать как реализовывать свои идеи придумайте что-то свое. Поэтапно покажите как простые действия из учебника (у нас дают обзорно скретч во втором классе) превращаются в игру.
Первый проект который я делал с дочерью была игра в выбивного.
Как заставить мячик летать по экрану и отталкиваться?
Как заставить кота на экране бегать в зависимости от нажимаемых кнопок?
Как проверить что мяч столкнулся с котом?
Как считать сколько раз мяч попал в кота?
Добавим злодея краба который будет кидать новые мячи каждые 10 секунд.
У кошки девять жизней. Конец игры если они закончились. Грузим в сеть. Звоним бабушка дедушкам хвастаемся.
https://scratch.mit.edu/projects/219603236/
Все выше ребенок может сделать сам, а после того как он увидит целостную картину он и придет к программированию.
Игрушки тоже бывают разные. Старший сын вместе с тем как начал программировать так же увлекался игрушками Zachtronics. SpaceChem, TIS-100. Туда же Human Resource Machine.
После игрушек приходит время выбирать. И тут уже все зависит от интересов и способностей ребенка. Именно этот выбор и будет диктовать язык.
Если ребенок увлекается математикой логичным продолжением будет информатика. Более серьезный алгоритмический подход. Оптимальным языком будет C/C++. Из плюсов этого выбора наличие олимпиад в том числе и международных. Наличие множества соревнований и огромное комьюнити (codeforces и подобные сайты).
Веб. HTML CSS и конечно никуда без Javascript. В школе ребенок сможет похвастаться своим сайтом.
Мобильные приложения под андроид будет вами любимая Java. Отличный способ "похвастаться" в школе.
Нет плохих и хороших языков. Есть разные дети и разные интересы, а плохие программы можно писать на любом языке.
И да нет никакой необходимости выбирать что то одно. Сын участвует в олимпиадах по информатике, заинтересовался вебом, ходил в кружок Samsung по разработке мобильных приложений увлекался ардуиной. Пробуйте все и только методом проб и ошибок вы узнаете что нужно вашему ребенку. Единственное требование на начальном этапе ребенок должен видеть что это интересно не только ему, но и вам. Только на личном опыте и собственным интересом и поддержкой вы сможете "заразить" ребенка программированием, а дальше "болезнь" начнет прогрессировать без вашего вмешательства.
Если вашему ребенку еще нет 6-7 лет и вам кажется что программировать ему еще рано, просто попробуйте поиграть в игру "Я робот". Мы так делали с дочерью когда ей было 4-5 лет. Это основы алгоритмизации. Вы договариваетесь что вы будете выполнять дословно все приказы ребенка. Она в свою очередь должна отдавая команды выполнить какое то задание.
Например делаем чай:
- Возьми чашку.
- Здесь нет чашки. (покажите растерянность)
- Подойди к шкафу. Возьми чашку.
- (шкаф закрыт) попытайтесь взять ударившись руками несколько раз в дверцу.
- открой шкаф… и т.д.
Это отличный способ провести время вместе с ребенком весело. Играть можно где угодно.
Разбить свой опыт на области, области на инструменты, идеи, и выстроить все это в дерево, определив что и на каком этапе стоит подавать, и в каком обьеме
Многие упускают, что программирование — не вещь в себе, что у него есть как корень (например книжка «Код — тайный язык информатики»), так и крона (паттерны проектирования например)
Не зря прежде чем пустить «технаря» в преподаватели в техническом ВУЗе — его заставляют проходить курсы (либо опытные преподы помогают, тактично направляя и обучая). Далеко не всякий человек, прекрасно знающий свое дело, может хорошо донести свои знания до учащихся-студентов.
И в принципе, хороший препод может нормально научить на слабой «экспериментальнй базе» (может научить программированию без наличия компьютера. физике и химии без лабораторных), а плохому не поможет самая замечательная база.
Графический интерфейс дает очень много преимуществ в плане интерактивности и тот факт, что через 2 цикла ты рисуешь красивый цветок черепашкой, очень сильно вдохновляет на новые произведения.
Я так в 11 лет нарисовал черепашкой шахматную доску. Активно изучал циклы, чтобы не копировать код рисования ладей, коней, слонов, и пешек.
хотя даже восьмиугольные как бы намекают…
там программирование — только «текстовое»? если да, то рекомендую (но не настаиваю) показать ребенку сначала Скрэтч. там писать гораздо меньше (а это мелким все-таки несколько затруднительно), поэтому более привлкектельно (результат достигается быстрее, усилий меньше — подкрепление лучше (и ошибок меньше, да и исправляются они проще))
Но я в уме держу и более широкий круг потенциальных «учеников» — всех, кто решил «войти в IT».
У меня бывают пожилые любознательные студенты. С точки зрения обучения ничем от молодежи не отличаются.
- Java. Однозначно нет. Слишком много телодвижений для достаточно банальных вещей. Прочитать текстовый файл с набором чисел (90% олимпиадных задач), что-то нарисовать, вот это все. Справочная информация не рассчитана на непрофессионалов, и тем более на детей. Да, есть вот эта детская книжка, но чуть шаг в сторону и все, тупик.
- C/C++. Скорее нет, чем да. Сложно для детей выйти за пределы работы в консоли с текстовой информацией. У К.Полякова есть учебная библиотека для работы с графикой, но под древнюю версию gcc, не работающую под виндой после 7. Сложные сообщения об ошибках. Хотя пару человек зацепила идея «самого крутого языка» (нет, не моя подача, в интернетах нахватались), плюс эти же пара ребят изучают английский на профильном уровне, уже где-то на B2, для них сообщения компилятора уже не проблема.
- Python. Скорее да, чем нет. В старших классах заходит очень хорошо, у продвинутых ребят и раньше (рекорд — 3-классник, который начал его самостоятельно изучать, наблюдая за сестрой 10-классницей, которая у меня его изучала; впрочем, там гены и воспитание топ). Отдельный плюс — питоновские батарейки, очень-очень легко сделать что-то полезное. Форматирование отступами не сразу и не всем заходит, но в целом даже выпускники, обучающиеся сейчас на профильных специальностях (прикл.мат.инф., прогр.инжен.) отзываются, что на питоне проще формулировать мысли, чем на C++
- PascalABC. Хуже питона, заметно мешается многословный и не совсем очевидный синтаксис.
- Кумир. Очень, очень хорошо для начала. Лучший вариант в возрасте до 14 лет, для питона в среднем пока не хватает знания английского и вообще абстрактного мышления. Отличная обучающая среда. Главный минус — что-то практическое сделать сложно или вообще невозможно.
- C#. Пробовал знакомить старшеклассников, уже знающих питон. Оценили возможности VS, но язык посчитали слишком сложным.
- Scratch. Зря вы недооцениваете игровую составляющую, в возрасте 8-12 лет это КОЛОССАЛЬНЫЙ стимул. Да и даже дальше тоже, подавляющее большинство моих ребят скретчеподобный час кода воспринимают как увлекательную игру, челлендж, соревнуются между собой — без моего участия, достаточно дать адрес сайта! А от кумира и питона (в зависимости от класса) потом ноют, мол скучно.
В итоге для себя пришел к следующей последовательности: началка и 5-7 классы — скретч, 7-9 классы — кумир и питон для продвинутых, 10-11 классы — питон или то, что они самостоятельно начали изучать (редко, но бывает).
Как сказала Татьяна Черникова — мы все живем уже в цифровом мире, с его нанометрами и наночастицами, и дети не исключение. Мобила-смартфон у каждого.
Насколько я знаю детей, сейчас за десктопом только для поиграть.!
Как раз мои наблюдения и жизненный опыт говорят об обратном — поиграть и поразвлекаться это смартфоны и веб. Да и код писать на десктопе сильно удобнее.
Еще посмотрите фактам в лицо 90% программистов делают бесполезные вещи, (очередные банковские приложения, либо лэндосики, crm и т.д).
А вот достойных инженеров, материаловедов, биологов действительно мало, и они действительно приносят пользу обществу.
Вывод:
Зачем навязывать ложное восприятие реальности в таком возрасте? Лучше просто, по возможности, показать все возможные профессии и пусть ребенок сам делает выбор.
90% программистов делают бесполезные вещи— так 90% инженеров, материаловедов и биологов тоже занимаются фигней. а достойных программистов не так уж и много.
Пользу обществу приносят даже дворники — но, имхо, не стоит профориентроваться на них.
а вот насчет «показать все возможные профессии» — согласен, но кто это сможет сделать? даже области знаний возможные показать — и то проблема объема…
Обучение программированию с азов