2010-01-28 43 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