Обучение программированию с азов

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

– А что это ты делаешь?
– А что значит это слово?
– А почему здесь зелёненькие буквы, а здесь синенькие?
И обязательно придёт к главному вопросу:
– А ты научишь меня программировать?

Мне этот вопрос тоже был задан. Я оказался не готов к ответу. И начал размышлять над проблемой. Как приобщить ребёнка (около десяти лет) к этому интересному и увлекательному занятию?

Далее некоторые мысли на эту тему и к чему они меня привели…

Небольшое пояснение, для дальнейшего изложения. Я профессионально занимаюсь разработкой на Java. Мне этот язык и платформа хорошо знакомы. Я не считаю Java слишком трудным для изучения, даже как первого языка программирования. Как и другие языки, Java можно изучать постепенно, не погружаясь сразу в дебри ООП.

Я придерживаюсь того мнения, что азы программирования должен понимать любой современный человек. Это как знать математику в объёме начальной школы. Мы все пользуемся калькуляторами и электронными таблицами, но всё равно умеем складывать и умножать на бумажке или в уме. И обучаем этому детей. Так же и с программированием — человек должен владеть навыками алгоритмизации и иметь представление о том, как реализовать придуманный алгоритм на каком-нибудь языке.

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

Scratch и другие визуально-игровые системы


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

Многочисленные онлайн курсы по обучению программированию


GeekBrains, JavaRush, Codecademy и другие. Опять же, в силу давности приобретения профессии, курсы не проходил. Просмотрел их маркетинговые материалы и пробные уроки. Так же не счёл их подходящими. Либо материал даётся не с азов, либо обучение слишком нацелено на дальнейшее трудоустройство. Общее впечатление — это не для обучения младших школьников, а скорее для овладения профессией.

Учебная литература


Нагуглил книгу Якова Файна «Программирование на Java для детей, родителей, дедушек и бабушек». Несколько устарела, но возможно как вспомогательное чтение подойдёт. Подробное изложение в первых главах как поставить и настроить JDK и Eclipse не каждого вдохновит на дальнейшее изучение. Лично на меня такие описания нагоняют сильную тоску и уныние.

Так же есть «Философия Java» Брюса Эккеля — хороший учебник. Но детям я бы его рекомендовать не стал.

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

  • комплексная подача материала — теория, примеры и практические задания
    учебные материалы на русском языке
  • обучение настоящему, современному языку программирования (Java)
  • простой редактор кода с подсветкой синтаксиса и ошибок компиляции
  • контекстная справка по стандартной библиотеке, желательно на русском языке
  • русскоязычный не перегруженный инструментами интерфейс системы
  • сообщения компилятора на русском языке
  • учебные материалы рассчитаны на совсем не знакомого с миром программирования человека, т. е. должны разъясняться даже совсем очевидные вещи

По поводу многократно упоминаемого русского языка. Многие могут возразить, мол в мире ИТ без английского никуда, а значит его нужно учить. Вот пусть ребёнок и учит. В том числе и таким способом.

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

Интегрированная среда обучения


Как вы уже начинаете догадываться, я подхожу к сути статьи. Не найдя идеального в окружающем мире, я, как и многие из нас, решил создать его сам. Так уж у нас, программистов издревле заведено. Задача мне показалась интересной и выполнимой за конечное и разумное время.

Рабочее название проекта «Java класс». Идея следующая. Настольное приложение — «интегрированная среда обучения». Скачал, установил и сразу можно читать уроки, писать код и запускать его на выполнение.

Технология JavaFX. Среда может находится в трёх режимах: чтение учебных материалов, работа с исходным кодом и выполнение запущенной программы.

Режим: чтение учебных материалов


Здесь можно читать доступные уроки и документацию. Предполагается возможность скачивать материалы из онлайн хранилища.

Материалы будут авторскими. Предполагается разработка специального XML формата, для разметки текста. Внутри программы XML файлы будут преобразовываться в HTML документы и отображаться во встроенном браузере (WebView). В страницы будут встраиваться интерактивные элементы. Например, в конце текста урока будет стоять кнопка «Открыть проект» которая будет переводить среду в режим редактирования кода с загруженным примером из урока.

Для основных классов стандартной библиотеки предполагается написание минимальной документации на русском языке в стиле javadoc. Эта документация будет также доступна в виде контекстной справки в редакторе кода.

Режим: работа с исходным кодом


Код организуется в проекты, которыми можно управлять. Операции с файлами только основные — создать/добавить, удалить и «Сохранить как...». Из редакторов пока будет только редактор java-кода. Изменения сохраняются автоматически. Код компилируется автоматически. Используется компилятор ECJ из проекта Eclipse JDT, что обеспечивает поддержку современной версии языка. Помимо прочего, это позволяет полностью перевести на русский язык все сообщения компилятора.

Для подсветки синтаксиса и ошибок компиляции используется библиотека richtextfx. Функцию code completion делать не предполагается.

Если в редактируемом java-файле есть метод main() то будет доступна кнопка запуска программы, которая переводит среду в режим выполнения кода.

Режим: выполнение запущенной программы


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

Сейчас идёт работа над прототипом. Реализованы следующие функции:

  • работа с проектами и файлами
  • редактор с подсветкой java-кода
  • интеграция java-компилятора
  • подсветка ошибок и предупреждений компилятора в редакторе
  • анализ кода для включения кнопки запуска на выполнение


Внешний вид окна прототипа в режиме работы с исходным кодом

Работа ведётся как над самой средой, так и над созданием цикла уроков «Java для начинающих», которые должны войти в начальную версию системы.

Что вы думаете обо всём сказанном? Нужна ли такая штука кому-либо кроме меня? Буду благодарен за высказанные замечания и конструктивные предложения. Также очень интересно услышать рассказы о вашем опыте вовлечения детей (и не только) в мир настоящих ИТ.

Спасибо за внимание.
Share post

Similar posts

Comments 253

    +7
    Вы упускаете ключевой момент — возраст ребенка. Как по мне лет до 12-14 «Scratch и другие визуально-игровые системы» — именно то что нужно, они позволяют настроить мышление в нужном направлении, а больше ничего и не нужно.
    Я вот вообще хочу попробовать «скормить» 7милетнему ребенку «Swift Playgrounds» эпловский, учитывая что он еще читает с трудом, а пишет с еще большим, подсовывать даже упрощенные IDE смысла не имеет в принципе.
      +4
      Я вот вообще хочу попробовать «скормить» 7милетнему ребенку «Swift Playgrounds» эпловский, учитывая что он еще читает с трудом, а пишет с еще большим, подсовывать даже упрощенные IDE смысла не имеет в принципе.

      В семилетнем возрасте я, конечно, тоже писал с трудом, потому что практики было мало, а вот читал уже очень хорошо. Научился читать сам дома, и в этом возрасте у меня уже был ZX Spectrum и книжка по Бейсику для него. Или это я был таким вундеркиндом?

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

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

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

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

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

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

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

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

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

                                  Вот! Я надеюсь, в аду приготовили отдельный котёл для тех, кто изобрёл бейсик моду называть бейсиком всё, что плохо лежит. Два случайно выбранных бейсика, как правило, отличаются больше, чем си и паскаль. Давно пора вообще забыть слово «бейсик». И вб.нет переименовать.
                                  –2
                                  Это должно означать что вы Дейкстру нормальным специалистом не считаете? :)
                                    +3
                                    Это должно означать, что у Дейкстры мнение было противоположным озвученному вами.

                                    > Можно начать учиться программированию(да и чему угодно) в момент поступления в ВУЗ и при этом стать нормальным специалистом.
                                      0
                                      Я бы сказал что скорее наоборот. Ведь он пишет что студентов, ранее изучавших бейсик, трудно обучить программированию. То есть если кто-то до ВУЗа уже изучал бейсик, то это с его точки зрения минус. Правда не совсем ясно предпочитает он чтобы люди до ВУЗа изучали другой язык или не изучали вообще никаких. :)
                                        0
                                        Надо было другую вашу цитату привести:

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


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


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

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


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

                                                        github.com/meklon/morphostain
                                                          0
                                                          Ого. Я в этом ни уха ни рыла, но описание внушительно. Покажу своей — она-то как раз лабдиагност.
                                                            0
                                                            Код не идеален, конечно. Но я старался максимально следовать стандартам и аккуратно оформлять. Профессиональных программистов вроде не тошнит.
                                                        0
                                                        Классы нужны, чтоб одним куском таскать и передавать поведение и внутренние данные, а ещё на них иногда можно отразить объект реального мира. Объяснить полезность классов мне смог С, в котором модульность и инкапсуляция реализованы ну очень неудобно.
                                                        А вот зачем нужно офигенное дерево наследования в стиле enterprise Java я до сих пор не осознаю.
                                                        За репозиторий спасибо: приятно видеть научный код документированным, поддерживаемым и довольно чисто написанным.
                                                          0
                                                          А вот зачем нужно офигенное дерево наследования в стиле enterprise Java я до сих пор не осознаю.

                                                          Если честно давно уже не трогал Java руками и не совсем понимаю что в данном контексте должно означать «дерево наследования в стиле enterprise Java», но «наследование в стиле C#» я обожаю и когда вынужден переходить на языки нормального наследования не имеющие начинаю ругаться и местами даже тормозить:)

                                                          П.С. И если не секрет, вы на чём пишите большую часть времени?
                                                            0
                                                            Ну как-то так. Вообще не понимаю, почему корень должен быть один, и зачем нужны 3 и более ступеней (немножественного) наследования: чем дальше мы наследуем, тем сильнее переопределяем изначальное поведение, что ухудшает понимание кода. Лучше сразу построить самолёт (и назвать его самолётом), чем выпиливать его напильником из паровоза.
                                                            Пишу молотилки и embedded на С, скрипты на питоне, прототипы и одноразовые вещи на матлабе.
                                                              0
                                                              Ну как-то так.

                                                              Тьфу, а я то испугался :) Естественно у этих ребят перебор и для данной ситуации столько всего не нужно. Но они похоже просто хотели показать как в принципе можно.

                                                              Пишу молотилки и embedded на С, скрипты на питоне, прототипы и одноразовые вещи на матлабе.

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

                                                              А вот если у ваших бизнес-обьектов имеется хорошая иерархическая структура, да ещё и большую часть аттрибутов и функций можно запихать в базовые классы… :)
                                                                0
                                                                Самолёт лучше делать на основе самолёта а не паровоза. Очень печально, если ТАМ это делается исключительно через паровоз.
                                                                А строить самолёты с нуля это называется велосипедизм.
                                                              0
                                                              Рад, что понравилось. Но тут именно что научный код. Не с той стороны в программирование пришел) Чисто решение практических задач. Должен сказать, что Python мне очень понравился своей относительной простотой в решении практических задач. Хотя, если писать лапшу, то будет адский фарш в плане отладки и путаница с состоянием переменных. Поэтому старался дробить насколько возможно и изолировать все. В итоге все равно связей многовато между функциями и модульность частично потерялась, но отладка упростилась.
                                                                0
                                                                Но ведь для этого есть алгебраические типы данных (чтобы таскать данные) и тайпклассы (чтобы таскать поведение), у которых с композицией и всем таким сильно лучше.
                                                                0
                                                                я так до сих пор и не понял, зачем мне нужны классы

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

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

                                                                        P.S. Ах, да как же я мог забыть про цвет, цвет чайника это очень важно :)
                                                                          0
                                                                          А это всё свойства времени компиляции, поэтому их имеет смысл выносить на уровень типов, чтобы тайпчекер отверг ваши попытки подогреть воду неспособным нагревать жидкость чайником, включив его в неправильную розетку.
                                                                            0
                                                                            Это один из возможных вариантов.
                                                                            А другой вариант это как раз классы, интерфейсы и наследование. И скажем у всех классов есть общий интерфейс, имеющий функции «подключить к источнику питания» и «включить нагрев». Но у каждого класса эти функции по разному работают.
                                                                              0
                                                                              И скажем у всех классов есть общий интерфейс, имеющий функции «подключить к источнику питания» и «включить нагрев».


                                                                              Стоп-стоп, как же не-электрические чайники?
                                                                                0
                                                                                Стоп-стоп, как же не-электрические чайники?

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

                                                                                    Тогда у таких чайников первый метод будет ставить их на нагревательный элемент, а второй включать этот нагревательный элемент. А сам нагревательный элемент будет передаваться объекту таким же образом как и розетка у электрического чайника :)

                                                                                    Абстрактный класс для чайника — это, наверное, «емкость для жидкости, способная переносить нагревание до известных пределов».

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


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

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


                                                                                      Не вижу никаких проблем вышеописанный мной абстрактный класс превратить в том числе и в кастрюлю :)
                                                                                        0
                                                                                        Но… но ведь… розетка… это уже опять другой объект…

                                                                                        Ага. Но кто ему мешает быть атрибутом вашего чайника или получать его откуда-нибудь ещё? :)

                                                                                        Не вижу никаких проблем вышеописанный мной абстрактный класс превратить в том числе и в кастрюлю :)

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

                                                                                            Лично я никакого особого зла в этом не вижу.

                                                                                            Как можно назвать метод который означает некое действие но сильно различающееся по способу реализации

                                                                                            Найти что-то общее что есть у вше этих способов и использовать в названии. Если общего нет, то тогда значит и не нужен один общий метод.

                                                                                            По мере обследования всевозможных вариантов устройств по подогреву воды могут появиться неожиданные методы которые не актуальны для других устройств подогрева воды.

                                                                                            Значит эти устройства получают свои собственные классы, наследующие от общей базы. В чём проблема?

                                                                                            И вот мы уже подгоняем целый «паровоз» к дому чтобы всего лишь подогреть воды от электричества.

                                                                                            Если такое происходит это означает всего лишь что вы неправильно выбрали архитектуру и иерархию. А не то что концепт классов и наследования сам по себе неправилен и не имеет права на существование.
                                                                                      0
                                                                                      Недавно напугал ребёнка, показав утюг на углях. Legacy-инженерные решения расширят мировоззрение, но усложняют поддержку.
                                                                                0
                                                                                CurrentTempLiquid тоже добавить. CurrentTempBoiler для обработки ошибок с расплавлением чайника в сухом виде.
                                                                                  0
                                                                                  А как же...


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

                                                                                  CurrentTempBoiler


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

                                                                  Эмм, а что, Бейсик — не процедурный? Кажется, со времён QBasic он принципиально ничем от того же Паскаля не отличается. Разве что синтаксис попроще.

                                                                    0
                                                                    Я имел в виду самый простой Бейсик, из тех, что бесплатно встраивались в компы IBM.
                                                                      0
                                                                      Goto никто не отменял :) С его помощью можно на Бейсике реализовать процедуры. И Бейсик, таки — процедурный язык, особенно тот, что шёл в комплекте.
                                                                        0

                                                                        скорее, GOSUB

                                                                          0
                                                                          Не во всех реализациях была эта команда.
                                                                            0
                                                                            Да и фик бы с ней. Для понимания простейших ветвлений, подпрограммы не нужны.
                                                                              0

                                                                              Это была какая-то уж слишком примитивная реализация.

                                                                            0
                                                                            В бейсике, если уж на то пошло, был и GOSUB.

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

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

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

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


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

                                                                        +1
                                                                        А еще есть дропауты Джобс и Гейтс, но своему ребенку вы, скорее всего, порекомендуете идти в вуз.

                                                                        Ну и да, думаю, если бы я не задрачивал плюсы с 11 лет, то стал бы более плохим специалистом, либо, в лучшем случае, стал бы им сильно позже.
                                                                          0
                                                                          Ну вот не знаю, у меня практически с первого-второго класса в жизни присутствовали компьютеры. Я на них поначалу только играл, потом появилось желание и что-то сделать самому. Помню что при помощи отца даже писал какие-то простенькие игры и программки. Книжки по программированию читал, на олимпиады ездил и что-то там даже выигрывал.
                                                                          И когда я пришёл в ВУЗ, то у меня по сравнению со многими моими сокурсниками была заметная фора. Но большинство из них нагнали эту фору за один семестр, ну максимум за два. А тем кто не нагнал не помогло бы никакое обучение программированию в детстве. Ну или оно скорее всего помогло бы им понять что программирование это не для них.

                                                                          Ну и да, думаю, если бы я не задрачивал плюсы с 11 лет, то стал бы более плохим специалистом, либо, в лучшем случае, стал бы им сильно позже.

                                                                          Ну даже «потеряли» бы вы на этом полгода или даже год. Это прямо такая катастрофа?
                                                                          И дало бы это вам ваше «задрачивание плюсов» что-то если бы вы сами не особо хотели и вас кто-то заставлял это делать?
                                                                            0
                                                                            И когда я пришёл в ВУЗ, то у меня по сравнению со многими моими сокурсниками была заметная фора. Но большинство из них нагнали эту фору за один семестр, ну максимум за два. А тем кто не нагнал не помогло бы никакое обучение программированию в детстве.

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

                                                                            Те одногруппники, которые неплохо умеют в код, аналогично начали и до вуза. Да, конечно, каждый научился что-то как-то писать, но итоговый уровень всё равно был очень разный. Я до выпуска из вуза уже вполне был в состоянии работать синиор-помидор С++ девелопером.

                                                                            Правда, я примат, и программирования у нас было суммарно не так много.

                                                                            Ну даже «потеряли» бы вы на этом полгода или даже год. Это прямо такая катастрофа?

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

                                                                            И дало бы это вам ваше «задрачивание плюсов» что-то если бы вы сами не особо хотели и вас кто-то заставлял это делать?

                                                                            Дало бы только ненависть, конечно же. Это всё надо добровольно, конечно же.
                                                                              0
                                                                              Дало бы только ненависть, конечно же. Это всё надо добровольно, конечно же.

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

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

                                                                                Поэтому, значится, надо начинать с Haskell from the First Principles, с лямбда-исчислением и эта-редукцией.
                                                                                  0
                                                                                  Забавно, была обратная ситуация — лучше понял математику зная программирование.
                                                                                  +3
                                                                                  на втором курсе института на философии (марксистско-ленинской, конечно), на вопрос «что такое Вещь в Себе?» уж не помню кто из нас ответил — «это программа без ввода-вывода»
                                                                                    0
                                                                                    Как по мне, так главная проблема в изучении языка программирования- это научиться взаимодействовать с окружением.

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

                                                                                      : 2 3 ;

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

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

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

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

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

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

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


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

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

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

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

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

                                                                                            Насчёт книги — не нашёл подходящую по Java. С удовольствием бы «портировал».
                                                                                              0
                                                                                              А я к Java то же нежное чувство питаю. Уверен и она, если правильно преподнести, вполне сгодится на роль первого языка программирования.

                                                                                              Если я не ошибаюсь, то в нашей школе программирование преподают именно по Java. Где-то с 11-12 лет. И даже рекомендуют достаточно адекватную книжку. К сожалению она на немецком, но если кому интересно, то называется «Java mit Eclipse für Kids» и они регулярно выпускают «актуальные версии».
                                                                                                +1
                                                                                                Я целиком и полностью поддерживаю вашу идею нести образование детям, но вот насчёт возможности «правильно преподнести» 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 подобные понятия отложились так глубоко на подкорке, обрели исключительно образную, понятийную форму, что объяснять это словами мне было проблематично. Возможно, это только мой личный опыт, но именно из-за него я бы не стал собственные глубокие познания в языке позиционировать как аргумент за использование языка для обучения программированию. Опытному программисту не сложно изучить новый язык, а смена контекста помогла бы встряхнуться, посмотреть свежим взглядом на неочевидные моменты, прописать их подробнее.
                                                                                                  0
                                                                                                  Посмотрите на Hello World на Java. Какие вопросы могут возникнуть у человека, который до этого не видел ни одного языка программирования?

                                                                                                  А надо обязательно начинать с написания «Hello world»? Почему не начать с объяснения что такое класс, что такое метод, что такое переменная и так далее?
                                                                                                    0
                                                                                                    А надо обязательно начинать с написания «Hello world»?


                                                                                                    Простейшая — но при этом полноценная — программа.
                                                                                                      0
                                                                                                      Дело же не в том какую программу писать первой. Дело в том почему надо начинать именно с программы, а не с обьяснения.
                                                                                                        0
                                                                                                        Это что-то типа — «Вот как это бывает. Ты только что написал свою первую программу.»
                                                                                                        Да, это копипаст, но он позволяет сразу увидеть результат, пока что (пока!) не заморачиваясь объектами, классами и переменными… переменные вообще, строго говоря, не нужны… хехе :)

                                                                                                        Этот подход сродни подходу в компьютерных играх, когда в самом начале ты крутой, у тебя все возможности, но очень быстро происходит что-то плохое и ты начинаешь путь с нуля. Простейший пример — NFS MW, там как раз первые пять минут ты ездишь на крутейшей тачке, но потом она ломается :)
                                                                                                      +1
                                                                                                      Почему не начать с объяснения что такое класс, что такое метод, что такое переменная и так далее?

                                                                                                      Потому что (ИМХО) начинающим надо давать не ООП, а программирование. То есть, объяснять, как выполняется программа, как хранятся и изменяются её данные, учить декомпозировать задачу, сторить алгоритмы, отлаживать их. ООП нужно для того чтобы структурировать сложные программы, а задачи, которые будет решать новичок, долгое время будут умещаться в один метод main одного объекта (если мы говорим о Java). При этом Java заставляет использовать ООП даже для простейших операций ввода:

                                                                                                      Scanner scanner = new Scanner(System.in);
                                                                                                      String s = scanner.nextLine();
                                                                                                      

                                                                                                      Чтобы новичок понял, что тут происходит, нужно объяснить ему про синтаксис объявления переменных, классы, создание объектов, конструкторы, потоки ввода-вывода, вызовы методов, различие классов и объектов. Ах да, ещё не забыть упомянуть, что классы надо импортировать, попутно объясняя про пакеты. Если это не объяснить, код будет бездумно копипаститься, что, на мой взгляд, вредно для процесса обучения. А если объяснять, то на новичка единовременно вывалится огромный поток информации, который он в какой-то момент перестанет усваивать.

                                                                                                      Тем временем в Python (да, я буду топить за Python как первый язык) это выглядит так:

                                                                                                      s = input()

                                                                                                      Объясняем, что такое переменная, что такое функция, как происходит вызов функции и присвоение значения. Всё. Новичок продолжает изучение программирования не отвлекаясь на ООП.
                                                                                                        0
                                                                                                        Объясняем, что такое переменная, что такое функция, как происходит вызов функции и присвоение значения.

                                                                                                        О, а объясните, что такое функция и что такое вызов функции! Про стек вызовов, глобальное состояние и прочие подобные вещи вы ему будете рассказывать?

                                                                                                        Ну, мне отчасти интересно, как это объяснить ребёнку, а отчасти интересно, как это вообще объяснять, потому что я своему отцу императивные функции объяснить не смог. А вот функции как в каком-нибудь хаскеле — ему сразу понятно. Правда, он физик.
                                                                                                          0
                                                                                                          Я, конечно, не преподаватель, и не могу оценить доходчивость своих объяснений, но я бы делал это так.

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

                                                                                                          Первые самостоятельно написанные функции, скорее всего, будут «плоскими», то есть, не будут вызывать другие функции. В этот момент нужно объяснить про области видимости переменных (в случае с Python; в случае с Java это нужно объяснять раньше, рассказывая про циклы и условне операторы). Дать несколько упражнений на определение, какие переменные видны из функции (в случае с Python пока не рассказывать, что функции можно объявлять внутри функций, циклов или условных операторов, это оставить на потом, когда сформируется более чёткое понимание областей видимости). После этого можно показывать, что будет происходить, если из функции вызвать другую функцию. На этом этапе тот факт, что из функции не видны переменные из области, в которой функцию вызвали, не должен вызывать диссонанса. Нужно мотивировать начинающего активно использовать отладчик для понимания хода выполнения программы и изменения видимых переменных. И только на этом этапе можно рассказывать про стек вызовов.

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

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


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

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

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

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

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


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

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

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

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

                                                                                                                            Вообще выбор первого языка — сложная тема. С одной стороны, наверное, имеет смысл говорить о всяких там статических типах и прочих проверках, о памяти, об адресации в ней, о том, что массивы-словари-етц — это всё не на халяву. С другой стороны, в своё время я выбирал между двумя физмат-школами — Второй и 57-й, и мне тогда уже немножко нравилось программировать, а директор (или кто-то такого уровня) 57-й открыто говорил, что они своим запрещают программировать до 10-11 класса, пока мозги на место не вправятся математикой, и это окончательно убедило меня отказаться от этого варианта.

                                                                                                                            А зря.
                                                                                                                              0
                                                                                                                              С одной стороны, наверное, имеет смысл говорить о всяких там статических типах и прочих проверках, о памяти, об адресации в ней, о том, что массивы-словари-етц — это всё не на халяву.

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

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

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

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

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

                                                                                                                  1) Почему вы выбрали именно java, а не, скажем, python (такой же современный и используемый в production)?


                                                                                                                  2) Возможно, будет проще не писать свою недоIDE, а написать плагин к idea/eclipse/netbeans. Да, в них более сложный интерфейс, но доступны сразу все современные возможности разработки. Не думаю, что это остановит тех, кто действительно хочет программировать.

                                                                                                                    +4

                                                                                                                    Тоже не понимаю, зачем сразу учить Java. В ней довольно много "лишних" для простых программ концепций типа классов, дженериков, статической типизации, конструирования объектов и прочего. Кажется, что процедурный язык с динамической типизацией будет более нагляден и прост для обучения.


                                                                                                                    Кстати для обучения Java, Kotlin и Python у JetBrains есть специальные IDE: https://www.jetbrains.com/education/

                                                                                                                      +1
                                                                                                                      Кстати для обучения Java, Kotlin и Python у JetBrains есть специальные IDE: https://www.jetbrains.com/education/

                                                                                                                      Спасибо за ссылочку. Надо будет посмотреть на досуге.

                                                                                                                      0
                                                                                                                      1) Почему вы выбрали именно java, а не, скажем, python (такой же современный и используемый в production)?

                                                                                                                      Потому, что я умею в Java. Знаю её возможности и умею их применять. Способен решать довольно сложные задачи на этой платформе. Плюс смогу ответить на любые вопросы по языку, если понадобится.
                                                                                                                      2) Возможно, будет проще не писать свою недоIDE, а написать плагин к idea/eclipse/netbeans. Да, в них более сложный интерфейс, но доступны сразу все современные возможности разработки. Не думаю, что это остановит тех, кто действительно хочет программировать.

                                                                                                                      Наверняка проще было бы. Но не так интересно.

                                                                                                                      Рассматривал вариант плагина к настоящей IDE, но быстро отверг — слишком уж много «второстепенных» и «отвлекающих» факторов. Это как учиться пилотированию сразу на магистральном лайнере, а не на маленьком планёре. Усвоит азы — может и на IDE пересесть, кто же против?

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

                                                                                                                        metaboloid двумя руками ЗА за вашу работу.
                                                                                                                        Так как сам занимаюсь с детьми (правда я проповедую начинать с Паскаля) но чем смогу тем помогу.
                                                                                                                        Опыт работы небольшой есть (25 лет), java знаю на уровне новичка.

                                                                                                                      +1
                                                                                                                      Отвечая на вопросы последнего абзаца — да, нужно. Я, как отец двух пацанов, заинтересован.
                                                                                                                        0
                                                                                                                        Спасибо. Следите за событиями. Они обязательно последуют. Думаю осенью.
                                                                                                                        0
                                                                                                                        Интересная затея, интересно посмотреть что получится. Хотел бы попробовать позаниматься с ребенком с данным инструментом. Может действительно заинтересуется.
                                                                                                                          +1
                                                                                                                          ИМХО, самый важный вопрос — возможность надолго заинтересовать (мотивировать) ребенка. В детстве интересы меняются стремительно и сильно зависят от «моды» среди сверстников. Почти всегда работает соревновательный стимул, а для этого нужно, чтобы «друзья по двору» увлекались тем же, или хотя бы могли положительно оценить результаты увлечений программированием. Достаточно одного человека, разделяющего интересы ребенка, но родителям не всегда получается полноценно исполнять его роль, а друзьям/подружкам проще оценить забавное селфи, успехи в майнкрафте и т.п.
                                                                                                                          Думаю, что среда разработки прямо или косвенно должна помогать решать вопрос мотивации. Например, сайт по обучению Scratch, позволяет легко поделиться результатом с миром, обладает возможностями соцсети(«лайки, каменты, топы»). Это работает, хотя не уверен, что это правильный путь. Вопрос мотивации остается открытым, прошу поделиться успешными решениями.
                                                                                                                            0
                                                                                                                            Присоединяюсь -«друг-соперник» очень полезен. Для любой деятельности.
                                                                                                                              0
                                                                                                                              Имхо, совсем не обязательно соперников реальных иметь. Я вообще только сам с собой и «соревновался» (хотя слово это не люблю, вообще к соревнованиям любым отношусь люто отрицательно, если цель кого то победить или превзойти), можно в интернете коммьюнити поискать.
                                                                                                                                0
                                                                                                                                «вариться в собственном соку» — непродуктивно. всегда нужен тот, кто взглянет со стороны.
                                                                                                                                  0
                                                                                                                                  Да, нужен, но таким человеком должен выступать не одноклассник, нифига в этом не понимающий, а как раз кто то грамотный, кто может определить что сделано плохо, что хорошо, что критично на данном этапе развития поправить, а что мелочь и либо выправится само, либо можно будет выправить в будущем.
                                                                                                                                    0
                                                                                                                                    все когда-то «нифига не понимали»
                                                                                                                                    учиться чему-то вместе гораздо интереснее. «взаимообогащающе».
                                                                                                                                    а хороший преподаватель или по меньшей мере наставник — всегда полезен (но не всегда возможен)
                                                                                                                                      0
                                                                                                                                      Я больше про часть «для мотивации нужно соревнование» пишу. Особенно про часть «нужно», хотя и про соревнование тоже. Да, можно, но не обязательно, и уж тем более не обязательно соревнование.
                                                                                                                                        0
                                                                                                                                        я с одним школьным приятелем занимался подводным плаваньем, с другим — радиоэлектроникой, фотографией, физикой. с третьим, познакомившись уже на ФЮПе — программированием. У сына аналогично — находились приятели с общими интересами (рукопашка, музыка, техника), и их общение тоже становилось и взаимопомощью, и советами, и соревнованием — но шло на пользу обоим.
                                                                                                                                    0
                                                                                                                                    Благо, в программировании есть сообщества. Мне в своё время очень сильно помогали расти и развиваться чуваки с rsdn.

                                                                                                                                    Программирование чем ещё хорошо — можно ещё просто читать чужие творения. Услышал где-то достаточно много раз, что буст — это хорошо, и пытаешься потом зашарить код буста, и начинаешь потихоньку упарываться темплейтами.
                                                                                                                                    0
                                                                                                                                    Конечно не обязательно, у каждого своя история. В образовании и воспитании нет универсальных решений, нужен индивидуальный подход, но есть заведомо малоэффективные(например, преодолевая сопротивление, заставлять писать программы), и группы кем-то проверенных, неплохо работающих, о которых хотелось бы услышать и «примерить» на свое чадо. ) Просто соревновательный мотив, либо подход, где твои успехи как-то оцениваются и поощряются (устным признанием друзей, или теми же лайками) очень популярны.
                                                                                                                                      0
                                                                                                                                      Возможно популярны, но в моем случае действительно соревновательный подход просто бы отвратил. Потому и уточняю чтобы не считал его никто панацеей.
                                                                                                                                        0
                                                                                                                                        а что в вашем случае было 1)независимой оценкой 2)положительным подкреплением?
                                                                                                                                          0
                                                                                                                                          1) Сравнение с имеющимися примерами, а также личным опытом. Собственно этого пункта мне заметно не хватало, но независимая оценка не только в соревновательном подходе может быть.
                                                                                                                                          2) Удовольствие от самого процесса, от того что что то выходит, от конечного результата. Другого подкрепления мне как то и не нужно было. Узнал что то новое — получил удовольствие, приобрел навык — аналогично.
                                                                                                                                            0
                                                                                                                                            2. Когда оно не работало, а теперь, наконец, работает. Когда вот в эту часть кода, которую я писал два года назад, спроектированную по принципам A, я могу вносить изменения легко и просто, а принципы B в соседней части кода — сплошной ад и погибель.

                                                                                                                                            Deep reinforcement learning прямо.
                                                                                                                                            0
                                                                                                                                            Скорее боязнь оказаться не первым и/или не лучшим. Вот что сильно демотивирует обычно.
                                                                                                                                              0
                                                                                                                                              не знаю. меня обычно быть вторым-третьим не сильно огорчало. хотя если знал, что реально могу вырвать победу у соперника — тогда да. но это больше к спорту относится, (ну и школьным олимпиадам)
                                                                                                                                                0
                                                                                                                                                Возможно, но если только на каком то глубинном уровне. Сейчас, да и сколько себя помню, это скуку нагоняло. Ну еще непонимание что в этом интересного.
                                                                                                                                                  0
                                                                                                                                                  Так-то оно так, но зато как мотивирует нежелание остаться не первым и/или не лучшим после поражения. Парадокс в том, что нужно быть достаточно опытным программистом, чтобы не ввязываться в соревнование, где у тебя мало шансов. Т.е. для начинающих такой демотиватор не распространен и мир увидит еще много «убийц фейсбуков», велосипедов и борцов с фатальными недостатками. И это хорошо.
                                                                                                                                                  К счастью, нива программирования настолько широка, а жизненные ситуации настолько разнообразны, что первые места найдутся всем, способным написать программу, у которой будет хотя бы один благодарный пользователь, выбравший её среди прочих.
                                                                                                                                                    0
                                                                                                                                                    Вообще поразмышляв понял что мне не то что первым быть не хочется, хочется среди последних всегда быть (если все же вводить какой то критерий сравнения). Ведь это означает что вокруг куча людей круче меня у которых есть чему поучиться.
                                                                                                                                                      0
                                                                                                                                                      Наверно всё же «последним среди передовых». Учится всегда есть чему, только когда вы впереди учёба уже напоминает нескончаемый эксперимент где велика доля ошибок.
                                                                                                                                            0
                                                                                                                                            Согласен с вами. Элементы мотивации нужно будет продумывать.
                                                                                                                                            +1

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


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


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


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


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

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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


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


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

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


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

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

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

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

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

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

                                                                                                                                                        Вообще, обсуждение поднятой темы на удивление бурное получилось. Я такого не ожидал.
                                                                                                                                                          +1
                                                                                                                                                          Потому что вы наверное в любой стране мира найдёте кучу родителей, которых не устраивает система образования и которые хотят сами учитъ детей :)
                                                                                                                                                        0
                                                                                                                                                        А воспитателем или учителем можно?
                                                                                                                                                      0

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

                                                                                                                                                                      Параллельная работа, которая тоже уже начата — это цикл уроков, которые и будут «учить» программированию на Java и объяснять всякие сопутствующие вещи. Вот это гораздо более объёмный и сложный труд. Я это вполне осознаю. Мне интересно это делать потому, что я таким образом прорабатываю сценарии разговоров с ребёнком на технические темы. Придумываю как я буду отвечать на его вопросы. А они точно будут задаваться.
                                                                                                                                                                      +2