看到后 这个问题, ,我开始思考盲人程序员面临的各种挑战,以及其中一些挑战如何适用于有视力的程序员。尤其是大声阅读源代码的问题让我犹豫不决。我一生的大部分时间都在编程,我经常辅导同学编程,最常见的是 C++ 或 Java。

这是 独特地 尝试口头表达 C++ 表达式的基本语法会让人恼火。说话者必须将代码翻译成地道的英语,或者用口头手写方式提供代码的完整说明,使用明确但缓慢的术语,例如“左括号”、“按位与”等。这些解决方案都不是最佳的。

一方面,惯用翻译仅对能够反翻译回相关编程代码的程序员有用,而在辅导学生时通常情况并非如此。反过来,教育(或者只是让某人加快项目进度)是大声朗读源代码的最常见情况,并且出错的可能性很小。

另一方面,字面的规范则极其缓慢。说“磅、包括、左尖括号、iostream、右尖括号、换行符”比简单地键入要花费更长的时间 #include <iostream>. 。事实上,大多数有经验的 C++ 程序员只会将其理解为“include iostream”,但同样,缺乏经验的程序员比比皆是,有时需要文字规范。

所以我想到了一个可能解决这个问题的想法。

在C++中,有一个有限集 关键词—63—和 运营商—54,忽略命名运算符并将复合赋值运算符以及前缀与后缀自动递增和递减视为不同的。只有几种类型的文字、相似数量的分组符号和分号。除非我完全弄错了,否则就是这样。

那么,简单地赋予一个简洁、独特的属性不是可行的吗? 发音 这些不同的概念中的每一个(包括需要空白的概念)并从那里开始?编程语言比自然语言规则得多,因此发音可以标准化。演讲者 任何 语言将能够口头传达 C++ 代码,并且由于语言的规律性和固定性,语音转文本软件可以经过优化以高度准确地接受 C++ 语音。

所以我的问题是双重的:第一,我的方案是否可行;其次,还有其他人有其他潜在的解决方案吗?我打算从这里获取建议,并使用它们来生成一份正式论文,其中包含我的解决方案的示例实现。

有帮助吗?

解决方案

而不是创造新的“字”来形容他们,事情如“包括”大声说,当你可以简单地用“关键词”前缀它。你可以用文字/俗称说其他部分以及词组。正如任何新的程序员,你无论如何都要从字面上描述的一切,所以我不认为需要特别注意。我认为创建新单词被较硬的方法...

因此,例如:

#include <iostream>;

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

可以被读出为:

  

(关键字)包括的iostream换行   (关键字)INT主没有PARAMS开始   块数,如果1(操作者)小于   数2新线(关键字)返回   数1新线(关键字)其他   新线(关键字)返回数0端   块

在款待词语()作为可选的描述词语,最有可能被在更复杂的代码中使用。如果你想让他们实际上写的描述词,你可以使用单词“文字”。例如

  

(关键字)如果文字数(操作者)   小于字面关键字

变为

if (number < keyword)

其他的话可以给予限定的含义为好,例如,当您希望他们继续对下一行“分割线”,没有任何关闭当前打开的括号,等等。

我个人觉得这个方法使用非常简单,并且容易教。 YMMV一如既往。

当然,这并没有解决国际问题,但在最坏的情况,会导致在非英语语言中使用的“新词”,这就是您所提供的建议的解决方案变得更糟。

其他提示

作为一名盲人开发人员,我从 13 岁就开始编程,我发现这个问题非常有趣。首先,正如其他人提到的,学习一门新语言来理解代码并不是一个实际的解决方案,因为学习口语可能需要比学习实际编程语言更长的时间。

阅读问题/答案后,我又想到了两点:

  • 首先,你会惊讶于“思考时间”的重要性。我以前用 C/C++/Java 编程,现在使用 C# 作为我的主要语言,并认为自己非常有能力。但当我用 Python 做几个项目时,我发现标点符号的减少剥夺了我的“思考时间”——潜意识里,我正在使用标点符号来消化我刚刚听到的内容——令人着迷……然而,当涉及到标识符时,情况有点不同,因为听众并不了解这些标识符 - 我个人发现很难用首字母缩略词变量(RGXRatio、RGVRatio)来听代码,因为我没有时间弄清楚这意味着什么。另一方面,匈牙利表示法和开头的下划线使代码难以听懂,因为变量的长度(就说话时间而言)比对这些变量执行的更重要的操作要长得多。
  • 另一件需要考虑的事情是,音频流的长度是最终结果,而不是根本原因。音频如此长的原因是因为音频是一维媒体,而阅读文本是二维媒体,能够跳跃并跳过不相关/熟悉的文本。它不适用于面对面的讲座,但如果有键盘命令来控制演讲怎么办?在文本文档中,我的屏幕阅读器让我跳到下一行,但如果这适合编程语言的语义,该怎么办?一些研究,例如谷歌的 TV Raman 的研究,包括使用不同的声音进行语法突出显示,以及使用音频提示来标记大写字母等元数据。

我知道最初的问题具体与课堂讲座相关,但如果像我一样你必须听整个源代码文件,我也发现代码的结构会产生巨大的差异。我个人像读故事一样阅读代码 - 从左到右,从上到下。因此,当自下而上编写时,很难追踪不熟悉的代码。

  

因此岂不然后是简单地归于一个简洁,独特发音到每个这些不同的概念(包括一个为空白,在那里它是必需的)是可行的,并从那里?编程语言远比自然语言的详细规则,所以发音可能被标准化

视线也许吧,但你失去了你的目标。前提是这个人听做的的已经知道的语言。如果他这样做,我们可以简单地说,“包括的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