Доброго времени чтения, уважаемые участники habrahabr.ru.

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

Основными историческими препятствиями на данный момент являются
1. использование в качестве операторов и для сообщений об ошибках только символов кодировки ANSI
2. недостаточно выстроенная идеология использования национальных языков

Например, для России может быть полезна следующая иерархия: английский -> русский -> татарский

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

Для развития программирования на национальных языках (например, языках народов России, Евразии, или всех, имеющихся на планете, используемых для письменности, или использующих непечатные слова) предлагается система перевода, использующая национальные символы и словари. Система включает структуру каталогов и подход, раскрывающий написание программ на родном языке, и позволяющем обеспечить передачу исходного текста программ с национального на ANSI и обратно — на любой другой язык, для которого существует описание. Таким образом, описание алгоритмов формируется на любом языке, и использует иерархию языков.

Основным базовым видом (всеобщим предком) является язык draft, включающий только слова на английском языке и символ подчеркивания, пробелы заменяются подчеркиванием. Вместо других символов ANSI используется их словесное описание: dot, comma и т.п. Язык draft используется в качестве универсальной основы для перевода слов и выражений. Все строки во включающей программе (трансляторе) должны быть представлены в этой кодировке.

Следующим видом языка, используемым для сообщений, является ansi. Он является предком для языков, использующих алфавит, и может включать любые символы из диапазона 1-127 таблицы кодировки. Логично держать в нем общеупотребительные выражения английского языка. Строчные константы для этого и других уровней, отличающихся от draft могут включать любые символы в кодировках, поддерживаемых языком разметки XML — OEM, utf8, utf16, utf32. Для каждого языка может указываться направление письменности:
— слева направо сверху вниз (английский, русский и т.п. — по умолчанию)
— справа налево сверху вниз (арабский, иврит)
— сверху вниз слева направо (японский, китайский)

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

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

culture/af — Африка — African cultures
culture/an — Антарктика — универсальные прототипы — Universal Antarctical cultures
culture/au — Австралия — Australian cultures
culture/ea — Евразийские — Evrasian cultures
culture/na — Североамериканские — North American cultures
culture/sa — Южноамериканские — Sourth American cultures

Кодировки draft и ansi вынесены в материк an — Антарктида для обозначения отличий от разговорных диалектов английского Великобритании, США и других стран:
culture/an/draft
culture/an/ansi

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

culture/ea/en/common.xml


Наследование языков
Для каждого языка, кроме draft, указывается не более одного наследуемого языка. Язык draft не наследует ни от какого языка. Язык, от которого наследуется данный язык, указывается в файле описания словаря lang.xml.

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

Для каждого языка может быть несколько различных цепочек наследования, не зависящих друг от друга. Например, для русского языка возможны такие цепочки, как ansi -> ru или draft -> ru;
они будут содержаться в каталогах:

culture/ea/rus/ru_ansi
culture/ea/rus/ru_draft

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

culture/ea/rus/tatar_ru

где:
culture — корневой каталог поддержки интернационализации
ea — Евразия
rus — Россия
tatar_ru — словарь татарского языка с переводом с русского языка

Аналогично можно на основе языка culture/ea/eng/en_ansi создать диалект culture/na/usa/en_en американского английского.


Структура файлов
Точкой входа в описание словаря является файл lang.xml, который содержится в каждом каталоге. Файл содержит ссылку на наследуемый язык, имена файлов общих словарей, подключаемых по умолчанию, а также может содержать описание других особенностей, например — кодировку словарей, размещенных в текстовых OEM файлах.

Описание языка храниться в разделе culture файла lang.xml

<culture>
    <language>
        название языка
    </language>

    <codepage>
        название кодовой страницы по умолчанию для текстовых словарей
    </codepage>

    <from>
        каталог наследуемого языка от каталога culture
    </from>

    <include>
        <file codepage="имя кодовой страницы включаемого файла">
            имя файла в этом же каталоге с типом xml или txt
        </file>

        <file>
            имя файла в этом же каталоге с типом xml или txt
        </file>
    </include>

</culture>


Раздел from для языка draft остается пустым.

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

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

<include>
    <file codepage="имя кодовой страницы включаемого файла">
       имя файла в этом же каталоге с типом xml или txt
    </file>
</include>
<words>
    <word>
        <value>
           слово на языке словаря
        </value>
        <from>
            перевод на наследуемый язык
        </from>
        <tip>
            краткое описание ключевого слова на целевом национальном языке
        </tip>
    </keyword>
</words>


Включаемые по include XML файлы также могут иметь ссылки на другие файлы, что позволяет создать модульную структуру перевода. Повторные включения файлов игнорируются, при конфликте переводов (разные переводы одной и той-же фразы) предпочтение отдается первому переводу. При отсутствии перевода с одного из цепочки наследуемых языков правильным переводом считается перевод в последнем найденном языке. Для перехода от национального языка к кодировке ANSI при отсутствии слова в словаре можно использовать транслит.


В случае, если программ несколько

Для различных программ могут потребоваться различные варианты перевода. Соответственно, для каждой программы можно иметь свой словарь, который соответствует имени приложения, подключается первым, и затем подключает общие словари из того-же каталога (например, common.xml). Указанием пути к каталогу словарей, используемого языка, начального файла словаря должно заниматься приложение, например, через файл конфигурации. Работа с приведенной модульной структурой каталогов может быть реализована в виде библиотеки.

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

Ссылки:
habrahabr.ru/post/176243 — «Национальные» языки программирования
habrahabr.ru/post/136272 — Какой язык программирования должен быть первым при изучении в школе?
habrahabr.ru/post/20541 — Об интернационализации приложений
habrahabr.ru/post/165705 — Пара слов об интернационализации приложений
habrahabr.ru/company/alconost/blog/173467 — Как LinkedIn делает локализации на 19 языков за 1 ночь
habrahabr.ru/post/267501 — Локализация расширений Google Chrome — необходимо и просто

Языки программирования с ключевыми словами не на английском

в частности, интересна ссылка на www.robomind.net — среда обучения робота на английском и голландском

Комментарии (30)


  1. lair
    06.12.2015 12:16
    +2

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

    Так существуют или нет?

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

    Какую задачу вы решаете?

    Для развития программирования на национальных языках

    Программы пишут на языке программирования.


    1. palexisru
      06.12.2015 14:16
      -1

      > Так существуют или нет?

      Для обучения программированию, например, в KODU — нет

      Для обучения на английском — языковой барьер

      > Какую задачу вы решаете?

      Разработка языка программирования PL/2 http://habrahabr.ru/post/219419/

      > Программы пишут на языке программирования

      Пока — да
      С появлением нейроинтерфейса и экспертных систем по выбору и настройке шаблонов ситуация будет меняться


      1. lair
        06.12.2015 14:51
        +2

        Для обучения на английском — языковой барьер

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

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

        Разработка языка программирования PL/2

        Это не задача, это уже способ решения. А какую задачу вы решаете?

        С появлением нейроинтерфейса и экспертных систем по выбору и настройке шаблонов ситуация будет меняться

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


        1. palexisru
          06.12.2015 16:18

          > А какую задачу вы решаете?

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

          > английский нынче начинают учить очень рано

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


          1. lair
            06.12.2015 16:41
            +2

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

            Это не задача.

            сын проходит английский, дочь — немецкий

            Если при этом дочь не учит английский, я ей сочувствую.


            1. palexisru
              06.12.2015 18:23
              -1

              Если при этом дочь не учит английский, я ей сочувствую.

              Интересно, когда Вы будете завидовать моей дочери, у которой 2 золотых республиканских медали (она просила упомянуть, что еще 1 серебряная и 1 бронзовая) и кубок лучшего защитника республики по мини-футболу.

              Это не задача.

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

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


              1. lair
                06.12.2015 18:53
                +1

                Интересно, когда Вы будете завидовать моей дочери, у которой 2 золотых республиканских медали (она просила упомянуть, что еще 1 серебряная и 1 бронзовая) и кубок лучшего защитника республики по мини-футболу.

                Никогда.

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

                Спасибо, это не здесь.

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

                И к этому то, что вы описываете в посте, тоже не имеет отношения.

                Возникает ощущение, что собственно задачи-то у вас и нет, просто «а вот было бы прикольно, только не знаю, зачем».


                1. palexisru
                  07.12.2015 01:58

                  собственно задачи-то у вас и нет, просто «а вот было бы прикольно, только не знаю, зачем».
                  В целом — да. Задачи возникают внезапно, и требуют быстрого решения.
                  На «а вдруг прикалывает» построена вся школьная и университетская программа обучения :)


                  1. lair
                    07.12.2015 02:02
                    +2

                    Ну нет. Образовательные программы имеют вполне конкретные цели и задачи, никакого «вдруг прикольно».


                    1. palexisru
                      07.12.2015 04:03
                      -2

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

                      Карабис: все пользователи делятся на 2 группы. У одних авария жесткого диска уже была, другим она ещё предстоит :)


                      1. lair
                        07.12.2015 10:31
                        +1

                        Вы считаете, что все детерминировано

                        Ну во-первых, я так не считаю. А во-вторых, это не имеет значения — на то, как составляются образовательные программы, это не влияет.


                      1. qw1
                        07.12.2015 13:13

                        … а третьи настроили регулярные автоматические бекапы и спят спокойно ))


  1. qw1
    06.12.2015 14:18
    +2

    Что? Учить дошкольников программированию не через Лого с черепашкой, а сразу сбросив на них структуру каталогов и XML-файлы?

    Смотрите, детки, пакет ru.abcsoft.util сделан в России, потому что ru, а sun.misc.Unsafe является плохим примером, даже имя пакета не начинается с национального домена, не пользуйтесь им без необходимости.


    1. palexisru
      06.12.2015 15:17
      -1

      Вы неверно поняли: библиотека языков предлагается для преподавателей информатики.

      «Тебе, Миша, поставим на компьютере родной язык. Тебе, Михасик, тоже поставим родной язык. А тебе, Микаэль, поставим твой родной язык. А теперь, дети, пишем Hello, world!»

      Ну а с неодобрением позиции w3.org согласен.


      1. lair
        06.12.2015 16:42
        +2

        А теперь, дети, пишем Hello, world!»

        … и на последней фразе все зависли. Равно как и на невозможности детей сравнить результаты.


        1. qw1
          06.12.2015 21:00

          А теперь, дети, пишем <% TranslationUtil.FromEnglish("Hello, world!") %>


        1. palexisru
          08.12.2015 12:49

          Равно как и на невозможности детей сравнить результаты.

          Поскольку у всех языков общий предок draft, существует путь для перевода ключевых слов на любой из языков.

          Сохранить как с указанием языка, и пускай сверяют со своим :)


          1. lair
            08.12.2015 12:51

            Сохранить как с указанием языка, и пускай сверяют со своим

            Сверять инструкции на непонятном языке? Тогда, извините, весь смысл пропадает.


            1. palexisru
              08.12.2015 13:50

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

              Сравните восприятие слов «интеграл» и «дифференциал» англичанином и русским
              Да и термин «производящая» для функции подходит больше, чем «производная» :)


              1. lair
                08.12.2015 14:15

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

                Именно. Зачем для этого придумывать какие-то национальные языки?

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

                Сравните восприятие слов «интеграл» и «дифференциал» англичанином и русским

                А вы много знаете про то, как именно их воспринимает англичанин?


                1. palexisru
                  08.12.2015 14:51

                  «перевести программу на родной язык» — это заведомо ошибочная постановка задачи

                  Думаю, с Вами не согласятся академик А.П.Ершов и авторы систем:
                  https://ru.wikipedia.org/wiki/Учебный_алгоритмический_язык
                  https://ru.wikipedia.org/wiki/КуМир_(система_программирования)

                  А вы много знаете про то, как именно их воспринимает англичанин?

                  Думаю, по русски это будет «объединенное» и «отличающее»
                  Тогда и «дифференциальное уравнение» ::= «уравнение различности»


                  1. lair
                    08.12.2015 14:59
                    +1

                    Думаю, с Вами не согласятся академик А.П.Ершов и авторы систем:

                    Если они хотят в чем-то со мной не согласиться — пусть придут и озвучат свое несогласие вместе с его причинами.

                    Думаю, по русски это будет «объединенное» и «отличающее»

                    Ну то есть вы не знаете. Что, впрочем, предсказуемо.


                    1. palexisru
                      09.12.2015 02:28

                      Нашел других несогласных:)
                      http://habrahabr.ru/company/ua-hosting/blog/272617/ — Научиться программировать сложнее, чем кажется

                      Например, Иветт Купер, представляющая интересы высшего эшелона лейбористской партии, в своем интервью для The Guardian прокомментировала сложившуюся ситуацию следующим образом:

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


                      1. qw1
                        09.12.2015 03:20

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

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


                      1. lair
                        09.12.2015 11:06

                        Нашел других несогласных

                        Несогласных с чем?

                        Научиться программировать сложнее, чем кажется

                        Кому кажется?

                        (ну и да, комментировать само высказывание смысла не вижу, оно очевидно популистское)


                        1. palexisru
                          09.12.2015 12:37

                          Несогласных с чем?

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

                          Если кто-то нашел способ придумать правила, по которым он всегда будет в выигрыше, нет смысла играть только по этим правилам. Вместо дзюдо можно предложить самбо.

                          Риска больше, но появляется возможность выиграть. Надеюсь, Вам знакома история ЕС ЭВМ.


                          1. lair
                            09.12.2015 13:13

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

                            А откуда взялся такой тезис, что к нему надо искать несогласных? Я вот его точно невысказывал.

                            чтобы обогнать

                            … и откуда взялась задача «обогнать»? Речь, вроде бы, шла об обучении, нет?


                            1. palexisru
                              09.12.2015 22:27

                              и откуда взялась задача

                              Я пытался описать причинно-следственные связи, и не знаю, откуда взялась задача.
                              А речь, действительно, об обучении в рамках существующих школьных предметов.
                              Среди которых присутствуют родной язык и информатика.


                              1. lair
                                09.12.2015 23:42

                                не знаю, откуда взялась задача.

                                Ну вот и не пытайтесь ее решать.

                                Среди которых присутствуют родной язык и информатика.

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


      1. qw1
        06.12.2015 21:21

        Вы неверно поняли: библиотека языков предлагается для преподавателей информатики.

        Если вы преподаёте, у вашего программного пакета будет один пользователь.

        В противном случае сомневаюсь, что кто-то ещё сможет разобраться, проникнуться идеей языка PL/2 и подходом к локализации.
        Мало понять. Чтобы начать пользоваться, нужно пробить бюрократию, утвердить новый учебный план.