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


15

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

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

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

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


1
공부가 있는지는 모르겠지만 개인적인 경험을 통해 언어를 몰라도 프로그램을 이해할 수있었습니다.
superM

2
이것은 한 쌍의 언어에 달려 있습니다. C #과 Java를 선택하면 거의 즉시 익숙해집니다. Algol vs. C를 선택하면 한 페이지 치트 시트로 친숙해집니다. C 대 프롤로그 또는 공백 대 Ada를 선택하는 것이 행운입니다. 그건 그렇고, 언어가 프로그램을 이해하는 데 유일한 역할을하는 것은 아닙니다 .C로 작성된 MFC 코드를 이해하려고하는 임베디드 디자인을 전문으로하는 C 전문가는 다소 유감입니다 (직접 경험입니다).
dasblinkenlight

대수학을 이해하는 사람이 미적분학을 이해하는 사람 대 삼각법을 선택하는 것이 얼마나 쉬운가요? 언어와 패러다임에 따라 다릅니다. 언어 간 차이를 감지하고 격리하는 것은 어려운 일입니다. 특히 언어가 끊임없이 발전하고 있기 때문입니다. 누구든지 합리적인 정도의 정확성으로 이해를 평가할 수 있을지 의문입니다.
Evan Plaice

답변:


9

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

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

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

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


6

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

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

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


훌륭한 API 디자인 및 명명 규칙은 도움이되지만 언어 기반 명명 규칙조차도 종종 해당 언어에만 적용되는 방식으로 '소견'됩니다. C # / Java (거의 동일) 외에도 대부분의 언어는 해당 언어에 고유 한 워크 플로우 및 구현이있는 다른 원칙으로 작동합니다. 예를 들어 메가 모 놀리 식 코어 프레임 워크 모델을 따르지 않는 언어에서는 일반적으로 공통 패키지 관리자를 사용하여 함께 묶인 거대한 패키지 에코 시스템을 찾을 수 있습니다.
Evan Plaice

3

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

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

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

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


1

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.