다른 사람의 코드를 어떻게 읽습니까? [닫은]


23

거의 모든 고급 프로그래머는 다른 전문가의 코드를 읽는 것이 매우 유용하다고 말합니다. 보통 그들은 오픈 소스를 조언합니다.

읽어 보시겠습니까? 그렇다면 얼마나 자주 그리고 코드를 읽는 절차는 무엇입니까? 또한 초보자가 SVN을 처리하는 것은 약간 어렵습니다. 해결책은 무엇입니까?

답변:


25

읽어 보시겠습니까?

예.

그렇게하면 얼마나 자주

매일. 끊임없이. 나는 수많은 오픈 소스 프로젝트 (주로 Python 관련)로 작업하고 가장 정확한 문서이므로 소스 읽어야합니다.

코드를 읽는 절차는 무엇입니까?

음 열고 읽습니다.

또한 초보자가 SVN을 처리하는 것은 약간 어렵습니다. 해결책은 무엇입니까?

열고 읽습니다. 그런 다음 더 읽으십시오.

쉽지 않습니다. 아무것도 쉽지 않습니다. 이해하기에는 왕도가 없습니다. 작동합니다.


답변 주셔서 감사합니다. 코드가 좋은지 아닌지를 정의하는 방법은 무엇입니까? 모든 오픈 소스 프로젝트가 실제 전문가가 수행하는 것은 아니기 때문에?
Sergey

1
@Sergey : "코드가 좋은지 아닌지를 정의하는 방법은 무엇입니까?" 코드를 읽으십시오. "좋은"은 주관적입니다. 도움이되고 이해할 수 있다면 좋습니다. 혼란 스럽거나 실제로 작동하지 않으면 좋지 않습니다. 유지 관리 가능, 보안, 적응 가능, 고성능 등의 많은 품질 속성이 있습니다. 코드는 어느 정도 우수 할 수 있습니다.
S.Lott

7
나는 저항 할 수 없었다 : osnews.com/images/comics/wtfm.jpg
Gary Willoughby

@ Sergey-코드가 작성되었지만 가장 큰 코드라도 읽을 수 없다면 (경험 수준으로 인해) 읽을 수 없다면 아무 소용이 없습니다. 시간을 가장 잘 사용하지 않는 것으로 보이지만 잘못 작성된 코드에 노출되므로 차이점을 배울 수 있습니다. S.Lott가 말했듯이 작업과 시간이 걸립니다.
JeffO

나는 소설을 읽는 것처럼 앉아서 코드를 읽을 수있는 사람들을 존경하지만, 때때로 조금 지루한 것을 발견합니다. 나는 나에게 '코드 읽기'가 내가 수행하는 활동을 실제로 설명하지는 않는다는 것을 깨달았다. 내가하는 것에 대한 더 좋은 표현은 '코드 이해력'이며 문서를 읽고 디버거에서 스테핑하고 테스트를 읽는 것도 포함한다. 코드 읽기에 대한 긴 글을 썼습니다 -technikhil.wordpress.com/2010/07/06/how-to-read-code-a-primer
Nikhil

9

수수께끼에는 여러 층이 있습니다. 먼저, 높은 수준의 조감도에서 시작하십시오. 프로젝트를 체크 아웃하면 디렉토리 구조에 많은 파일이 있습니다. 오픈 소스 또는 닫힌 소스를보고 있더라도 동일합니다 (소스 코드는 결국 소스 코드입니다). 이제부터 시작하십시오 :

  • 소스 파일은 어떻게 구성되어 있습니까? 파일 이름 또는 포함하는 디렉토리 이름으로 알 수 있습니까? 프로그래머들은 예측 가능한 이름과 논리적 구조를 좋아하는 경향이 있습니다. 특정 문제를 어디에서 찾아야하는지 대략적으로 알 수 있어야합니다.
  • 응용 프로그램의 특성은 무엇입니까? 웹 기반 명령 줄 GUI입니까? 이것이 중요한 이유는 실행 추적을 시작할 위치를 알고 싶어하기 때문입니다. 웹 기반 인 경우 앱에서 요청 처리를 시작하는 위치부터 시작하려고합니다. 프레임 워크를 기반으로 구축하면 더 좋습니다. 프레임 워크를 알게되면 일반적으로 존재하는 코드를 잘 이해할 수 있습니다. 그렇지 않으면 명령 줄 / GUI 앱의 해당 진입 점으로 시작합니다.
  • 종이 한 장과 연필을 얻거나 운이 좋으면 화이트 보드와 건조 지우기 마커를 사용하십시오. 구성 요소 이름을 지정하거나 코드에 제공된 이름을 사용하고 화살표가있는 상자 사이에 선을 그려서 처리 방식을 확인할 수 있습니다. 또는 알고리즘을보고있는 경우 조작 방법을 이해하고 스케치 할 수있는 방식으로 데이터 구조를 스케치하십시오.

연습이 필요하지만 확실히 가능합니다. 응용 프로그램이 사용하는 라이브러리와 프레임 워크에 대해 더 많이 알수록 코드 구성 방법과 특정 질문에 대한 답변을 찾을 수있는 위치를 더 많이 알 수 있습니다. 특히 간접적 인 코드 인 경우 일부 코드를 따라 가기가 약간 더 어렵습니다. 연필과 종이가 필요한 이유입니다. 결국 전구가 머리에서 사라지고 그것을 얻습니다. 나머지 코드를 읽는 것이 훨씬 더 합리적입니다.


코드 읽기의 한 측면은 추상화입니다. 소스를 구성하는 방법을 찾는 것과 같은 것들이 코드 읽기 프로세스를 확실히 추상화합니다.
David Gao

5

소설을 읽는 것처럼 읽지는 않지만 참고서를 읽는 방법과 비슷합니다. 좋은 방법은 체크인 메시지에서 최근에 수정 된 버그를 선택하고 변경된 내용을 확인한 다음 문제와 솔루션을 모두 이해할 때까지 관련 부분을 읽는 것입니다. 잘 알려진 보안 취약점은 포럼에서 그에 대해 많은 토론이 있기 때문에 선택하기에 재미있는 버그입니다. 그런 다음 버그 추적기에서 "낮은 매달린 과일"버그 중 하나를 선택하여 직접 해결하는 방법을 이해할 때까지 읽으십시오. 버그를 수정하거나 기능을 추가하는 과정에서 코드 판독 전문가의 대부분은 부수적입니다.

일반적으로 최상의 코드 샘플은 거의 눈에 띄지 않습니다. 한 번 이상 읽지 않고도 즉시 이해할 수 있습니다. 좋은 코드는 일반적으로 많은 초안을 거치더라도 작성하기가 매우 쉬운 것처럼 보입니다. 그것은 비록 당신이 생각한 첫 번째 방법은 아니지만 주어진 코드가 그것을 수행하는 확실한 방법이라는 역설적 인 느낌을 만들어냅니다.

그런 코드를 접할 때 코드를 작성하는 데 필요한 통찰력과 관련된 디자인 원칙을 이해하려고 노력하십시오. 따라서 앞으로 비슷한 상황에 처했을 때 동일한 원칙을 적용 할 수 있습니다.


4

복잡한 함수를 읽을 때 자주 사용하는 트릭은 코드 세그먼트를 변경하지 않고 로직을 더 읽기 쉬운 것으로 리팩토링하는 것입니다.


1
+1 : 나도. // 한때 리팩토링을보고 시간 낭비를 비난 한 상사가있었습니다. 그는 이해할 수 없었다. 정말 바보 야.
Jim G.

2

"다발 파일"을 어떻게 처리해야합니까? 문서화되지 않는 한 조직에 대한 사전 지식이 없다는 것을 제외하고는 자신의 코드를 작성할 때와 다르지 않습니다.

귀하가 주장한 프로그래머로서 "파일 묶음"에서 프로젝트 구조를 파악할 수 없다면 조직이 매우 잘못 구성된 프로젝트이거나 부적절한 프로그래머 (또는 극단적 인 경우)입니다.

독서를 시작하고, 일부 진입 점이나 필수 피벗 클래스 / 방법을 찾고, 그것이 어떻게 시작되는지 이해하십시오. 즉각적이지 않고 시간이 걸리지 만 문서가 전혀 없어도 할 수 있습니다.


3
"이해하기"에 "시간이 걸릴 것"은 "하드"의 정의와 거의 같습니다. 우리가 어려움을 겪기 때문에 매일 처리해야한다고해서 그렇게 어렵지는 않습니다. "어디에서 변경합니까?" 전문가들 사이에서도 일반적인 질문입니다. 또한 소스 제어 및 큰 코드 기반 처리는 대학 교육의 큰 구멍 중 하나입니다. 대학에서 하나 이상의 소스 파일을 필요로하는 하나 또는 두 개의 프로젝트를 수행했으며 최대 10 개의 파일 만 확보 한 것 같습니다.
Karl Bielefeldt

0

API 나 소프트웨어가 다른 프로젝트의 코드를 읽을 때 기대할 수있는 가장 좋은 점은 변수, 함수 및 매크로 이름이 모호하게 생략되거나 이름이 지정되지 않아 의도를 파악할 수 있다는 것입니다.

그러나 그 외에도 언어, 프로그래밍 기술 및 복잡한 코드로 뛰어들 수 있도록 코드의 목적 자체에 대한 상당한 지식이 필요합니다.

나는 현재 Lua 가 어떻게 마술을 수행 하는지 보려고 노력하고 있지만, 많은 식별자가 모호하고 오히려 어느 줄이 노력하고 있는지 알 수없는 지점으로 약칭되는 위의 시점에 도달하고 있습니다. 함수 코드의 어느 시점에서 내가 아는 것을 수행해야합니다 ... 잦은 단일 문자 변수와 오히려 약식 매크로 / 함수 이름이 내 머리 속에 있습니다.


0

@Berin Loritsch가 제안했듯이 "먼저, 높은 수준의 조감도에서 시작"을 살펴본 후 단위 테스트 및 / 또는 통합 테스트가있을 경우이를 찾을 수 있습니다.

unittest 는 (api-) 세부 사항이 어떻게 작동하는지 보는 데 흥미 롭습니다.

통합 테스트는 일반적으로 비즈니스 프로세스에 대한 좋은 개요를 제공합니다.

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