2010-01-28 111 views
9

看到this question之后,我开始思考盲人程序员面临的各种挑战,以及他们中的一些如何适用于有眼光的程序员。特别是,朗读源代码的问题让我停下来。我一生都在进行编程,并且我经常为同学们编程,通常是用C++或Java编程。朗读源代码

它是唯一的加重尝试口头传达C++表达式的基本语法。演讲者必须使用明确而缓慢的术语,例如“开头括号”,“按位和”等,将口译中的惯用翻译译为英语,或者以口头方式提供完整的代码说明。这些解决方案都不是最佳的。

一方面,惯用翻译只对程序员有用,他可以将其解释回相关的编程代码中 - 这在辅导学生时通常不是这样。反过来,教育(或简单地让某人加快项目速度)是大声朗读源代码的最常见情况,并且错误率很小。

另一方面,字面规范加速缓慢。说“英镑,包括,左尖括号,iostream,右尖括号,换行符”比仅仅输入#include <iostream>要花费更长的时间。事实上,大多数有经验的C++程序员只会将其看作“包含iostream”,但再次,缺乏经验的程序员比比皆是,字面规范有时是必需的。

所以我对这个问题的潜在解决方案有了一个想法。

在C++中,有有限组的keywords -63和-54 operators,折扣命名运营商和处理化合物赋值运算符和前缀与后缀自动增量和减量为不同的。只有几种类型的文字,类似数量的分组符号和分号。除非我完全错误,否则就是这样。

那么,如果简单地将一个简洁的,独特的发音赋予这些不同的概念(包括一个用于需要的空白处)并且从那里出发的话,那么不可行吗?编程语言比自然语言更规则,所以发音可以标准化。 任何语言的演讲者都能够口头传达C++代码,并且由于语言的规律性和固定性,语音到文本软件可以被优化以高度准确地接受C++语音。

所以我的问题是双重的:首先,我的解决方案是可行的;其次,其他人是否有其他潜在的解决方案?我打算从这里收集建议,并使用它们来制作一份正式文件,并附带我的解决方案的示例实施。

+1

听起来有趣,有一点要记住:在每个国家并不是每个发音都很容易发音。 – 2010-01-28 08:03:32

+0

由于语言有多小,音素库存可能只包含常见的声音或易于近似的声音。五个纯元音和少量有声和无声停止和声音提供了足够多的潜在词汇。 – 2010-01-28 08:28:55

+2

以下视频绝对是热闹的,但完全适合这个话题:http://www.youtube.com/watch?v = PEexpnypE5s。 – Makis 2010-01-28 08:40:19

回答

4

而不是创建新的“单词”来描述它们,对于诸如“包含”之类的内容,您可以在大声说出时简单地用“关键字”作为前缀。您可以使用通常所说的其他部分的单词/短语。和任何新的程序员一样,无论如何你必须从字面上描述一切,所以我不认为这需要特别的关注。我认为创造新词是更难的方法...

所以,例如:

#include <iostream>; 

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

能否被读出为:

(关键字)包括的iostream新行 (关键字)INT主没有PARAMS启动 块如果数1 (运营商)小于 第2条新线(关键字)返回 第1条新线(关键字)否 新线(关键字)返回号码0结束 块

将()中的单词当作可选的描述性单词,最有可能用于更复杂的代码中。如果你想让他们真正写出描述性单词,你可以使用单词'literal'。例如

(关键字)如果文字数(操作者)比字面关键字少

变得

if (number < keyword) 

其它词语可以给予定义的含义,以及,如“分裂“行”,当你想让它们继续下一行时,不关闭任何当前左括号等。

我pe从根本上找到这个方法使用起来非常简单,而且易于教授。 YMMV,一如既往。

当然,这并不能解决国际化问题,但在最坏的情况下,会导致在非英语语言中使用“新词”,这并不比您提供的建议解决方案差。

+2

加一个,因为您的解决方案是实用且最佳的,没有国际化限制。我不明白为什么更多的编程语言不支持本地化(中文Python)或语言中立(APL)编程。 – 2010-01-28 08:18:31

+1

谢谢。另外,哎呀。我输入了“内部化”。没有我哈哈。拼写检查并不能解决所有问题:) – 2010-01-28 08:26:17

2

那么岂不则是可行的,仅说一个简洁,独特的发音上述每一个不同的概念(包括一个空格,它是必需的),并从那里走?编程语言比自然语言更加规律,所以发音可以标准化。

也许,但你已经失去了你的目标。前提是听的人没有而不是已经知道该语言。如果他这样做,我们可以简单地说“包括iostream”,当我们的意思是#include <iostream>,或者当我们的意思是std::vector<int>时,是“int向量”。

你的前提是,听的人对语言不够熟悉,无法理解你朗读的内容,除非你读出,正好它的意思。

现在,发明一种全新的语言来描述源代码中出现的原语并不能解决问题。相反,你仍然必须读出每一个句法标记(用更简单,更“标准化”的发音,是的,但他们仍然必须大声朗读),并且听仍然的人不会理解你,因为如果他们不了解C++,无法理解“包含iostream”,他们也不会理解你的标准化发音。如果你要教他们你的发音,为什么要打扰,当你可以教他们直接理解C++语法呢?

还有一个根本问题,C++代码倾向于由句法令牌的很多组成。就像这样简单:

std::vector<int> v; 

我计数9个标记。没有一个可以省略。如果听的人不能理解代码和语法以理解诸如“声明一个int向量,名为v”这样的高级描述,那么你必须以某种形式读出所有9个标记。即使您提出的名称比“名称空间解析运算符”和“小于号”简单,您仍然需要列出9个标记名称。这是很多工作。

总之,不,我不认为它会工作。首先,它仍然太麻烦,其次,它假定人们倾听的先前知识,当动机是听到的人是学生而没有先前的知识使得有可能理解高分辨率的图像,对代码的级别描述。

+0

我想那个问题有两个方面。高级描述更适合初学者和低级至有经验的程序员。这八个标记可以很容易地只对应于许多音节,前提是标准库也被编入索引,例如“sa na ve la i ga li v se”,其中“li”是一个粒子,表示跟随它的是以母语者的语言表示的文字(在这种情况下是标识符)。即使是“st na li vector vector”is is“也不错。 – 2010-01-28 09:09:17

3

作为一名盲人开发者,从13岁开始编程,我发现这个问题真的很有趣。首先,正如其他人所提到的那样,学习一门能够理解代码的新语言并不是一个实际的解决方案,因为学习语言会像学习实际的编程语言那样花费更长的时间。

读的问题/回答发生在我另外两个点:

  • 首先,你会惊奇地发现重要的“思考的时间”是。我以前使用C/C++/Java进行编程,现在使用C#作为我的主要语言,并认为自己非常有竞争力。但是当我用Python做了几个项目时,我发现标点符号减少了我的“思考时间” - 潜意识上,我正在用标点符号来消化我刚才听到的 - 迷人的......然而,情况是在标识符方面有点不同,因为听众并不知道这些标识符 - 我个人觉得听代码的缩写变量(RGXRatio,RGVRatio)很困难,因为我没有时间弄清楚它是什么意思。另一方面,由于变量的长度(就说话时间而言)比对这些变量进行的更重要的操作要长得多,匈牙利符号和初始下划线使得代码难以听取。
  • 要考虑的另一件事是音频流的长度是最终结果,但不是根本原因。音频这么长时间的原因是因为音频是一维媒体,而阅读文本是一种二维媒体,能够跳过并跳过irelevant /熟悉的文本。它不适用于面对面的演讲,但如果有键盘命令来控制演讲会怎么样。在文本文档中,我的屏幕阅读器让我跳到下一行,但如果这适合编程语言的语义,会发生什么呢?一些研究(例如谷歌的T V拉曼)包括使用不同的语音进行语法突出显示,以及音频提示来标记元数据(如首都)。

我知道原来的问题,特别是有关授课的讲座,但如果像我自己一样,你必须听整个源代码文件,我也发现代码的结构有很大的不同。我亲自阅读代码,如故事 - 从左到右,从上到下。所以当自下而上编写代码时很难追踪不熟悉的代码。

+0

我很好奇你如何阅读代码。你把它输出,然后让它读回给你? – Matthew 2010-04-17 21:47:57

+0

你认为你会发现一种更像英语的编程语言,或者至少是一种更像英语的现有语言的发音,更容易在听觉上进行解析吗? – 2010-04-17 22:56:15

+0

Matthew:当我输入字母/单词时,我会听到字母/单词,然后可以逐行或逐字回顾。屏幕阅读器也读取焦点元素,这也适用于源代码的自动完成。 乔恩:更多的英语语言可能是好的,但你冒着漏洞抽象(想想Applescript)。用一种更英语的方式阅读一门正常的编程语言可能会很有趣,但我认为这会很麻烦(我的大学老师说:“x变成5”而不是“x = 5”,“x等于10”的“x == 10”和“加1到x的值”而不是“x ++”) – Saqib 2010-04-18 19:54:54