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



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

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

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

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

Небольшое пояснение, для дальнейшего изложения. Я профессионально занимаюсь разработкой на 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 для начинающих», которые должны войти в начальную версию системы.

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

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

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (235):

  1. IgorKh
    /#18814895 / +1

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

    • staticlab
      /#18814987

      Я вот вообще хочу попробовать «скормить» 7милетнему ребенку «Swift Playgrounds» эпловский, учитывая что он еще читает с трудом, а пишет с еще большим, подсовывать даже упрощенные IDE смысла не имеет в принципе.

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

      • Neikist
        /#18815141

        У меня увы этого не было, но читал я тоже неплохо, и очень любил в то время физические и биологические энциклопедии. О природе электричества, атомах, устройстве ядерного реактора я прочитал еще в младших классах. Это если про 7-9 лет говорить. А вообще, имхо, в те же 12 лет про которые в первом каменте говорится уже вполне себе идет в школе математика и геометрия. И прекрасно усваиваются.

      • wormball
        /#18815151

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

      • domix32
        /#18816387

        Помню классе в пятом в книжном увидел книжку по программированию на QBASIC в состав которой входил флоппик с собственно исполняемой средой и примерами из книги. В книге рассказывались похождения переменных, операторов IF, INKEY$ и GOTO в борьбе с какими-то там проблемами. Книжку я так и не дочитал, но в обезьян, перекидывающихся бананами с братом даже играли.
        Я бы предложил в этом случае обычный JavaScript нежели Java, там есть всяческие послабления вроде кириллических объектов и в случае чего до графического контекста можно добраться относительно безболезненно. Ну и параллельно записать на курсы английского по возможности.

      • JekaMas
        /#18817517

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

    • wormball
      /#18815119

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

      • valery1707
        /#18816203 / +1

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

        • domix32
          /#18816399 / +2

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

        • wormball
          /#18816431

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

          Хотя, конечно, быть может, что это всё индивидуальные различия.

        • Meklon
          /#18821927

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

    • vchslv13
      /#18815189 / +1

      Отвечу одновременно и ув. wormball и ув. staticlab Не всё так просто с возрастом и чтением. Я тоже умел читать лет с трёх и в первых классах читал книги взахлёб (компьютера, к нынешнему огромному сожалению, у меня тогда не было).

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

      В общем, не нужно сразу «наезжать» на IgorKh — скорее всего, он вполне ориентируется в том, что его ребёнок может, а что нет, и от этого отталкивается в своих требованиях.

      • defaultvoice
        /#18816303

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

        • Loturn
          /#18816723 / +2

          Я не умел читать до 6-ти лет. Детский сад я окончил, не умея читать, поэтому в промежутке времени между детским садом и школой я освоил чтение. В первом классе я читал не по слогам, и со скоростью ~124 слова в минуту, что было неплохим результатом (так мне сказали).

          • Neikist
            /#18816735 / +1

            Видимо все разные, я сам не помню, но говорят что 104 слова/мин читал между 4 и 5 годами. Собственно между 3 и 4 научили, опять же по словам родственников.

    • rstepanov
      /#18815993 / +5

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

      • Kanut79
        /#18816097 / +1

        Да перестаньте. Можно начать учиться программированию(да и чему угодно) в момент поступления в ВУЗ и при этом стать нормальным специалистом.
        Если ребёнку уже нравится программировать, то пусть себе программирует на том, на чём ему нравится. Если же хотите его с программированием познакомить, то тут и Scratch для начала подойдёт.

        • rstepanov
          /#18816121

          Зависит от того, что вы считаете «нормальным специалистом».

          • Kanut79
            /#18816175 / +1

            Дейкстра, Таненбаум или Вирт вас устроят как примеры «нормального специалиста»? :)

            • wormball
              /#18816201

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

              Эдсгер Вибе Дейкстра

              • Mike_soft
                /#18816271

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

                • wormball
                  /#18816405 / +1

                  > бейсик бейсику рознь

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

              • Kanut79
                /#18816327 / -2

                Это должно означать что вы Дейкстру нормальным специалистом не считаете? :)

                • wormball
                  /#18816373 / +3

                  Это должно означать, что у Дейкстры мнение было противоположным озвученному вами.

                  > Можно начать учиться программированию(да и чему угодно) в момент поступления в ВУЗ и при этом стать нормальным специалистом.

                  • Kanut79
                    /#18816385

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

                    • wormball
                      /#18816411

                      Надо было другую вашу цитату привести:

                      > Если ребёнку уже нравится программировать, то пусть себе программирует на том, на чём ему нравится. Если же хотите его с программированием познакомить, то тут и Scratch для начала подойдёт.

                      • Kanut79
                        /#18816425

                        Ну вот она бы больше подошла. Но по моему Дейкстре просто не нравилось что никто не хочет обучаться на Алголе :)

                      • rstepanov
                        /#18816429 / +1

                        Scratch отлично подходит для детей 7-9 лет. Потом пора переходить на языки, позволяющие хотя бы повторно использовать код и писать программы длиной более двух экранов. В идеале конечно еще и с нормальными типами данных.

                        • Meklon
                          /#18821939 / +1

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

                          • JC_IIB
                            /#18821999 / +1

                            Меня в итоге совершенно восхитила концепция функций и изоляции фрагментов кода


                            (старательно пряча фанатичный отблеск в глазах) Молодой человек, давайте поговорим с вами о функциональном программировании!

                            • Meklon
                              /#18822723

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

                              • JC_IIB
                                /#18823097

                                Жаль, я так до сих пор и не понял, зачем мне нужны классы :-/


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

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


                                Как у Ненашева из «Гения»? :)

                                • Meklon
                                  /#18823185

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

                                  github.com/meklon/morphostain

                                  • JC_IIB
                                    /#18823291

                                    Ого. Я в этом ни уха ни рыла, но описание внушительно. Покажу своей — она-то как раз лабдиагност.

                                    • Meklon
                                      /#18823517

                                      Код не идеален, конечно. Но я старался максимально следовать стандартам и аккуратно оформлять. Профессиональных программистов вроде не тошнит.

                              • Gryphon88
                                /#18824065

                                Классы нужны, чтоб одним куском таскать и передавать поведение и внутренние данные, а ещё на них иногда можно отразить объект реального мира. Объяснить полезность классов мне смог С, в котором модульность и инкапсуляция реализованы ну очень неудобно.
                                А вот зачем нужно офигенное дерево наследования в стиле enterprise Java я до сих пор не осознаю.
                                За репозиторий спасибо: приятно видеть научный код документированным, поддерживаемым и довольно чисто написанным.

                                • Kanut79
                                  /#18824195

                                  А вот зачем нужно офигенное дерево наследования в стиле enterprise Java я до сих пор не осознаю.

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

                                  П.С. И если не секрет, вы на чём пишите большую часть времени?

                                  • Gryphon88
                                    /#18824875

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

                                    • Kanut79
                                      /#18825197

                                      Ну как-то так.

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

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

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

                                      А вот если у ваших бизнес-обьектов имеется хорошая иерархическая структура, да ещё и большую часть аттрибутов и функций можно запихать в базовые классы… :)

                                • Meklon
                                  /#18824453

                                  Рад, что понравилось. Но тут именно что научный код. Не с той стороны в программирование пришел) Чисто решение практических задач. Должен сказать, что Python мне очень понравился своей относительной простотой в решении практических задач. Хотя, если писать лапшу, то будет адский фарш в плане отладки и путаница с состоянием переменных. Поэтому старался дробить насколько возможно и изолировать все. В итоге все равно связей многовато между функциями и модульность частично потерялась, но отладка упростилась.

                                • 0xd34df00d
                                  /#18825349

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

                              • vconst
                                /#18824175

                                я так до сих пор и не понял, зачем мне нужны классы

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

                                :)

                                • JC_IIB
                                  /#18824191

                                  По-моему, вместо того, чтобы плодить классы, достаточно одного класса с признаком WaterLevel в диапазоне 0-100 (проценты).

                                  • Kanut79
                                    /#18824213

                                    Да ну вас, это же скучно :)

                                    • JC_IIB
                                      /#18824567

                                      Кстати, я косякнул. Надо два признака: LiquidType (string) и LiquidLevel (0-100). Так лучше.

                                      • Kanut79
                                        /#18824627

                                        А как же способность/неспособность нагревать жидкость? И максимально доступная температура? И в каком виде потребляется энергия? И тип штекера для электрических чайников? И....? :)

                                        P.S. Ах, да как же я мог забыть про цвет, цвет чайника это очень важно :)

                                        • 0xd34df00d
                                          /#18825403

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

                                          • Kanut79
                                            /#18825567

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

                                            • JC_IIB
                                              /#18825585

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


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

                                              • Kanut79
                                                /#18825597

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

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

                                                • JC_IIB
                                                  /#18825647

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

                                                  • Kanut79
                                                    /#18825663

                                                    Плита — это другой объект, другой класс :)

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

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

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

                                                    • JC_IIB
                                                      /#18825703

                                                      розетка


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

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


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

                                                      • Kanut79
                                                        /#18825715

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

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

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

                                                        Вы победили :)

                                                      • Mike_soft
                                                        /#18827605

                                                        надо идти от Бочки.

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

                                                        • Kanut79
                                                          /#18827889

                                                          А как быть с квадратными сосудами, которые перекатывать нельзя? :)

                                                          • Mike_soft
                                                            /#18827921

                                                            генерировать исключение при попытке перекатывать…
                                                            или усиле для перекатывания требовать большое

                                                            • Kanut79
                                                              /#18827967

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

                                                              • Mike_soft
                                                                /#18828111

                                                                вообще, квадратное тоже можно катать — доказано Армией.

                                              • Gryphon88
                                                /#18825607

                                                Недавно напугал ребёнка, показав утюг на углях. Legacy-инженерные решения расширят мировоззрение, но усложняют поддержку.

                                      • Meklon
                                        /#18824629

                                        CurrentTempLiquid тоже добавить. CurrentTempBoiler для обработки ошибок с расплавлением чайника в сухом виде.

                                        • JC_IIB
                                          /#18824669

                                          А как же...


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

                                          CurrentTempBoiler


                                          isBoilerEmpty (True/False) мне кажется лучше. И по памяти меньше опять же.

                                          • Meklon
                                            /#18824735

                                            А если он загорелся с водой внутри?

                                            • JC_IIB
                                              /#18824783

                                              Это уже похоже на исключительную ситуацию :)

                                  • vconst
                                    /#18824245

                                    Но из этого анекдот не сделать :)

              • peresada
                /#18817289

                Если действительно есть вузы, в которых обучают Бейсику, то это печально. В моей школе изучение Бейсика началось в 5 классе (2002 год)

                • Mike_soft
                  /#18822547

                  есть ВУЗы, в которых обучают печально известному ДРАКОНу :-)
                  Причем процесс обучения построен так, что семестровое задание состоит аж из четырех иконок…

              • vconst
                /#18820421

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

                • staticlab
                  /#18820709

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

                  • vconst
                    /#18820719

                    Я имел в виду самый простой Бейсик, из тех, что бесплатно встраивались в компы IBM.

                    • paranoya_prod
                      /#18820913

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

                      • staticlab
                        /#18820929

                        скорее, GOSUB

                        • paranoya_prod
                          /#18820963

                          Не во всех реализациях была эта команда.

                          • vconst
                            /#18821021

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

                          • staticlab
                            /#18821027

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

                      • JC_IIB
                        /#18820931

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

                        p.s. ах, черт, опять 2 хабракванта :)

                      • vconst
                        /#18820939

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

                • ru_vlad
                  /#18821239

                  С него без всяких проблем легко перейти на Паскаль,

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

                  • vconst
                    /#18821295

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

                    • ru_vlad
                      /#18821375

                      Потому что Бейсик дает возможность сразу писать алгоритм «как есть».

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


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

            • 0xd34df00d
              /#18816505 / +1

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

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

              • Kanut79
                /#18816571

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

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

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

                • 0xd34df00d
                  /#18816637

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

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

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

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

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

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

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

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

                  • Kanut79
                    /#18818801

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

                    Так об этом я и писал: если хочет ребёнок писать на бейсике, то пусть пишет на нём. Конечно можно показать ему и другие языки программирования, но если они ему нравятся меньше, то заставлять на них переходит ничего не даст. А если ребёнку программирование вообще не интересно, то шансов увлечь его при помощи «игровых» вещей вроде Scratch'а гораздо выше чем при помощи С++ или Haskell.
                    А если ему всё равно неинтересно, то лучше наверное оставить его в покое и найти что-то другое что его заинтересует.

      • Lexm
        /#18816717

        Мош и Всеросс не гарантируют нормально промышленную карьеру. И наоборот, если ребенок не учавствует в олимпиадах, это не повод не учится программированию и ужаться «конкурентов».

      • selenite
        /#18816725

        А потом берешь этих «будущих конкурентов» и они банально не способны мыслить в другой плоскости, кроме как «запустить visual studio code и написать на C# олимпиадное задание, запустить в Azure»

        • rstepanov
          /#18820465

          Есть такая проблема, да. Но решается. Банально объясняешь разницу между «оптимизировать алгоритм» и собрать готовое решение. Это не фатально.

      • vconst
        /#18820405 / +1

        Подтверждаю. В 14 я уже во всю ездил на олимпиады по программированию, в итоге дошел до общей по РФ, но срезался по глупости и на олимпиаду СНГ уже не поехал. Все было серьезно, под конец с Паскаля перешел на С++. Скретч хорош для начальной школы, но уже в 12 лет он морально не подходит. Не позже 11 уже надо переходить на что-то вроде Бейсика.

    • Fedcomp
      /#18816541 / +2

      Вполне себе можно давать языки вроде python, а не эту синтетику.

    • aFanOfSwift
      /#18818995

      «Swift Playgrounds»

      Это был мой первый учебник.:-) Но там все на английском и русификации не предусмотрено. Ребенку надо будет еще и английский выучить. С одной стороны хорошо, с другой стороны это может отпугнуть. Хотя это приложение не научит программировать. Так как там не используется реальный синтаксис. (частично есть, но в целом это псевдосинтаксис). Хотя поможет понять принципы и алгоритмы работы.

  2. kamagan
    /#18814977 / +2

    Начинал с Blockly со своим сыном.
    Затем raspberryjammod и python для Minecraft по книге Ричардсона Программируем с Minecraft. Создай свой мир с помощью Python
    А уже после написали свою игру Пятнашки, для школьного проекта на pygame. Написать даже такую игру с нуля мой уже почти 12-ти летний сын пожалуй пока не в состоянии, поэтому структура проекта (основные классы и их свойства и методы) были разработаны мной, и было описано что они должны делать. А код методов уже он писал сам, не без моей помощи конечно. Код проекта если кому вдруг интересно github.com/Yabra/15

    • snuk182
      /#18815239

      Вот да, мне данный способ тоже импонирует — не таскать формочки по экрану, а начинать непосредственно с полноценного кода, который может влиять на что-то из системы ценностей ребенка (в данном случае — Minecraft).

      • Fedcomp
        /#18816587

        Таскать формочки / кнопочки / текстовые поля по экрану тоже может быть интересным.

  3. rrrrex
    /#18815121 / +1

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

    • Neikist
      /#18815161

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

      • 0xd34df00d
        /#18816601

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

        Поэтому, значится, надо начинать с Haskell from the First Principles, с лямбда-исчислением и эта-редукцией.

      • Fedcomp
        /#18816623

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

    • Mike_soft
      /#18815277 / +3

      на втором курсе института на философии (марксистско-ленинской, конечно), на вопрос «что такое Вещь в Себе?» уж не помню кто из нас ответил — «это программа без ввода-вывода»

    • metaboloid
      /#18817547

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

      Не согласен. Это вы уже о программировании как профессии говорите. Я же — о вовлечении в эту область знаний, стимулировании проявленного интереса. Интеграции со всем и вся, фреймворки и прочее будут сильно потом, если захочет погружаться.

  4. paranoya_prod
    /#18815145

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

    • wormball
      /#18815217

      Ой, вот только не надо вот этого вот. Была у меня книжка про бейсик, выдержанная вот в таком стиле. И единственное, что я оттуда помню — это злой колдун DEF, который заколдовал двойку. Ну и какой-то кусок кода приведён, уже не помню какой. И что всё это значит — очень долго для меня оставалось загадкой. Лишь много лет спустя я познакомился с языком Форт и встретил в одной из книжек, помнится, Лео Броуди буквально следующее:

      : 2 3 ;

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

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

      • paranoya_prod
        /#18815305

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

    • vchslv13
      /#18815227 / +2

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

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

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

      • akryukov
        /#18815585

        Это нужно будет или как-то объяснить или сказать что-то вроде «так надо, я тебе потом объясню» — и то, и другое как-то некрасиво выглядит.

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


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

        • vchslv13
          /#18815903

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

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

      • metaboloid
        /#18817571

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

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

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

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

        • Kanut79
          /#18818871

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

          Если я не ошибаюсь, то в нашей школе программирование преподают именно по Java. Где-то с 11-12 лет. И даже рекомендуют достаточно адекватную книжку. К сожалению она на немецком, но если кому интересно, то называется «Java mit Eclipse fur Kids» и они регулярно выпускают «актуальные версии».

        • fori1ton
          /#18820623 / +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 подобные понятия отложились так глубоко на подкорке, обрели исключительно образную, понятийную форму, что объяснять это словами мне было проблематично. Возможно, это только мой личный опыт, но именно из-за него я бы не стал собственные глубокие познания в языке позиционировать как аргумент за использование языка для обучения программированию. Опытному программисту не сложно изучить новый язык, а смена контекста помогла бы встряхнуться, посмотреть свежим взглядом на неочевидные моменты, прописать их подробнее.

          • Kanut79
            /#18820641

            Посмотрите на Hello World на Java. Какие вопросы могут возникнуть у человека, который до этого не видел ни одного языка программирования?

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

            • JC_IIB
              /#18820705

              А надо обязательно начинать с написания «Hello world»?


              Простейшая — но при этом полноценная — программа.

              • Kanut79
                /#18820935

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

                • JC_IIB
                  /#18821729

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

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

            • fori1ton
              /#18820955 / +1

              Почему не начать с объяснения что такое класс, что такое метод, что такое переменная и так далее?

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

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

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

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

              s = input()

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

              • 0xd34df00d
                /#18822309

                Объясняем, что такое переменная, что такое функция, как происходит вызов функции и присвоение значения.

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

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

                • fori1ton
                  /#18822931

                  Я, конечно, не преподаватель, и не могу оценить доходчивость своих объяснений, но я бы делал это так.

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

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

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

                  • Meklon
                    /#18823063

                    Мне не нравится объявлять функции в основном коде Python. Это как-то нарушает однородность. И основной код нагружает. Но я не совсем программист все же.

            • akryukov
              /#18821049

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

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


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

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

              • Kanut79
                /#18821689

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

                Я не настаиваю на именно таком порядке. Просто для меня непонятен подход когда детям дают код и просят его переписать один к одному и запустить. Это программированию не учит, а учит только копипастить.

                • metaboloid
                  /#18821733

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

                • akryukov
                  /#18821849

                  Просто для меня непонятен подход когда детям дают код и просят его переписать один к одному и запустить.

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


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

                  • Kanut79
                    /#18823125

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

                    Видимо и в обучении для разных людей нужны разные подходы.

          • metaboloid
            /#18821727

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

            До элементов ООП дело доходит очень не сразу.

          • Mike_soft
            /#18822557

            «Если ученый не умеет популярно объяснить восьмилетнему ребенку, чем он занимается, значит, он шарлатан»©
            аксиоматичность — это не всегда понимание.
            и что ценно: объяснение (и подготовка к объяснению) позволяет самому понять глубже.

    • Mike_soft
      /#18815269

      «Горизонты… » был каким-то странным журналом. наивным. «про компьютеры» я, 3*ура, уже не застал.

    • mistergrim
      /#18815721

      Помню этот журнал. Соглашусь с wormball полностью — это довольно весело, но совершенно бесполезно.

  5. Mike_soft
    /#18815255

    про Scratch — зря вы их отвергли. Для младшего-среднего школьного (лет до 12) самое «то, что надо» — есть и игровая компонента, и логика, и простое «правильное соединение», отображение структуры программы. И есть текстовое отображение «строительных блоков».
    рискую получить тапками, но гляньте еще «1С Программирование для начинающих» Радченко (это, конечно, «парапрограммирование», но как обучение вполне пойдет)

    • vassabi
      /#18815397 / +1

      я дочке после LightBot показал Scratch, она с удовольствием освоила — как гонять нарисованного кота и черепашью графику. Там сбоку у скретча кстати есть кнопочка «код на питоне», которая превращает рисованные блоки в текст, так что следующим этапом будет питон и raspberryjammod (благо майнкрафт мы тоже любим)

      • Mike_soft
        /#18815517

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

    • Neikist
      /#18815475 / +2

      Не надо 1С-ом жизнь ломать. Разве что совсем от безысходности. Там конечно все очень просто (если в дебри не лезть), но у того же Радченко вообще не припомню чтобы объяснялось про уровни абстракции, почему 10 параметров хуже чем две структуры по 5 свойств и т.п.

      • Mike_soft
        /#18815577

        язык как язык. фреймворк как фреймворк.
        а «10 параметров хуже чем две структуры по 5 свойств и т.п» (что вообще говоря не всегда верно) не объясняется, например, и у Ричи с Керниганом. Тот, кто полезет в программирование более серьезно — тот будет читать «более другие» книжки. Чтение Радченко не отменяет чтения Дейта.

        • Neikist
          /#18815637 / +1

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

          • Mike_soft
            /#18815751

            сообщества везде есть разные.
            заточенность на предметную область — да, есть. это не плохо и не хорошо — это просто особеннось. упрощенный язык — так для целей обучения вполне хватит. (впрочем, я на нем лет 15 назад ассемблер-дизассемблер писал. задача для 1с неспецифическая, но вполне реализуемая)

            • Neikist
              /#18815831 / +1

              Лет 15 еще семерка была (с которой я не сталкивался), и возможностей у нее по слухам побольше было.
              Почему 1с плоха для обучения и изучения:
              1) То что интересно тебе, не входящее в предметную область, не напишешь, либо напишешь только с дикими костылями;
              2) Тот же аргумент что обычно про паскаль приводится. Зачем учить язык чтобы потом его не использовать?
              3) Про сообщества: на том же инфостарте статьи о хороших практиках разработки днем с огнем не найдешь. В основном только от серебрянной пули, да от людей что на infostart event выступают год за годом. На мисту я вообще перестал почти сразу заходить. Есть еще какие то сообщества в рунете о которых я не знаю?
              4) Без оплаты разных подписок в 1с недоступна ни документация толковая, ни EDT, ни платформа.

              • Mike_soft
                /#18815951

                возможностей 1с для обучения более чем достаточно. семерка восьмерка — разницы никакой (семерка меньше и быстрее, восьмерка неповоротлива, но обладает многими возможностями «из коробки»). из 1с разве что с графикой не поработаешь — но без соотв. опыта с ней ни на чем не поработаешь. опыт нарабатывается, интерес появляется (или не появляется). как первый язык — паскаль тоже вполне годен.
                для обучения есть как коробочная версия для обучения (стоит практически копейки), с платформой, доками и т.п. Ну и эмуляторов гуляет достаточно.
                по сообществам — когда-то была Т1С, откуда потом все переехали в мизду, но сейчас даже не знаю. но нагуглить ответ можно практически на любой вопрос.
                Я не говорю, что 1с — лучший способ обучения. но по крайней мере, в отличие от велосипеда автора — это готовый продукт с документацией, с методиками, даже с книжкой «для начинающих». будет интересно — ученик сам выберет себе инструмент и направление.

                • Neikist
                  /#18816305

                  Ну, я бы все же выбрал бы все то же самое, но еще к этому общего назначения (а не специализированное), мультипарадигменное (со временем новые парадигмы можно на том же языке пробовать), бесплатное, и с более приятным синтаксисом. Тот же питон, или (хоть и терпеть его не могу) js (возможно не в браузере).

                  • 0xd34df00d
                    /#18816651

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

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

                    А зря.

                    • Neikist
                      /#18816753

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

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

                      • 0xd34df00d
                        /#18817051

                        А, я исходил из предпосылки, что это уже интересно.

  6. Stalker_RED
    /#18815297 / +5

    Colobot! Играешь за космонавта, которому надо выполнять какие-то миссии. Поначалу они простые и легко делаются вручную. Но постепенно все становится сложнее, и приходится программировать роботов-помошников. Вплоть до летающего дрона, который в полете немного покачивается. И для прицельного выстрела придется узнать о синусах и косинусах.

    • mapron
      /#18817077 / +1

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

  7. EndUser
    /#18815339 / +2

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

    • selivanov_pavel
      /#18815841 / +1

      задача из реального мира — обход доски конём

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

      • EndUser
        /#18816073 / +1

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

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

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

        • Mike_soft
          /#18816105

          да, как в учебнике Ершова: «Нарисовать [на алфавитно-цифровом, звездочками] круг. примечание: кругом считается квадрат размерами 5*15»©

          • 0xd34df00d
            /#18816657

            Ну, это вполне себе будет кругом, если пространство соответствующим образом метризовано.

  8. Akon32
    /#18815343 / +1

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


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

    • staticlab
      /#18815801 / +4

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


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

      • akryukov
        /#18815833 / +1

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

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

    • metaboloid
      /#18817603

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

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

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

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

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

      • ru_vlad
        /#18817939

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

  9. arestenkos
    /#18815381 / +1

    Отвечая на вопросы последнего абзаца — да, нужно. Я, как отец двух пацанов, заинтересован.

    • metaboloid
      /#18817607

      Спасибо. Следите за событиями. Они обязательно последуют. Думаю осенью.

  10. Barrya42
    /#18815383

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

  11. Emulyator
    /#18815395 / +1

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

    • Mike_soft
      /#18815473

      Присоединяюсь -«друг-соперник» очень полезен. Для любой деятельности.

    • Neikist
      /#18815491

      Имхо, совсем не обязательно соперников реальных иметь. Я вообще только сам с собой и «соревновался» (хотя слово это не люблю, вообще к соревнованиям любым отношусь люто отрицательно, если цель кого то победить или превзойти), можно в интернете коммьюнити поискать.

      • Mike_soft
        /#18815587

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

        • Neikist
          /#18815647

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

          • Mike_soft
            /#18815769

            все когда-то «нифига не понимали»
            учиться чему-то вместе гораздо интереснее. «взаимообогащающе».
            а хороший преподаватель или по меньшей мере наставник — всегда полезен (но не всегда возможен)

            • Neikist
              /#18815871

              Я больше про часть «для мотивации нужно соревнование» пишу. Особенно про часть «нужно», хотя и про соревнование тоже. Да, можно, но не обязательно, и уж тем более не обязательно соревнование.

              • Mike_soft
                /#18815975

                я с одним школьным приятелем занимался подводным плаваньем, с другим — радиоэлектроникой, фотографией, физикой. с третьим, познакомившись уже на ФЮПе — программированием. У сына аналогично — находились приятели с общими интересами (рукопашка, музыка, техника), и их общение тоже становилось и взаимопомощью, и советами, и соревнованием — но шло на пользу обоим.

        • 0xd34df00d
          /#18816673

          Благо, в программировании есть сообщества. Мне в своё время очень сильно помогали расти и развиваться чуваки с rsdn.

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

      • Emulyator
        /#18815875

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

        • Neikist
          /#18815923

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

          • Mike_soft
            /#18815979

            а что в вашем случае было 1)независимой оценкой 2)положительным подкреплением?

            • Neikist
              /#18816293

              1) Сравнение с имеющимися примерами, а также личным опытом. Собственно этого пункта мне заметно не хватало, но независимая оценка не только в соревновательном подходе может быть.
              2) Удовольствие от самого процесса, от того что что то выходит, от конечного результата. Другого подкрепления мне как то и не нужно было. Узнал что то новое — получил удовольствие, приобрел навык — аналогично.

            • 0xd34df00d
              /#18816685

              2. Когда оно не работало, а теперь, наконец, работает. Когда вот в эту часть кода, которую я писал два года назад, спроектированную по принципам A, я могу вносить изменения легко и просто, а принципы B в соседней части кода — сплошной ад и погибель.

              Deep reinforcement learning прямо.

    • metaboloid
      /#18817611

      Согласен с вами. Элементы мотивации нужно будет продумывать.

  12. akryukov
    /#18815497

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


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


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


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


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

    • Mike_soft
      /#18815621

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

    • metaboloid
      /#18817709

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

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

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

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

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

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

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

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

      • akryukov
        /#18818557

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

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


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

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

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

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


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

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


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


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

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


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

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

        • metaboloid
          /#18821761

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

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

          • akryukov
            /#18821831

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

            • metaboloid
              /#18821877

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

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

              • Kanut79
                /#18823135 / +1

                Потому что вы наверное в любой стране мира найдёте кучу родителей, которых не устраивает система образования и которые хотят сами учитъ детей :)

          • 0xd34df00d
            /#18822313

            А воспитателем или учителем можно?

      • igor_suhorukov
        /#18823245

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

  13. myxo
    /#18815709 / +1

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

    • ru_vlad
      /#18817019

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


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

  14. Gryphon88
    /#18815803

    Начинать, имхо, стоит с алгоритмики в 6-8 лет, без компьютера как у профессора Фортрана

    Заголовок спойлера
    image

    • Mike_soft
      /#18815827

      скретч с ардуйней даже сопрягали. S4A вроде назывался проект.

      Спойлер
      Тот же «public static void» — вот как это сходу объяснить ребёнку, не уходя в синтаксис и архитектуру компьютера?

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

      • Gryphon88
        /#18815891

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

    • igor_suhorukov
      /#18823269

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

      • Gryphon88
        /#18824097

        Это личный опыт обучения ребенка ардуине, или просто память об общении с ардуинщиками?

  15. Mabusius
    /#18815961

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

    • Mike_soft
      /#18816009

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

      это не самый плохой вариант. Были и МК-54, МК-61, и даже перфокарты для Минск-32.
      и даже (точнее, с этого начиналось)
      image

  16. RicoScrewdriver
    /#18815981

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

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

    • Mike_soft
      /#18816041 / +3

      развлечения развлечению рознь. Для меня игры и развлечения были посидеть с паяльником (постоять с напильником), например. спаять видеоигру (теннис), радиомикрофон, радиоуправление. прочитать гору книжек (в т.ч. «с формулами»). я б не сказал, что «это лишило меня детства»

    • metaboloid
      /#18817633

      Но будет ли у него воспоминания о детстве, играх и развлечениях?

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

  17. Zardos
    /#18815985

    Ничего сравнимого по удобству и простоте с Turbo C для ДОСа человечество за 30 лет к сожалению не придумало.

  18. VSeryoga
    /#18816119

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

    • metaboloid
      /#18817829

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

  19. Unforgiven
    /#18816149 / +3

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

    • metaboloid
      /#18817661

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

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

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

  20. zartarn
    /#18816187 / +1

    И никто не вспомнил про CodeCombat, а ребенку это должно быть поинтереснее, управлять конкретным персонажем :)
    Мне лично довелось потыкать и паскаль и PascalABC — там задачник прилагался, и так же классически порулить черепашкой можно было.

  21. Gokudera
    /#18816211

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

    • Mike_soft
      /#18816279 / +1

      есть и гитара, и перчатки боксерские, и кимоно — но вот интересно ему. что, запрещать, чтоль?

  22. lxsmkv
    /#18816247

    tigerjython

  23. yul
    /#18816263 / +1

    Мое имхо: учить надо на С. Либо станет отличным программистом, либо отстанет. У меня сильные сомнения по поводу scratch и подобных. Сам помню Лого со школы, но программистом я стал на клоне спектрума с BASIC, в котором, по-моему, даже циклов человеческих не было (а зачем, если есть IF и GOTO? ;). Сильно сомневаюсь, что Лого или Scratch бы мне в этом помогли, уж больно они отличаются от типичных программистских будней. У обычных пользователей даже командная строка ступор вызывает, что уж говорить о написании и отладке кода в IDE.

    • Wizard_of_light
      /#18816337

      Были в Бейсике циклы! Даже двух видов — с пред- и постусловием.

    • Gryphon88
      /#18816393 / +3

      Я люблю С, но тут как с обучением плаванию: если кинуть ребёнка в воду, то плавать он скорее всего научится, но любовь к плаванию так можно не то что не привить, а отбить.

      • yul
        /#18816829 / -1

        При написании простых учебных программ С практически не отличается от современных языков, это ведь не Ассемблер, сложности появляются с ростом. При этом всё максимально близко к железу, как оно на самом деле работает. Концепцию указателей, например, весьма полезно изучить, хоть в современных языках память управляется автоматически. Опять же, синтаксис и основные конструкции практически такие же, как в современных языках, странностей, как в Javascript немного (иначе я бы Javascript и посоветовал). Если не давать это из под палки, то нормальный ребенок вполне в состоянии в этом разобраться, а если нет — может, это просто не его.

        • Gryphon88
          /#18816883 / +1

          Я б для ребёнка (12 лет) посоветовал что-нибудь с бедным синтаксисом, динамической типизацией, без привязки к парадигме программирования и максимально далекое от железа и близкое к английскому языку: Python или Lisp. Чтобы «сел и поехал». А JS, у меня такое ощущение, 20 лет тому сделали по жёсткой накурке, и с тех пор пытаются расшифровать, что это было, и доработать напильником. Такое количество неочевидных вещей я видел только в ML, Прологе и Форте, но в этих трёх обычно понятно, зачем именно так.
          Ассемблер синтаксически проще С, но там надо знать архитектуру, чтоб грамотно тыкаться в регистры. В С мне не нравится две вещи:
          — Препроцессор — фактически язык внутри языка, и от него сложно уйти
          — Магия, завязанная на архитектуру: static/volatile/const, указатели — пусть пока компьютер побудет волшебной коробкой. Понадобится скорость — тогда доступ к памяти и освоит, вместе с векторизацией и параллельным исполнением.

    • akryukov
      /#18816885

      Мое имхо: учить надо на С

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

  24. khusamov
    /#18816323

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

    • metaboloid
      /#18817665

      Спасибо за предложение. Пишите ваши идеи в личку.

  25. saboteur_kiev
    /#18816501 / +1

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

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

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

    Дети — НЕ глупые. У них недостаточно опыта, возможно есть проблемы с мотивацией и пониманием иерархии в обществе.
    Но по соображалке в плане логики — 10 лет это уже полностью развитый человек.

  26. Stas911
    /#18816537 / +1

    Про Scratch зря — это не только мощнейшее коммюнити, но и куча книг изданных. Циклы, условия и все прочее для обучения алгоритмам там есть.

  27. Pusk1
    /#18816835 / +1

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

    • vconst
      /#18820517

      Иногда Scratch, но этого и в школе хватает
      Где такие школы, в которых с 7 лет учат программировать в Скретче?..

  28. amatoro
    /#18817187

    Хочу обратить внимание на замечательные книжки как раз для возраста 11-12 лет. Хотя я их в гораздо более зрелом возрасте тоже с удовольствием перечитал.

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

    Чарльз Петцольд – «Программирование в тональности C#» — оно конечно про C#, но очень подробно, понятно и как раз для 10-12 лет. Замечательная книжка. Такой же про Java не знаю.

    А если уж свою IDE для обучения писать, то мне очень понравилась идея thonny. Оно для python, но для начинающих там очень наглядно отображаются состояния переменных, вызываемые функции и дебагер.

    • Neikist
      /#18817903

      Эх… Чарльз Петцольд – «Код. Тайный язык информатики» книга просто гениальная. Несмотря на то что читал уже имея опыт работы полтора года — все равно стал сразу всем знакомым на почитать советовать. Вроде даже на сайте МИФ заявлено что переиздавать планируют, но пока никаких новостей((

  29. ikovrigin
    /#18817413 / +2

    Как отец двух детей 14 и 8 лет. Поделюсь опытом.
    LightBot, Scratch, Arduino суть одно и то же, инструмент который позволит показать что за сложным поведением объектов может стоять простая логика. Отличный вариант для детей младше 12-13 лет. Раньше начинать серьезно заниматься программированием наверное бессмысленно.
    Игрострой вообще любой язык.
    Игры можно писать на всем. Skratch с возможностью поделиться проектами будет отличным вариантом. Начать можно с простых видео уроков, когда ребенок просто повторяет за преподавателем. Есть уроки на youtube. Все же как показал мой опыт, сначала ребенку интересно сделать "самому" (без родителей) и похвастаться. Когда ребенок наигрался в "обезьянку" и понял что дальше повторять за кем то не интересно. У него появляется желание делать что то самому и приходит понимание что создавать объекты соединять блоки воедино он умеет, а как реализовать собственные идеи он не понимает. Тут выход родителей. Нужно показать как реализовывать свои идеи придумайте что-то свое. Поэтапно покажите как простые действия из учебника (у нас дают обзорно скретч во втором классе) превращаются в игру.
    Первый проект который я делал с дочерью была игра в выбивного.
    Как заставить мячик летать по экрану и отталкиваться?
    Как заставить кота на экране бегать в зависимости от нажимаемых кнопок?
    Как проверить что мяч столкнулся с котом?
    Как считать сколько раз мяч попал в кота?
    Добавим злодея краба который будет кидать новые мячи каждые 10 секунд.
    У кошки девять жизней. Конец игры если они закончились. Грузим в сеть. Звоним бабушка дедушкам хвастаемся.
    https://scratch.mit.edu/projects/219603236/
    Все выше ребенок может сделать сам, а после того как он увидит целостную картину он и придет к программированию.
    Игрушки тоже бывают разные. Старший сын вместе с тем как начал программировать так же увлекался игрушками Zachtronics. SpaceChem, TIS-100. Туда же Human Resource Machine.
    После игрушек приходит время выбирать. И тут уже все зависит от интересов и способностей ребенка. Именно этот выбор и будет диктовать язык.
    Если ребенок увлекается математикой логичным продолжением будет информатика. Более серьезный алгоритмический подход. Оптимальным языком будет C/C++. Из плюсов этого выбора наличие олимпиад в том числе и международных. Наличие множества соревнований и огромное комьюнити (codeforces и подобные сайты).
    Веб. HTML CSS и конечно никуда без Javascript. В школе ребенок сможет похвастаться своим сайтом.
    Мобильные приложения под андроид будет вами любимая Java. Отличный способ "похвастаться" в школе.
    Нет плохих и хороших языков. Есть разные дети и разные интересы, а плохие программы можно писать на любом языке.
    И да нет никакой необходимости выбирать что то одно. Сын участвует в олимпиадах по информатике, заинтересовался вебом, ходил в кружок Samsung по разработке мобильных приложений увлекался ардуиной. Пробуйте все и только методом проб и ошибок вы узнаете что нужно вашему ребенку. Единственное требование на начальном этапе ребенок должен видеть что это интересно не только ему, но и вам. Только на личном опыте и собственным интересом и поддержкой вы сможете "заразить" ребенка программированием, а дальше "болезнь" начнет прогрессировать без вашего вмешательства.

    • ikovrigin
      /#18817429 / +1

      Если вашему ребенку еще нет 6-7 лет и вам кажется что программировать ему еще рано, просто попробуйте поиграть в игру "Я робот". Мы так делали с дочерью когда ей было 4-5 лет. Это основы алгоритмизации. Вы договариваетесь что вы будете выполнять дословно все приказы ребенка. Она в свою очередь должна отдавая команды выполнить какое то задание.
      Например делаем чай:


      • Возьми чашку.
      • Здесь нет чашки. (покажите растерянность)
      • Подойди к шкафу. Возьми чашку.
      • (шкаф закрыт) попытайтесь взять ударившись руками несколько раз в дверцу.
      • открой шкаф… и т.д.
        Это отличный способ провести время вместе с ребенком весело. Играть можно где угодно.

  30. Stopy
    /#18817851

    Очень нужно, с удовольствием поддержу проект!

  31. arielf
    /#18817927 / -1

    Ну, вариантов на первый язык немного: низкоуровневый — упорным будущим инженерам — С или высокоуровневый — Smalltalk (Squeak или Pharo). Причины изложены в публикации.

  32. 0x131315
    /#18818499

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

    Многие упускают, что программирование — не вещь в себе, что у него есть как корень (например книжка «Код — тайный язык информатики»), так и крона (паттерны проектирования например)

    • Mike_soft
      /#18819171 / +1

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

    • metaboloid
      /#18821781

      Примерно так у меня это и происходит в процессе подготовки цикла уроков.

  33. Dart_Zaiac
    /#18820297

    Я своего ребенка, когда он появится, буду подсаживать на LOGO (https://myrobot.ru/logo/), где и русский интерфейс и отклик вполне понятный. Написал «вперед 20, направо 90» и загнал в цикл — получил квадрат. Так и геометрию поттянуть можно.
    Графический интерфейс дает очень много преимуществ в плане интерактивности и тот факт, что через 2 цикла ты рисуешь красивый цветок черепашкой, очень сильно вдохновляет на новые произведения.
    Я так в 11 лет нарисовал черепашкой шахматную доску. Активно изучал циклы, чтобы не копировать код рисования ладей, коней, слонов, и пешек.

    • Mike_soft
      /#18820385

      хорошо, что черепашка хотя бы на восьмиугольных, а не на квадратных колесах…
      хотя даже восьмиугольные как бы намекают…
      там программирование — только «текстовое»? если да, то рекомендую (но не настаиваю) показать ребенку сначала Скрэтч. там писать гораздо меньше (а это мелким все-таки несколько затруднительно), поэтому более привлкектельно (результат достигается быстрее, усилий меньше — подкрепление лучше (и ошибок меньше, да и исправляются они проще))

  34. akkuraten
    /#18820379

    Мне нравится code-basics.ru — ничего лишнего

  35. decomeron
    /#18821963

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

    • metaboloid
      /#18822071

      Заголовок специально таким сделан. Про детей в тексте — это первая и очевидная целевая аудитория которая может заинтересоваться программированием и которой нужно многое в комплексе объяснять.

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

    • akryukov
      /#18822701

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

  36. alexdesyatnik
    /#18822031

    8 лет работаю учителем информатики и экспериментирую с подачей материала, в том числе и в плане выбора языка (изучение разных ЯП в свое время было хобби, так что выбирать есть из чего). Вот мои впечатления:

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

    В итоге для себя пришел к следующей последовательности: началка и 5-7 классы — скретч, 7-9 классы — кумир и питон для продвинутых, 10-11 классы — питон или то, что они самостоятельно начали изучать (редко, но бывает).

  37. V_Albert
    /#18823355 / +1

    В школе писали на паскале, класса примерно с 7. У меня шло все очень хорошо, еще у пары ребят — тоже. На мой взгляд, вообще все равно с чего начинать (в разумных пределах разумеется), всех, кому заходило написание кода, объединяло одно — любовь к решению логических задач. Я с раннего детства любил вот эти всякие «перевези козу, волка и капусту», «определи кто кому брат, кого как зовут, у кого дома рыбка» и все такое прочее. Когда пошли всякие японские кроссворды, а потом и судоку — с удовольствием решал все что попадется. Поэтому и программирование воспринималось исключительно с позиции «так есть задача\загадка надо логически её решить». А уж чего там приходилось писать, дело десятое. Поэтому, по моему скромному мнению, в возрасте 5-8-12 лет писать что-то вообще не особо важно, важнее научить думать алгоритмически. Далее — простенькие программы, реализующие те или иные алгоритмы (ту же козу с капустой, пусть даже в консоли просто словами), которые можно писать на чем угодно (больше склоняюсь к питону, все же более актуальный язык, и достаточно просто все). А вот когда есть понимание алгоритмов, навыки простого кодирования, можно переходить к более интересным вещам. Ставить IDE и уже делать прикладные вещи, хоть туду листы, хоть календарики, что угодно, подобных вещей в гайдах на ютубе полно