Вопрос

После того, как увидел этот вопрос, Я задумался о различных проблемах, с которыми сталкиваются слепые программисты, и о том, что некоторые из них применимы даже к зрячим программистам.В частности, проблема чтения исходного кода вслух заставляет меня задуматься.Я программирую большую часть своей жизни и часто обучаю сокурсников программированию, чаще всего на C ++ или Java.

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

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

С другой стороны, буквальная спецификация является отягчающе медленной.Чтобы произнести "pound, include, левая угловая скобка, iostream, правая угловая скобка, новая строка", требуется гораздо больше времени, чем для простого ввода #include <iostream>.Действительно, большинство опытных программистов на C ++ прочитали бы это просто как "включить iostream", но опять же, неопытных программистов предостаточно, и иногда необходимы буквальные спецификации.

Итак, у меня появилась идея потенциального решения этой проблемы.

В C ++ существует конечный набор ключевые слова—63—и операторы-54, исключая именованные операторы и рассматривая составные операторы присваивания и автоматическое увеличение и уменьшение префикса по сравнению с постфиксом как разные.Существует всего несколько типов литералов, аналогичное количество группирующих символов и точка с запятой.Если я не сильно ошибаюсь, то примерно так и есть.

Так не было бы тогда возможно просто приписать краткий, уникальный произношение к каждому из этих различных понятий (включая одно для пробелов, где это требуется) и перейти оттуда?Языки программирования гораздо более регулярны, чем естественные языки, поэтому произношение можно было бы стандартизировать.Докладчики из Любой язык был бы способен вербально передавать код на C ++, и из-за регулярности и фиксированности языка программное обеспечение для преобразования речи в текст могло бы быть оптимизировано для приема речи на C ++ с высокой степенью точности.

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

Это было полезно?

Решение

Вместо того чтобы создавать новые "слова" для их описания, для таких вещей, как "включить", вы могли бы просто добавить к нему "ключевое слово", произнося его вслух.Вы могли бы использовать общеизвестные слова / фразы и для выражения других частей.Как и любому начинающему программисту, вам все равно приходится буквально все описывать, так что я не думаю, что это требует особого внимания.Я думаю, что создание новых слов - более сложный метод...

Так, например:

#include <iostream>;

int main()
{
   if (1 < 2)
     return 1;
   else
     return 0;
}

Может быть прочитано как:

(ключевое слово) включить новую строку iostream (ключевое слово) int main без запуска параметров блокировать, если число 1 (оператор) меньше, чем вернуть число 2 новой строки (ключевое слово) число 1 новой строки (ключевое слово) еще новая строка (ключевое слово) возвращает номер 0 конец блок

Рассматривайте слова в () как необязательные описательные слова, которые, скорее всего, будут использоваться в более сложном коде.Вы могли бы использовать слово "буквальный", если хотите, чтобы они действительно написали описательное слово.Например

(ключевое слово), если буквенное число (оператор) меньше, чем буквенное ключевое слово

становится

if (number < keyword)

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

Лично я нахожу этот метод довольно простым в использовании и его легко преподавать.YMMV, как всегда.

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

Другие советы

Как слепой разработчик, программирующий с 13 лет, я нашел этот вопрос действительно интересным.Прежде всего, как упоминали другие люди, изучение нового языка для понимания кода не является практическим решением, поскольку, вероятно, на изучение устных высказываний ушло бы больше времени, чем на изучение самого языка программирования.

Читая вопрос / ответы, мне пришли в голову еще два момента:

  • Во-первых, вы были бы удивлены, насколько важно "время на размышление".Ранее я программировал на C / C ++ / Java, а теперь использую C # в качестве основного языка и считаю себя очень компетентным.Но когда я выполнил пару проектов на Python, я обнаружил, что сокращенная пунктуация отняла у меня "время на размышления" - подсознательно я использовал пунктуацию, чтобы переварить то, что только что услышал, - увлекательно...Однако ситуация немного иная, когда дело доходит до идентификаторов, поскольку они не очень хорошо известны слушателю - лично мне трудно прослушивать код с переменными-аббревиатурами (RGXRatio, RGVRatio), поскольку у меня нет времени выяснять, что это значит.С другой стороны, венгерская нотация и начальные символы подчеркивания затрудняют прослушивание кода, поскольку длина переменных (с точки зрения времени, затрачиваемого на произнесение) намного больше, чем более важные операции, выполняемые с этими переменными.
  • Еще одна вещь, которую следует учитывать, - это то, что длина аудиопотока является конечным результатом, но не первопричиной.Причина, по которой аудио такое длинное, заключается в том, что аудио - это одномерный носитель, тогда как чтение текста - это 2d-носитель с возможностью перемещаться и пропускать мимо уместный / знакомый текст.Это не сработало бы для очной лекции, но что, если бы существовали команды клавиатуры для управления речью?В текстовых документах программа чтения с экрана позволяет мне перейти к следующей строке, но что, если бы это было адаптировано к семантике языка программирования.некоторые исследования, например, проведенные Т. В. Раманом из Google, включают использование разных тембров для выделения синтаксиса и звуковых сигналов для обозначения метаданных, таких как заглавные буквы.

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

Так не было бы ли тогда возможно просто приписать краткое, уникальное произношение каждому из этих различных понятий (включая одно для пробелов, где это требуется) и перейти оттуда?Языки программирования гораздо более регулярны, чем естественные языки, поэтому произношение можно было бы стандартизировать

Возможно, но вы упустили из виду свою цель.Предпосылка состояла в том , что слушающий человек сделал не уже знаете этот язык.Если он это сделает, мы можем просто сказать "включить iostream", когда мы имеем в виду #include <iostream>, или "вектор int" , когда мы имеем в виду std::vector<int>.

Ваша предпосылка заключалась в том, что слушающий недостаточно знаком с языком, чтобы понять, что вы читаете вслух, если только вы сами не зачитаете вслух именно так что там написано.

Теперь изобретение совершенно нового языка только для описания примитивов, которые встречаются в вашем исходном коде, не решает проблему.Вместо этого ты все еще должны зачитывать каждый синтаксический знак (с более простым, более "стандартизированным" произношением, да, но их все равно нужно зачитывать вслух), а человек, слушающий все еще вас не поймут, потому что, если они недостаточно хорошо знают C ++, чтобы понять "включить iostream", они также не поймут вашего стандартного произношения.И если вы собираетесь учить их своему произношению, зачем беспокоиться, когда вместо этого вы могли бы просто научить их понимать синтаксис C ++ напрямую?

Существует также основная проблема, из которой, как правило, состоит код C ++ очень много синтаксических лексем.Возьмите такую простую строку, как эта:

std::vector<int> v;

Я насчитал 9 жетонов.Ни один из них не может быть опущен.Если слушающий человек недостаточно хорошо понимает код и синтаксис, чтобы понять высокоуровневое описание, такое как "объявите вектор int с именем v", тогда вам придется зачитать все 9 токенов в той или иной форме.Даже если вы придумаете более простые имена, чем "оператор разрешения пространства имен" и "меньше знака", вам все равно придется перечислить 9 имен токенов.А это большая работа.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top