프로그래머가 낯선 언어의 코드를 얼마나 잘 이해할 수 있는지에 대한 연구? [닫은]

언어 X를 아는 숙련 된 프로그래머가 언어 Y를 사용하여 유능한 프로그래머가 작성한 코드를 X 및 Y와 같이 널리 사용되는 언어에 대해 얼마나 잘 이해할 수 있는지에 대한 진지한 연구가 있습니까?

물론 프로그래머가 하나의 언어 만 알고 있기 때문에 현실 세계는 그렇게 간단하지 않습니다. 우리가 알고 싶은 것은 : 우리가 C #으로 프로젝트를하고 언젠가 Fortran과 Algol 만 알고있는 일부 오래된 물리학 자들이 그것을 본다면 어느 정도 이해가 되겠습니까? 그것들의 수학적 부분이 임의의 구두점 인 것을 무시하면 잘 읽힐 수 있습니다. 아니면 파이썬 전문가가 영리한 루비 스크립트에서 결함을 찾을 수 있습니까?

피상적 인 구문 수준에서 객체, 템플릿 메타 프로그래밍, 기능 등과 같은 웅대 한 개념 수준까지 문제가있을 수 있습니다. 한 프로그래머가 “외국 언어”로 코드의 모든 구문 세부 사항을 완전히 이해하거나 일부 위대한 개념의 종교를 따르기를 기대하지는 않지만 주요 제어 흐름을 어느 정도까지 얻을 수 있는지 궁금해합니다. 화면에 무언가가 그려지는 부분과 그 색이나 크기를 결정하는 것은 자동차를 운전하도록 프로그래밍 된 로봇이 엔진이 완료되면 엔진이 꺼지는 지 확인하십시오.

양질의 연구에는 출판 된 학술 연구, 일부 산업 그룹 또는 주요 소프트웨어 회사의 공식 보고서가 포함되지만 숙련 된 워크샵 및 강의실 리더 또는 기타 출처의 체계적인 편견없이 관찰합니다. 짧은 블로그, 단일 사례 또는 일화에 관심이 없습니다. (잘 읽었을 경우 몇 가지 일화가있을 수 있습니다.)



답변

언어가 서로 얼마나 관련되어 있는지에 달려 있습니다. 예를 들어, C 또는 C ++ 배경 지식이 있고 C # 또는 Java 프로그래밍을 수행 한 경우 해당 두 언어 (Java 또는 C #) 중 다른 언어를 읽고 이해하기가 쉬워야합니다. Lisp을 잘 알고 있다면 Scheme은 큰 문제가되지 않습니다. C, C ++ 및 Perl에 대한 지식만으로 PHP에 대한 지식이 없어도 PHP 프로그램을 디버깅했습니다. 나는 그 프로그램이 하스켈이나 스몰 토크로 쓰여졌을 때, 그것이 불가능한 것보다 훨씬 어려울 것이라고 확신합니다.

사실, 나는이 주제에 대한 학문적 연구가 어떤 의미도 있다고 생각하지 않습니다 (적어도 심각한 것은 아닙니다). “언어 X를 아는 표준 경험이 풍부한 프로그래머”와 같은 것은 없으므로 모든 연구에서 확실한 기초 데이터를 놓치게됩니다. 사람들은 서로 다른 지식을 가지고 있으며 같은 학교를 다니더라도 재능과 동기가 다릅니다.

그러나 제어 흐름의 주요 흐름을 어느 정도까지 얻을 수 있을지 궁금해하는 경우 화면에서 무언가가 그려지는 지점을 찾으십시오.

코드 품질이 너무 낮거나 사용 된 프레임 워크가 너무 복잡하거나 코드 기반이 매우 크기 때문에 언어에 매우 익숙한 경우에도 어려울 수 있습니다.


답변

학문적으로 수행 된 연구 참조에 대해서는 확실하지 않지만 C # / C ++ / Java / Python 등의 언어에서 메서드, 클래스 및 함수를 잘 설명하는 이름 은 비즈니스 프로세스 흐름뿐만 아니라 코드 기반을 쉽게 이해할 수 있어야합니다.

프로젝트 내에서 그리고 일반적으로 소프트웨어 개발에서 명명 규칙 은 매우 중요한 측면입니다. 그러나its importance고품질 소프트웨어 구축과의 관련성은 종종 간과되거나 무시됩니다.

.NET Framework에서 사용되는 명명 지침 및 .NET에서 사용되는 일반 명명 규칙도 참고할만한 좋은 참고 자료입니다.


답변

개별 프로그래머와 언어를 어떻게 내면화하는지에 달려 있습니다. C ++ 만 알고있는 친구가있는 동안 12 개 언어로 작업하는 데 전혀 문제가 없습니다. 그는 나보다 프로그래밍이 나쁘지 않고 다른 방법을 배웠습니다.

개인적으로, 관련 질문이 더 흥미 롭습니다. 코드에 버그가있을 때 (예 : 프로그래머 X는 그가 생각 someFunction(x, y)했지만 실제로는 다른 것을 썼습니다), 두 번째 개발자가 버그를 식별하는 것이 얼마나 어려운 가요 . 좋은 프로그래머 X는 컴퓨터가 무엇을하고 싶은지 매우 명백하게 해줄 것입니다. 그러나 그가 실수를했다면 큰 문제가 될 수 있습니다. 다음과 같은 C ++ 버그 :

int x = getCorrectValueForX();
if (x = 2)
   doSomethingWhenXIsTwo();

언어를 모르면 감지하기 어려울 수 있습니다.


답변

그것은 다른 사람들이 말한 것처럼 프로그래머뿐만 아니라 구문, 철학 및 구현에서 언어 간의 유사성에 달려 있습니다.

많은 다른 언어가 C 파생 구문을 사용하므로 해당 유형의 구문에 익숙한 경우 제어 흐름을 따르는 것이 더 쉽습니다. 강력하게 형식화되고 느슨하게 형식화 된 언어, 고차 함수 지원 언어, 추상화 수준 및 프로그래밍 철학이 적용됩니다. 구문을 읽을 수있을뿐만 아니라 언어 개념과 철학에 익숙해야합니다.

예를 들어 C를 배운 경우 C #, Java 또는 C ++ 등에서 제어 흐름을 도출 할 수 있다고 기대하는 것이 합리적이라고 생각합니다. 구문의 차이로 인해 VB를 해독하는 것이 조금 더 어려울 것입니다. 클로저, 약한 타이핑 및 고차 함수로 인한 JavaScript (C 에서이 작업을 수행 할 수 있지만 약간의 번거로운 일임을 알고 있습니다). 그러나 완전히 다른 프로그래밍 패러다임을 사용하기 때문에 Lisp, F #, R 또는 신의 금지 된 어셈블리를 디버그 할 수는 없습니다.

TL; DR 구문을 인식하는 것이 중요 할뿐만 아니라, 선언이나 메소드 호출을 해독 할 수있는 대부분의 시간에 프로그램이 특정 방식으로 작성된 이유를 이해할 수 있다는 것은 코드를 이해하고 읽는 요점입니다. .