Размышления о том каким должен быть Язык Программирования

В. Г. Кон . . . 13-02-2025 . . . kohnvict.narod.ru

В этой статье я решил записать свои мысли по поводу программирования на компьютерах, и о том, почему все время появляются новые языки программирования (ЯП) и что с этим делать. Вообще говоря, лично меня этот вопрос никак не интересует, но в обществе есть такая проблема и есть люди, которые ее обсуждают. Как правило, это те, кто придумывает свой ЯП и хочет рассказать об этом остальным. А в программе максимум у них даже есть желание найти тех, кто бы этим языком начал пользоваться, кроме его автора. Я только недавно узнал, что сайт о ЯП российских авторов не только существует, но и активно функционирует. За более, чем 15 лет там собрано огромное количество статей на эту тему, которые сгруппированы вокруг главных идей о свойствах ЯП. Вот ссылка на этот сайт.

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

Первый. Почти все ЯП указаны никами и сайтами, на которых про них написано. Ни имен авторов, ни их контактной информации нет. Все очень кратко. Понятно, что автору сложно разбираться с большим числом ЯП и их авторами. Ему большой респект только за то, что он взялся за такую работу. Разумеется, что сайты про такие ЯП должны сами все показывать. Но не все сайты и не все показывают на самом деле. А у некоторых вообще нет сайтов. Только статья на каком то форуме и все. Второй. Комментарии по темам тоже делаются никами, а не именами. И не всегда ник автора комментария совпадает с ником его программы. Вообще говоря, на сайте есть регистрация, в которой просят сообщить про себя всю необходимую информацию. И автор сайта знает про всех, кто зарегистрировался. Но другие авторы комментариев этого не знают.

Есть еще и третий недостаток. Говорится только про компиляторы. Но уже достаточно много лет компиляторы вышли из моды и по сути необходимость в них уже почти пропала полностью. Сейчас все больше используются интерпретаторы с компиляцией на лету или просто интерпретаторы, то есть программы, написанные на каком то ЯП из уже существующих, которые способны выполнять текст, написанный на другом ЯП. Дело в том, что написать полностью независимый компилятор, который был бы способен работать на любых устройствах и учитывать особенности каждого устройства, очень сложная задача. Этим занимаются много лет крупные фирмы с большим числом сотрудников, причем такие программы надо постоянно обновлять, так как техника меняется и все время возникают новые приборы.

Но это просто дань прошлому, когда-то было так, что любую даже маленькую программу компилировали, а потом выполняли. И даже эту работу делали по частям. Компилировали небольшие куски программы и потом собирали полную программу из этих кусков, прибавляя к ним и другие куски, написанные другими авторами, а также библиотеки. И в таком режиме до сих пор работает много программ на старых ЯП. Что касается интерпретаторов, то это просто готовая программа, у которой ЯП является ее входными данными. Она читает текст, написанный на этом ЯП, понимает что надо делать и исполняет. И в этом плане интерпретатор можно уже назвать искусственным интеллектом (ИИ). Просто современные ИИ -- это очень большие интерпретаторы, которые способны исполнять разговорный язык вместо ЯП.

Но программы ИИ не всегда все понимают правильно и однозначно. А вот интерпретатор понимает ЯП однозначно и четко выполняет именно то, что в нем записано. С другой стороны, пользователь должен писать без ошибок. Любая ошибка ставит интерпретатор в ситуацию непонимания, и он прекращает работу и указывает на ошибку, а также ее место в программе. Пока так. Хотя можно придумать и другие варианты. Например, при наличии ошибок игнорировать часть кода и выполнять остальной. Или попробовать исправить ошибку на лету и исполнить код после исправления. Такие программы тоже возможны, однако создавать их вручную очень сложно и трудоемко. Пока что программы ИИ используют механизм нейронной сети и самообучение. И то все это очень дорого стоит и требует больших данных.

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

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

Что касается компьютеров, то так получилось, что более развитая индустриально страна США быстрее других освоила разработку компьютеров, а потом и интернета, а потом и ЯП. И все самые лучшие операционные системы (ОС) и ЯП были созданы в США и потому в них используются английские слова. И весь мир как бы принял такие правила игры. С точки зрения единства и взаимного сотрудничества разных стран это вполне положительный фактор. А идея заменить английский язык на русский в ЯП вроде выглядит как патриотизм, но на деле получится сепаратизм. Совершенно очевидно, что будущие американцы не будут использовать ЯП на русском языке. И все другие страны тоже не будут. Мечтать об этом можно, но создать такую реальность нельзя.

Тому много причин. Я просто перечислю без обсуждения. Население России не очень велико и постоянно уменьшается. Более того, оно уменьшается намного быстрее, чем показывают статистические данные, потому что русских замещают мигранты. И еще одна причина в том, что часть населения, которая занимается программированием еще быстрее уменьшается потому что программисты уезжают. Сделать сильный ЯП, который очень хорош во всех отношениях, в принципе, возможно. Но этого мало. Навязать такой ЯП остальному миру не получится никак. Хотя бы потому, что уже написано очень много хороших ЯП, которые развиваются, люди к ним привыкли, огромная система обучения людей во всем мире на них основана. И переделать это невозможно. Такие ЯП обречены на использование парой фирм в России и все. И это в лучшем случае. То есть сепаратизм. А сепаратизм малых групп людей -- это путь в никуда. Пример показала Украина.

Есть и другие причины почему это плохо. Программисты, которые ориентируются только на русский язык, отрезаны от мировой литературы по программированию, которая вся написана на английском языке. Не только их не будут знать остальные страны, но и они не будут знать эти страны. Это ориентация на людей, не знающих английского языка, а такие люди интеллектуально плохо развиты, они ничего хорошего сделать не смогут. Если у них не хватает ума выучить английский язык, то о каком творчестве можно говорить. Возможно для написания какой-нибудь программы по бухгалтерии или даже по созданию сайта в интернете ума хватит, но на более сложные проекты -- не хватит. У программистов США не было выбора на каком языке писать, они просто не знают других языков. У жителей России выбор есть. И по своему опыту я могу сказать, что люди, знающие английский язык писать ЯП на нем не будут. Любой ЯП должен быть языком международным, а сепаратизм в данном случае -- не есть хорошо.

Также на этом сайте указаны только авторы ЯП из России, а полный список ЯП отсутствует. Это можно оправдать тем, что контакты и доступ к авторам не из России весьма ограничен. А список всех ЯП и их авторов -- это совсем другой вопрос, который можно обсуждать в другом месте. Согласен и вместе с тем разумно было бы обсуждать плохие или хорошие стороны всех языков. Ведь можно что-то придумать, считать что это новое, а реально это уже существует в каком-то из тех языков, которые не известны сепаратистам. Ведь была предложена идея совместными усилиями создать самый лучший ЯП в мире.

Теперь я попробую обсудить и этот вопрос. Сразу следует принять во внимание, что люди на земле разные и у них разные свойства. Первая категория людей -- школьники. У них мало знаний и мало ума. Им нужен обучающий ЯП, который бы развивал их ум и давал им знания. Вторая категория людей -- студенты. У них уже больше знаний и ума, но есть такая специфика, что они еще не знают, что им интересно и чем они будут заниматься. Они учат ЯП только для того, чтобы сдать зачет. В принципе они способны усвоить ЯП любой степени сложности, но нет мотивации. Впрочем студенты бывают разных специальностей, например, в Институте международных отношений может вообще не быть мотивации к изучению ЯП. Для них достаточно знать общие принципы того как работает ЯП, но не подробно. Третья категория людей -- работники интеллектуальных профессий, которые используют ЯП в своей работе, но они не программисты и не занимаются этим 24/7, а только время от времени. Часто их вполне устраивают просто готовые программы. Ну и четвертая категория -- программисты, которые создают индустриально значимые программы с высокой надежностью и высокой стоимостью ошибки. К ним же я отнесу и таких, которые делают программы на продажу, разрабатывают собственную ОС. Таких существенно меньше, но они тоже есть.

Совершенно очевидно, что невозможно создать такой ЯП, который удовлетворил бы всех. И по синтаксису и по возможностям и по легкости обучения. Реальная практика сейчас -- собирать статистику использования, обсуждения и вообще разговоров о каждом из существующих языков. На основании таких статистических данных делаются выводы какой язык лучше, а какой хуже. Лично я считаю, что вред от таких данных не меньше, чем вред от журналистов. Современный мир сильно испорчен борьбой разных интересов за преобладание над другими. Эти интересы пытаются захватить СМИ, а СМИ пытаются захватить все больше людей, используя совершенно низменные человеческие качества. Хотя бы вот странная тенденция. Порнография в СМИ запрещается во всем мире, а убийства и преступления смакуются из каждого утюга. Я могу согласиться с тем, что не стоит показывать порнографию из каждого утюга. Но и убийства тоже не стоит показывать. Сейчас идет война и кроме кадров о том, как растреливают танки и летят ракеты больше ничего не показывают по ТВ.

Такая же ситуация и со статистикой ЯП в СМИ и в интернете. Либо нахваливают ЯП, которые массово используются (Java, Javascript, Python и т. д.) либо новые ЯП, реклама которых проплачена крупными фирмами. Кончается это тем, что студентов поголовно стали учить языку Python, и даже пытаются внедрить его в школы, потому что кто-то сказал, что это самый легкий язык для обучения первым. Хотя это вовсе не так. И не самый легкий и не для этого его создавали. Моя лично идея состоит в том, что разным категориям людей нужен разный ЯП. Более того, разный ЯП нужен просто для решения разных задач. Не стоит и пытаться создать ЯП единый для всех. Люди очень разные, решают разные задачи и имеют разные знания. ЯП, который бы все это учитывал, должен быть бесконечным и это тоже минус такого языка. Хотя наверно можно было бы придумать какой-то единый синтаксис, но он все равно был бы не всем удобен.

Самое главное в том, что в обществе людей идет постоянная борьба за все. Лучший язык, придуманный одной группой людей, никогда не будет лучшим для тех, кто придумал свой лучший язык. Это необходимо учитывать всегда. Максимум, что можно сделать -- это организовать секту людей, любящих какой-то один язык. А паралельно будет существовать 1000 других сект, где любят другой язык. Это уже давно существует в религиях. Понятие персональный язык программирования пока не очень известно в обществе, но вероятно оно будет увеличивать свою среду существования. Об этом тоже можно поговорить, потому что такое явление давно существует. Я просто коротко опишу этот феномен на своем опыте.

Любая программа для своей работы требует задания каких-то параметров и вообще каких то данных. Первоначально, очень очень давно программы писались без этого, чтобы выполнить ее один раз. А потом она переписывалась и снова исполнялась один раз. Например, на компьютерах БЭСМ-6 текст программы на фортране считывался с перфокарт, компилировался в памяти компьютера, тут же выполнялся и выдавал результат на бумагу. В такой программе все было определено и она выполнялась один раз. Потом в ней переписывалась пара или больше перфокарт и она снова исполнялась один раз. Когда появилась магнитная запись стали записывать файлы. И результат компиляции можно было записывать, и потом использовать сразу. А чтобы такая программа работала без компиляции дольше, из нее выделялась какая-то часть, которая записывалась в другой файл. И программа считывала эти данные (входные данные, ВД) и могла делать разные работы в зависимости от того какие ВД ей приготовили.

Но рано или поздно таких ВД становилось все больше. И надо было как-то их организовать, структурировать. И в конце концов у такой программы появлялся свой специфический ЯП, на котором эти ВД и записывались. Частным случаем такой программы является просто интерпретатор ЯП. Это достаточно большая программа, способная выполнять очень много разных работ. Но часто (точнее почти всегда) ЯП для интерпретатора содержит меньше возможностей, чем имеет ЯП, на котором сам интерпретатор написан. Однако какие то возможности при этом выполняются быстрее и проще, чем исходный ЯП. Интерпретаторы часто пишут под определенный круг задач, и для решения этих задач он оптимизируется. В то время, как для других задач лучше другой ЯП. Лично я использую в своей работе 4 языка; Свой ACL, Javascript, Postscript и Java. И все эти 4 языка исполняются интерпретаторами. При этом Java на последнем месте, потому что он используется только для исправления интерпретатора для моего ЯП ACL.

И тут можно плавно перейти к такому явлению как ЯП для ЯП. Если рассматривать процедурные языки, то в любом из них можно со временем сделать достаточно много процедур и вся программа будет состоять из вызова этих процедур. Если каждой процедуре дать название и указать свои параметры, то код такой программы будет похож на такой, который написан на другом ЯП. И его легко оформить как другой ЯП, а программа которая будет написана для выполнения этих процедур станет интерпретатором. Так вот и получилось у меня, что ЯП Java является ВД для JRE, мой ЯП ACL является ВД для Java, а в нем уже есть суперкоманды, которые скоро могут превратиться в новый ЯП, который будет ВД для моего ЯП ACL. Но пока ВД для моего языка -- это просто часть кода самой программы, выделенная в отдельный файл.

С практической точки зрения такая структура вполне законна. И она очень широко используется для языка Javascript. Там новые программы называются Фреймворками, пишу по-русски английское слово. И таких фреймворков написано уже достаточно много. Это опять новые ЯП на базе старого Javascript. Есть очень много работ на компьютере, для которых не надо циклов. Нет повторения, все делается один раз. И вот для таких работ время выполнения не имеет никакого значения, потому что для человека 0.00001 сек и 0.1 сек практически одно и тоже. Потому что скорость реакции самого человека не меньше, чем 0.1 сек. Совершенно очевидно, что никак не получится использовать один ЯП, сколько их не изучай и как их не улучшай. Скорее всего победит обратная тенденция. У каждого уважающего себя программиста будет собственный ЯП. Как примерно уже происходит с программами редактора текстов. Я лично тоже написал свой редактор и он является важным инструментом моей работы.

.