Pull to refresh

Comments 43

Ассемблер и императивное программирование мало чем отличаются. Для изучения хорошо подходит промежуточный вариант — язык Fort или что-то подобное.
Объекты обрабатывают сообщения, а не сигналы. Понятие «обработка сигналов» носит специфический смысл и не надо его перегружать без необходимости.

Разделять (?? :: ?) и if нет смысла. Вообще лучше если любой оператор являлся бы выражением.

Про остальное надо думать — выглядит странно, но возражать сейчас не готов.
У ассемблера есть
1. goto
2. не структурные команды (xchg), расширения MMX
каждый оператор можно представить, как член (расширяемого) класса

if не имеет else, поэтому не типизированный тернарный оператор удобен в выражениях. А навороты — чтобы сразу был виден

FORT — штука гениальная, но BASIC лучше )
То есть под императивным понимается структурное программирование?
Ведь Дейкстра уже доказал, что учить писать «спагетти» не обязательно.
На первый взгляд выглядит сложновато.

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

зато при обучении не будет «забудьте предыдущее, на самом деле все по другому!»

Географы глобусы тоже выбирают

Зато не скатывается к: «Сегодня мы пишем 'Hallo, world' на Бейсике, завтра на Паскале, а в конце года на APL»
Зачем нужен язык который нужен только для обучения, а потом его можно забыть. ИМХО учить надо программированию а не языку. Язык как бы его не сделали, не заменит хорошего учителя который объяснит, что хорошо, а что плохо и самое главное почему. А язык дело третье иногда их приходится менять, но используемые знания зачастую переносятся между ними.
Я начинал со знакомства с языками Fortran и Algol (в 15 лет, по книге Гутина и Полунова), начал программировать на MK61

А C, Clipper и т.п. освоил, когда появились первые персоналки. Язык запомнить не возможно — все равно в help полезешь.

Так что это не довод против еще одного варианта синтаксиса.
Я начинал с Pascal, потом перешел на 1C и C#, затем на PHP и Python.
Это то на чем я профессионально писал.
Параллельно баловался и F# и C и C++.

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

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

Сейчас по опыту наших коллег из МЦНМО и ЛКШ, переводим обучение на Python. Для обучения конечно он не лучший, но популярный. Посмотрим, что из этого выйдет.

Что касается объектно ориентированного программирования оно не нужно на начальных стадиях обучения. Для начала нужно хорошо вдолбить детям императивную модель, потом процедурную, и уже потом объектную. А объектной модели можно обучать уже на нормальном объектноориентированном языке.
Но вот обучать изначально на джаве не получится, потому что ребёнок обязательно спросит, а что такое «static» и что такое «class», а почему вот так. По ответам: врать детям не хорошо (тем более с точки зрения преподавательской этики), а даже если врать он всё равно найдёт и в мозгах у него начнётся каша.
То же самое касается вашего:
program (String arguments[] \execution time command line parameters\ )
{&
Console.write_line(«Hallo, world!»);
&}

На c++ просто слишком много заморочек и слишком сложный синтаксис.

Функциональное программирование тоже на начальных этапах не нужно.

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

А ещё я не понял, как у вас объявляется метод в классе.
При использовании ключевого слова PROGRAM создается класс default.Default, и все подпрограммы становятся его методами.

В остальном объектная модель совпадает с C#.

XML — это уже описание структуры объектов, аналогичное Lua PL/2 SCRIPT для программирования игр. Хотя предполагается, что можно все делать и средствами языка. Только метод объявляется отдельно, а вызов происходит при значении строки "=метод()" или "=this.metod2()"

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

meta source=«pl2»
    использовать пользователь.ОС.ВВ.Терминал;

    программа()
    {&
        вывести_строку(«Здравствуй, мир!»);
    &}

/meta
P.S. класс можно включать в using только при использовании ключевого слова program.

При описании метода static void Main() такая возможность запрещается, и using разрешает только пространства имен — контексты.

Пусть учатся вместо «Хочу конфету-у-у!!!» писать «Мама, я хочу от тебя конфету!»
Хорошо, что не перешли на Lua.

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

Луа дает слабое представление о том, что происходит с памятью. Это упрощает работу, но дает меньшее представление о устройстве ОС и железа.
Лично мне в качестве учебного языка программирования больше симпатизирует D или Go. Они современные и, возможно, будут активней использоваться в будущем.
А какие возможности этих языков не реализуются в этом синтаксисе?
Слишком сложно. Слишком специально. Слишком скучно. Не говоря уже о том, что у языка ещё нет реализации, так что обкатать его тоже нельзя. Синтаксис сам по себе — дело десятое.

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

  • распространённость: печально, если единственным, кто может дать внятное объяснение, будет учитель в классе;
  • простота: как синтаксиса, так и парадигменная; чем меньше борьбы с языком и чем больше собственно программирования, тем лучше;
  • увлекательность: запоминать десять типов скобок, перечислять отличия пяти видов классов, и писать калькуляторы — это клёво, но ведь программы пишутся не для этого.

Плановые языки (созданные специально для обучения) либо просто не взлетают за пределами местечковых инициатив, либо из них довольно быстро вырастают и переходят на что-то посерьёзнее. (Иначе у нас бы уже был какой-то общепринятый язык для обучения.)

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

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

Насчет плана и примеров — спасибо. Тестовый набор буду писать с этим подходом — демонстрации для обучения.

А дочке — 12 ))
Скорость чтения при обучении не при чем. Скорость чтения имеет значение при ежедневной разработке.
Ведь математику, историю и другие предметы в школе преподают не в сокращенном варианте, а в наглядном.
Поэтому и язык для обучения изначально должен быть наглядным, а не скоро-читаемым.
Например {*… *} в некоторых шаблонизаторах ни что иное как комментарий, а в C-подобных языках это область видимости. Очень мало ключевых слов. Обработка ошибок на начальных этапах, когда детям не понятны основы основ? Программа должна просто падать с хорошо-читаемой и подробной ошибкой, желательно с намеками на решение проблемы. Компилятор должен предвидеть ошибки и просто не давать скомпилировать программу, прозрачно намекнув на проблемы в программе. Мне кажется сам язык не сильно важен, важно окружение, хорошее описание ошибок, отсылки на справочник с решением проблемы. Хорошая документация и примеры.
Человек с улицы должен:
1) прочитать как книгу и хотя бы примерно понять что происходит, {*… *} не делает код более понятным
2) человек должен попробовать и если у него не получилось, по сообщению от компилятора должен понять что нужно делать, да хоть ссылку на документацию туда положите — это будет уже что то
3) если человек кое как освоился, то у человека должна быть максимально ровная кривая обучения, без непредвиденных ситуаций
Автор вы начали с хвоста!
Ответьте на простой вопрос "Кого вы хотите обучать?
Обучение детей от 8-11 лет это одно, для 12-15 требует уже других подходов, а для тех то старше 15 опять же обучение нужно производить по другом и на другом. А уж если вы решили научить программировать тем кому за 30 вы удивитесь что ни одна их технологий тем кому меньше 20 уже опять не подходит.
тех, кто научился писать по русски
5+
IMHO: не взлетит.
Вы ориентируетесь на слишком маленький рынок с максимальной долей всего в 2%.
Пост был об ошибках в грамматике и покрытии вариантов записи задач

А насчет рынка — Turbo Pascal был основан на Паскале — и полетал. Для 3+ есть KODU с визуальным программированием. Идеи в России не патентуются, в отличии от регистрации программ.
Предположение:
Выделить пространство PL2.I для идей по языкам и технологиям реализации механизмов по программированию
То, что Вы делаете очень опасно.
Вы серьезно хотите развить у школьников отвращение к программированию?
Заставить их зубрить все эти Ваши {x… x} и сказать им, что это только для обучения и в реальной жизни нигде не пригодится.

Язык «для обучения» должен быть предельно прост и привлекателен,
Pascal неплох, Python идеален для этих целей, С/C++ сложнее, но тоже хорош…
В Штатах кстати очень любят преподавать Scheme, диалект Лиспа.
Вопрос был — насколько синтаксис не покрывает свойства существующих языков. По этому и broadcast.

Для кого опасен синтаксис? Только для евангелистов конкретных языков.

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

В жизни пригодиться? Извините, я эконометрик-бихейвиорист. С учетом автокаталитической составляющей из www.philosophystorm.org/palex/3185.

Прошу указать, что я не учел из упомянутых Вами языков.
Не принимайте близко к сердцу, но примите совет.
Напишите для начала на какой либо формальной грамматике свой язык, для примера на ANTLR. Сделайте 20-30 примеров строк по 100 и погоняйте без реализации. Проверяя только грамматику примеров и их синтаксис.
На мой взгляд, преимуществе предлагаемого синтаксиса в том, что он построен по модульному принципу: для каждого элемента можно использовать конкретную часть анализатора. В итоге можно создать иерархию таблиц разбора.

В 1999 году я уже пытался программировать синтаксис на yacc (Albert Graef, Pascal), и синтаксис, сопоставимый с C#, прошел проверку на корректность. Но — появился C# )

В 1992г. делал генератор расчетных работ на C (рекурсивный спуск), и просчитал на нем курсовик по электрическим машинам — сформатированный в соответствии с требованиями к оформлению с перекрестными ссылками между компонентами формул.

Было еще несколько мелкий скриптеров, в т.ч. с промежуточными формами, а также анализ структур промышленных языков, и построение деревьев классов на C# по Reflection, и даже восстановление FAT12 после удаления и создания тома (с тех пор делаю резервные копии). Так что я сейчас лучше на этом прототипе потренируюсь.
Чем меньше конструкций языка, тем он проще для освоения.
Такие языки уже есть. LISP or FORTH for examle.
Для кого опасен синтаксис? Только для евангелистов конкретных языков.

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

Отвращение к программированию? ...

Если Вы не обучаете языку, а обучаете учеников, то должны понимать.
У меня еще свежи воспоминания о моих попытках «обучать» одноклассников. Так вот, если не абстрагироваться от языка, человеку очень быстро надоедают эти формальности — «что это за begin/end», «переменные? объявлять?», хотя алгоритм в голове вроде верный…

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

ЗЫ: На самом деле я не хочу, чтобы моего ребенка в школе заставляли учить нечто неудобовразумительное вроде этого.
Вы же ему еще и двойки будете ставить, если не выучит, верно?
А чего там у него на гитхабе за коммиты никого интересовать не будет.
Так что, все написаное выше — это разумеется мое личное мнение, которое может отличаться от объективного.
Пообещайте, что это не станет обязательным предметом в школе, и можно будет обсуждать, чего не хватает этому велосипеду...

Я не преподаватель, я работающий программист с 1990 года.
И язык я предлагаю не как преподаватель, но как отец.

Кстати, в виде псевдокода (даже на русском) этот язык тоже можно будет попробовать.

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

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

Вот поддержка словарей перевода ляжет на преподавателей программирования. В качестве прототипов в каскаде выбраны два уровня: draft — запись программы словами-токенами и наследующий от него ascii — использование латинского алфавита и символов 30-127. Статья доводится в черновиках.

Так что я никого заставлять не буду…
Давайте попробуем его поанализировать.

— Какова типизация языка? Статическая, динамическая, утиная… Может быть бестиповая(aka Forth)?
— Каковы базовые типы, доступные из коробки структуры данных(списки, очереди, стеки, деки, кучи и тп.)?
— Сборка: компилируется, интерпретируется или виртуальная машина с компиляцией «на лету»?

Не ответив на эти вопросы сложно оценивать полноту синтаксиса.

Я правильно понимаю, что у Вас уже есть действующие экземпляры транслятора?
Спасибо, не видел, табличка — шедевр.
Для начала — реализация идет с использованием платформы .Net, при этом используется компонентная модель. Язык разработки C# Express.

— Я правильно понимаю, что у Вас уже есть действующие экземпляры транслятора?

Нет, нету. Предполагаю, что будет удобно, если машина соберет себя сама — по описанию в разделе

meta source=«bnf»

/meta

В настоящее время идет подбор архитектуры и заполнение Wiki. Текущее состояние можно посмотреть на github по такому же нику, ссылка также есть в сообществе ЖЖ, указанному в тексте информации о пользователе Habrahabr.

— Какова типизация языка? Статическая, динамическая, утиная… Может быть бестиповая(aka Forth)?

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

— Каковы базовые типы, доступные из коробки структуры данных(списки, очереди, стеки, деки, кучи и тп.)?

Основные — основаны на реляционной модели данных (Кодд), и списках. Т.е. упорядоченные кортежи — модель DBF. Сборка мусора- системная CLR. Стеки FIFO.

— Сборка: компилируется, интерпретируется или виртуальная машина с компиляцией «на лету»?

Для PL/2 script — динамическая генерация методов. Для PL/2 на начальном этапе возможна интерпретация, в последующем- компиляция на IL.

Итак, Вы собираетесь создать
[x]новый
[x] функциональный,
[x] императивный,
[x] объектно-ориентированный,
[] процедурный,
[] стековый,
[] мультипарадигменный,
[] быстрый,
[x] статически-типизированный,
[] динамически-типизированный,
[] чистый,
[] богатый,
[x] не-искусственный,
[x] наглядный,
[] простой для новичков,
[] простой даже для не-программистов,
[] абсолютно непостижимый язык программирования.

Не получится. И вот почему.

Вы, скорее всего, верите, что:

[] Синтаксис — это то, что делает язык сложным
[] Сборка мусора бесплатна
[x] Компьютеры имеют бесконечную память

Никому на самом деле не нужны:
[] параллельность,
[] интерактивность,
[] поддержка отладчика,
[] IDE,
[] ввод\вывод,
[x] взаимодействие с кодом на других языках.

[] Весь мир общается в 7-битном ASCII
[] Масштабирование для больших проектов будет простым
[] Убедить программистов пользоваться новым языком будет просто
[] Убедить программистов пользоваться новой IDE будет просто
[] Все программисты любят шаблоны
[] Вам не аукнется обозначение некоторого поведения как «неопределенного»

К сожалению, в Вашем языке есть:

[x] нормальный синтаксис,
[x] точка_с_запятой_в_конце_строки,
[] проблема табов\пробелов,
[] макросы,
[x] неявное преобразование типов,
[x] явное преобразование типов,
[x] наследование,
[] goto,
[x] исключения,
[?] замыкания,
[] хвостовая рекурсия,
[] подпрограммы,
[x] рефлексия,
[x] подтипы,
[] множественное наследование,
[x] перегрузка операторов,
[x] алгебраические типы данных,
[x] рекурсивные типы данных,
[] полиморфические типы данных,
[] монады,
[] зависимые типы данных,
[x] префиксные операторы,
[] вложенные комментарии,
[] переносы строк,
[x] регулярные выражения,
[x] вызовы по имени,
[] вызовы по адресу.И еще возникают такие вот философские препятствия:

[x] Программисты не обязаны полностью понимать теорию относительности и квантовую механику чтобы написать на Вашем языке «Hello, World!»
[x] У программистов не должен развиться туннельный синдром за время написания «Hello, World!» на Вашем языке
[] Пока что самая выдающаяся программа на Вашем языке — это компилятор Вашего языка
[x] Пока что на Вашем языке Вы не можете написать даже компилятор Вашего языка
[] А еще у Вас нет никаких спецификаций
[] Реализация — вот спецификация
[] но реализация закрытая,
[] защищена патентами,
[] не принадлежит Вам

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

[] Название Вашего языка делает невозможным его поиск в Гугле
[x] Ваш язык — интерпретируемый, а значит никогда не будет столь быстрым как С
[x] Ваш язык — компилируемый, а значит никогда не будет гибким
[x] Для компиляции Вашего языка требуется искусственный интеллект
[] Вы рассчитываете на оптимизации, которые, откровенно говоря, не способны реализовать
[] В мире меньше 100 программистов, достаточно умных, чтобы использовать Ваш язык
[] Задача ________________, которая у всех решается за полиномиальное время, на Вашем языке реализуется только за экспоненциальное
[] А задачу __________________ и вовсе реализовать нельзя

Кроме того, Ваша реализация имеет следующие недостатки:

[] CPU работает не так, как Вы думаете
[] RAM работает не так, как Вы думаете
[x] VM работает не так, как Вы думаете
[x] И компиляторы не работают так, как Вы думаете
[] Более того — они даже в принципе никогда не смогли бы так работать
[] Конфликты «сдвиг-свертка» по ходу парсинга решаются методом rand()
[x] Вам зачем-то понадобилось присутствие компилятора в рантайме
[x] Вам зачем-то понадобился рантайм в компиляторе
[x] Ошибки, выдаваемые Вашим компилятором, загадочны и непостижимы
[x] Компилятор падает даже от брошенного на него косого взгляда
[] Вы не понимаете базовые принципы оптимизации
[] Вы не понимаете базовые принципы системного программирования
[] Вы не понимаете указатели
[] Вы не понимаете функции

И еще есть и некоторые маркетинговые проблемы:

[x] Вам нечего ответить на просьбу увеличить скорость работы
[x] Вам нечего ответить на просьбу упростить язык
[] Вы внаглую сфальсифицировали бенчмарки
[] в компилятор были вшиты вычисленные заранее значения расчетов, симуляций или тестов
[] в тестах строковых операций Вы незаметно использовали Perl
[] в мат. тестах Вы незаметно использовали BLAS

[] Хотя это не помогло и никто всерьёз не поверил, что Ваш язык быстрее, чем
[] Ассемблер
[] С
[] Фортран
[] Java
[] Руби
[] Пролог

[] Вы бездоказательно отбросили классическую теорию разработки языков программирования
[] Вы бездоказательно отбросили основы системного программирования
[] Вы бездоказательно отбросили теорию алгоритмов
[] Да Вы вообще все компьютерные науки отбросили

Смотря на всё это в общем, следует заметить, что:

[x] Ваш «короткий» пример на 2 десятка строк можно реализовать одной строкой в языке __________
[] Уже существует небезопасный императивный язык
[] Уже существует безопасный императивный язык
[x] Уже существует безопасный статически-типизированный функциональный язык
[] Вы переизобрели Lisp, только хуже
[] Вы переизобрели Javascript, только хуже
[] Вы переизобрели Java, только хуже
[] Вы переизобрели C++, только хуже
[] Вы переизобрели PHP, только хуже
[x] Вы переизобрели PHP лучше, вот только никому ничего не докажете
[] Вы переизобрели Brainfuck, вот только в отличии от его авторов — на полном серьёзе

Логика ответов не всегда четкая
Думаю, в качестве начального языка для изучения вполне может использоваться bash. Именно Bourne Shell, не ZSH и другие.
Похоже автор совсем забыл что, узучение или умение программировать состоит из;
1% — знаний синтаксиса языка
20%-знаний базовых алгоритмов и структру
30%-знаний приемов программирования (шаблоны)
49%- знаний билиотек языка.

Получается, процентов 79 можно перепоручить искусственному интеллекту?
И заменить на пользовательский интерфейс?
Как ИИ создадите так и перепоручите.
А шаблоны и библиотеки можно классифицировать через «20 вопросов», или там женская логика?
Вы забыли про знание готовых программных продуктов

Выбор — первый этап после формулирования требований. Есть на рынке окупающаяся реализация, или нужно применять вышеперечисленные навыки?
Sign up to leave a comment.

Articles