2010-01-28 3 views
9

this question을 본 후, 나는 맹인 프로그래머가 직면 한 다양한 도전 과제에 대해 생각해 보았고, 시각 장애가있는 프로그래머에게도 그 중 일부가 어떻게 적용되는지 생각해야했습니다. 특히, 소스 코드를 큰 소리로 읽는 문제는 나에게 멈추게한다. 나는 내 인생의 대부분을 위해 프로그래밍을 해왔으며, 나는 종종 프로그래밍에서 동료 학생들을 가르쳐 왔으며, 대부분 C++이나 Java로 가르쳤다.소스 코드 읽기 큰 소리

유일하게 C++ 표현식의 필수 구문을 구두로 전달하려고 시도 할 때 악화됩니다. 연설자는 영어로 관용적 인 번역을하거나, "괄호 여는", "비트와 같은"등의 명시적이고 느린 용어를 사용하여 구두법의 코드의 전체 사양을 제공해야합니다. 이러한 솔루션 중 어느 것도 최적이 아닙니다.

한편으로는 관용적 인 번역은 관련 프로그래밍 코드로 역 번역 할 수있는 프로그래머에게만 유용합니다. 이는 일반적으로 학생을 개인지도 할 때 적합하지 않습니다. 교대로, 교육 (또는 단순히 프로젝트 진행 속도를 높이는 것)은 출처가 큰 소리로 읽히는 가장 일반적인 상황이며, 오류에 대한 약간의 마진이 있습니다.

반면에 리터럴 스펙은 가파르게 느립니다. "012"는 간단히 #include <iostream>을 입력하는 것보다 "파운드, 포함, 왼쪽 꺽쇠 괄호, iostream, 오른쪽 꺾쇠 괄호, 줄 바꿈"을 말하는 데 훨씬 오래 걸립니다. 사실, 대부분의 숙련 된 C++ 프로그래머는 이것을 "include iostream"이라고 읽었을 것입니다.하지만 경험이 부족한 프로그래머가 많으며 때로는 리터럴 스펙이 필요할 수도 있습니다.

그래서이 문제에 대한 잠재적 인 해결책에 대한 아이디어를 얻었습니다.

C++에서 유한 연산자 keywords -63 및 operators-54가 있으며 이름 지정된 연산자를 할인하고 복합 할당 연산자와 접두어 대 접미사 자동 증가 및 감소를 구분하여 처리합니다. 단지 몇 가지 유형의 리터럴, 비슷한 수의 그룹화 기호 및 세미콜론이 있습니다. 내가 완전히 착각하지 않는다면 그게 그 것이다. 단순히 (가 필요합니다 공백 하나를 포함)이 별개의 개념을 각각 간결하고 독특한 발음을 돌리는 거기에서 이동에

그래서 그 다음에 실행 가능하지 않을까요? 프로그래밍 언어는 자연어보다 훨씬 규칙적이어서 발음을 표준화 할 수 있습니다. 의 언어 인은 C++ 코드를 구두로 전달할 수 있으며 언어의 규칙 성 및 고정 성으로 인해 음성 - 텍스트 소프트웨어는 C++ 스피킹을 고도의 정확성으로 수용하도록 최적화 될 수 있습니다.

제 질문은 두 가지입니다. 첫째, 제 해결책이 실현 가능합니다. 둘째, 다른 사람이 다른 잠재적 인 해결책을 갖고 있습니까? 나는 여기에서 제안을 받아 내 솔루션의 구현 예제와 함께 공식적인 종이를 생산하려고한다.

+1

흥미로운 사실 ​​하나, 모든 발음이 모든 국가에서 쉽게 발음 할 수있는 것은 아닙니다. –

+0

언어가 얼마나 작습니까? 음소 목록은 근사하기 쉬운 일반적인 소리 또는 소리로만 구성 될 수 있습니다. 순수한 모음 5 개와 유성음 및 무성음 정지음과 애매한 소리는 거의 없습니다. –

+2

다음 동영상은 정말 재미 있지만 http://www.youtube.com/watch?v=PEexpnypE5s와 완벽하게 일치합니다. – Makis

답변

4

새 단어를 작성하는 대신 "포함"과 같이 단어를 큰소리로 말하면 "키워드"로 시작하면됩니다. 일반적으로 다른 부분을 말하는 단어/구를 사용할 수도 있습니다. 새로운 프로그래머와 마찬가지로 말 그대로 어쨌든 모든 것을 설명해야하므로 특별한주의가 필요하다고 생각하지 않습니다. 나는 새로운 단어를 만드는 것이 더 어려운 방법이라고 생각한다.

따라서, 예를 들어 :

#include <iostream>; 

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

과 같이 읽을 수 없습니다 :

(키워드) 더 PARAMS이 블록을 시작하지 주요 INT iostream 새로운 온라인 (키워드)를 포함 할 경우 1 번 (연산자) 번호 2 개행 (키워드) 반환 번호 1 개행 (키워드) else 개행 (키워드) 반환 번호 0 끝 블록

()의 단어를 선택적인 설명 어로 처리하십시오. 대부분의 경우 복잡한 코드에서 사용됩니다. 설명적인 단어를 실제로 쓰길 원한다면 '문자 적'이라는 단어를 사용할 수 있습니다. 리터럴 키워드보다 이하 예

(키워드) 문자 번호 (오퍼레이터)의 경우를 들어

같은 "분할 같이

if (number < keyword) 

다른 단어뿐만 아니라 한정된 의미를 부여 할 수진다 다음 줄에서 계속하려면 현재 '괄호'를 닫지 말고 '줄'을 사용하십시오.

I pe rsonally이 방법을 사용하기 쉽고 가르치기 쉽다. 언제나처럼 YMMV.

물론 국제화 문제는 해결되지 않지만 최악의 경우 영어 이외의 언어로 사용되는 '새로운 단어'가 발생합니다. 이는 제안한 솔루션보다 나쁘지 않습니다. 단순히 (가 필요합니다 공백 하나를 포함)이 별개의 개념을 각각 간결하고 독특한 발음을 돌리는 거기에서 이동에

+2

당신의 솔루션이 국제화 제약없이 실용적이고 최적이기 때문에 하나 더합니다. 왜 더 많은 프로그래밍 언어가 지역화 된 (중국어 파이썬) 프로그래밍이나 언어 중립적 프로그래밍 (APL) 프로그래밍을 지원하지 않는지 나는 알지 못합니다. –

+1

감사합니다. 또한, 죄송합니다. 나는 '내면화'라고 타이핑했다. 나하지 않았다. 하하. 맞춤법 검사가 모든 것을 해결하지는 못합니다. –

2

그래서 그 다음에 실행 가능하지 않을까요? 프로그래밍 언어는 자연어보다 훨씬 규칙적이므로 발음을 표준화 할 수 있습니다.

아마도 당신의 목표는 잊어 버렸을 것입니다. 전제는 듣는 사람이 이 아니고이 이미 언어를 알고 있다는 것이 었습니다. 그럴 경우 우리는 #include <iostream>을 의미 할 때 "iostream 포함"또는 std::vector<int>을 의미 할 때 "int of vector"라고 간단히 말할 수 있습니다.

귀하의 전제는 청취하는 사람이 언어로 잘 이해하지 못해서 정확히 말해서을 읽지 않는 한 큰 소리로 읽은 것을 이해하는 것이 었습니다.

이제 소스 코드에서 발생하는 기본 요소를 설명하기위한 완전히 새로운 언어를 발명해도 문제가 해결되지 않습니다. 대신, 여전히은 모든 구문 토큰을 읽을 필요가 있습니다 (더 간단하고보다 "표준화 된 발음으로, 그렇지만 그들은 여전히 ​​소리내어 읽어야합니다). 을 듣는 사람은 여전히 ​​을 이해하지 못합니다. 왜냐하면 그들이 "include iostream"을 이해하기에 C++을 잘 모르는 경우, 그들은 표준화 된 발음을 이해하지 못할 것입니다. 그리고 만약 당신이 그들에게 당신의 발음을 가르치 려한다면 왜 C++ 구문을 직접 이해할 수 있었 을까?

C++ 코드가 으로 구성되는 경향이있는 근본적인 문제가 있습니다. 구문 토큰이 많이 있습니다.입니다. 다음과 같이 간단하게 입력하십시오.

std::vector<int> v; 

9 개의 토큰이 있습니다. 그 중 하나도 생략 할 수 없습니다. 듣는 사람이 "int라는 이름의 벡터를 선언합니다."와 같은 상위 수준 설명을 이해할만큼 코드와 구문을 잘 이해하지 못하면 어떤 형태로든 9 개의 토큰을 모두 읽어야합니다. "네임 스페이스 해석 연산자"및 "미만 기호"보다 간단한 이름이 생겨도 여전히 9 개의 토큰 이름을 나열해야합니다. 어느 것이 많은 일입니다.

간단히 말해서, 나는 작동하지 않을 것이라고 생각합니다. 첫째로, 그것은 여전히 ​​너무 성가시다. 둘째로, 청취자가 학생 인 이없는 동기가되었을 때, 듣는 사람에 대한 사전 지식이 있다고 가정하고있다. 높은 지식을 이해할 수있게 해주는 사전 지식, 코드의 레벨 설명.

+0

다음은이 문제의 두면이있는 것 같습니다. 높은 수준의 설명은 초보자 및 저급에서 숙련 된 프로그래머에게 더 적합합니다. 그 8 개의 토큰은 표준 라이브러리가 또한 "sa na ve la i ga li v se"처럼 색인 된 경우에 한해 많은 음절에 쉽게 대응할 수 있습니다. "li"은 다음과 같은 것을 나타내는 입자입니다. 원어민의 언어로 된 리터럴 (이 경우 식별자). 심지어 "li std na li vector la i ga li v se"는 나쁘지 않습니다. –

3

내가 13 살 때부터 프로그래밍을 보지 못한 개발자로서이 질문은 정말 흥미 롭습니다. 우선, 다른 사람들이 말한 것처럼 실제 언어를 배우는 것처럼 말한 언어를 배우는 데 시간이 오래 걸리기 때문에 코드를 이해할 수있는 새로운 언어를 배우는 것은 실용적인 해결책이 아닙니다.

  • 첫째, 당신은 "시간을 생각"얼마나 중요한지 놀랠 것 : 질문 읽기

    /나에게 발생이 더 포인트를 응답합니다. 이전에 C/C++/Java로 프로그래밍했으며 현재 C#을 기본 언어로 사용하고 있으며 스스로를 매우 경쟁력 있다고 생각합니다. 그러나 파이썬에서 몇 가지 프로젝트를 수행했을 때 나는 구두점을 사용하여 "생각 시간"을 빼앗아갔습니다. 잠재 의식을 가지고 구두점을 사용하여 방금 들었던 것을 소화했습니다 - 매혹적인 ... 그러나 상황은 다음과 같습니다. 리스너가 잘 알지 못하는 식별자와는 조금 다릅니다. 개인적으로 의미가 무엇인지 알아낼 시간이 없기 때문에 약자 변수 (RGXRatio, RGVRatio)를 사용하여 코드를 듣기가 어렵습니다. . 반면에 헝가리 표기법과 초기 밑줄은 변수의 길이 (말한 시간면에서)가 변수에 대해 수행되는보다 중요한 작업보다 훨씬 길기 때문에 코드를 듣기 어렵게 만듭니다.

  • 또 다른 고려해야 할 사항은 오디오 스트림의 길이는 근본 원인이 아니라 최종 결과입니다. 오디오가 너무 길다는 이유는 오디오가 1 차원 매체이기 때문에 텍스트를 읽는 것이 과거의 irerevant/친숙한 텍스트를 뛰어 넘고 건너 뛸 수있는 능력을 갖춘 2 차원 매체이기 때문입니다. 직접 대면하는 강의에는 효과가 없지만 말하기를 제어하는 ​​키보드 명령이 있다면 어떨까요? 텍스트 문서에서 화면 판독기를 사용하면 다음 줄로 건너 뛸 수 있지만 프로그래밍 언어의 의미에 맞게 조정하면 어떻게 될까요? Google의 T V Raman과 같은 일부 연구에서는 구문 강조를 위해 다른 음성을 사용하고, 대문자와 같은 메타 데이터를 표시하는 오디오 큐를 사용합니다.

나는 강의와 관련된 독창적 인 질문을 알고 있지만, 소스 코드의 전체 파일을 듣지 않으면 코드의 구조가 큰 차이가 있다는 것을 알게됩니다. 저는 개인적으로 이야기처럼 코드를 읽습니다. 왼쪽에서 오른쪽, 위에서 아래로. 상향식으로 작성된 경우 익숙하지 않은 코드를 추적하는 것은 매우 어렵습니다.

+0

코드를 읽는 방법이 궁금합니다. 그것을 타이핑하고 나서 다시 읽으십니까? – Matthew

+0

영어와 같은 프로그래밍 언어 또는 기존 언어의 영어와 유사한 발음을보다 쉽게 ​​찾을 수 있다고 생각하십니까? –

+0

Matthew : 내가 타이핑 할 때 쓴 글자/글자를 듣고, 줄 단위 나 글자 단위로 나중에 검토 할 수 있습니다. 화면 판독기는 포커스가있는 요소를 읽으며 소스 코드의 자동 완성에도 적용됩니다. Jon : 더 많은 영어가 유용 할 수 있지만 유출 된 추상화 (Applescript를 생각해보십시오.)가 위험 할 수 있습니다. 좀 더 영어로 일반적인 프로그래밍 언어를 읽는 것은 흥미로울 수도 있지만 다소 복잡 할 것입니다. (대학의 교사는 "x = 5"대신 "x가 5가됩니다", "x는 10과 같습니다"대신 "x == 10"및 "x ++"대신 "x 값에 1을 더함") – Saqib