Почему для полноценного обучения важен именно русский язык программирования?

Почему для полноценного обучения важен именно русский язык программирования?

Предыстория (Кто виноват?)

Машинные коды, которые понимали и до сих пор понимают процессоры компьютеров всегда были двоичными: последовательности нулей и единиц. Однако, уже 16-ричная система счисления базировалась не только на цифрах, но и на буквах латинского (английского) алфавита. А появившийся в 1949 году язык ассемблера был полностью английским: он содержал английские слова и сокращения, соответствующие командам процессора. Первый язык высокого уровня, Фортран (FORmula TRANslator – «переводчик формул»), был создан в 1957 году группой программистов под руководством Джона Бэкуса в корпорации IBM. Разумеется, он тоже был английским.

Такая «языковая дискриминация» по национальному признаку обусловлена тем, что основная часть первоначальных разработок компьютеров и систем программирования в годы второй мировой войны и сразу после нее пришлась на англоговорящие страны — Англию и США. Дальше традиция сохранилась: английский язык стал «стандартом де-факто» в программировании. Кроме того, в первых операционных системах ввод-вывод был только на английском языке, что закрепило «лидирующие позиции» английского языка в IT отрасли.

Для чего вообще нужны языки программирования? Для компьютера хватает машинного кода, записанного в виде нулей и единиц. Только пиисать, читать и понимать такой машинный код для человека — адский труд. Я знал одного программиста, который писал программы для 8-разрядных процессоров непосредственно в 16-ричном коде, он даже умудрялся кодировать элементарную EGA-графику. Но это было на заре развития компьютерной техники и это был один единственный «сумасшедший профессор». Больше с подобными людьми я не сталкивался ни разу в жизни. А вот всем остальным людям для того чтобы писать программы и понимать написанное — и нужны языки программирования. И чем ближе эти языки к обычному разговорному, тем удобнее программистам и всем остальным.

Словарь современных «традиционных» английских языков программирования уже давно устоялся. Хоть в Algol’е, хоть в C++, хоть в Pascal’е операторы совершенно одинаковы: if, for, while, continue, print и т.п. — коротко и ясно… для любого англичанина или американца: это просто английские слова, фразы или их небольшие сокращения. А вот для всех остальных людей, не владеющих английским языком, начинаются «трудности перевода»: для простого восприятия текстов программ необходимо знать (не просто знать, но и понимать!) английский язык. И куда, в таком случае, деваться всем тем, кто английского в должном объеме не знает? Английский учить, а с программированием «пока» подождать 3-5 лет? Или зубрить английские команды, не понимая их значения, как ученый попугай?

«Ну, нет, конечно,» — подумал как-то академик Ершов и подарил российским школьникам около 50 лет назад… идею несуществующего русского языка программирования. То есть, язык-то был: он его сам и выдумал, а вот никаких компиляторов-интерпретаторов к нему создать не удосужился: ну не академиковое это дело — компиляторы писать… И начали бедные школьники писать программы… на бумажке. А компилировать и выполнять — в голове: кто поумнее — в своей, к то нет — в учительской. Но и это ещё не всё: талант — он и у академика талант. А талант — он один не ходит, он сестру с собой везде таскает, краткостью зовут. Вот и в нашем случае академик не только русский язык программирования придумал, но и сделал его кратким — прям как тост на охоте:

алг Сумма квадратов (арг цел n, рез цел S)
    дано | n > 0
    надо | S = 1*1 + 2*2 + 3*3 + … + n*n
    нач цел i
    |    ввод n; S:=0
    |    нц для i от 1 до n
    |    |    S := S + i * i
    |    кц
    |    вывод "S = ", S
кон

Всё понятно? Нет?! Странно… А ведь этот язык придумывался именно для тех, кто вообще ничего не понимает ни в программировании — чтобы им было проще и понятнее. Ну, не получилось («Ну не шмогла я, мужик… Не шмогла…»). Возникает ощущение, что где-то тут по тексту программы на английском языке пробежалась программа машинного перевода. Ну откуда ещё могло взяться трудновоспринимаемое для русского человека по смыслу слово «ДЛЯ», которое в русском языке имеет совсем не тот же самый смысл, что его английский первоисточник «For»? И как, простите, понимать все эти английские «S» или «i»? Программа недоперевела? Зачем в учебном языке программирования нужны все эти «КНЦ», «ФУН», «ЦЕЛ», «ТАБ», «АЛГ», «НЦ», «КЦ» и другие команды, очень напоминающие эпистолярные шедевры разработчиков приборных панелей для истребителей и эсминцев, и совершенно непонятные для простых смертных. Ведь задача стоит — не предоставить тупым военнослужащим краткий, как выстрел, и ёмкий, как солдатский котелок, интерфейс взаимодействия с боеголовкой, а обеспечить детей и других учащихся таким набором команд, который бы легко читался, понимался и был прост в написании.

Проблема (Что имеем?)

Вот пример фрагмента программы:

public TokenEnumerator GetTokenList(string lineText, int lineNumber)

{

if (lineText == null)

{

throw new ArgumentNullException("lineText");

}

}

Возьмите любого русского школьника из обычной средней школы или студента, не программиста, и попросите прочитать и понять эти строки. Сможет? Нет! А ведь тут все очень корректно написано — именно  так, чтобы читать этот код без комментариев. И такая проблема стоит не только в России: в мире множество стран, где английский — даже не второй по распространенности: абсолютное большинство населения его просто не знает — вообще.

Я сам постоянно ловлю себя на том, что знаю английскую клавиатуру лучше, чем русскую… Нонсенс? Нет! Закономерность, связанная с тем, что я как программист был вынужден большую часть своей жизни писать тексты и программный код на английском языке. Хорошо ли это? Для меня — уже все равно: английский язык я тоже знаю. А для обычных русских школьников?

В настоящее время большая часть учащихся в России либо не знает английского языка совсем (младшие школьники), либо не знает его в должном для полноценного восприятия текстов программ объёме, следовательно, понимать тексты программ, написанных на «традиционных» языках программирования (фактически — на английском языке) — не может. Остается существующий ныне вариант: учащиеся заучивают непонятные английские слова, являющиеся командами «традиционных» языков программирования, не понимая их смысла, что неизбежно ведет к серьезному ухудшению восприятия самих текстов программ. Следствие — множащаяся армия «кодеров», людей, которые что-то задолбили из программирования, как дятлы, и которым кажется, что они программисты. Крайне печальная картина для России.

Катастрофа современной системы образования в России заключается, в частности, в том, что в ней вообще нет учебного языка программирования. Даже о Microsoft Small Basic — учителя просто не знают и вынуждены пихать учащимся древний Pascal или какой-нибудь из диалектов BASIC, модный Python или Java, а на худой конец — С или С++. Только всё это равносильно, например, обучению пилотов не на компьютерных симуляторах простых учебных самолетов типа АН-2 или Cessna-152, а сразу — на настоящих коммерческих рейсах — на сложнейших тяжёлых многодвигательных Боингах или Аирбасах… Но ведь в авиации так никто не делает, прекрасно понимая всю глупость и несостоятельность такого подхода. «Так то — в авиации!» — сразу же возразят думающие читатели, — «там и сложность огромная и ответственность, да и безопасность важна…» И будут абсолютно правы. Тогда почему же в обучении программированию детей — здравым смыслом просто пренебрегают, плюя и на сложность, и на ответственность, и на (давайте уж будем до конца честными!) безопасность для психики детей?

А если вам вдруг непонятно, почему нынче модный Python совершенно не подходит для обучения новичков — просто найдите какого-нибудь программиста, который был вынужден после Python’а изучать какой-то другой — нормальный язык программирования — он вам всё очень доходчиво объяснит…

Что делать?

Изучать сразу всё вместе (и английский и программирование) – невозможно: достаточное знание английского языка обязательно должно предшествовать работе с текстами программ, написанных на английском языке, иначе не будет понимания текстов. Изучать «сначала» английский язык до определенного уровня, а «только потом» программирование — нерационально, кроме того, не всем и не всегда это вообще нужно. Таким образом, получается, что полноценное изучение программирования на основе современных «традиционных» языков программирования возможно только после изучения английского языка до необходимого уровня, а этот уровень достигается сейчас, как правило, только к окончанию школы или позже.

А давайте представим себе, что традиционные языки программирования — все сплошь китайские… Что тогда? Заставлять русских детей, которые русский-то язык еще толком не выучили, учить иероглифы и слоговое ударение — одновременно с основами программирования? Абсурд? Безусловно! Тогда почему же обучение основам программирования на английском никому из преподавателей не кажется абсурдом? Да просто потому что преподаватели привыкли: им «спустили сверху» учебную программу и они вынуждены ей следовать — «шаг влево, шаг в право — расстрел». А самое смешное, что минимум половина преподавателей программирования в России на английском языке — двух слов связать не сможет… Печальная картина.

Представьте себе, что вас заставляют одновременно вести машину по трассе в плотном потоке и одновременно — здесь же, например, справа — рядом с рулём — лепить вазу на гончарном круче. Насколько хорошо вы сможете делать оба этих дела? Ну а чем тогда положение учащегося, вынужденного изучать программирование как таковое и одновременно задалбливать совершенно непонятные английские словечки лучше? Почему «считается», что учащемуся в такой ситуации будет комфортно? Или тем, кто всё это придумал для учащихся, было важно попробовать в обучении программированию технологии стрессового обучения? Зачем это нужно, когда есть возможность научить человека программировать на родном языке, когда он сможет легко читать и понимать тексты программ и осваивать именно программирование, а не безумный коктейль из английского языка и новомодного пайтона? Неужели кто-то может подумать, что, например, создатели системы программирования Scratch были идиотами, аккуратно переводя все команды своей системы на множество языков? Нет! Они старались сделать процесс изучения и понимания как языка программирования, так и самого программирования — доступным, понятным и комфортным. И у них всё получилось: Scratch популярен во всем мире и никому не приходит в голову специально включать в системе английский или китайский язык, когда его родной язык — русский.

Так что же проще: сделать учебный язык программирования русским и на нем нормально и спокойно учить ребёнка именно программированию или учить ребёнка одновременно и английскому и программированию? (Третий вариант — использовать английские слова, не зная английского — рассматривать просто нет смысла: с таким же успехоим можно изучать и программирование на языке ассемблера, который всё равно практически нечитаем.) Я склоняюсь к первому варианту, хотя бы потому, что невозможно бежать в две абсолютно разные стороны одновременно и делать это достаточно результативно. А заставлять учить непонятные слова чужого языка и параллельно учить при этом мыслить, да еще мыслить непривычно — алгоритмически — по-моему, вообще полная бессмыслица. Чем больше ребёнок понимает, а не заучивает наизусть без понимания, тем лучше и для него самого, и для самого процесса обучения, тем проще, свободнее и четче он будет мыслить в дальнейшем и тем интереснее будет для него сам процесс обучения.

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

Основная задача обучения программированию – формирование алгоритмического мышления, умения формализовать задачи, раскладывать их на элементарные подзадачи и выстраивать общую логику решения. Если вы можете написать правильный алгоритм решения задачи простым русским текстом на бумаге, то перевести потом этот алгоритм в команды какого-то конкретного языка программирования — чисто механическая и гораздо менее сложная задача, с которой в состоянии справиться любой кодер, инженер-программист для этого уже не нужен. Знание какого-либо языка программирования — это минимум, который еще не делает человека программистом. Чтобы стать программистом — в первую очередь, необходимо изучить основы формализации задач и алгоритмизации их решений, и только потом — учиться использовать для реализации алгоритмов какой-то язык программирования.

Язык программирования – это всего лишь инструмент, а не фундамент науки или области знаний. Если человек умеет программировать в принципе, то изучить конкретный язык программирования и использовать его — крайне несложная задача. Настоящие, профессиональные программисты владеют не одним, а тремя-пятью языками программирования и выбирают их в зависимости от решаемых задач. Точно так же как токарь сможет работать практически на любом токарном станке, выбирая станок, резцы и приспособления в зависимости от конкретной задачи, а у лётчика нет необходимости заново изучать весь курс авиационных дисциплин для пилотирования новой модели самолёта, настоящий программист в состоянии быстро перейти на новый язык программирования в соответствии с решаемой задачей.

Необходимо учить детей программированию независимо от процесса изучения английского языка. Это самый простой, эффективный и не зависящий ни от чего путь. А для этого необходим простой, легко читаемый русский учебный язык программирования. Язык, все команды которого являются словами или фразами русского языка. Для освоения такого языка не придётся отвлекаться ни на что кроме понимания его особенностей, что позволит легко строить необходимые алгоритмические конструкции.

Если впоследствии человек захочет перерасти этот учебный язык программирования при соответствующем уровне знаний английского языка, у него не возникнет сложностей в переходе на любой современный «профессиональный» язык программирования. Собственно, именно так до сих пор и обстоит ситуация с «традиционными» учебными языками программирования семейства BASIC – с одной оговоркой: так она обстоит в англоязычном мире.

В настоящее время все, кто по окончании школы не посвящает себя IT отрасли и программированию, «с радостью» забывают все годы, «бессмысленно» потраченные на изучение всего, что связано с программированием, потому что «все это им никогда в жизни не пригодится». А когда у них возникает какая-либо задача, требующая программирования, особенно простая, они вынуждены либо решать ее без применения программ – вручную, крайне непроизводительно: тратя на тупые однообразные действия массу своего времени, либо искать в интернете какую-нибудь программу, которая хоть как-то поможет решить эту задачу. Однако, проблема в том, что все даже похожие задачи чем-то да отличаются, а писать абсолютно универсальную программу, которая учитывала бы всё разнообразие мелких отличий сходных задач – почти непосильный труд. Такие люди не подозревают, что способ быстрого и эффективного решения их задач они просто «не замечают» в силу пробела в образовании: этот способ – написание собственной программы, которая учтет все нюансы решаемой задачи.

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

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

Наш ответ «Чемберлену»!

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

RUbasic — это полностью русский учебный язык программирования, рассчитанный на начинающих русскоговорящих программистов любого возраста, а также, на людей с минимальными знаниями в программировании для решения ими элементарных повседневных программистских задач. Язык имеет всего 14 ключевых слов, обеспечивающих базовую алгоритмическую логику языка, основной функционал языка сосредоточен в подключаемых библиотеках объектов, используя которые можно взаимодействовать с различными программными и аппаратными элементами компьютера, а также, с подключаемыми устройствами. Язык отличается простотой и понятностью, но обладает при этом полноценной функциональностью настоящего, не учебного, языка программирования. Кроме того, язык позволяет писать программы для управления роботами, построенными на базе Lego EV3, управлять системами на базе Arduino и Raspberry. Одной из особенностей языка является возможность расширения его функциональности путём создания собственных библиотек.

Давайте рассмотрим фрагмент работающей программы на RUbasic в качестве альтернативы фрагменту программы в начале статьи:

Если цвет_кошки = "черный" ИЛИ цвет_кошки = "белый" То

цвет_кошки = "зеленый"

АЕсли цвет_кошки = "серый" То

цвет_кошки = "желтый"

Иначе

цвет_кошки = "красный"

Дальше

После выполнения этого фрагмента переменная «цвет_кошки» меняет своё значение в зависимости от того, какое значение у нее было до выполнения этого фрагмента.  Чем этот текст принципиально отличается от обычного русского текста, с помощью которого можно записать алгоритм «на бумажке»? Практически ничем. Для удобства восприятия давайте перепишем текст в виде предложений:

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

Мы только расставили совершенно необязательные для восприятия знаки препинания и снабдили комментарием оператор присваивания. И всё. Но даже и без этого текст нашей программы легко читаем и понятен без всяких комменариев. А теперь попробуем рассмотреть с позиции русскоговорящего человека всего одну (самую короткую) строку из алгоритма в начале статьи:

if (lineText == null)

Для её понимания нужен следующий комментарий: «Если Строка Текста — пустая строка»:

if (lineText == null) // Если Строка Текста - пустая строка

То есть, для понимания короткой (20 символов) строки «традиционного» языка программирования мы написали комментарий, превышающий саму эту строку. Нонсенс? В англоязычном мире — да, в России — нет. Без комментария смысл этой строки может понять либо настоящий программист (так или иначе понимающий английский язык), либо англичанин. Если оставить эту строку без комментария, то вернувшись к ней в следующий раз учащиеся опять окажутся в ситуации: «смотрю в книгу, вижу фигу». А если переписать ту же строку на языке программирования RUbasic, то мы получим совсем другую картину:

Если СтрокаТекста = "" То

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

Разумеется, здесь приведены примеры правильного подхода к наименованию переменных объектов языка: констант, имён переменных и функций, — такого при котором эти имена несут смысл для любого человека, читающего программу. При этом, для соблюдения правил написания имён используется стандартный приём: если имя содержит больше одного слова, эти слова либо начинаются каждое с большой буквы (например, «СтрокаТекста»), либо разделяются знаком подчёркивания (например, «цвет_кошки»). Если мы хотим читаемости программ без комментариев, такой подход — однозначно необходим. В противном случае мы получим, например, вот такой код:

Если цк = "ч" ИЛИ цк = "б" То

цк = "з"

АЕсли цк = "с" То

цк = "ж"

Иначе

цк = "к"

Дальше

Этот код работоспособен точно так же как и предыдущий, однако тут программист поленился и воспользовался короткими, практически бессмысленными константами и именами переменных. И вот тут уж без комментариев понимание текста становится невозможным. Понять, что происходит в этом блоке в общих чертах ещё возможно: ключевые слова RUbasic нельзя сократить, а они определяют логику алгоритма. А вот разобраться в том, какой смысл несут переменные и константы без комментариев — практически невозможно. Придётся выполнять двойную «обезьянью» работу: сначала писать программу, используя «ленивые» нечитаемые константы и имена переменных, а затем документировать это всё комментариями. Разумеется, для задач образования такой подход неприемлем, он нарушает восприятие учащимися алгоритма, бессмысленно затрудняя работу с программой.

Поделиться: 

Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать rubasic.ru, вы соглашаетесь на использование файлов cookie.
Понятно