Порция вторая
(начало тут) Не утихает дискуссия о том, зачем вообще язык программирования по-русски.
Оно и понятно. Должен признаться, исходники на Клаусе мне самому поначалу выглядели диковато, так что мнение профессиональных программистов удивления не вызывает.
Постараюсь объяснить.
Вообразите себе. Только вообразите честно!
На классной доске написан мелом следующий листинг:
პროგრამა გამარჯობა;
დაწყება
ბეჭდვა("გამარჯობა სამყარო!");
დამთავრებული.
Вообразите, что перед Вами лежит клавиатура с вот такими буковками, и учитель предлагает Вам этот текст набрать в редакторе, запустить и посмотреть, что из этого выйдет.
Пожалуй, при достаточной мотивации этому можно научиться. Но теперь сравните.
программа Привет;
начало
вывести("Привет, Мироздание!");
окончание.
Стало понятнее, не правда ли?
Всё дело в том, что ответ на вопрос "зачем?" подразумевает другой вопрос: "для кого?" И если мы говорим про учеников 3-6 класса, то нужно понимать следующее.
Первые уроки программирования оказываются для неподготовленных детей 9-12 лет очень сложны. В этом возрасте большинство школьников знают лишь основы арифметики и не знакомы ни с алгеброй, ни с геометрией. Они не знают, что такое уравнение, функция, переменное, система координат. Может быть, они умеют складывать простые дроби, но точно не все. Может быть, у них трудности с таблицей умножения. Наверняка они либо совсем не знают английского, либо имеют словарный запас в 20-200 слов.
При этом, на первых уроках детям приходится одновременно:
- Учиться пользоваться клавиатурой, мышью и текстовым редактором;
- Осваивать непривычный алгоритмический стиль мышления;
- Учиться строго следовать синтаксическим правилам;
- Учиться читать, писать и понимать исходный код на чужом языке, в котором много неочевидных сокращений.
Нужно отметить, что дети неплохо знают раскладку кириллической клавиатуры, т.к. у каждого школьника сегодня есть смартфон, но раскладку латиницы им приходится осваивать с нуля, и это происходит удручающе медленно.
Каждая из перечисленных задач сама по себе довольно сложна. И всё перечисленное дети должны понять и освоить прежде, чем они смогут самостоятельно написать первую работающую программу. Это ставит перед учениками очень высокий порог входа. Преодолеть его и заинтересоваться предметом могут лишь самые талантливые и целеустремлённые.
То есть, на первом уроке мы занимаемся чем? Правильно, мы ищем буковки на клавиатуре. На втором уроке? Продолжаем искать буковки... А кто дожил до третьего урока, сохранив интерес, тот молодец и умница! Программировать -- это очень просто и увлекательно, верно? :)
Так вот. Программирование по-русски резко снижает этот порог. Исчезают трудности, связанные с пониманием написанного, исчезают трудности с набором текста - и остаётся лишь осваивать синтаксис и учиться алгоритмическому мышлению, т.е., решать именно те задачи, которые только и можно называть обучением программированию.
Появляется, чьорт побьери, возможность говорить о плохих и хороших именах. Ну вот, например, какое имя лучше: malloc() или allocateMemory()? Ну конечно же, malloc()! Почему? Ежу понятно: меньше буковок на клавиатуре искать!
Вот такие дела, уважаемые коллеги.
Ещё раз: мы говорим про среднюю школу. Общеобразовательную. Не про курсы для особо одарённых, не про обучение будущих профи, нет. Про школу.
Ну и ещё один момент.
Для того, чтобы исходный код на русском языке выглядел по-человечески, нужно было сесть и подумать. Само по себе, как в английском, оно не получается. И насколько я могу судить, такую задачу себе толком не ставил ни один из разработчиков русскоязычных языков. Я её решить попытался; хорошо ли получилось -- вам судить.
В Клаусе ключевые слова могут иметь несколько разных форм, так чтобы текст выглядел максимально естественно. Кроме того, можно указывать несколько форм для имён типов данных. Пока это всё, но этого оказывается достаточно, чтобы текст читался, и чтобы можно было спрашивать с учеников за читаемость.
программа Пример;
типы
Точка/Точки/Точек = структура
х, у: целые;
окончание;
МассивТочек = массив массивов Точек;
переменные
тчк1, тчк2: Точки;
мт: МассивТочек;
начало
длина(мт, 1);
тчк1.х := 10;
тчк1.у := 20;
добавить(мт[0], тчк1);
тчк2 := тчк1;
добавить(мт[0], тчк2);
окончание.
И последнее.
Ежели ты метишь в программисты, английский язык изволь знать. Это понятно и бесспорно.
Русскоязычный синтаксис эту задачу для детей не решает. Он позволяет её отложить. Немного отложить. Настолько немного, чтобы успеть сначала почувствовать интерес к предмету. Только и всего-то.