Как стать автором
Обновить

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

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
У меня увы этого не было, но читал я тоже неплохо, и очень любил в то время физические и биологические энциклопедии. О природе электричества, атомах, устройстве ядерного реактора я прочитал еще в младших классах. Это если про 7-9 лет говорить. А вообще, имхо, в те же 12 лет про которые в первом каменте говорится уже вполне себе идет в школе математика и геометрия. И прекрасно усваиваются.
Да, похоже, это вы были вундеркиндом. У меня не в семь, но в восемь лет появился спектрум и книжка по бейсику для него и две книжки по бейсику не для него. И я официально считался вундеркиндом и очень хотел научиться программировать. Но увы, сколько-либо получаться стало только лет в 16, когда у нас в школе был паскаль. И до сих пор получается плохо, по правде сказать.
Помню классе в пятом в книжном увидел книжку по программированию на QBASIC в состав которой входил флоппик с собственно исполняемой средой и примерами из книги. В книге рассказывались похождения переменных, операторов IF, INKEY$ и GOTO в борьбе с какими-то там проблемами. Книжку я так и не дочитал, но в обезьян, перекидывающихся бананами с братом даже играли.
Я бы предложил в этом случае обычный JavaScript нежели Java, там есть всяческие послабления вроде кириллических объектов и в случае чего до графического контекста можно добраться относительно безболезненно. Ну и параллельно записать на курсы английского по возможности.

Раньше даже как-то не задумывался, но да, я так же начинал.
"Уложись в 16kb памяти". С пяти лет. И многие по-моему так. Basic, asm, pascal — еще не умея читать и писать толком.

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

А вот как это у неё получилось?
Моей дочери 2г9м, но читать она и не планирует.
Не, она конечно любит говорить а тут написано ЧТО-ТО ТАМ, но чаще всего там написано не то — то есть она не читает, а предполагает что там есть надпись и делает вид что читает.
Зато разговаривает почти с года, но с чтением пока никак.
Что можете посоветовать для развития чтения?

Не помню всех деталей, но мать с измальства учила нас с алфавиту, года в три даже вторую половину мухи-цокотухи наизусть выучил параллельно читая.
Ну ей вроде как буквы показывают регулярно. У меня были кубики «арбуэ» и магнитные буквы. И тоже наверняка мне оные буквы называли, хотя мама утверждает, что я читать выучился самостоятельно. В общем, особо усердных усилий никто не прилагал ни в том, ни в другом случае.

Хотя, конечно, быть может, что это всё индивидуальные различия.
Меня бабушка учила по Зайцеву. Но тут надо отметить, что она крутой педагог была в коррекционной школе для детей с нарушениями умственного развития. Видимо, если применять эти методики на обычных детях, то получается круто. Я читаю с 2.5 лет. Четко помню, что к 4 завязал с Колобками и перешёл на хирургические атласы и энциклопедии для детей.
Отвечу одновременно и ув. wormball и ув. staticlab Не всё так просто с возрастом и чтением. Я тоже умел читать лет с трёх и в первых классах читал книги взахлёб (компьютера, к нынешнему огромному сожалению, у меня тогда не было).

А вот вполне умная младшая сестра шести лет сейчас ещё не читает, даже со слогами проблемы. Мы стараемся уделять ей время и заниматься с ней. Она ходит на разные кружки (рисование, танцы и т.д.), интересуется разными вещами, но вот с чтением пока никак.

В общем, не нужно сразу «наезжать» на IgorKh — скорее всего, он вполне ориентируется в том, что его ребёнок может, а что нет, и от этого отталкивается в своих требованиях.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Видимо все разные, я сам не помню, но говорят что 104 слова/мин читал между 4 и 5 годами. Собственно между 3 и 4 научили, опять же по словам родственников.
В 14 лет «писать» на Scratch для ребенка — это уже признание его умственной неполноценности. Посмотрите задачи олимпиад по программированию для 9 класса (МОШ, Всерос и т.д.). Тех, кто проходит хотя бы до регионального этапа в 12-14 лет, — сотни. Это — будущие конкуренты вашего ребенка. Которые съедят его бутерброд с маслом пока он в Scratch играется. Как говорится, go big or go home!
НЛО прилетело и опубликовало эту надпись здесь
Зависит от того, что вы считаете «нормальным специалистом».
НЛО прилетело и опубликовало эту надпись здесь
Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации.

Эдсгер Вибе Дейкстра
бейсик бейсику рознь (бейсик во времена лдейкстры был ужасен, а бейсик.нет — вполне себе). и изучение — изучению (и писал на нем, и учил ему и на нем, и интерпретатор его мы дизассемблировали-ускоряли-испраляли ошибки-расширяли).
> бейсик бейсику рознь

Вот! Я надеюсь, в аду приготовили отдельный котёл для тех, кто изобрёл бейсик моду называть бейсиком всё, что плохо лежит. Два случайно выбранных бейсика, как правило, отличаются больше, чем си и паскаль. Давно пора вообще забыть слово «бейсик». И вб.нет переименовать.
НЛО прилетело и опубликовало эту надпись здесь
Это должно означать, что у Дейкстры мнение было противоположным озвученному вами.

> Можно начать учиться программированию(да и чему угодно) в момент поступления в ВУЗ и при этом стать нормальным специалистом.
НЛО прилетело и опубликовало эту надпись здесь
Надо было другую вашу цитату привести:

> Если ребёнку уже нравится программировать, то пусть себе программирует на том, на чём ему нравится. Если же хотите его с программированием познакомить, то тут и Scratch для начала подойдёт.
НЛО прилетело и опубликовало эту надпись здесь
Scratch отлично подходит для детей 7-9 лет. Потом пора переходить на языки, позволяющие хотя бы повторно использовать код и писать программы длиной более двух экранов. В идеале конечно еще и с нормальными типами данных.
Мне python хорошо зашёл. Хотя я и ненастоящий сварщик. В итоге теперь мне проще с pandas распарсить какие-то табличные данные, чем мучаться с excel в попытке найти какие-нибудь пересекающие множества в двух таблицах. При этом раньше я только на QBasic и Visual Basic чуть-чуть писал. Меня в итоге совершенно восхитила концепция функций и изоляции фрагментов кода. А на Basic я писал какой-то фарш с безусловными переходами.
Меня в итоге совершенно восхитила концепция функций и изоляции фрагментов кода


(старательно пряча фанатичный отблеск в глазах) Молодой человек, давайте поговорим с вами о функциональном программировании!
НЛО прилетело и опубликовало эту надпись здесь
Восторг же)
Жаль, я так до сих пор и не понял, зачем мне нужны классы :-/ Сложно быть ненастоящим сварщиком. Хотя в итоге очень удобно планы по изобретениям выполнять. Несколько свидетельств о регистрации ПО для ЭВМ гордо висит на стенке)
Жаль, я так до сих пор и не понял, зачем мне нужны классы :-/


Точно пришло время поговорить о ФП.

Несколько свидетельств о регистрации ПО для ЭВМ гордо висит на стенке)


Как у Ненашева из «Гения»? :)
В лаборатории был план по свидетельствам на интеллектуальную собственность. А такой вариант был довольно удобен. Ну и в итоге получился довольно удобный узкий инструментю Несколько коллег из других университетов тоже его используют. Тем более, что у меня наконец получилось опакетить его в PyPi и вся установка сводится к pip install morphostain

github.com/meklon/morphostain
Ого. Я в этом ни уха ни рыла, но описание внушительно. Покажу своей — она-то как раз лабдиагност.
Код не идеален, конечно. Но я старался максимально следовать стандартам и аккуратно оформлять. Профессиональных программистов вроде не тошнит.
Классы нужны, чтоб одним куском таскать и передавать поведение и внутренние данные, а ещё на них иногда можно отразить объект реального мира. Объяснить полезность классов мне смог С, в котором модульность и инкапсуляция реализованы ну очень неудобно.
А вот зачем нужно офигенное дерево наследования в стиле enterprise Java я до сих пор не осознаю.
За репозиторий спасибо: приятно видеть научный код документированным, поддерживаемым и довольно чисто написанным.
НЛО прилетело и опубликовало эту надпись здесь
Ну как-то так. Вообще не понимаю, почему корень должен быть один, и зачем нужны 3 и более ступеней (немножественного) наследования: чем дальше мы наследуем, тем сильнее переопределяем изначальное поведение, что ухудшает понимание кода. Лучше сразу построить самолёт (и назвать его самолётом), чем выпиливать его напильником из паровоза.
Пишу молотилки и embedded на С, скрипты на питоне, прототипы и одноразовые вещи на матлабе.
НЛО прилетело и опубликовало эту надпись здесь
Самолёт лучше делать на основе самолёта а не паровоза. Очень печально, если ТАМ это делается исключительно через паровоз.
А строить самолёты с нуля это называется велосипедизм.
Рад, что понравилось. Но тут именно что научный код. Не с той стороны в программирование пришел) Чисто решение практических задач. Должен сказать, что Python мне очень понравился своей относительной простотой в решении практических задач. Хотя, если писать лапшу, то будет адский фарш в плане отладки и путаница с состоянием переменных. Поэтому старался дробить насколько возможно и изолировать все. В итоге все равно связей многовато между функциями и модульность частично потерялась, но отладка упростилась.
НЛО прилетело и опубликовало эту надпись здесь
я так до сих пор и не понял, зачем мне нужны классы

— Вылить воду из чайника.
— Инициализировать класс «чайник без воды».

:)
По-моему, вместо того, чтобы плодить классы, достаточно одного класса с признаком WaterLevel в диапазоне 0-100 (проценты).
НЛО прилетело и опубликовало эту надпись здесь
Кстати, я косякнул. Надо два признака: LiquidType (string) и LiquidLevel (0-100). Так лучше.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
И скажем у всех классов есть общий интерфейс, имеющий функции «подключить к источнику питания» и «включить нагрев».


Стоп-стоп, как же не-электрические чайники?
НЛО прилетело и опубликовало эту надпись здесь
Куда, простите, подносить? Плита — это другой объект, другой класс :)
Абстрактный класс для чайника — это, наверное, «емкость для жидкости, способная переносить нагревание до известных пределов».
НЛО прилетело и опубликовало эту надпись здесь
розетка


Но… но ведь… розетка… это уже опять другой объект…

Если у вас в вашим «мире» сущетсвуют только чайники это одно, а если ещё и бутылки с кастрюлями, то совсем другое :)


Не вижу никаких проблем вышеописанный мной абстрактный класс превратить в том числе и в кастрюлю :)
НЛО прилетело и опубликовало эту надпись здесь
надо идти от Бочки.
Бочка
Бо́чка — сосуд цилиндрической или другой формы, который можно перекатывать с одного места на другое и ставить на торцы без дополнительных опор, предназначенный для транспортировки и хранения жидких и других веществ
НЛО прилетело и опубликовало эту надпись здесь
генерировать исключение при попытке перекатывать…
или усиле для перекатывания требовать большое
НЛО прилетело и опубликовало эту надпись здесь
вообще, квадратное тоже можно катать — доказано Армией.
Вот в этом и есть зло классов. Как можно назвать метод который означает некое действие но сильно различающееся по способу реализации — «подать энергию»: включить в электрическую сеть, зажечь дрова, направить зеркало на солнце, инициировать ядерную реакцию…
«подготовить подачу энергии»: наложить дров, открыть газовый кран, подключить к розетке, загрузить ядерное топливо.
По мере обследования всевозможных вариантов устройств по подогреву воды могут появиться неожиданные методы которые не актуальны для других устройств подогрева воды. И вот мы уже подгоняем целый «паровоз» к дому чтобы всего лишь подогреть воды от электричества. Но сам паровоз рассчитан и под другие виды топлива и способы передачи энергии, но если нам нужно только электричество мы всеравно вынуждены таскать за собой всё это безобразие.
НЛО прилетело и опубликовало эту надпись здесь
Недавно напугал ребёнка, показав утюг на углях. Legacy-инженерные решения расширят мировоззрение, но усложняют поддержку.
CurrentTempLiquid тоже добавить. CurrentTempBoiler для обработки ошибок с расплавлением чайника в сухом виде.
А как же...


Это все другие, безусловно нужные признаки.

CurrentTempBoiler


isBoilerEmpty (True/False) мне кажется лучше. И по памяти меньше опять же.
А если он загорелся с водой внутри?
Это уже похоже на исключительную ситуацию :)
Но из этого анекдот не сделать :)
Оно и правда вам никчему для условно разовых работ. Классы понадобятся для сложных программ, которые будут оперировать сложными объектами с состояниями(например взять любое окошко — оно умеет себя отрисовывать, знает где расположено на экране и т.д.) а не простыми типами данных. Классы чем хороши — на их основе можно создавать свои объекты со своим функционалом дополняющим функционал уже когда-то написанного класса. Если у вас нет таких задач значит и классы не нужны.
Если действительно есть вузы, в которых обучают Бейсику, то это печально. В моей школе изучение Бейсика началось в 5 классе (2002 год)
есть ВУЗы, в которых обучают печально известному ДРАКОНу :-)
Причем процесс обучения построен так, что семестровое задание состоит аж из четырех иконок…
Что за глупости? Бейсик нормальный язык для начинающих. Простой и понятный. С него без всяких проблем легко перейти на Паскаль, а потом куда угодно. Короткие программы, для реализации простейших алгоритмов — на нем не сильно отличаются от других языков, потому что используются самые простые конструкции, практически одинаковые везде. Не обязательно детей сразу пичкать процедурными языками и тем более ООП.
НЛО прилетело и опубликовало эту надпись здесь
Я имел в виду самый простой Бейсик, из тех, что бесплатно встраивались в компы IBM.
Goto никто не отменял :) С его помощью можно на Бейсике реализовать процедуры. И Бейсик, таки — процедурный язык, особенно тот, что шёл в комплекте.
НЛО прилетело и опубликовало эту надпись здесь
Не во всех реализациях была эта команда.
Да и фик бы с ней. Для понимания простейших ветвлений, подпрограммы не нужны.
НЛО прилетело и опубликовало эту надпись здесь
В бейсике, если уж на то пошло, был и GOSUB.

p.s. ах, черт, опять 2 хабракванта :)
Ну хорошо, оставим тонкости классификации. Речь о том, что Бейсик — это хороший язык для начинающих, если применять его для реализации простых алгоритмов и не пытаться писать на нем тысячестрочных монстров. Программы в пару десяток строк — самое то для ребенка лет 10 и Бейсик для этого хорошо подходит. Когда алгоритмы становятся сложнее и листинг подбирается к сотне строк — с ним пора прощаться, иначе он действительно будет ломать мозг.
С него без всяких проблем легко перейти на Паскаль,

а может сразу на Паскаль? все же это более логичный вариант :)

Нет, не логично. Потому что Бейсик дает возможность сразу писать алгоритм «как есть». Без лишних сущностей вроде блоков определения переменных, основного тела программы и прочего.
Потому что Бейсик дает возможность сразу писать алгоритм «как есть».

Так и Паскаль тоже самое, НО ближе к человеческой логике.
Все алгоритмические конструкции как слышатся так и пишутся.


Более того АВС Паскаль уже можно определять переменные в любом месте (что по мне это ЗЛО)
А если вспоминать первые версии Бейсика там тоже определение переменных было в отдельной области.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Мош и Всеросс не гарантируют нормально промышленную карьеру. И наоборот, если ребенок не учавствует в олимпиадах, это не повод не учится программированию и ужаться «конкурентов».
А потом берешь этих «будущих конкурентов» и они банально не способны мыслить в другой плоскости, кроме как «запустить visual studio code и написать на C# олимпиадное задание, запустить в Azure»
Есть такая проблема, да. Но решается. Банально объясняешь разницу между «оптимизировать алгоритм» и собрать готовое решение. Это не фатально.
Подтверждаю. В 14 я уже во всю ездил на олимпиады по программированию, в итоге дошел до общей по РФ, но срезался по глупости и на олимпиаду СНГ уже не поехал. Все было серьезно, под конец с Паскаля перешел на С++. Скретч хорош для начальной школы, но уже в 12 лет он морально не подходит. Не позже 11 уже надо переходить на что-то вроде Бейсика.
Вполне себе можно давать языки вроде python, а не эту синтетику.
«Swift Playgrounds»

Это был мой первый учебник.:-) Но там все на английском и русификации не предусмотрено. Ребенку надо будет еще и английский выучить. С одной стороны хорошо, с другой стороны это может отпугнуть. Хотя это приложение не научит программировать. Так как там не используется реальный синтаксис. (частично есть, но в целом это псевдосинтаксис). Хотя поможет понять принципы и алгоритмы работы.
Программировать — это способ мышления а не синтаксис.
Я и написал, что это научит правильно мыслить.
Хотя поможет понять принципы и алгоритмы работы.
Начинал с Blockly со своим сыном.
Затем raspberryjammod и python для Minecraft по книге Ричардсона Программируем с Minecraft. Создай свой мир с помощью Python
А уже после написали свою игру Пятнашки, для школьного проекта на pygame. Написать даже такую игру с нуля мой уже почти 12-ти летний сын пожалуй пока не в состоянии, поэтому структура проекта (основные классы и их свойства и методы) были разработаны мной, и было описано что они должны делать. А код методов уже он писал сам, не без моей помощи конечно. Код проекта если кому вдруг интересно github.com/Yabra/15
Вот да, мне данный способ тоже импонирует — не таскать формочки по экрану, а начинать непосредственно с полноценного кода, который может влиять на что-то из системы ценностей ребенка (в данном случае — Minecraft).
Таскать формочки / кнопочки / текстовые поля по экрану тоже может быть интересным.
Как по мне, так главная проблема в изучении языка программирования- это научиться взаимодействовать с окружением. Написать программу, которая работает сама с собой не сложно, а если захочется подключить ее к базе данных, сделать вход через фейсбук, управление мотором и прочее, то придется изучить, хоть и поверхностно, еще несколько языков.
Еще немаловажным является знание английского языка, если можешь перевести каждую команду на родной язык, то работать гораздо проще.
Пожалуй согласен, если у ребенка абстрактное мышление той же математикой неплохо развито то писать «абстрактных коней в вакууме» он научится быстро и просто, имхо, а вот настройка окружения, разбор ошибок сторонних библиотек и подобного — и является первым препятствием для вхождения в программирование.
НЛО прилетело и опубликовало эту надпись здесь
Забавно, была обратная ситуация — лучше понял математику зная программирование.
на втором курсе института на философии (марксистско-ленинской, конечно), на вопрос «что такое Вещь в Себе?» уж не помню кто из нас ответил — «это программа без ввода-вывода»
Как по мне, так главная проблема в изучении языка программирования- это научиться взаимодействовать с окружением.

Не согласен. Это вы уже о программировании как профессии говорите. Я же — о вовлечении в эту область знаний, стимулировании проявленного интереса. Интеграции со всем и вся, фреймворки и прочее будут сильно потом, если захочет погружаться.
По-хорошему — проекту нужен детский психолог, чтобы он помогал «писать» текст уроков. Уроки должны быть с какими-то героями, которые используют программирования для решения различных задач или проблем, с которыми они сталкиваются.
PS. В пору моего детства выходил польский журнал «Горизонты техники для детей». В нём был цикл обучающих статей про компьютеры, в том числе там рассказывалось про программирование. Героями в этом цикле статей были дети и жители страны компьютера. Это всё подавалось в виде очередной интересной истории, в которую попадали дети.
Ой, вот только не надо вот этого вот. Была у меня книжка про бейсик, выдержанная вот в таком стиле. И единственное, что я оттуда помню — это злой колдун DEF, который заколдовал двойку. Ну и какой-то кусок кода приведён, уже не помню какой. И что всё это значит — очень долго для меня оставалось загадкой. Лишь много лет спустя я познакомился с языком Форт и встретил в одной из книжек, помнится, Лео Броуди буквально следующее:

: 2 3 ;

И тут-то до меня дошло, что наверняка в той книжке имелась в виду приблизительно та же операция (грубо говоря, #define 2 3;). Правда, точно я сказать не могу, ибо той книжки у меня больше нет.

Надеюсь, не стоит упоминать, что сия книжка ни на грамм не помогла мне научиться программировать. Зато теперь всегда, когда я в питоне пишу ключевое слово def, я вспоминаю злых колдунов.
Форт — он такой, в нём 2+2 может равняться и шести. :)
И Ваш комментарий как раз говорит о том, что должен быть детский специалист, чтобы не было злых колдунов заколдовавших двойку. Задачки должны быть позитивные и заставляющие думать.
Вот книжка-то!

Фролов М. И. Сказки Дядюшки Компьютера. docplayer.ru/40087544-Zdravstvuyte-dorogie-rebyata.html

Оказывается, никаких двоек деф не заколдовывал. И вообще никаких DEF там нет.
Есть такая книга: «Python для детей». Сразу скажу, что я её не читал, но судя по описанию там должно быть что-то похожее: «Свои знания вы сможете проверить сразу же — на забавных примерах и уморительно смешных заданиях, справиться с которыми помогут прожорливые монстры, секретные агенты и воришки-вороны.».

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

P.S. Должен сразу сказать, что испытываю любовь к Python, и думаю, что в качестве первого языка для ребёнка стоит использовать всё же именно его, а не Java. Мне не нравится идея о том, чтобы «не влезать сразу в дебри ООП» при том, что на ребёнка сразу вываливаются обязательные «public static void main» и «public class». Это нужно будет или как-то объяснить или сказать что-то вроде «так надо, я тебе потом объясню» — и то, и другое как-то некрасиво выглядит.
Это нужно будет или как-то объяснить или сказать что-то вроде «так надо, я тебе потом объясню» — и то, и другое как-то некрасиво выглядит.

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


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

>«Те, кто разрабатывал язык просто решили сделать так, а не иначе».
Ну нет, это немного другое. Это скорее ответ на вопрос вроде «почему list comprehensions в квадратных скобках, а set comprehensions в фигурных?» И то, есть определённая логика и история за каждым решением, так что, не вдаваясь в дебри, правильней сказать «исторически так сложилось», а то у ребёнка сложится ощущение, что язык какие-то самодуры создают.

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

P.S. Должен сразу сказать, что испытываю любовь к Python, и думаю, что в качестве первого языка для ребёнка стоит использовать всё же именно его, а не Java.

А я к Java то же нежное чувство питаю. Уверен и она, если правильно преподнести, вполне сгодится на роль первого языка программирования.

Насчёт книги — не нашёл подходящую по Java. С удовольствием бы «портировал».
НЛО прилетело и опубликовало эту надпись здесь
Я целиком и полностью поддерживаю вашу идею нести образование детям, но вот насчёт возможности «правильно преподнести» Java ребёнку, который до этого вообще не занимался программированием, я бы поспорил. Посмотрите на Hello World на Java. Какие вопросы могут возникнуть у человека, который до этого не видел ни одного языка программирования? «Что такое public?» «Что такое class?» «Что такое static?» «Что такое void?» «Что такое main?» «Что такое String[]?» «Зачем писать System.out.println через точки?» «Почему нельзя написать просто System.out.println(...);, зачем весь код вокруг этой строки?» Что можно ответить на такие вопросы, не углубляясь в ООП? «Не обращай внимание, потом объясню»? Подобный ответ может выработать опасный шаблон поведения: не задумываться, что написано снаружи main, просто копипастить код. В то же время Hello World на Python выглядит так:

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 пока не рассказывать, что функции можно объявлять внутри функций, циклов или условных операторов, это оставить на потом, когда сформируется более чёткое понимание областей видимости). После этого можно показывать, что будет происходить, если из функции вызвать другую функцию. На этом этапе тот факт, что из функции не видны переменные из области, в которой функцию вызвали, не должен вызывать диссонанса. Нужно мотивировать начинающего активно использовать отладчик для понимания хода выполнения программы и изменения видимых переменных. И только на этом этапе можно рассказывать про стек вызовов.

У вашего отца был сильный математический бэкграунд, отсюда и непонимание императивных функций. У ребёнка, только начинающего изучать программирование, такого бэкграунда нет, поэтому ему можно вешать на уши любую лапшу будет легче усвоить, что такое функция в контексте программирования.
Мне не нравится объявлять функции в основном коде Python. Это как-то нарушает однородность. И основной код нагружает. Но я не совсем программист все же.
Почему не начать с объяснения что такое класс

Начинать с этого сразу — слишком абстрактно. Идея классов и объектов должна опираться сначала хотя бы на переменные. Плюс надо как то объяснить необходимость оформлять их именно в классы. Вот лично я не знаю как объяснить только классы, не объясняя по пути все остальное. Под "объяснить" я имею в виду не просто пересказать вслух теорию, а добиться понимания и умения применять ее.


Почему не начать с объяснения… что такое метод

Прежде чем объяснять что такое метод, надо знать хоть какие-то команды, понимать что команды выполняются одна за другой. В программах с наглядными агентами, необходимость группировать команды в функции (методы, процедуры, подпрограммы) показать проще, чем в программах с выводом текста на экран.
Я не пробовал, но предполагаю, что если функции можно будет просто оформлять, то циклы и ветвления можно объяснять после них. Впрочем это не про java, а скорее про какой-нибудь Scratch или питон.

НЛО прилетело и опубликовало эту надпись здесь
Обычно код иллюстрирует предшествующий текст и является его неотъемлемой частью.
Просто для меня непонятен подход когда детям дают код и просят его переписать один к одному и запустить.

Не помню где читал, но есть три стадии обучения: повторение, изготовление похожего под присмотром, создание нового самостоятельно.
Переписать один к одному и запустить — это первая стадия "повторение".
После нее обычно следует задача, в которой из изученных частей нужно сделать что-нибудь похожее. Ну и потом несколько задач на закрепление с постепенным повышением сложности.
В этом моменте, кстати, раскрывается еще одно преимущество очного обучения. Копипастить с бумаги, с доски и с соседнего экрана ну никак не получится.


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

НЛО прилетело и опубликовало эту надпись здесь
В тех уроках, над составлением которых я сейчас работаю, как раз сначала описываются самые базовые и очевидные вещи. Что такое программа, код, алгоритм, что программирует программист. И по ходу так же объясняются всякие сопутствующие вещи.

До элементов ООП дело доходит очень не сразу.
«Если ученый не умеет популярно объяснить восьмилетнему ребенку, чем он занимается, значит, он шарлатан»©
аксиоматичность — это не всегда понимание.
и что ценно: объяснение (и подготовка к объяснению) позволяет самому понять глубже.
«Горизонты… » был каким-то странным журналом. наивным. «про компьютеры» я, 3*ура, уже не застал.
Помню этот журнал. Соглашусь с wormball полностью — это довольно весело, но совершенно бесполезно.
про Scratch — зря вы их отвергли. Для младшего-среднего школьного (лет до 12) самое «то, что надо» — есть и игровая компонента, и логика, и простое «правильное соединение», отображение структуры программы. И есть текстовое отображение «строительных блоков».
рискую получить тапками, но гляньте еще «1С Программирование для начинающих» Радченко (это, конечно, «парапрограммирование», но как обучение вполне пойдет)
я дочке после LightBot показал Scratch, она с удовольствием освоила — как гонять нарисованного кота и черепашью графику. Там сбоку у скретча кстати есть кнопочка «код на питоне», которая превращает рисованные блоки в текст, так что следующим этапом будет питон и raspberryjammod (благо майнкрафт мы тоже любим)
замечательно, что проект развивается.
я его, к сожалению, увидел слишком поздно (сын уже достаточно большой был, лет под 15, и уже ардуинил).
Игровая форма весьма неплоха (точнее, Ю даже предпочтительна) для определенного возраста. Не зря же существуют игровые методики обучения и математике, и языкам.
а «писать код» — это уже более серьезное занятие, требующее другой мотивации.
Не надо 1С-ом жизнь ломать. Разве что совсем от безысходности. Там конечно все очень просто (если в дебри не лезть), но у того же Радченко вообще не припомню чтобы объяснялось про уровни абстракции, почему 10 параметров хуже чем две структуры по 5 свойств и т.п.
язык как язык. фреймворк как фреймворк.
а «10 параметров хуже чем две структуры по 5 свойств и т.п» (что вообще говоря не всегда верно) не объясняется, например, и у Ричи с Керниганом. Тот, кто полезет в программирование более серьезно — тот будет читать «более другие» книжки. Чтение Радченко не отменяет чтения Дейта.
«язык как язык. фреймворк как фреймворк.»
Так то оно так, но нужно учитывать еще и сообщество вокруг этого очень специфическое, а также большую заточенность на предметную область и очень упрощенный язык. Короче если хочется программировать для удовольствия — это, имхо, не тот выбор. Единственный плюс — двуязычный синтаксис, но плюс это только если человек не знает английского.
сообщества везде есть разные.
заточенность на предметную область — да, есть. это не плохо и не хорошо — это просто особеннось. упрощенный язык — так для целей обучения вполне хватит. (впрочем, я на нем лет 15 назад ассемблер-дизассемблер писал. задача для 1с неспецифическая, но вполне реализуемая)
Лет 15 еще семерка была (с которой я не сталкивался), и возможностей у нее по слухам побольше было.
Почему 1с плоха для обучения и изучения:
1) То что интересно тебе, не входящее в предметную область, не напишешь, либо напишешь только с дикими костылями;
2) Тот же аргумент что обычно про паскаль приводится. Зачем учить язык чтобы потом его не использовать?
3) Про сообщества: на том же инфостарте статьи о хороших практиках разработки днем с огнем не найдешь. В основном только от серебрянной пули, да от людей что на infostart event выступают год за годом. На мисту я вообще перестал почти сразу заходить. Есть еще какие то сообщества в рунете о которых я не знаю?
4) Без оплаты разных подписок в 1с недоступна ни документация толковая, ни EDT, ни платформа.
возможностей 1с для обучения более чем достаточно. семерка восьмерка — разницы никакой (семерка меньше и быстрее, восьмерка неповоротлива, но обладает многими возможностями «из коробки»). из 1с разве что с графикой не поработаешь — но без соотв. опыта с ней ни на чем не поработаешь. опыт нарабатывается, интерес появляется (или не появляется). как первый язык — паскаль тоже вполне годен.
для обучения есть как коробочная версия для обучения (стоит практически копейки), с платформой, доками и т.п. Ну и эмуляторов гуляет достаточно.
по сообществам — когда-то была Т1С, откуда потом все переехали в мизду, но сейчас даже не знаю. но нагуглить ответ можно практически на любой вопрос.
Я не говорю, что 1с — лучший способ обучения. но по крайней мере, в отличие от велосипеда автора — это готовый продукт с документацией, с методиками, даже с книжкой «для начинающих». будет интересно — ученик сам выберет себе инструмент и направление.
Ну, я бы все же выбрал бы все то же самое, но еще к этому общего назначения (а не специализированное), мультипарадигменное (со временем новые парадигмы можно на том же языке пробовать), бесплатное, и с более приятным синтаксисом. Тот же питон, или (хоть и терпеть его не могу) js (возможно не в браузере).
НЛО прилетело и опубликовало эту надпись здесь
С одной стороны, наверное, имеет смысл говорить о всяких там статических типах и прочих проверках, о памяти, об адресации в ней, о том, что массивы-словари-етц — это всё не на халяву.

На самом деле поддерживаю, но имхо, это если уже есть увлеченность программированием, ну или той же математикой+компами и подобным. А вот если стоит цель заинтересовать и показать как это все няшно человеку который это еще не знает — тут лучше все же что то динамически типизируемое, применимое в реальной жизни непрограммиста, и при этом общего назначения.
НЛО прилетело и опубликовало эту надпись здесь
Colobot! Играешь за космонавта, которому надо выполнять какие-то миссии. Поначалу они простые и легко делаются вручную. Но постепенно все становится сложнее, и приходится программировать роботов-помошников. Вплоть до летающего дрона, который в полете немного покачивается. И для прицельного выстрела придется узнать о синусах и косинусах.
Есть одна проблема с этой программой — человек должен целенаправленно хотеть писать скрипты. Сажал за нее младшего двоюродного брата — прошел практически всю игру, не написав ни строчки кода (это реально).
На определённом этапе нужно — когда человек чётко осознаёт зачем программировать.
Лично я на Станции Юных техников не понимал, зачем программировать.
Я понимал что делают операторы FOCAL, но никак не осознавал — «зачем?!»
Зачем программировать я понял после пятилетнего перерыва, когда занимался аналогичной ерундой, но на Pascal. И скорее всего потому, что задача была из реального мира — обход доски конём.
Но ваш редактор штука всё равно полезная для практикума изучающих эту вашу Java. Разве что добавьте пошаговость и значения переменных.
задача из реального мира — обход доски конём

А теперь вдумайтесь в эту фразу :)

ну, может эту фразу слон писал… или ладья…
А теперь сравните с задачей
«вывести звёздочки на алфавитно-цифровом дисплее таким образом, чтобы они сформировали изображение ёлочки».
или
«непременно в подпрограмме сложить два числа».
Что это? Для кого это? Зачем кому-то это могло понадобиться? Калькулятор этим психам чем не нравится?
«посчитать количество букв „а“ в предложении». Мы этого на уроках русского не делали.

А доска вот — это доска, «Берёшь в руки — маешь вещь!»
Я-то руками задолго до этого реально обходил, точнее пытался. Многократно.
Задача лично для меня весьма и весьма реальная (хотя не смертельная, конечно же :-D)

В этом аспекте набивший оскомину Colobot сразу же наглядно, доходчиво и интернационально показывает зачем кому-то могло понадобиться программировать. И почему не программировать нельзя.
да, как в учебнике Ершова: «Нарисовать [на алфавитно-цифровом, звездочками] круг. примечание: кругом считается квадрат размерами 5*15»©
НЛО прилетело и опубликовало эту надпись здесь

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, позволяет легко поделиться результатом с миром, обладает возможностями соцсети(«лайки, каменты, топы»). Это работает, хотя не уверен, что это правильный путь. Вопрос мотивации остается открытым, прошу поделиться успешными решениями.
Присоединяюсь -«друг-соперник» очень полезен. Для любой деятельности.
Имхо, совсем не обязательно соперников реальных иметь. Я вообще только сам с собой и «соревновался» (хотя слово это не люблю, вообще к соревнованиям любым отношусь люто отрицательно, если цель кого то победить или превзойти), можно в интернете коммьюнити поискать.
«вариться в собственном соку» — непродуктивно. всегда нужен тот, кто взглянет со стороны.
Да, нужен, но таким человеком должен выступать не одноклассник, нифига в этом не понимающий, а как раз кто то грамотный, кто может определить что сделано плохо, что хорошо, что критично на данном этапе развития поправить, а что мелочь и либо выправится само, либо можно будет выправить в будущем.
все когда-то «нифига не понимали»
учиться чему-то вместе гораздо интереснее. «взаимообогащающе».
а хороший преподаватель или по меньшей мере наставник — всегда полезен (но не всегда возможен)
Я больше про часть «для мотивации нужно соревнование» пишу. Особенно про часть «нужно», хотя и про соревнование тоже. Да, можно, но не обязательно, и уж тем более не обязательно соревнование.
я с одним школьным приятелем занимался подводным плаваньем, с другим — радиоэлектроникой, фотографией, физикой. с третьим, познакомившись уже на ФЮПе — программированием. У сына аналогично — находились приятели с общими интересами (рукопашка, музыка, техника), и их общение тоже становилось и взаимопомощью, и советами, и соревнованием — но шло на пользу обоим.
НЛО прилетело и опубликовало эту надпись здесь
Конечно не обязательно, у каждого своя история. В образовании и воспитании нет универсальных решений, нужен индивидуальный подход, но есть заведомо малоэффективные(например, преодолевая сопротивление, заставлять писать программы), и группы кем-то проверенных, неплохо работающих, о которых хотелось бы услышать и «примерить» на свое чадо. ) Просто соревновательный мотив, либо подход, где твои успехи как-то оцениваются и поощряются (устным признанием друзей, или теми же лайками) очень популярны.
Возможно популярны, но в моем случае действительно соревновательный подход просто бы отвратил. Потому и уточняю чтобы не считал его никто панацеей.
а что в вашем случае было 1)независимой оценкой 2)положительным подкреплением?
1) Сравнение с имеющимися примерами, а также личным опытом. Собственно этого пункта мне заметно не хватало, но независимая оценка не только в соревновательном подходе может быть.
2) Удовольствие от самого процесса, от того что что то выходит, от конечного результата. Другого подкрепления мне как то и не нужно было. Узнал что то новое — получил удовольствие, приобрел навык — аналогично.
НЛО прилетело и опубликовало эту надпись здесь
Скорее боязнь оказаться не первым и/или не лучшим. Вот что сильно демотивирует обычно.
не знаю. меня обычно быть вторым-третьим не сильно огорчало. хотя если знал, что реально могу вырвать победу у соперника — тогда да. но это больше к спорту относится, (ну и школьным олимпиадам)
Возможно, но если только на каком то глубинном уровне. Сейчас, да и сколько себя помню, это скуку нагоняло. Ну еще непонимание что в этом интересного.
Так-то оно так, но зато как мотивирует нежелание остаться не первым и/или не лучшим после поражения. Парадокс в том, что нужно быть достаточно опытным программистом, чтобы не ввязываться в соревнование, где у тебя мало шансов. Т.е. для начинающих такой демотиватор не распространен и мир увидит еще много «убийц фейсбуков», велосипедов и борцов с фатальными недостатками. И это хорошо.
К счастью, нива программирования настолько широка, а жизненные ситуации настолько разнообразны, что первые места найдутся всем, способным написать программу, у которой будет хотя бы один благодарный пользователь, выбравший её среди прочих.
Вообще поразмышляв понял что мне не то что первым быть не хочется, хочется среди последних всегда быть (если все же вводить какой то критерий сравнения). Ведь это означает что вокруг куча людей круче меня у которых есть чему поучиться.
Наверно всё же «последним среди передовых». Учится всегда есть чему, только когда вы впереди учёба уже напоминает нескончаемый эксперимент где велика доля ошибок.
Согласен с вами. Элементы мотивации нужно будет продумывать.

Я считаю, что главное в вашей ситуации — не забывать о своей цели. Вы ведь своего ребенка хотите научить, а не весь мир осчастливить. Может быть неподалеку есть кружки с профессиональными преподавателями, и вам лучше сходить к ним.
Попробуйте для начала Scratch или какой-нибудь программируемый пластиковый конструктор или что-нибудь с майнкрафтом.


Если уж делать свою IDE с подсветкой и компиляцией, то надо уходить от печати сообщений в консоль.
Во первых, это уже умеет делать любая другая IDE, хоть IntellijIDEA, хоть Netbeans. Веб-браузер отлично справляется с режимом "Чтение учебных материалов", а обычная IDE — с подсветкой и работой с консолью.
Во вторых, консоль слишком абстрактная штука. Даже взрослым, которые вроде бы обладают усидчивостью и терпением, консоль выглядит оторванной от реальности. Хорошо еще, что большинству взрослых можно объяснить что "сейчас мы тренируемся на кошках, а потом будет нагляднее". Сомневаюсь, что дети это поймут.


Чтобы получилось нагляднее, стоит копать в сторону программируемых агентов. "Бытовой" навык программирования на мой взгляд состоит в том, чтобы сформулировать последовательность действий для достижения какого-либо результата, а не в языковых конструкциях. Поэтому и в среде для обучения упор стоит сделать не на печать текстов, а на управление неким исполнителем. Черепашья графика в этом смысле лучшее сочетание простоты и наглядности. Усложнять можно в сторону роботов, которых нужно куда-то привести и т.п. Но тогда у вас получится что-то вроде Scratch на java.


Непонятно, почему вы делаете "отдельное" приложение. Можно ведь сделать плагин к существующей IDE. Из коробки будет и работа с файлами, и компиляция, и подсветка синтаксиса и, может быть, еще какие-нибудь удобства. Можно будет заняться тем, что действительно важно для среды обучения.


Скептически отношусь к идее написания учебных материалов, имея только одного ученика. Нужно много обратной связи, чтобы получилось что-то полезное. Лучше уж взять какой-нибудь учебник и "портировать" его на вашу платформу.

без педагогического опыта портировать не получится.
имхо, проект из разряда «чем бы дитя не тешилось».
Я считаю, что главное в вашей ситуации — не забывать о своей цели. Вы ведь своего ребенка хотите научить, а не весь мир осчастливить.

Одно другому не мешает вроде как.
Если уж делать свою IDE с подсветкой и компиляцией, то надо уходить от печати сообщений в консоль.

Ничего сложного в идее консоли не вижу. К тому же это непременный атрибут любой работающей java-программы с которым довольно легко работать (на вывод). Значит он должен быть представлен в среде обучения.

В планах на более отдалённое будущее есть создание модулей с программируемыми «агентами», которые будут как-то визуализированы. Это вполне может выступать «альтернативой» консоли.
Можно ведь сделать плагин к существующей IDE.

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

Чем? Какие есть предложения?
Скептически отношусь к идее написания учебных материалов, имея только одного ученика. Нужно много обратной связи, чтобы получилось что-то полезное. Лучше уж взять какой-нибудь учебник и «портировать» его на вашу платформу.

Я пока настроен оптимистично. Несколько первых уроков написано. Идёт туго, но есть прогресс. Рецензию и отзывы было бы конечно интересно получить.

Что бы вы предложили «портировать» в качестве уроков по Java для самых начинающих?
Ничего сложного в идее консоли не вижу. К тому же это непременный атрибут любой работающей java-программы с которым довольно легко работать (на вывод).

Мой тезис был не столько про то, что консоль сложная.


  1. Зачем делать еще одну IDE для работы с консолью, если есть готовые?
  2. Типичные начинающие "не верят", что консоль это реальное применимое программирование. Если бы я мог потратить кучу времени на создание своей IDE для обучения, я бы сделал что-нибудь более наглядное.

Можно будет заняться тем, что действительно важно для среды обучения.

Чем? Какие есть предложения?

Например отслеживание прогресса, поощрение успехов, наглядные задания.


Что бы вы предложили «портировать» в качестве уроков по Java для самых начинающих?

Дело не столько в "портировать", сколько в том, чтобы не делать самому с нуля. Можете взять книгу по C#, которые в комментариях советуют.


Я несколько лет осматриваю различную литературу по программированию, но не припомню книги, подходящей под озвученные вами требования:


  1. язык java
  2. работа с консолью
  3. для детей
  4. не похожая на игру
  5. не заточенная под трудоустройство

В первую очередь потому, что профессиональные преподаватели с опытом уходят от java и консоли в сторону игровых платформ типа codecombat, майнкрафта, scratch и т.п.
Пункты 4 и 5 этих требований, кстати, взаимоисключающие.


Я пока настроен оптимистично. Несколько первых уроков написано. Идёт туго, но есть прогресс. Рецензию и отзывы было бы конечно интересно получить.

С моей точки зрения это выглядит как если бы человек без педагогического образования, без опыта преподавания отбросил весь опыт сообщества и начал делать свой велосипед для своего сына.
Стали бы вы сейчас писать свою новую операционную систему для домашнего ПК?

С моей точки зрения это выглядит как если бы человек без педагогического образования, без опыта преподавания отбросил весь опыт сообщества и начал делать свой велосипед для своего сына.

И детей рожать и потом воспитывать нельзя без педагогического образования?

Кто говорил о том, что нельзя?
Изобретайте на здоровье. Ваш же ребенок.
Я могу только посоветовать взять что-нибудь более подходящее для обучения детей программированию и почитать где-нибудь как это лучше подать.

Спасибо за высказанное мнение.

Вообще, обсуждение поднятой темы на удивление бурное получилось. Я такого не ожидал.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Присоединяюсь к комментирующих, не стоит тратить время на разработку собственной IDE, лучше сосредоточиться на поиске учебных материалов для детей. Проблему установки и настройки IDE для начинающих решает облачная IDE.
https://habr.com/post/310438/

Я младшим товарищам люблю давать processing. Та же java, но с оберткой вокруг главного класса (чтобы действительно можно было ООП оставить на потом), с кучей по-умолчанию подключенных библиотек для графики, чтобы можно было без всяких танцев написать draw_circle() и перехватить нажатие клавиши. И с большой кучей примеров. По мне идеальный инструмент, чтобы начать что-то делать с графикой (а это куда интереснее, чем выводить чиселки в консоль).

myxo > Я младшим товарищам люблю давать processing.


Приятно сознавать что есть братья по разуму )
Еще в Процессенге есть отличная фича, создавать свои мобильные приложения под Андроид. Плюс легко стыкуется с Ардуино.

Начинать, имхо, стоит с алгоритмики в 6-8 лет, без компьютера как у профессора Фортрана
Заголовок спойлера
image
Например, «Что ты будешь делать, если найдёшь лампу с джинном?» — ребёнок научится ставить граничные условия. Потом можно и черепашку/лисенка погонять, когда ребёнок словами может объяснить, что должно происходить, а чего происходить не должно никогда. Ещё мне нравится ардуино и подобные проекты: написал ledOn — лампочка загорелась, эффект виден. Потом уже можно переходить к более сложным вещам, самостоятельным мини-проектам, решающими конкретную проблему (мы ж учим ребенка программированию как способ решения проблем, а не как аналогу каллиграфии?).
Java (как и ряд других языков) мне не магией, непонятной непосвященному. Тот же «public static void» — вот как это сходу объяснить ребёнку, не уходя в синтаксис и архитектуру компьютера?
скретч с ардуйней даже сопрягали. S4A вроде назывался проект.
Спойлер
Тот же «public static void» — вот как это сходу объяснить ребёнку, не уходя в синтаксис и архитектуру компьютера?

В школе учительница спрашивает учеников, кем
работают их родители. Руку тянет девочка:
– У меня папа доктор.
– Это хорошая профессия, – говорит учительница.
– А у меня папа водитель, – хвастается один из
мальчишек.
– Какая интересная профессия. А чем твой папа
занимается? – спрашивает учительница Вовочку, на
что тот невозмутимо отвечает:
– Он в борделе на пианино играет.
Учительница в шоке; в тот же день она идет к
Вовочке домой и возмущенно говорит отцу:
– Как вы можете в таких условиях воспитывать
ребенка?! Вы действительно играете на пианино в
борделе?!
Папа Вовочки смущенно:
– Видите ли, я программист. Специализируюсь на
сетях TCP/IP, пишу распределенные сетевые
приложения для операционных систем UNIX, но как
это объяснить семилетнему мальчугану?
©
Ага, спасибо. Вроде его перевели, но туториалы на ютубе на испанском.

Дальше моргания лампочкой редко развиваются дальше!

Это личный опыт обучения ребенка ардуине, или просто память об общении с ардуинщиками?
Опыта обучения детей не было.
А вот в мои годы игрушки были свинцовые — командная строка ДОС и Турбо Паскаль.
А вот в мои годы игрушки были свинцовые — командная строка ДОС и Турбо Паскаль.

это не самый плохой вариант. Были и МК-54, МК-61, и даже перфокарты для Минск-32.
и даже (точнее, с этого начиналось)
image
Scratch и другие визуально-игровые системы — Для моих целей такое мало годится т. к. я вижу в них слишком большую развлекательную составляющую.

Окей, Вы вырастите талантливого и умелого программиста на Java. Он будет получать 100500 денег. Но будет ли у него воспоминания о детстве, играх и развлечениях? Внешний вид окна прототипа в режиме работы с исходным кодом навеял воспоминания о школьных скучных уроках информатики. Дети могут учится играя. Больше играйте с ребенком и в процессе игры обучайте его. Вы рискуете превратить погружение в удивительный мир программирования в обязаловку для своего ребенка. Поиграли-поиграли, а теперь сели программировать :(
Не факт, конечно, что мое мнение применимо к Вам или Вашему ребенку. Знаю я детей которые в 12-13 лет серьезней чем мои ровесники.
развлечения развлечению рознь. Для меня игры и развлечения были посидеть с паяльником (постоять с напильником), например. спаять видеоигру (теннис), радиомикрофон, радиоуправление. прочитать гору книжек (в т.ч. «с формулами»). я б не сказал, что «это лишило меня детства»
Но будет ли у него воспоминания о детстве, играх и развлечениях?

Будут, не сомневайтесь. Игры и развлечения стараюсь максимально отделить от компьютеров и гаджетов. Заставлять программировать конечно же никто не собирается.
Ничего сравнимого по удобству и простоте с Turbo C для ДОСа человечество за 30 лет к сожалению не придумало.
Не правда. Турбопаскаль придумали. Сразу с модулями. И не надо дожидаться 10-20 минут пока не скомпилируется более-менее сложная программа на С после каждого изменения в коде во время отладки и экспериментов что не очень похоже на удобство.

А что по поводу javascript думаете? так же есть книга javascript для детей. Привлекает тем, что можно в браузере запустить или друзьям на мобильном браузере показать

Я не очень специалист в JS, поэтому почти не смотрел в эту сторону. Подозреваю что как раз для него вполне можно что-то из готовых онлайн инструментов, туториалов и книг собрать. Наверняка кто-то уже и собрал.

Ощущение, что вам больше интересно разработать среду, чем научить ребенка. Основная задача — составить план обучения, подготовить интересные задания, чтобы результат радовал ребенка. И это не так просто. Содержание важнее технологической обертки.

Не правильное ощущение. Жаль что мне не удалось донести мысль более полно.

Разработать среду, конечно же, мне интересно. Но это сравнительно небольшая задача, которая уже сейчас решена примерно на 33.3% (за несколько недель работы вечерами).

Параллельная работа, которая тоже уже начата — это цикл уроков, которые и будут «учить» программированию на Java и объяснять всякие сопутствующие вещи. Вот это гораздо более объёмный и сложный труд. Я это вполне осознаю. Мне интересно это делать потому, что я таким образом прорабатываю сценарии разговоров с ребёнком на технические темы. Придумываю как я буду отвечать на его вопросы. А они точно будут задаваться.
И никто не вспомнил про CodeCombat, а ребенку это должно быть поинтереснее, управлять конкретным персонажем :)
Мне лично довелось потыкать и паскаль и PascalABC — там задачник прилагался, и так же классически порулить черепашкой можно было.
Не желаете вы добра своему ребенку))
«подарите мамы сыносьям гитары, пусть своей дорогой чадушка пройдет» © Бригадный подряд
есть и гитара, и перчатки боксерские, и кимоно — но вот интересно ему. что, запрещать, чтоль?
Интересненько. Спасибо.
Мое имхо: учить надо на С. Либо станет отличным программистом, либо отстанет. У меня сильные сомнения по поводу scratch и подобных. Сам помню Лого со школы, но программистом я стал на клоне спектрума с BASIC, в котором, по-моему, даже циклов человеческих не было (а зачем, если есть IF и GOTO? ;). Сильно сомневаюсь, что Лого или Scratch бы мне в этом помогли, уж больно они отличаются от типичных программистских будней. У обычных пользователей даже командная строка ступор вызывает, что уж говорить о написании и отладке кода в IDE.
Были в Бейсике циклы! Даже двух видов — с пред- и постусловием.
Я люблю С, но тут как с обучением плаванию: если кинуть ребёнка в воду, то плавать он скорее всего научится, но любовь к плаванию так можно не то что не привить, а отбить.
При написании простых учебных программ С практически не отличается от современных языков, это ведь не Ассемблер, сложности появляются с ростом. При этом всё максимально близко к железу, как оно на самом деле работает. Концепцию указателей, например, весьма полезно изучить, хоть в современных языках память управляется автоматически. Опять же, синтаксис и основные конструкции практически такие же, как в современных языках, странностей, как в Javascript немного (иначе я бы Javascript и посоветовал). Если не давать это из под палки, то нормальный ребенок вполне в состоянии в этом разобраться, а если нет — может, это просто не его.
Я б для ребёнка (12 лет) посоветовал что-нибудь с бедным синтаксисом, динамической типизацией, без привязки к парадигме программирования и максимально далекое от железа и близкое к английскому языку: Python или Lisp. Чтобы «сел и поехал». А JS, у меня такое ощущение, 20 лет тому сделали по жёсткой накурке, и с тех пор пытаются расшифровать, что это было, и доработать напильником. Такое количество неочевидных вещей я видел только в ML, Прологе и Форте, но в этих трёх обычно понятно, зачем именно так.
Ассемблер синтаксически проще С, но там надо знать архитектуру, чтоб грамотно тыкаться в регистры. В С мне не нравится две вещи:
— Препроцессор — фактически язык внутри языка, и от него сложно уйти
— Магия, завязанная на архитектуру: static/volatile/const, указатели — пусть пока компьютер побудет волшебной коробкой. Понадобится скорость — тогда доступ к памяти и освоит, вместе с векторизацией и параллельным исполнением.
Мое имхо: учить надо на С

Читатель, если вы сейчас выбираете язык для изучения, ни в коем случае не начинайте с C. Автор цитированного комментария недооценивает подводные камни, которые таит в себе C для новичков.

Прикольная идея! А как можно присоединится к вашему проекту?

Спасибо за предложение. Пишите ваши идеи в личку.
«Итак, мне не удалось найти идеальную систему обучения ребёнка программированию, но зато я выработал набор критериев, которым она должна удовлетворять:»

Лучшее — враг хорошего. Вы считаете себя плохим специалистом? Если нет, то вспомните в каких условиях изучали программирование вы.

Самое главное в программировании — усидчивость и мотивация. Если ребенок сам пришел с просьбой научить — уже более 50% главного дела сделано.
Просто подкидывайте задачки, показывайте простенькое, смотрите как сделал.

Дети — НЕ глупые. У них недостаточно опыта, возможно есть проблемы с мотивацией и пониманием иерархии в обществе.
Но по соображалке в плане логики — 10 лет это уже полностью развитый человек.
Про Scratch зря — это не только мощнейшее коммюнити, но и куча книг изданных. Циклы, условия и все прочее для обучения алгоритмам там есть.
Я тестировал на трёх старших. От 5-ти до 11-ти лет. Обучение своего чада позволяет учесть интересы и темперамент ученика. Это поднимает мотивацию, без которой далеко не уедешь.
Со старшей про программирование почти никак, но она феноменально извлекает информацию из сети и не только, активно обходит барьеры в домашней сети и на телефоне. К 11-ти он не понаслышке знает, что такое DNS, перепрошивает телефон и пр.
Сыну сейчас 9. Где-то с 7-ми лет он плотно сидит на майнкрафте. Геймификация обучения не составляет труда. Так же неплохо зашли Arduino уроки. Светофор, машинка и пр. Прекрасно позволяет разобраться с циклами, условиями, переменными и даже подпрограммами. Иногда Scratch, но этого и в школе хватает. Жду нормальный API для танков:)
Средней дочке всего 6 и руки у неё с рождения из правильного места. Scratch и простейшие примеры на Arduino, но не так часто, как хотелось бы.
И главное — не переусердствовать. В этом возрасте можно много что потенциально интересного попробовать.
Иногда Scratch, но этого и в школе хватает
Где такие школы, в которых с 7 лет учат программировать в Скретче?..
Хочу обратить внимание на замечательные книжки как раз для возраста 11-12 лет. Хотя я их в гораздо более зрелом возрасте тоже с удовольствием перечитал.

Чарльз Петцольд – «Код. Тайный язык информатики» — очень интересно про компьютеры вообще.

Чарльз Петцольд – «Программирование в тональности 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 лет. Это основы алгоритмизации. Вы договариваетесь что вы будете выполнять дословно все приказы ребенка. Она в свою очередь должна отдавая команды выполнить какое то задание.
Например делаем чай:


  • Возьми чашку.
  • Здесь нет чашки. (покажите растерянность)
  • Подойди к шкафу. Возьми чашку.
  • (шкаф закрыт) попытайтесь взять ударившись руками несколько раз в дверцу.
  • открой шкаф… и т.д.
    Это отличный способ провести время вместе с ребенком весело. Играть можно где угодно.
Очень нужно, с удовольствием поддержу проект!
Ну, вариантов на первый язык немного: низкоуровневый — упорным будущим инженерам — С или высокоуровневый — Smalltalk (Squeak или Pharo). Причины изложены в публикации.
Самое главное — продумать план обучения
Разбить свой опыт на области, области на инструменты, идеи, и выстроить все это в дерево, определив что и на каком этапе стоит подавать, и в каком обьеме

Многие упускают, что программирование — не вещь в себе, что у него есть как корень (например книжка «Код — тайный язык информатики»), так и крона (паттерны проектирования например)
а еще многие упускают, что педагогика — это отдельная наука, отдельная отрасль знания. и что не зря существуют пединституты, в которых кроме предметов специализации читают психологию (в т.ч. возрастную), дидактику и прочие науки, методики, составляющие процесса обучения.
Не зря прежде чем пустить «технаря» в преподаватели в техническом ВУЗе — его заставляют проходить курсы (либо опытные преподы помогают, тактично направляя и обучая). Далеко не всякий человек, прекрасно знающий свое дело, может хорошо донести свои знания до учащихся-студентов.
И в принципе, хороший препод может нормально научить на слабой «экспериментальнй базе» (может научить программированию без наличия компьютера. физике и химии без лабораторных), а плохому не поможет самая замечательная база.
Примерно так у меня это и происходит в процессе подготовки цикла уроков.
Я своего ребенка, когда он появится, буду подсаживать на LOGO (https://myrobot.ru/logo/), где и русский интерфейс и отклик вполне понятный. Написал «вперед 20, направо 90» и загнал в цикл — получил квадрат. Так и геометрию поттянуть можно.
Графический интерфейс дает очень много преимуществ в плане интерактивности и тот факт, что через 2 цикла ты рисуешь красивый цветок черепашкой, очень сильно вдохновляет на новые произведения.
Я так в 11 лет нарисовал черепашкой шахматную доску. Активно изучал циклы, чтобы не копировать код рисования ладей, коней, слонов, и пешек.
хорошо, что черепашка хотя бы на восьмиугольных, а не на квадратных колесах…
хотя даже восьмиугольные как бы намекают…
там программирование — только «текстовое»? если да, то рекомендую (но не настаиваю) показать ребенку сначала Скрэтч. там писать гораздо меньше (а это мелким все-таки несколько затруднительно), поэтому более привлкектельно (результат достигается быстрее, усилий меньше — подкрепление лучше (и ошибок меньше, да и исправляются они проще))
Вы вот все тут пишете как обучить ребенка программированию, а заголовок: Обучение программировани с азов и про детей ничего не сказано. Прочитав комментари понятно как научить ребенка, а вот как научить этуму любознательного дедушку или бабушку, кто подскажет? Там и память подводит и соображалка работает медленно…
Заголовок специально таким сделан. Про детей в тексте — это первая и очевидная целевая аудитория которая может заинтересоваться программированием и которой нужно многое в комплексе объяснять.

Но я в уме держу и более широкий круг потенциальных «учеников» — всех, кто решил «войти в IT».

У меня бывают пожилые любознательные студенты. С точки зрения обучения ничем от молодежи не отличаются.

8 лет работаю учителем информатики и экспериментирую с подачей материала, в том числе и в плане выбора языка (изучение разных ЯП в свое время было хобби, так что выбирать есть из чего). Вот мои впечатления:
  • Java. Однозначно нет. Слишком много телодвижений для достаточно банальных вещей. Прочитать текстовый файл с набором чисел (90% олимпиадных задач), что-то нарисовать, вот это все. Справочная информация не рассчитана на непрофессионалов, и тем более на детей. Да, есть вот эта детская книжка, но чуть шаг в сторону и все, тупик.
  • C/C++. Скорее нет, чем да. Сложно для детей выйти за пределы работы в консоли с текстовой информацией. У К.Полякова есть учебная библиотека для работы с графикой, но под древнюю версию gcc, не работающую под виндой после 7. Сложные сообщения об ошибках. Хотя пару человек зацепила идея «самого крутого языка» (нет, не моя подача, в интернетах нахватались), плюс эти же пара ребят изучают английский на профильном уровне, уже где-то на B2, для них сообщения компилятора уже не проблема.
  • Python. Скорее да, чем нет. В старших классах заходит очень хорошо, у продвинутых ребят и раньше (рекорд — 3-классник, который начал его самостоятельно изучать, наблюдая за сестрой 10-классницей, которая у меня его изучала; впрочем, там гены и воспитание топ). Отдельный плюс — питоновские батарейки, очень-очень легко сделать что-то полезное. Форматирование отступами не сразу и не всем заходит, но в целом даже выпускники, обучающиеся сейчас на профильных специальностях (прикл.мат.инф., прогр.инжен.) отзываются, что на питоне проще формулировать мысли, чем на C++
  • PascalABC. Хуже питона, заметно мешается многословный и не совсем очевидный синтаксис.
  • Кумир. Очень, очень хорошо для начала. Лучший вариант в возрасте до 14 лет, для питона в среднем пока не хватает знания английского и вообще абстрактного мышления. Отличная обучающая среда. Главный минус — что-то практическое сделать сложно или вообще невозможно.
  • C#. Пробовал знакомить старшеклассников, уже знающих питон. Оценили возможности VS, но язык посчитали слишком сложным.
  • Scratch. Зря вы недооцениваете игровую составляющую, в возрасте 8-12 лет это КОЛОССАЛЬНЫЙ стимул. Да и даже дальше тоже, подавляющее большинство моих ребят скретчеподобный час кода воспринимают как увлекательную игру, челлендж, соревнуются между собой — без моего участия, достаточно дать адрес сайта! А от кумира и питона (в зависимости от класса) потом ноют, мол скучно.

В итоге для себя пришел к следующей последовательности: началка и 5-7 классы — скретч, 7-9 классы — кумир и питон для продвинутых, 10-11 классы — питон или то, что они самостоятельно начали изучать (редко, но бывает).
В школе писали на паскале, класса примерно с 7. У меня шло все очень хорошо, еще у пары ребят — тоже. На мой взгляд, вообще все равно с чего начинать (в разумных пределах разумеется), всех, кому заходило написание кода, объединяло одно — любовь к решению логических задач. Я с раннего детства любил вот эти всякие «перевези козу, волка и капусту», «определи кто кому брат, кого как зовут, у кого дома рыбка» и все такое прочее. Когда пошли всякие японские кроссворды, а потом и судоку — с удовольствием решал все что попадется. Поэтому и программирование воспринималось исключительно с позиции «так есть задача\загадка надо логически её решить». А уж чего там приходилось писать, дело десятое. Поэтому, по моему скромному мнению, в возрасте 5-8-12 лет писать что-то вообще не особо важно, важнее научить думать алгоритмически. Далее — простенькие программы, реализующие те или иные алгоритмы (ту же козу с капустой, пусть даже в консоли просто словами), которые можно писать на чем угодно (больше склоняюсь к питону, все же более актуальный язык, и достаточно просто все). А вот когда есть понимание алгоритмов, навыки простого кодирования, можно переходить к более интересным вещам. Ставить IDE и уже делать прикладные вещи, хоть туду листы, хоть календарики, что угодно, подобных вещей в гайдах на ютубе полно
Идея очень хорошая, думаю вам стоит продолжать. Но по скрину непонятна сама концепция. Это для десктопа? для детей? Зачем!!! Насколько я знаю детей, сейчас за десктопом только для поиграть.! Я бы с вашими знаниями JS переключился, на мобильную разработку взяв за основу-пример ну например) сайт myfirstapp.com ,. вот там для детей в игровой форме ну и тд.
Как сказала Татьяна Черникова — мы все живем уже в цифровом мире, с его нанометрами и наночастицами, и дети не исключение. Мобила-смартфон у каждого.
Да, для десктопа и да, для детей. Но не для маленьких карапузов, а для учеников начальной школы и старше. И вообще всех начинающих программировать.
Насколько я знаю детей, сейчас за десктопом только для поиграть.!

Как раз мои наблюдения и жизненный опыт говорят об обратном — поиграть и поразвлекаться это смартфоны и веб. Да и код писать на десктопе сильно удобнее.
По моему, если вы на столько ненавидите своего ребенка, то гораздо милосерднее было бы просто отдать его в детдом. Вы серьезно думаете, что если все это скармливать в таком возрасте, это не вызовет отвращения? Есть, в конце-концов школьная информатика и, если, ребенку будет это интересно он будет либо сам искать информацию, ходить на доп занятия, и, в конце концов, поступать в специализированный универ либо колледж.
Еще посмотрите фактам в лицо 90% программистов делают бесполезные вещи, (очередные банковские приложения, либо лэндосики, crm и т.д).
А вот достойных инженеров, материаловедов, биологов действительно мало, и они действительно приносят пользу обществу.
Вывод:
Зачем навязывать ложное восприятие реальности в таком возрасте? Лучше просто, по возможности, показать все возможные профессии и пусть ребенок сам делает выбор.
Эмм… В каком таком? Я не автор, но по моему в современных условиях 10 лет самый возраст.
все зависит от того, как «скармливать».
90% программистов делают бесполезные вещи
— так 90% инженеров, материаловедов и биологов тоже занимаются фигней. а достойных программистов не так уж и много.
Пользу обществу приносят даже дворники — но, имхо, не стоит профориентроваться на них.
а вот насчет «показать все возможные профессии» — согласен, но кто это сможет сделать? даже области знаний возможные показать — и то проблема объема…
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории