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

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

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

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

Небольшое пояснение, для дальнейшего изложения. Я профессионально занимаюсь разработкой на 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
    26.06.2018 11:04
    +1

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


    1. staticlab
      26.06.2018 11:23

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

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


      1. Neikist
        26.06.2018 11:52

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


      1. wormball
        26.06.2018 11:54

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


      1. domix32
        26.06.2018 16:34

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


      1. JekaMas
        26.06.2018 21:57

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


    1. wormball
      26.06.2018 11:48

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


      1. valery1707
        26.06.2018 15:53
        +1

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


        1. domix32
          26.06.2018 16:37
          +2

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


        1. wormball
          26.06.2018 16:46

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

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


        1. Meklon
          27.06.2018 22:55

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


    1. vchslv13
      26.06.2018 12:03
      +1

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

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

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


      1. defaultvoice
        26.06.2018 16:11

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


        1. Loturn
          26.06.2018 17:44
          +2

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


          1. Neikist
            26.06.2018 17:45
            +1

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


    1. rstepanov
      26.06.2018 15:08
      +5

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


      1. Kanut79
        26.06.2018 15:31
        +1

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


        1. rstepanov
          26.06.2018 15:37

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


          1. Kanut79
            26.06.2018 15:48
            +1

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


            1. wormball
              26.06.2018 15:52

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

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


              1. Mike_soft
                26.06.2018 16:05

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


                1. wormball
                  26.06.2018 16:39
                  +1

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

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


              1. Kanut79
                26.06.2018 16:16
                -2

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


                1. wormball
                  26.06.2018 16:28
                  +3

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

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


                  1. Kanut79
                    26.06.2018 16:34

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


                    1. wormball
                      26.06.2018 16:39

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

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


                      1. Kanut79
                        26.06.2018 16:44

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


                      1. rstepanov
                        26.06.2018 16:46
                        +1

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


                        1. Meklon
                          27.06.2018 23:01
                          +1

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


                          1. JC_IIB
                            27.06.2018 23:25
                            +1

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


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


                            1. 0xd34df00d
                              28.06.2018 00:54

                              Одобряю такой поворот.


                              1. Meklon
                                28.06.2018 06:30

                                Восторг же)


                            1. Meklon
                              28.06.2018 08:14

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


                              1. JC_IIB
                                28.06.2018 10:10

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


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

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


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


                                1. Meklon
                                  28.06.2018 10:28

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

                                  github.com/meklon/morphostain


                                  1. JC_IIB
                                    28.06.2018 10:44

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


                                    1. Meklon
                                      28.06.2018 11:21

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


                              1. Gryphon88
                                28.06.2018 12:47

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


                                1. Kanut79
                                  28.06.2018 13:05

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

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

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


                                  1. Gryphon88
                                    28.06.2018 15:01

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


                                    1. Kanut79
                                      28.06.2018 15:52

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

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

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

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

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


                                1. Meklon
                                  28.06.2018 13:55

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


                                1. 0xd34df00d
                                  28.06.2018 16:24

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


                              1. vconst
                                28.06.2018 13:02

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

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

                                :)


                                1. JC_IIB
                                  28.06.2018 13:04

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


                                  1. Kanut79
                                    28.06.2018 13:07

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


                                    1. JC_IIB
                                      28.06.2018 14:15

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


                                      1. Kanut79
                                        28.06.2018 14:24

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

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


                                        1. 0xd34df00d
                                          28.06.2018 16:36

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


                                          1. Kanut79
                                            28.06.2018 16:57

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


                                            1. JC_IIB
                                              28.06.2018 17:00

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


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


                                              1. Kanut79
                                                28.06.2018 17:02

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

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


                                                1. JC_IIB
                                                  28.06.2018 17:10

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


                                                  1. Kanut79
                                                    28.06.2018 17:14

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

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

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

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


                                                    1. JC_IIB
                                                      28.06.2018 17:23

                                                      розетка


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

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


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


                                                      1. Kanut79
                                                        28.06.2018 17:26

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

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

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

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


                                                      1. Mike_soft
                                                        29.06.2018 08:14

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

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


                                                        1. Kanut79
                                                          29.06.2018 09:33

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


                                                          1. Mike_soft
                                                            29.06.2018 09:39

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


                                                            1. Kanut79
                                                              29.06.2018 09:47

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


                                                              1. Mike_soft
                                                                29.06.2018 10:18

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


                                              1. Gryphon88
                                                28.06.2018 17:05

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


                                      1. Meklon
                                        28.06.2018 14:24

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


                                        1. JC_IIB
                                          28.06.2018 14:30

                                          А как же...


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

                                          CurrentTempBoiler


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


                                          1. Meklon
                                            28.06.2018 14:40

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


                                            1. JC_IIB
                                              28.06.2018 14:49

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


                                  1. vconst
                                    28.06.2018 13:13

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


              1. peresada
                26.06.2018 20:28

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


                1. Mike_soft
                  28.06.2018 06:51

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


              1. vconst
                27.06.2018 16:05

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


                1. staticlab
                  27.06.2018 17:02

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


                  1. vconst
                    27.06.2018 17:04

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


                    1. paranoya_prod
                      27.06.2018 17:49

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


                      1. staticlab
                        27.06.2018 17:53

                        скорее, GOSUB


                        1. paranoya_prod
                          27.06.2018 17:59

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


                          1. vconst
                            27.06.2018 18:07

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


                          1. staticlab
                            27.06.2018 18:07

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


                      1. JC_IIB
                        27.06.2018 17:53

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

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


                      1. vconst
                        27.06.2018 17:55

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


                1. ru_vlad
                  27.06.2018 19:10

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

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


                  1. vconst
                    27.06.2018 19:22

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


                    1. ru_vlad
                      27.06.2018 19:35

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

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


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


            1. 0xd34df00d
              26.06.2018 17:05
              +1

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

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


              1. Kanut79
                26.06.2018 17:17

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

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

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


                1. 0xd34df00d
                  26.06.2018 17:25

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

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

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

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

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

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

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

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


                  1. Kanut79
                    27.06.2018 10:38

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

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


      1. Lexm
        26.06.2018 17:43

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


      1. selenite
        26.06.2018 17:44

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


        1. rstepanov
          27.06.2018 16:15

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


      1. vconst
        27.06.2018 16:02
        +1

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


    1. Fedcomp
      26.06.2018 17:11
      +2

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


    1. aFanOfSwift
      27.06.2018 11:13

      «Swift Playgrounds»

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


  1. kamagan
    26.06.2018 11:21
    +2

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


    1. snuk182
      26.06.2018 12:18

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


      1. Fedcomp
        26.06.2018 17:18

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


  1. rrrrex
    26.06.2018 11:49
    +1

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


    1. Neikist
      26.06.2018 11:56

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


      1. 0xd34df00d
        26.06.2018 17:20

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

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


      1. Fedcomp
        26.06.2018 17:24

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


    1. Mike_soft
      26.06.2018 12:29
      +3

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


    1. metaboloid Автор
      26.06.2018 22:05

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

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


  1. paranoya_prod
    26.06.2018 11:53

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


    1. wormball
      26.06.2018 12:14

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

      : 2 3 ;

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

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


      1. paranoya_prod
        26.06.2018 12:37

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


        1. wormball
          26.06.2018 16:52
          +1

          Вот книжка-то!

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

          Оказывается, никаких двоек деф не заколдовывал. И вообще никаких DEF там нет.


    1. vchslv13
      26.06.2018 12:16
      +2

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

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

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


      1. akryukov
        26.06.2018 13:31

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

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


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


        1. vchslv13
          26.06.2018 14:50

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

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


      1. metaboloid Автор
        26.06.2018 22:10

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

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

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

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


        1. Kanut79
          27.06.2018 10:51

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

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


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


          1. Kanut79
            27.06.2018 16:54

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

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


            1. JC_IIB
              27.06.2018 17:01

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


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


              1. Kanut79
                27.06.2018 17:54

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


                1. JC_IIB
                  27.06.2018 21:38

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

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


            1. fori1ton
              27.06.2018 17:59
              +1

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

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

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

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

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

              s = input()

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


              1. 0xd34df00d
                28.06.2018 01:00

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

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

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


                1. fori1ton
                  28.06.2018 09:30

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

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

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

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


                  1. Meklon
                    28.06.2018 09:58

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


            1. akryukov
              27.06.2018 18:10

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

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


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

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


              1. Kanut79
                27.06.2018 21:29

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

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


                1. metaboloid Автор
                  27.06.2018 21:39

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


                1. akryukov
                  27.06.2018 22:20

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

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


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


                  1. Kanut79
                    28.06.2018 10:19

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

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


          1. metaboloid Автор
            27.06.2018 21:37

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

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


          1. Mike_soft
            28.06.2018 06:56

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


    1. Mike_soft
      26.06.2018 12:26

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


    1. mistergrim
      26.06.2018 14:01

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


  1. Mike_soft
    26.06.2018 12:24

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


    1. vassabi
      26.06.2018 12:56
      +1

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


      1. Mike_soft
        26.06.2018 13:20

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


    1. Neikist
      26.06.2018 13:12
      +2

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


      1. Mike_soft
        26.06.2018 13:30

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


        1. Neikist
          26.06.2018 13:40
          +1

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


          1. Mike_soft
            26.06.2018 14:07

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


            1. Neikist
              26.06.2018 14:32
              +1

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


              1. Mike_soft
                26.06.2018 15:00

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


                1. Neikist
                  26.06.2018 16:11

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


                  1. 0xd34df00d
                    26.06.2018 17:30

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

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

                    А зря.


                    1. Neikist
                      26.06.2018 17:50

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

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


                      1. 0xd34df00d
                        26.06.2018 19:08

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


  1. Stalker_RED
    26.06.2018 12:35
    +5

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


    1. mapron
      26.06.2018 19:15
      +1

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


  1. EndUser
    26.06.2018 12:46
    +2

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


    1. selivanov_pavel
      26.06.2018 14:35
      +1

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

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


      1. Mike_soft
        26.06.2018 15:02
        +3

        ну, может эту фразу слон писал… или ладья…


        1. wormball
          26.06.2018 16:57
          +1

      1. EndUser
        26.06.2018 15:26
        +1

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

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

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


        1. Mike_soft
          26.06.2018 15:33

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


          1. 0xd34df00d
            26.06.2018 17:32

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


  1. Akon32
    26.06.2018 12:47
    +1

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


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


    1. staticlab
      26.06.2018 14:22
      +4

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


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


      1. akryukov
        26.06.2018 14:32
        +1

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

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


    1. metaboloid Автор
      26.06.2018 22:23

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

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

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

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

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


      1. ru_vlad
        27.06.2018 01:01

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


  1. arestenkos
    26.06.2018 12:53
    +1

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


    1. metaboloid Автор
      26.06.2018 22:25

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


  1. Barrya42
    26.06.2018 12:53

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


  1. Emulyator
    26.06.2018 12:55
    +1

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


    1. Mike_soft
      26.06.2018 13:12

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


    1. Neikist
      26.06.2018 13:14

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


      1. Mike_soft
        26.06.2018 13:33

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


        1. Neikist
          26.06.2018 13:42

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


          1. Mike_soft
            26.06.2018 14:12

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


            1. Neikist
              26.06.2018 14:41

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


              1. Mike_soft
                26.06.2018 15:06

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


        1. 0xd34df00d
          26.06.2018 17:34

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

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


      1. Emulyator
        26.06.2018 14:43

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


        1. Neikist
          26.06.2018 14:53

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


          1. Mike_soft
            26.06.2018 15:07

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


            1. Neikist
              26.06.2018 16:09

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


            1. 0xd34df00d
              26.06.2018 17:35

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

              Deep reinforcement learning прямо.


    1. metaboloid Автор
      26.06.2018 22:28

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


  1. akryukov
    26.06.2018 13:18

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


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


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


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


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


    1. Mike_soft
      26.06.2018 13:37

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


    1. metaboloid Автор
      26.06.2018 23:02

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

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

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

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

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

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

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

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


      1. akryukov
        27.06.2018 09:47

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

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


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

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

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

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


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

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


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


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

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


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

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


        1. metaboloid Автор
          27.06.2018 21:46

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

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


          1. akryukov
            27.06.2018 22:10

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


            1. metaboloid Автор
              27.06.2018 22:32

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

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


              1. Kanut79
                28.06.2018 10:21
                +1

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


          1. 0xd34df00d
            28.06.2018 01:01

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


      1. igor_suhorukov
        28.06.2018 10:38

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


  1. myxo
    26.06.2018 13:58
    +1

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


    1. ru_vlad
      26.06.2018 18:58

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


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


  1. Gryphon88
    26.06.2018 14:22

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

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


    1. Mike_soft
      26.06.2018 14:28

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

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

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


      1. Gryphon88
        26.06.2018 14:48

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


    1. igor_suhorukov
      28.06.2018 10:41

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


      1. Gryphon88
        28.06.2018 12:51

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


        1. igor_suhorukov
          28.06.2018 19:17

          Опыта обучения детей не было.


  1. Mabusius
    26.06.2018 15:01

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


    1. Mike_soft
      26.06.2018 15:11

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

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


  1. RicoScrewdriver
    26.06.2018 15:07

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

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


    1. Mike_soft
      26.06.2018 15:16
      +3

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


    1. metaboloid Автор
      26.06.2018 22:34

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

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


  1. Zardos
    26.06.2018 15:07

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


  1. VSeryoga
    26.06.2018 15:37

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


    1. metaboloid Автор
      27.06.2018 00:01

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


  1. Unforgiven
    26.06.2018 15:43
    +3

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


    1. metaboloid Автор
      26.06.2018 22:43

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

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

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


  1. zartarn
    26.06.2018 15:49
    +1

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


  1. Gokudera
    26.06.2018 15:54

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


    1. Mike_soft
      26.06.2018 16:06
      +1

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


  1. lxsmkv
    26.06.2018 16:01

    tigerjython


    1. metaboloid Автор
      27.06.2018 00:05

      Интересненько. Спасибо.


  1. yul
    26.06.2018 16:05
    +1

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


    1. Wizard_of_light
      26.06.2018 16:21

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


    1. Gryphon88
      26.06.2018 16:36
      +3

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


      1. yul
        26.06.2018 18:09
        -1

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


        1. Gryphon88
          26.06.2018 18:23
          +1

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


    1. akryukov
      26.06.2018 18:23

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

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


  1. khusamov
    26.06.2018 16:15

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


    1. metaboloid Автор
      26.06.2018 22:45

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


  1. saboteur_kiev
    26.06.2018 17:05
    +1

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

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

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

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


  1. Stas911
    26.06.2018 17:10
    +1

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


  1. Pusk1
    26.06.2018 18:11
    +1

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


    1. vconst
      27.06.2018 16:26

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


  1. amatoro
    26.06.2018 19:49

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

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

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

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


    1. Neikist
      27.06.2018 00:35

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


  1. ikovrigin
    26.06.2018 21:21
    +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 по разработке мобильных приложений увлекался ардуиной. Пробуйте все и только методом проб и ошибок вы узнаете что нужно вашему ребенку. Единственное требование на начальном этапе ребенок должен видеть что это интересно не только ему, но и вам. Только на личном опыте и собственным интересом и поддержкой вы сможете "заразить" ребенка программированием, а дальше "болезнь" начнет прогрессировать без вашего вмешательства.


    1. ikovrigin
      26.06.2018 21:29
      +1

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


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


  1. Stopy
    27.06.2018 00:08

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


  1. arielf
    27.06.2018 00:54
    -1

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


  1. 0x131315
    27.06.2018 09:33

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

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


    1. Mike_soft
      27.06.2018 11:58
      +1

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


    1. metaboloid Автор
      27.06.2018 21:54

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


  1. Dart_Zaiac
    27.06.2018 15:46

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


    1. Mike_soft
      27.06.2018 15:59

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


  1. akkuraten
    27.06.2018 15:59

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


  1. decomeron
    27.06.2018 23:12

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


    1. metaboloid Автор
      27.06.2018 23:42

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

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


    1. akryukov
      28.06.2018 08:05

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


  1. alexdesyatnik
    27.06.2018 23:35

    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 классы — питон или то, что они самостоятельно начали изучать (редко, но бывает).


  1. V_Albert
    28.06.2018 10:55
    +1

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