Комментарии 26
код — это язык или формальная система
Стоило бы уточнить, что именно здесь подразумевалось под термином «язык». Язык в общем случае может быть формальной системой, тогда он является формальным языком. Языки программирования являются формальными.
Спасибо за ваше замечание! Сейчас попробую объяснить свою мысль.
По моему мнению, программный код, подобно естественному языку, не может быть сведен к примитивной сигнальной системе, что и продиктовывает необходимость в анализе, адекватном его коммуникативной и когнитивной сложности.
Центральная же гипотеза всего исследования состоит в том, что языки программирования, зародившись на пересечении человеческого мышления и машинной логики, эволюционировали в сторону самобытных семасиологических систем, принципиально несводимых к совокупности чисто формальных правил. Именно поэтому я и разделяю живой естественный язык и сугубо формальные семиотически системы (например, светофор является семиотической системой, но я бы не назвал его языком ни в коем случае). Речь здесь идёт о том, что современный код всё больше становится инструментом общения между людьми.
Светофор является формальным языком со своим алфавитом и грамматикой, поэтому вам следовало бы везде, где вы упоминаете термин «язык», заменить его на более конкретный. Обычно филология не рассматривает формальные языки, поэтому такое уточнение не требуется, но вы же идёте в ту отрасль, где это разделение имеет значение.
Да, я действительно ни в одной своей работе по филологии это никогда не уточнял, поскольку не было острой необходимости в таком разграничении. В программировании же всё гораздо сложнее, согласен с вами полностью, это моя оплошность...
Тем не менее, благодаря таким комментариям и получается увидеть то, на что раньше не обращал особого внимания. Спасибо большое!
Мне кажется , чем более высокоуровневый язык , тем больше общего у него будет с естественными языками , так как высокоуровневость во многом стремиться к упрощению работы для людей и большим абстракциям ....
Когда началось про носителей языка , я подумала , что будет : вот русскоязычные разработчики предпочитают , а китайские разработчики предпочитают .... Статья не об этом , но было бы интересно узнать влияет ли родной язык на применения второго языка - python
Ваша мысль про высокоуровневые языки абсолютна корректна и точна!
В своих следующих публикациях я планирую подробно разобрать это поступательное движение от машинных кодов к конструкциям, изоморфным естественному человеческому языку (я называю это динамическим процессом лингвификации кода). Здесь инструкция для машины трансформируется в сообщение, одинаково понятное и человеку, и транслятору. В подобных структурах код окончательно перестает быть лишь набором команд для процессора и становится полноценным средством коммуникации между людьми, что подтверждает мой главный тезис о постепенном размывании границ между искусственными и естественными знаковыми системами.
Для человека код наделён семантикой (денотационной и операционной). Для компьютера код - это чистый синтаксис.
Спасибо за ваше уточнение! В своей работе я провожу следующее разграничение:
для человека код действительно обладает богатой семантикой (то, что я назвал «концептуальным планом» или авторским замыслом). Мы видим за +
общую идею «соединения», а за if not my_list
— культурную идиому. Для компьютера же, это действительно чистый синтаксис, набор формальных правил для выполнения (что я определяю как «операциональный план»). Интерпретатор просто следует протоколу, не вникая в общий смысл.
Я бы с осторожностью говорил об операциональном плане применительно к действительной работе компьютера. Единственная операция, которую на самом деле выполняет компьютер - это преобразование входных уровней напряжения на ножках процессора в выходные уровни по защитой в процессор таблице (там много ухищрений, направленных на ускорение этой работы в конкретных случаях, но по сути они ничего нового к данной операции не добавляют). А понятие записи алгоритма, как последовательности семантически значимых операций - это уже чисто человеческое. Рассуждая о программировании на обычном прикладном уровне, мы антропоморфизируем компьютер.
Для полноты анализа стоило бы рассмотреть также языки, где нет перегрузки операторов (в этом случае операции выражаются функциями или методами класса). Кроме того, даже в случае наличия в языке перегрузки, её может не хватать.
Например, для сложения векторов можно использовать привычный из математики оператор «+», но для них определено два вида произведения (скалярное, в математике обозначаемое точкой, и векторное, обозначаемое крестиком), при этом оба символа, как правило, нельзя использовать в качестве операторов. Поэтому или звёздочку умножения используют для скалярного произведения, а для векторного — иной символ с другой изначальной семантикой (например, «&», означающий побитовое «И»), или одну или обе операции всё равно обозначают словами для очевидности.
Да, спасибо!
Я ещё думал рассмотреть различные случаи итерации с использованием ключевого слова for, демонстрирующие, как единый синтаксический паттерн реализует универсальную концепцию последовательного обхода для гетерогенных типов данных. Это как раз относится к числу наиболее ярких примеров того, как единый синтаксис обеспечивает семантически универсальное поведение.
Единый синтаксис обеспечивает семантически универсальное поведение? Это как раз соответствует принципу наименьшего удивления.
Намного интереснее (но и сложнее) рассмотреть случаи, когда синтаксически одинаковый код имеет различную семантику в зависимости от контекста. Таким поведением обладает язык C++. Например, даже в простейшем случае:
A * B;
Если A — это переменная, то данное выражение является вызовом оператора умножения для переменных A и B. Если же A — это тип, то данное выражение является объявлением переменной B с типом A *
.
Это даже если не касаться шаблонов и правил их разрешения.
Рекомендую послушать, что программисты говорят о т.н. самодокументирующемся коде и проблематике нейминга: там всплывает много интересных проблем, которые перекликаются с темой вашего исследования.
Нейросетка продолжает словоблудить. Какая к чёрту "полисемия" в функции len(), она делает ровно одну вещь во всех случаях, это одна семантика.
Смотрите, я уже не раз уточнял, что моя главная цель — совершить попытки найти глубинную связь естественного языка и современного кода, а без примеров с полисемией это было бы совершенно несостоятельно в методологическом плане. Это не идеи нейросети, а я последовательно двигаюсь от одного уровня к другому, принимая во внимание все важнейшие лингвистические механизмы.
У меня есть несколько проблем с вашими текстами.
Первая проблема: я сильно подозреваю, что в программировании вы понимаете исчезающе мало, но при этом публикуете статьи на программисткие темы на программистском ресурсе. С высокой вероятностью всю программистскую часть ваших статей генерит нейросетка, и генерит банальщину. Зачем вы это делаете - я хз, возможно хотите пустить пыль в глаза коллегам-филологам, что публиковали у программистов, возможно хотите набайтить комментов и нарыть в них идеи для новых промптов нейросетке, чтобы наполнить материальчик. Но тут вы продаёте свои тексты как гуманитарное откровение для тупых технарей.
Вторая проблема: какую "глубинную" связь вы ищете? Код и разрабатывался для того, чтобы быть как человеческий язык, читаемым и легким в написании, поэтому на него естественно перенеслись все особенности человеческого языка. "Глубинная" связь не является магическим открытием, она сделана специально, и это тривиальный факт.
Вот честно, я так и не понял что вы хотели своим текстом сказать. Да и как вы можете пытаться "найти глубинную связь естественного языка и современного кода", если вы знаете одно, а второе только по верхам пробежались, но глубоко не погружались.
И я надеюсь что у вас от переизбытка общения с нейронками такой стиль общения, а не за вас нейронки комменты пишут. Потому что
Спасибо за ваше замечание! Сейчас попробую объяснить свою мысль.
Тем не менее, благодаря таким комментариям и получается увидеть то, на что раньше не обращал особого внимания. Спасибо большое!
Ваша мысль про высокоуровневые языки абсолютна корректна и точна!
Я непременно над этим задумаюсь, чтобы не обобщать (упрощать) такие вещи в дальнейшем! Огромное спасибо за то, что уделили свое время и объяснили мне это!
Да, спасибо!
Большое спасибо за такую замечательную подсказку!!!
Интересно, обязательно об этом сейчас посмотрю! Спасибо за информацию!
это уже не вежливость, а очень смахивает на лизоблюдство, которым страдают нейронки, да как и обилием восклицательных знаков, собственно. Не говоря уже о том, что сделать статью, как бы продолжающую предыдущую, за сутки, с учётом комментариев, ну ни в коем разе не подозрительно.
Забудьте всё что вам говорили. Можете вывести в markdown таблице отличия реализации перегрузки операторов в питоне и с++. Лично я предпочитаю питон, а вы?
Ведь даже поверх самого жесткого стандарта всегда вырастает живая ткань неписаных стилистических
А почему неписанных? большинство современных языков имеет style guide и набор рецептов как готовить что-то и почему оно именно так. То бишь вполне имеется обширный набор мануалов по аспектам языка. Что PEP в питоне, что стандарты в С/С++, которые в идеале необходимо знать перед тем как использовать язык.
Ну и упускается главный момент - носители языка имеют более сложную структуру языка, нежели иностранец, изучающий этот язык. Идиоматический код подразумевает необходимость в большем понимании, а не в большей сложности. Получается идиоматичнее выражаться как иностранец, нежели как нэйтив. Поэтому идиоматически не стоит использовать "ни пуха ни пера", иначе получится do_electric_poststamp_thingy()
вместо validate_email()
@art_lak Я считаю, что оператор GOTO короткий и лаконичный, который позволяет избежать сложных структур в программе.
Код получается более понятным и читаемым, с философской точки зрения. Всем разработчикам очень нравятся люди которые много и часто его используют.
А вы хотели бы, чтобы этот оператор добавили в Python? И если да, то как бы это выглядело с точки зрения грамматики?
Скрытая грамматика: почему len() — это полисемия, а хороший код — набор идиом. Как филология объясняет «чистый код»