Для обучения программированию детей дошкольного и школьного возраста не существует объективных препятствий.
Основными историческими препятствиями на данный момент являются
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
Вся цепочка наследуемых языков может быть отображена при просмотре исходного кода или результата работы языкового препроцессора. Это может быть удобно, например, при проверке программ на национальном языке, наследуемом от русского языка, преподавателем информатики, недостаточно хорошо владеющим национальным языком. Кроме того, возможны варианты машинного перевода исходного текста программ с одного национального языка на другой на том же словаре.
Для каждого языка может быть несколько различных цепочек наследования, не зависящих друг от друга. Например, для русского языка возможны такие цепочки, как 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 американского английского.
Описание языка храниться в разделе 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)
qw1
06.12.2015 14:18+2Что? Учить дошкольников программированию не через Лого с черепашкой, а сразу сбросив на них структуру каталогов и XML-файлы?
Смотрите, детки, пакет
ru.abcsoft.util
сделан в России, потому что ru, аsun.misc.Unsafe
является плохим примером, даже имя пакета не начинается с национального домена, не пользуйтесь им без необходимости.palexisru
06.12.2015 15:17-1Вы неверно поняли: библиотека языков предлагается для преподавателей информатики.
«Тебе, Миша, поставим на компьютере родной язык. Тебе, Михасик, тоже поставим родной язык. А тебе, Микаэль, поставим твой родной язык. А теперь, дети, пишем Hello, world!»
Ну а с неодобрением позиции w3.org согласен.lair
06.12.2015 16:42+2А теперь, дети, пишем Hello, world!»
… и на последней фразе все зависли. Равно как и на невозможности детей сравнить результаты.palexisru
08.12.2015 12:49Равно как и на невозможности детей сравнить результаты.
Поскольку у всех языков общий предок draft, существует путь для перевода ключевых слов на любой из языков.
Сохранить как с указанием языка, и пускай сверяют со своим :)lair
08.12.2015 12:51Сохранить как с указанием языка, и пускай сверяют со своим
Сверять инструкции на непонятном языке? Тогда, извините, весь смысл пропадает.palexisru
08.12.2015 13:50Смысл в том, что человек может думать на родном языке, и перевести на родной язык любую программу.
Сравните восприятие слов «интеграл» и «дифференциал» англичанином и русским
Да и термин «производящая» для функции подходит больше, чем «производная» :)lair
08.12.2015 14:15Смысл в том, что человек может думать на родном языке, и перевести на родной язык любую программу.
Именно. Зачем для этого придумывать какие-то национальные языки?
Другое дело, что «перевести программу на родной язык» — это заведомо ошибочная постановка задачи, точно так же как ошибочно думать на одном языке, а потом переводить это вслух на другой.
Сравните восприятие слов «интеграл» и «дифференциал» англичанином и русским
А вы много знаете про то, как именно их воспринимает англичанин?palexisru
08.12.2015 14:51«перевести программу на родной язык» — это заведомо ошибочная постановка задачи
Думаю, с Вами не согласятся академик А.П.Ершов и авторы систем:
https://ru.wikipedia.org/wiki/Учебный_алгоритмический_язык
https://ru.wikipedia.org/wiki/КуМир_(система_программирования)
А вы много знаете про то, как именно их воспринимает англичанин?
Думаю, по русски это будет «объединенное» и «отличающее»
Тогда и «дифференциальное уравнение» ::= «уравнение различности»lair
08.12.2015 14:59+1Думаю, с Вами не согласятся академик А.П.Ершов и авторы систем:
Если они хотят в чем-то со мной не согласиться — пусть придут и озвучат свое несогласие вместе с его причинами.
Думаю, по русски это будет «объединенное» и «отличающее»
Ну то есть вы не знаете. Что, впрочем, предсказуемо.palexisru
09.12.2015 02:28Нашел других несогласных:)
http://habrahabr.ru/company/ua-hosting/blog/272617/ — Научиться программировать сложнее, чем кажется
Например, Иветт Купер, представляющая интересы высшего эшелона лейбористской партии, в своем интервью для The Guardian прокомментировала сложившуюся ситуацию следующим образом:
«Сыновья и дочери шахтеров должны изучать программирование. Поскольку всемирная паутина создана во многом благодаря изобретательности лучших умов британского народа, у нас есть огромные преимущества. Кроме того, мы свободно владеем английским, но что наша нация делает для закрепления свои позиций в центре новой технологической революции?qw1
09.12.2015 03:20Если бы Купер была согласна с вами, если бы каждый народ писал код на национальном языке, у неё не было бы оснований считать, что англичане в выигрышной позиции.
Я понял её высказывание так, что программисты должны писать и читать на английском языке.
lair
09.12.2015 11:06Нашел других несогласных
Несогласных с чем?
Научиться программировать сложнее, чем кажется
Кому кажется?
(ну и да, комментировать само высказывание смысла не вижу, оно очевидно популистское)palexisru
09.12.2015 12:37Несогласных с чем?
Не согласных с тезисом «если бежать за чужим хвостом, то можешь оказаться впереди». Для того, чтобы обогнать, нужно искать путь, наиболее удобный для тебя. Или способ бега.
Если кто-то нашел способ придумать правила, по которым он всегда будет в выигрыше, нет смысла играть только по этим правилам. Вместо дзюдо можно предложить самбо.
Риска больше, но появляется возможность выиграть. Надеюсь, Вам знакома история ЕС ЭВМ.lair
09.12.2015 13:13Не согласных с тезисом «если бежать за чужим хвостом, то можешь оказаться впереди».
А откуда взялся такой тезис, что к нему надо искать несогласных? Я вот его точно невысказывал.
чтобы обогнать
… и откуда взялась задача «обогнать»? Речь, вроде бы, шла об обучении, нет?palexisru
09.12.2015 22:27и откуда взялась задача
Я пытался описать причинно-следственные связи, и не знаю, откуда взялась задача.
А речь, действительно, об обучении в рамках существующих школьных предметов.
Среди которых присутствуют родной язык и информатика.lair
09.12.2015 23:42не знаю, откуда взялась задача.
Ну вот и не пытайтесь ее решать.
Среди которых присутствуют родной язык и информатика.
… и это два несвязанных друг с другом предмета. Более того, как ни странно, информатика — это совсем не то же самое, что программирование, и изучать программирование в рамках информатики не обязательно.
qw1
06.12.2015 21:21Вы неверно поняли: библиотека языков предлагается для преподавателей информатики.
Если вы преподаёте, у вашего программного пакета будет один пользователь.
В противном случае сомневаюсь, что кто-то ещё сможет разобраться, проникнуться идеей языка PL/2 и подходом к локализации.
Мало понять. Чтобы начать пользоваться, нужно пробить бюрократию, утвердить новый учебный план.
lair
Так существуют или нет?
Какую задачу вы решаете?
Программы пишут на языке программирования.
palexisru
> Так существуют или нет?
Для обучения программированию, например, в KODU — нет
Для обучения на английском — языковой барьер
> Какую задачу вы решаете?
Разработка языка программирования PL/2 http://habrahabr.ru/post/219419/
> Программы пишут на языке программирования
Пока — да
С появлением нейроинтерфейса и экспертных систем по выбору и настройке шаблонов ситуация будет меняться
lair
Так не надо учить «на английском», учите на языке программирования.
BTW, английский нынче начинают учить очень рано, и применение языка программирования, основанного на английском, на самом деле, может быть полезно.
Это не задача, это уже способ решения. А какую задачу вы решаете?
Не будет. Программирование все равно будет происходить на языке программирования, даже если тот будет приближаться к естественному.
palexisru
экспериментирую с языком программирования, стеком парсеров и методами описания человеческой деятельности
правда, сейчас отвлекся на применении нейросетей к естественному языку
сын проходит английский, дочь — немецкий, свояк учил французский
lair
Это не задача.
Если при этом дочь не учит английский, я ей сочувствую.
palexisru
Интересно, когда Вы будете завидовать моей дочери, у которой 2 золотых республиканских медали (она просила упомянуть, что еще 1 серебряная и 1 бронзовая) и кубок лучшего защитника республики по мини-футболу.
Я не знаю, как вывести Вас из цикла в условиях заданным Вам ограничений.
Насколько я помню, в школе задача — найти. Я сейчас пользуюсь несколько другим подходом:
цель жизни — воспитать детей так, чтобы они сумели воспитать своих детей
учиться и искать, любить и побеждать
Ну а на работе задача — чтобы сотрудниками моей группы, как первой линией поддержки, были довольны адекватные сотрудники нашего филиала и большинство сотрудников второй линии поддержки — в кратковременной и долговременной перспективе. С долговременной перспективе самое сложное — приходится оценивать вторую и третью производные развития технологий.
lair
Никогда.
Спасибо, это не здесь.
И к этому то, что вы описываете в посте, тоже не имеет отношения.
Возникает ощущение, что собственно задачи-то у вас и нет, просто «а вот было бы прикольно, только не знаю, зачем».
palexisru
На «а вдруг прикалывает» построена вся школьная и университетская программа обучения :)
lair
Ну нет. Образовательные программы имеют вполне конкретные цели и задачи, никакого «вдруг прикольно».
palexisru
Похоже, у нас с Вами психологическая несовместимость :)
Вы считаете, что все детерминировано, я — что хаос необходим для развития.
Карабис: все пользователи делятся на 2 группы. У одних авария жесткого диска уже была, другим она ещё предстоит :)
lair
Ну во-первых, я так не считаю. А во-вторых, это не имеет значения — на то, как составляются образовательные программы, это не влияет.
qw1
… а третьи настроили регулярные автоматические бекапы и спят спокойно ))