Semantic IDE
Всякие мысли о программировании
Учебный язык программирования
19.10.2012
|
LaptevVV |
При разработке учебного языка нужно следовать некоторым основополагающим принципам (концепциям). Концепции разработки языка программирования делятся на три группы: семантические, синтаксические и прагматические (реализационные).
Основные семантические концепции, принятые при разработке учебного языка, следующие:
— понятия учебного языка должны соответствовать понятиям промышленных императивных языков программирования;
— множество понятий должно быть минимально;
— конструкции учебного языка не должны зависеть ни от аппаратной платформы, ни от операционной системы;
— язык должен поддерживать модульность, процедурное программирование и объектно-ориентированное программирование;
— конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
— намерения программиста всегда должны указываться явно (запрет умолчаний).
В качестве примеров запрета умолчаний можно привести следующие:
— отсутствие неявных преобразований типа (кроме преобразования в арифметических выражениях целый->вещественный);
— явный параметр this, задаваемый при определении метода класса;
— явное определение класса как базового для наследования;
— явное указание наследуемых элементов класса;
— явное указание типа константы при определении.
При разработке учебного языка были приняты следующие синтаксические концепции:
— базовая лексика языка должна быть русскоязычной;
— ключевые слова должны иметь английский эквивалент;
— каждый оператор языка начинается ключевым словом;
— все операторы завершаются символом «;» – точка с запятой;
— блочные конструкции языка завершаются ключевым словом «конец».
Основу реализации интерпретатора учебного языка составляют следующие принципы:
— эффективность выполнения не слишком важна;
— загрузка и связывание модулей должны выполняться динамически;
— управление памятью осуществляет система;
Не менее важными являются концепции реализации интегрированной среды, в рамках которой осуществляется обучение программированию:
— среда должна поддерживать работу и с одномодульными, и с многомодульными программами;
— среда должна обеспечивать простой и независимый от платформы механизм накопления программных компонент;
— среда должна позволять набор кода программы и в русской, и в английской лексике;
— переключение лексики не должно приводить к повторной трансляции программы;
— изменение ключевых слов в коде должно быть невозможно;
— ошибки должны определяться в момент набора программы;
— редактор кода, с одной стороны, должен обеспечивать традиционные операции редак-тирования текста, и с другой стороны, должен оперировать конструкциями языка;
— ввод-вывод данных должен осуществляться в рамках среды без выхода в операционную систему.
И наконец, среда должна предоставлять стандартную библиотеку в виде набора модулей на учебном языке.
Основные семантические концепции, принятые при разработке учебного языка, следующие:
— понятия учебного языка должны соответствовать понятиям промышленных императивных языков программирования;
— множество понятий должно быть минимально;
— конструкции учебного языка не должны зависеть ни от аппаратной платформы, ни от операционной системы;
— язык должен поддерживать модульность, процедурное программирование и объектно-ориентированное программирование;
— конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
— намерения программиста всегда должны указываться явно (запрет умолчаний).
В качестве примеров запрета умолчаний можно привести следующие:
— отсутствие неявных преобразований типа (кроме преобразования в арифметических выражениях целый->вещественный);
— явный параметр this, задаваемый при определении метода класса;
— явное определение класса как базового для наследования;
— явное указание наследуемых элементов класса;
— явное указание типа константы при определении.
При разработке учебного языка были приняты следующие синтаксические концепции:
— базовая лексика языка должна быть русскоязычной;
— ключевые слова должны иметь английский эквивалент;
— каждый оператор языка начинается ключевым словом;
— все операторы завершаются символом «;» – точка с запятой;
— блочные конструкции языка завершаются ключевым словом «конец».
Основу реализации интерпретатора учебного языка составляют следующие принципы:
— эффективность выполнения не слишком важна;
— загрузка и связывание модулей должны выполняться динамически;
— управление памятью осуществляет система;
Не менее важными являются концепции реализации интегрированной среды, в рамках которой осуществляется обучение программированию:
— среда должна поддерживать работу и с одномодульными, и с многомодульными программами;
— среда должна обеспечивать простой и независимый от платформы механизм накопления программных компонент;
— среда должна позволять набор кода программы и в русской, и в английской лексике;
— переключение лексики не должно приводить к повторной трансляции программы;
— изменение ключевых слов в коде должно быть невозможно;
— ошибки должны определяться в момент набора программы;
— редактор кода, с одной стороны, должен обеспечивать традиционные операции редак-тирования текста, и с другой стороны, должен оперировать конструкциями языка;
— ввод-вывод данных должен осуществляться в рамках среды без выхода в операционную систему.
И наконец, среда должна предоставлять стандартную библиотеку в виде набора модулей на учебном языке.
19.10.2012 34 комментария |
> конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
SESE признано устаревшей практикой (http://programmers.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come-from)
> явное указание наследуемых элементов класса;
имеется в виду доступ к членам базового класса?
> явное указание типа константы при определении.
всмысле "константы"? Вы имели в виду литералы?
> базовая лексика языка должна быть русскоязычной;
зачем? мы же не используем русские буквы в физике, химии и математике.
> каждый оператор языка начинается ключевым словом;
"оператор" это statement? т.е. будет что-то вроде let для присваиваний, и call для вызовов функций?
> все операторы завершаются символом «;» – точка с запятой;
почему не EOL? что бы в одну строчку несколько операторов писать?
> управление памятью осуществляет система
всмысле "система"? GC или ручное?
> Основу реализации интерпретатора учебного языка составляют следующие принципы:
> переключение лексики не должно приводить к повторной трансляции программы;
это же интерпретатор, о какой трансляции речь?
>> конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
A>SESE признано устаревшей практикой (http://programmers.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come-from)
Ну и что? Они давно первокурсников учили?
>> явное указание наследуемых элементов класса;
A>имеется в виду доступ к членам базового класса?
Нет. Доступ — тоже явно, и обычными средствами: открыт-закрыт. Здесь именно явно задать, что вот это наследуется.
>> явное указание типа константы при определении.
A>всмысле "константы"? Вы имели в виду литералы?
Ну, это я из-за Виртовских языков добавил. Там константа объявляется без типа. Например, const N = 10.
В С-подобных языках тип указывается
>> базовая лексика языка должна быть русскоязычной;
A>зачем? мы же не используем русские буквы в физике, химии и математике.
За полтора месяца обучения первокурсников преподы уже отметили очень положительный момент: новички (которые программирование в первый раз увидели) сразу осваивают правильную терминологию предметной области.
Кроме того, имена переменных ученики дают осмысленные — на русском.
Да и преподы, обучающие школьников с нуля, практически все отмечают, что на родном языке с нуля обучать проще.
А на английский у нас в среде одной кнопочкой переключается. Это мы в следующем семестре начнем, когда понятия-концепции усвоят.
>> каждый оператор языка начинается ключевым словом;
A>"оператор" это statement? т.е. будет что-то вроде let для присваиваний, и call для вызовов функций?
Да. Все равно студень этого слова не набирает и ошибок не делает.
А семантику — усваивают.
>> все операторы завершаются символом «;» – точка с запятой;
A>почему не EOL? что бы в одну строчку несколько операторов писать?
Опять же — не набирают они точку с запятой ручками. А видеть — видят. Для перехода на С-подобные языки — полезно.
>> управление памятью осуществляет система
A>всмысле "система"? GC или ручное?
GC. Как в Java, C#, Component Pascal, Pithon и т.д.
>> Основу реализации интерпретатора учебного языка составляют следующие принципы:
>> переключение лексики не должно приводить к повторной трансляции программы;
A>это же интерпретатор, о какой трансляции речь?
Именно. У нас вообще нет этапов лексического и синтаксического анализа.
Редактор сразу строит прогу во внутреннем представлении. И этот дерево — вход интерпретатора.
Я просто зафиксировал концепцию этой фразой.
LVV>Кроме того, имена переменных ученики дают осмысленные — на русском.
LVV>Да и преподы, обучающие школьников с нуля, практически все отмечают, что на родном языке с нуля обучать проще.
LVV>А на английский у нас в среде одной кнопочкой переключается. Это мы в следующем семестре начнем, когда понятия-концепции усвоят.
Интересно, осмысленные имена переменных тоже переключаются?
Программы же получаются только для личного пользования. Они на StackOverflow и то не смогут помощи попросить.
DR>Программы же получаются только для личного пользования. Они на StackOverflow и то не смогут помощи попросить.
вот уж чего не надо)
DR>Здравствуйте, LaptevVV, Вы писали:
LVV>>Кроме того, имена переменных ученики дают осмысленные — на русском.
LVV>>Да и преподы, обучающие школьников с нуля, практически все отмечают, что на родном языке с нуля обучать проще.
LVV>>А на английский у нас в среде одной кнопочкой переключается. Это мы в следующем семестре начнем, когда понятия-концепции усвоят.
DR>Интересно, осмысленные имена переменных тоже переключаются?
DR>Программы же получаются только для личного пользования. Они на StackOverflow и то не смогут помощи попросить.
Вы забываете все время, что народ учит "таблицу умножения"...
StackOverflow у нас просто нет...
LVV>Вы забываете все время, что народ учит "таблицу умножения"...
LVV>StackOverflow у нас просто нет...
В универе у нас был преподаватель математики, рассказывал, что когда преподавал в школе (практика проходила там), учил не зубрить таблицу умножения, а представлять образно умножение чисел. Почему я это запомнил? Да потому, что именно так, образно умножаю числа в уме, но остальные в аудитории были в недоумении "как так?", он объяснил это дело на отрезках. Но, что поделаешь, когда таблица уже зазубрена? Не исправить уже. После он рассказал, что его методы обучения школа восприняла "в штыки", и его практически выжили оттуда. Он пытался воспитать гениев, а школе тупо требовалось выполнить программу.
PS. Вообще не могу, как мне повезло с преподавателями!
LVV>Вы забываете все время, что народ учит "таблицу умножения"...
Забыл самое главное написать человек, который первым придумал как умножать числа, стопудово не учил таблицу умножения.
B>Здравствуйте, LaptevVV, Вы писали:
LVV>>Вы забываете все время, что народ учит "таблицу умножения"...
B>Забыл самое главное написать человек, который первым придумал как умножать числа, стопудово не учил таблицу умножения.
ЕЕ еще не было... Она появилась ПОСЛЕ него. Но раз уж она появилась — ее надо знать.
И не сравнивайте гения и студента 1 курса...
LVV>Здравствуйте, boot, Вы писали:
B>>Здравствуйте, LaptevVV, Вы писали:
LVV>>>Вы забываете все время, что народ учит "таблицу умножения"...
B>>Забыл самое главное написать человек, который первым придумал как умножать числа, стопудово не учил таблицу умножения.
LVV>ЕЕ еще не было... Она появилась ПОСЛЕ него. Но раз уж она появилась — ее надо знать.
А вот преподаватель тот считал иначе, что даже ее надо _понимать_, и я с ним согласен. Только он посвятил этому жизнь, а я только мнение.
LVV>И не сравнивайте гения и студента 1 курса...
Понимаю, что сырье Вам попадает совсем "сырое", и направить его в другое русло проблемно. Программист еще как-то может выбирать с кем ему работать, а преподаватель увы.
>> конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
A>SESE признано устаревшей практикой (http://programmers.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come-from)
Кем признано, левым программистом со StackOverflow?
Вопрос неплохо освещен у Макконнелла. Мягко говоря, все неоднозначно. Можно дров наломать и так, и так. Лично я — за один вход и один выход.
>>> конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
A>>SESE признано устаревшей практикой (http://programmers.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come-from)
ARK>Кем признано, левым программистом со StackOverflow?
угу, программистом с немалым количеством репы на SO и еще несколькими сотнями программистов которые за это проголосовали.
ARK>Лично я — за один вход и один выход.
а вот лично Вас я не знаю.
A>Здравствуйте, AlexRK, Вы писали:
>>>> конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
A>>>SESE признано устаревшей практикой (http://programmers.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come-from)
ARK>>Кем признано, левым программистом со StackOverflow?
A>угу, программистом с немалым количеством репы на SO и еще несколькими сотнями программистов которые за это проголосовали.
ОК. Это ближе к истине. А то слишком громко звучит "SESE признано устаревшей практикой". Можно подумать, что так и есть.
ARK>>Лично я — за один вход и один выход.
A>а вот лично Вас я не знаю.
Меня знать и не требуется, я не выдвигаю претендующих на истину тезисов.
LVV>В качестве примеров запрета умолчаний можно привести следующие:
LVV>- явный параметр this, задаваемый при определении метода класса;
Следует ли это понимать, как: обращение к полям будет через this?
LVV>При разработке учебного языка были приняты следующие синтаксические концепции:
LVV>- каждый оператор языка начинается ключевым словом;
LVV>- все операторы завершаются символом «;» – точка с запятой;
Вероятно, "составной" оператор? Довольно странно, например оператор разыменования начинать ключевым словом.
LVV>Основу реализации интерпретатора учебного языка составляют следующие принципы:
LVV>- загрузка и связывание модулей должны выполняться динамически;
Значит ли это невозможность самостоятельной (в ручном режиме) загрузки и выгрузки модулей?
LVV>- управление памятью осуществляет система;
Почему принято именно такое решение?
Значит ли это, что в классах не будет деструкторов?
LVV>Не менее важными являются концепции реализации интегрированной среды, в рамках которой осуществляется обучение программированию:
LVV>- ошибки должны определяться в момент набора программы;
Вероятно, синтаксические?
LVV>- ввод-вывод данных должен осуществляться в рамках среды без выхода в операционную систему.
Значит ли это, что будет невозможно обратиться к функциям операционной системы?
Для всех таких примитивов ОС, как файлы, сокеты, пайпы, mmf, среда будет предоставлять собственные "обёртки", которые по умолчанию будут доступны в любом модуле?
LVV>И наконец, среда должна предоставлять стандартную библиотеку в виде набора модулей на учебном языке.
Что в неё будет входить?
Учитывая предыдущее, логично предположить, что стандартные модули будет реализовывать АТД.
Ф>Здравствуйте, LaptevVV, Вы писали:
LVV>>В качестве примеров запрета умолчаний можно привести следующие:
LVV>>- явный параметр this, задаваемый при определении метода класса;
Ф>Следует ли это понимать, как: обращение к полям будет через this?
LVV>>При разработке учебного языка были приняты следующие синтаксические концепции:
LVV>>- каждый оператор языка начинается ключевым словом;
LVV>>- все операторы завершаются символом «;» – точка с запятой;
Ф>Вероятно, "составной" оператор? Довольно странно, например оператор разыменования начинать ключевым словом.
Ну, у нас как-то стихийно сложилось понятие "блочный" так как в теле оператора можно писать и объявления переменных.
То есть тело — это блок в традиционном смысле.
Обычно составной оператор отличается от блока именно тем, что в составном операторе нельзя писать объявления переменных.
Так в Алгола повелось, потом в Паскальное направление перекочевало.
В С-подобных языках подобного отличия нет.
LVV>>Основу реализации интерпретатора учебного языка составляют следующие принципы:
LVV>>- загрузка и связывание модулей должны выполняться динамически;
Ф>Значит ли это невозможность самостоятельной (в ручном режиме) загрузки и выгрузки модулей?
Пока нет, но на уровне библиотеки можно решить.
LVV>>- управление памятью осуществляет система;
Ф>Почему принято именно такое решение?
Потому как сейчас это повсеместно так сделано...
Ф>Значит ли это, что в классах не будет деструкторов?
И конструкторов тоже...
LVV>>Не менее важными являются концепции реализации интегрированной среды, в рамках которой осуществляется обучение программированию:
LVV>>- ошибки должны определяться в момент набора программы;
Ф>Вероятно, синтаксические?
Не только. Если студень ошибся при наборе имени, то выдается семантическая ошибка: имя не определено.
А синтаксических у нас в принципе нет, так как все ключевые слова и даже весь оператор целиком вставляются снипетом или из подсказчика.
LVV>>- ввод-вывод данных должен осуществляться в рамках среды без выхода в операционную систему.
Ф>Значит ли это, что будет невозможно обратиться к функциям операционной системы?
Нет, не значит. Решается на уровне стандартной библиотеки.
Ф>Для всех таких примитивов ОС, как файлы, сокеты, пайпы, mmf, среда будет предоставлять собственные "обёртки", которые по умолчанию будут доступны в любом модуле?
Можем сделать для любых. Механизм расширения позволяет довольно просто сделать вызовы любых функций операционной системы.
Но пока ориентированы на первичное обучение программированию.
LVV>>И наконец, среда должна предоставлять стандартную библиотеку в виде набора модулей на учебном языке.
Ф>Что в неё будет входить?
Ф>Учитывая предыдущее, логично предположить, что стандартные модули будет реализовывать АТД.
Типичный джентльменский набор для первоначального обучения:
— System
— String – работа со строками;
— Math – набор математических функций;
— DateTime – набор функций для работы с датой и временем;
— Money – работа с денежными суммами;
— Stack – реализация стека;
— Queue – реализация очереди;
— Set – реализация множества;
— Dictionary – реализация словаря;
— List – реализация списка;
— Store – обобщенный контейнер;
— Files – модуль для работы с файлами;
— Windows – оконная библиотека;
— Graphics – графическая библиотека;
— Черепашка – модуль черепашьей графики (для обучения);
LVV>Здравствуйте, Философ, Вы писали:
LVV>>>- управление памятью осуществляет система;
Ф>>Почему принято именно такое решение?
LVV>Потому как сейчас это повсеместно так сделано...
Ф>>Значит ли это, что в классах не будет деструкторов?
LVV>И конструкторов тоже...
Как предполагается реализовывать такие штуки, как FileStream, свой вариант финализаторов и IDisposable?
Ф>Здравствуйте, LaptevVV, Вы писали:
Ф>>>Значит ли это, что в классах не будет деструкторов?
LVV>>И конструкторов тоже...
Ф>Как предполагается реализовывать такие штуки, как FileStream, свой вариант финализаторов и IDisposable?
Сорри, неправильно (неточно) выразился.
Как предполагается реализовывать такие штуки, как FileStream?
Своими костылями наподобие финализаторов и IDisposable?
Т.е. понятно, что есть объекты, заведующие временем жизни неуправляемых ресурсов, которые, в идеале, должны дохнуть вместе с ресурсами, которыми они заведуют. Т.е. в дотнете для этого изобретён IDisposable. Как будет у вас?
LVV>При разработке учебного языка нужно следовать некоторым основополагающим принципам (концепциям). Концепции разработки языка программирования делятся на три группы: семантические, синтаксические и прагматические (реализационные).
У вас прямо Оберон получился. Ну, кроме русских идентификаторов (ух, не люблю я это дело), типов в константах и обязательной точки с запятой.
ARK>Здравствуйте, LaptevVV, Вы писали:
LVV>>При разработке учебного языка нужно следовать некоторым основополагающим принципам (концепциям). Концепции разработки языка программирования делятся на три группы: семантические, синтаксические и прагматические (реализационные).
ARK>У вас прямо Оберон получился. Ну, кроме русских идентификаторов (ух, не люблю я это дело), типов в константах и обязательной точки с запятой.
Не совсем. Но конструкция модуля — практически из Компонентного паскаля
LVV>При разработке учебного языка нужно следовать некоторым основополагающим принципам (концепциям). Концепции разработки языка программирования делятся на три группы: семантические, синтаксические и прагматические (реализационные).
Есть еще лексические..
LVV>Основные семантические концепции, принятые при разработке учебного языка, следующие:
LVV>- понятия учебного языка должны соответствовать понятиям промышленных императивных языков программирования;
LVV>- множество понятий должно быть минимально;
Всего 5 понятий.. Куда меньше?
LVV>- конструкции учебного языка не должны зависеть ни от аппаратной платформы, ни от операционной системы;
Не зависит.
LVV>- язык должен поддерживать модульность, процедурное программирование и объектно-ориентированное программирование;
Плюс к этому поддерживает функциональную и логическую парадигму..
LVV>- конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
Само собой..
LVV>- намерения программиста всегда должны указываться явно (запрет умолчаний).
Есть такое свойство.
LVV>При разработке учебного языка были приняты следующие синтаксические концепции:
Та какие концепции? Одна синтаксическая формула на весь язык. За исключением выражений.
LVV>- базовая лексика языка должна быть русскоязычной;
Без разницы..В основе 5 понятий.. Остальное создавай на любом языке.
LVV>- ключевые слова должны иметь английский эквивалент;
Ключевых слов нет. (ну, кроме вот тех 5-ти) Сначала идет имя концепта, класса или типа.. (Кстати, имя не обязательно слово. Имя может содерджать несколько слов и знаки тоже и даже один знак)
LVV>- каждый оператор языка начинается ключевым словом;
ну, концепт же..
LVV>- все операторы завершаются символом «;» – точка с запятой;
Не обязательно. Только в концептах с необязательной реализацией..
LVV>- блочные конструкции языка завершаются ключевым словом «конец».
На общем синтаксие..
LVV>Основу реализации интерпретатора учебного языка составляют следующие принципы:
Одновременно и редактор и компилятор и интерпретатор..
LVV>- эффективность выполнения не слишком важна;
Как реализуешь, такой и будет эффективный.
LVV>- загрузка и связывание модулей должны выполняться динамически;
Та не вопрос.
LVV>- управление памятью осуществляет система;
Само собой..
LVV>Не менее важными являются концепции реализации интегрированной среды, в рамках которой осуществляется обучение программированию:
LVV>- среда должна поддерживать работу и с одномодульными, и с многомодульными программами;
LVV>- среда должна обеспечивать простой и независимый от платформы механизм накопления программных компонент;
LVV>- среда должна позволять набор кода программы и в русской, и в английской лексике;
LVV>- переключение лексики не должно приводить к повторной трансляции программы;
LVV>- изменение ключевых слов в коде должно быть невозможно;
Увы.. Можно определить собственный концепт..и его реализацию..
LVV>- ошибки должны определяться в момент набора программы;
LVV>- редактор кода, с одной стороны, должен обеспечивать традиционные операции редак-тирования текста, и с другой стороны, должен оперировать конструкциями языка;
LVV>- ввод-вывод данных должен осуществляться в рамках среды без выхода в операционную систему.
Вообще нет операций ввода вывода. Загрузка, распределение памяти и хранение вопрос системы. Формат единый.
LVV>И наконец, среда должна предоставлять стандартную библиотеку в виде набора модулей на учебном языке.
Библиотеки делать надо.. Как и все остальное.. Язык только на бумаге и демонстрационка..
LVV>При разработке учебного языка нужно следовать некоторым основополагающим принципам (концепциям). Концепции разработки языка программирования делятся на три группы: семантические, синтаксические и прагматические (реализационные).
LVV>Основные семантические концепции, принятые при разработке учебного языка, следующие:
LVV>- понятия учебного языка должны соответствовать понятиям промышленных императивных языков программирования;
LVV>- множество понятий должно быть минимально;
LVV>- конструкции учебного языка не должны зависеть ни от аппаратной платформы, ни от операционной системы;
LVV>- язык должен поддерживать модульность, процедурное программирование и объектно-ориентированное программирование;
LVV>- конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
LVV>- намерения программиста всегда должны указываться явно (запрет умолчаний).
Забыл добавить:
— семантика конструкций языка не должна зависеть от синтаксиса языка;
И естественно, это подвигает на реализацию сменяемого синтаксиса в рамках одного редактора кода.
Сейчас у нас 4 синтаксиса:
— Semantic Language? основная лексика русская, но переключается на английскую из меню...
— С-подобная (английская и опять же русская)
— паскале-подобная (то же самое)
— мини а ля Питон... — без лишних закрывающих endoв (тоже русская и английская)
Тем самым у учней развязывается связь между синтаксисом и понятиями языка — это важно. Ибо многолетние наблюдения показывают, что студенты, которые ВООБЩЕ НЕ ЗНАКОМЫ с программированием, склонны заучивать синтаксические конструкции, а не понятия языка.
В настоящее время новый синтаксис можно добавить в среду за 1 день.
И новое понятие тоже можно добавить на счет раз-два.
Кстати, русскоязычность имеет неожиданный бонус — усвоение студентами с самого начала правильной профессиональной терминологии.
LVV>При разработке учебного языка нужно следовать некоторым основополагающим принципам (концепциям). Концепции разработки языка программирования делятся на три группы: семантические, синтаксические и прагматические (реализационные).
Мне кажется идейка с языком заведомо тупиковая и причиной тому недостаточная мотивация у студентов и необходимость давать кроме языка еще чтото.
Если глянуть на самые толковые буквари по программированию, навроде sicp, то заметно, что там идет подача материала не от языка, а от задач.
То есть, нужно подготовить набор задач, которые 1 интересны 2 актуальны 3 раскрывают возможности языка
сам же язык нужно брать из мейнстрима, только попроще. Собственно с языком никогда не бывает сложностей, если есть хорошие задачи.
Еще интересная идейка у мит, это подача материала на заранее заготовленых библиотеках. Т.е. студент не пишет полностью всю задачу, а дописывает имеющиеся.
I>Мне кажется идейка с языком заведомо тупиковая и причиной тому недостаточная мотивация у студентов и необходимость давать кроме языка еще чтото.
1. Какой-то язык должен быть все равно.
2. Брать майнстримовский язык — значит:
— выделять минимально-необходимое для обучение подмножество;
— создавать для него собственные компилятор|интерпретатор.
Проще сделать с нуля...
I>Если глянуть на самые толковые буквари по программированию, навроде sicp, то заметно, что там идет подача материала не от языка, а от задач.
I>То есть, нужно подготовить набор задач, которые 1 интересны 2 актуальны 3 раскрывают возможности языка
1. Для студентов, которые СОВСЕМ НЕ ЗНАКОМЫ с программированием интересными являются задачи, намного превышающие их возможности. Например, написание игры с графикой...
2. Актуальность — понятие относительное. Вот например, актуальна задача оценивать качество кода программы.
Опять же студенты, не знакомые с программированием, не в состоянии это сделать даже за семестр.
3. Язык не должен быть сложным.
I>сам же язык нужно брать из мейнстрима, только попроще. Собственно с языком никогда не бывает сложностей, если есть хорошие задачи.
Еще как бывает — см. новый стандарт С++. И шаблоны того же С++...
I>Еще интересная идейка у мит, это подача материала на заранее заготовленых библиотеках. Т.е. студент не пишет полностью всю задачу, а дописывает имеющиеся.
Смотри книгу Бертрана Мейера "Почувствуй класс". Кто у кого спер идею?
Эта идея — развитие нашей разработки. В будущем. Держим в уме и не забываем.
Пока только фундамент, да и то еще не весь...
I>>Мне кажется идейка с языком заведомо тупиковая и причиной тому недостаточная мотивация у студентов и необходимость давать кроме языка еще чтото.
LVV>1. Какой-то язык должен быть все равно.
LVV>2. Брать майнстримовский язык — значит:
LVV>- выделять минимально-необходимое для обучение подмножество;
LVV>- создавать для него собственные компилятор|интерпретатор.
А почему готовый нельзя взять ?
I>>Если глянуть на самые толковые буквари по программированию, навроде sicp, то заметно, что там идет подача материала не от языка, а от задач.
I>>То есть, нужно подготовить набор задач, которые 1 интересны 2 актуальны 3 раскрывают возможности языка
LVV>1. Для студентов, которые СОВСЕМ НЕ ЗНАКОМЫ с программированием интересными являются задачи, намного превышающие их возможности. Например, написание игры с графикой...
В мит используют роботов. Еще есть много других вещей похожих -- террариумы/арены всех сортов и видов. Вобщем игровых полезных вещей вобщем довольно много. С графикой вобщем не так сложно как кажется, только нужен хороший движок который позволит вникать в эту область постепенно осваивая и язык и структуры данных и всякую всячину.
У бертрана мейера тупиковая ветка развития — обучение "от языка" хотя выглядит будто с задач начинает.
I>Здравствуйте, LaptevVV, Вы писали:
I>А почему готовый нельзя взять ?
Потому как нам нужно кое-что делать со внутренней структурой программы.
Опять же
— либо копаться в чужой разработке, чтобы вклеиться в нужные места
— либо делать самим именно так, как нам надо.
Опыт первого имеем. На примере полного анализа C# от исходного кода до кода сборки. Больше не хотим.
I>>>Если глянуть на самые толковые буквари по программированию, навроде sicp, то заметно, что там идет подача материала не от языка, а от задач.
I>>>То есть, нужно подготовить набор задач, которые 1 интересны 2 актуальны 3 раскрывают возможности языка
LVV>>1. Для студентов, которые СОВСЕМ НЕ ЗНАКОМЫ с программированием интересными являются задачи, намного превышающие их возможности. Например, написание игры с графикой...
В состав стандартной библиотеки входит модуль графики и отдельный модуль черепашки. Так что реализуем...
I>В мит используют роботов. Еще есть много других вещей похожих -- террариумы/арены всех сортов и видов. Вобщем игровых полезных вещей вобщем довольно много. С графикой вобщем не так сложно как кажется, только нужен хороший движок который позволит вникать в эту область постепенно осваивая и язык и структуры данных и всякую всячину.
Роботы-черепашки — конечно и всенепременно.
Но мы будем делать их а) в нашей среде;
б) на нашем языке.
I>У бертрана мейера тупиковая ветка развития — обучение "от языка" хотя выглядит будто с задач начинает.
не. У него от задач. У него там реализована мощная библиотека классов — карта Парижу... И студенты пишут проги с испоьзованием этой проги — решают всякие задачи на карте. Типа маршрут на метро...
I>>У бертрана мейера тупиковая ветка развития — обучение "от языка" хотя выглядит будто с задач начинает.
LVV>не. У него от задач. У него там реализована мощная библиотека классов — карта Парижу... И студенты пишут проги с испоьзованием этой проги — решают всякие задачи на карте. Типа маршрут на метро...
Я видел, но это не то что надо. У него от задачи до решения целый вагон слайдов, слов и прочего мусора. Карта Парижа это хорошо, но подход у него плохой — "вот задача, вот классы, вот наследование" А перед этим у него пол-лекции объясняется про классы и наследование.
Все эти вещи нужно выводить в порядке необходимости. Самую первую задачу нужно решать вообще не вводя никаких понятий.
I>Я видел, но это не то что надо. У него от задачи до решения целый вагон слайдов, слов и прочего мусора. Карта Парижа это хорошо, но подход у него плохой — "вот задача, вот классы, вот наследование" А перед этим у него пол-лекции объясняется про классы и наследование.
I>Все эти вещи нужно выводить в порядке необходимости. Самую первую задачу нужно решать вообще не вводя никаких понятий.
Не. Понятие исполнителя и программы для него — по-любому надо вводить и объяснять...
I>>Я видел, но это не то что надо. У него от задачи до решения целый вагон слайдов, слов и прочего мусора. Карта Парижа это хорошо, но подход у него плохой — "вот задача, вот классы, вот наследование" А перед этим у него пол-лекции объясняется про классы и наследование.
I>>Все эти вещи нужно выводить в порядке необходимости. Самую первую задачу нужно решать вообще не вводя никаких понятий.
LVV>Не. Понятие исполнителя и программы для него — по-любому надо вводить и объяснять...
Ну, это надо Но у Мейера какая то вакханалия — целая пачка понятий прежде чем будет само решение.
LVV>1. Для студентов, которые СОВСЕМ НЕ ЗНАКОМЫ с программированием интересными являются задачи, намного превышающие их возможности. Например, написание игры с графикой...
Я помнится давал уже ссылку на стенфордский CS61A. Меня очень впечатлило как там учат именно с нуля. А там берется мейнстримовский язык (Java, Eclipse), на него навешивается библиотека, которая скрывает кучу деталей. И первые несколько лекций двигаем робота и пытаемся решить задачи с использованием этой либы. Инструкция для идиотов как поставить, что нажать, куда смотреть. А далее уже идет сам язык, типа помните мы двигали робота, а теперь рассмотрим как это внутри работает. И далее либы давали, которые скрывали детали работы с графикой, брали всю хитрую инициализацию на себя, и студенты фокусировались именно на задаче. И одна программа работала сразу и в браузере, и как десктопное приложение.
Этот путь мне понравился гораздо больше, чем использование языков типа Scratch и BYOB как в Беркли и Гарварде. И он поинтереснее чем Python в MIT.
Так вот, ИМХО лучше б пойти по пути Стенфорда. Пусть классы на русском, пусть пакеты на русском, пусть переменные на русском — это не важно. Нужно еще и операторы русские — за основу можно плюсы взять, макросами переименовать операторы и абсолютно также использовать.
LVV>- конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
Означает ли это, что ни один "оператор" (правильнее, как мне кажется, термин "предложение" aka statement) в блоке не имеет права выбросить исключение?
V_S>Здравствуйте, LaptevVV, Вы писали:
LVV>>- конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
V_S>Означает ли это, что ни один "оператор" (правильнее, как мне кажется, термин "предложение" aka statement) в блоке не имеет права выбросить исключение?
1. Естественно, statement. Но в русской литературе издавна пишется оператор. Поэтому и мы так пишем.
2. Да. Не имеет право.
3. Исключений в языке пока нет. Мы тут крепко думаем, стоит ли их вводить. А если стоит, то с какой семантикой.
LVV>>- конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
V_S>Означает ли это, что ни один "оператор" (правильнее, как мне кажется, термин "предложение" aka statement) в блоке не имеет права выбросить исключение?
Добавлю.
мы думаем, что язык для профи, и язык для обучения — это разные вещи.
Однако в обучающей среде можно это реализовать ОДИН язык. Но разделить его на уровни.
Сначала — минимальное количество понятий.
По мере обучения учню разрешается пользоваться все более сложными понятиями-конструкциями.
LVV>И наконец, среда должна предоставлять стандартную библиотеку в виде набора модулей на учебном языке.
Если пойдете по пути создания учебного именно языка, а не учебных библиотек к существующему языку — у студентов вряд ли возникнет мысль, что если чего то не хватает в промышленном языке, то нужно писать либы, а не брать другой язык. Этих учебных языков понаписали черти сколько, в том числе с русским синтаксисом. Зачем еще один учебный?
Если же пойти по созданию учебных библиотек, то эти библиотеки могут развиться в либы для промышленного применения и стать стандартом, соответственно будет огромная польза.
E>Здравствуйте, LaptevVV, Вы писали:
LVV>>И наконец, среда должна предоставлять стандартную библиотеку в виде набора модулей на учебном языке.
E>Если пойдете по пути создания учебного именно языка, а не учебных библиотек к существующему языку — у студентов вряд ли возникнет мысль, что если чего то не хватает в промышленном языке, то нужно писать либы, а не брать другой язык. Этих учебных языков понаписали черти сколько, в том числе с русским синтаксисом. Зачем еще один учебный?
E>Если же пойти по созданию учебных библиотек, то эти библиотеки могут развиться в либы для промышленного применения и стать стандартом, соответственно будет огромная польза.
Ну дык!
Берем и пишем список... Очередь, стек — реализуем на массиве и на списке...
И т. п. Задачи будем придумывать. Благо, минимальная графика есть...
LVV>Ну дык!
LVV>Берем и пишем список... Очередь, стек — реализуем на массиве и на списке...
LVV>И т. п. Задачи будем придумывать. Благо, минимальная графика есть...
Это 100 раз уже делали. Абсолютно не важно с использованием паскаля, си, жабы, шарпа, или нового русского учебного языка программирования. Банально, все так делают.
ИМХО совсем для начинающих нужно вначале не стеки реализовывать, а космическим кораблем с прекрасной анимацией доставать за Землю полезные ископаемые с астероидов в автоматическом режиме, используя примитивы вроде просканировать пространство спереди, повернуть на 90 градусов, включить двигатели, выключить двигатели. Чтоб перемещение из точки A в B выносили в процедуры, чтоб нахождение самого крупного скопления астероидов тоже выносили в процедуры, и чтоб ихнюю программу было легко читать. Если космические корабли не круто — управлять в автономном режиме роботом мачо аля Бендер из Футурамы, который ходит по улице, определяет нужный пол, делает знакомство, угадывает некоторые желания и доводит до койки — а затем делает чтоб партнерша отвязалась и снимает следующую. Мир сделать общим, придумать правила, и сделать соревнования между программами студентов, кто больше снимет . А начальное количество действий, которые можно делать — крайне ограниченным, чтоб было необходимо выделять процедуры. И особенно было б круто, если б управление всем этим делалось в рамках обычного ЯП. Чтоб потом не говорили, что типа просто структурировано и компактно можно только на астраханском учебном языке писать, а на обычных промышленных языках типа положено говнокодить. Чтоб с первых же курсов пример был как нужно писать!
Для CS61B кстати в том же стенфорде как раз плюсы идут, и у них тоже собственная библиотека, которая кроссплатформенная, поддерживает графику, обеспечивает более читаемые, чем в STL списки, стеки, очереди и тому подобное.