내가 모르는 언어로 코드를 검토하는 것이 효과적입니까?


108

숙련 된 개발자이지만 많은 코드 검토를 수행하지 않았습니다. 파이썬으로 작성된 코드를 검토하라는 요청을 받았지만 파이썬을 모르겠습니다.

내가 모르는 언어로 코드를 검토하는 것이 어떤 의미가 있습니까?


62
접선으로 CodeReview.SE로 이동하여 python 태그를 살펴보십시오. 질문 만보 고 코드에 어떤 조언을 줄 것인지 고려한 다음 답변에 표시되는지 확인하십시오.


14
파이썬에 대해 더 많이 배울 수있는 훌륭한 방법 인 것 같습니다. 재미있게 보이는 것에 질문하십시오-그중 일부는 언어를 이해하지 못하고 일부는 합법적 인 코드 검토 항목이 될 것입니다.
Dan Pichelman 2016 년

9
@RobbieDee 절대적으로! 테디 베어 인 경우에도 누군가에게 코드를 설명하는 것은 종종 가치가 있습니다.
Kilian Foth

34
당신은 그렇게하라는 요청을받는다고 말합니다. 이 작업을 수행하는 사람은 조직에 가치를 더할 것이라고 생각합니다. 당신이 그 가치의 본질이 무엇인지 알고 싶다면 인터넷에 낯선 사람 이 아닌 사람 에게 물어보십시오 ! 우리는 그 사람의 머리 속에서 무슨 일이 일어나고 있는지 모른다. 아마도 코드는 품질이 낮아 초보자조차도 문제를 찾을 수 없습니다. 아마도 코드는 품질이 뛰어나서 좋은 습관을 배울 것입니다. 누가 말할 수 있습니까? 누군가는 그것이 가치가 있다고 생각합니다. 그 사람에게 가치가 무엇인지 물어보십시오.
Eric Lippert

답변:


120

어떤 의미입니까? 예. 프로그래밍 언어 의 의미 에 대해 아무것도 모르더라도 문자를 읽고 일관성이없는 형식, 주석 누락, 잘못 선택된 식별자, 명백한 복제 등을 확인할 수 있습니다.

당신의 시간 비용을 상환하기에 충분한 의미, 또는 충분한 의미 ? 잘 모르겠습니다. 이는 귀하의 입장, 팀의 워크 플로에서 코드 검토의 중요성 및 충분히 정량화 할 수없는 몇 가지 다른 요인에 따라 다릅니다.


50
일부 코드 검토를 수행하면 모듈, 프레임 워크 또는 언어를 알 수있는 좋은 방법이므로 어쨌든 귀하의 시간에 가치가있을 수 있습니다 (아마도 힌트를 얻을 수 있습니다 ...). 언어와 코드에 익숙한 사람이 그것을 보지 않으면 서 그런 리뷰에 서명하지 않을 것입니다.
Ordous

8
또한 도메인에 대한 지식이 풍부하고 코드의 이름이 적절하게 지정 / 코멘트 된 경우에도 여전히 잘못된 / 오해 / 실종 기능을 높은 수준에서 발견 할 수 있습니다 (구문 문제로 인해 실수를 발견하지 못할 수 있음)
Dan

4
외부인으로서 펜스 포스트 오류나 올바른 양의 등호 및 그와 같은 것들을 적용 할 때 오류가 발생할 가능성 이 큽니다.
KlaymenDK

2
부울 컨텍스트의 @KlaymenDK 할당은 Python에서 (적어도 일반적으로) 구문 오류입니다. 잘 작성된 Python은 배열 / 목록 색인으로 직접 작업하지 않아도되므로 펜스 포스트 오류는 줄어 듭니다. (당신이 할 때도 보통은와 함께 enumerate있습니다.) 나는 당신의 의견이 왜 익숙하지 않은 언어를 복습하려고 노력 하는가에 대한 훌륭한 예라고 생각합니다.
jpmc26

1
@Mawg-자동화 된 테스트라고 생각하는 경향이 있습니다. 언어에 대한 전문 지식이 있더라도 코드를 실제로 보거나 실행하지 않고 결과를 관찰하여 코드가 실제로 설계 사양 충족하는지 여부를 말하기가 어렵습니다 (설계 사양이 너무 상세하여 본질적으로 코드가 아닌 한) . 답변이 열거하는 측면은 코드 검토를 수행해야하는 많은 이유를 포함합니다. 코드 검토에는 일반적으로 검토중인 코드의 실행이 포함되지 않습니다.
aroth

59

Code Review Stack Exchange 에서 정기적으로 기고자로서 언어와 무관 한 문제로 많은 질문을 받았습니다.

  • 서식, 들여 쓰기
  • 범위
  • 루프
  • 타입 조작

그리고 목록은 계속됩니다. 그러나 언어를 알 필요는 없지만 여전히 이러한 문제 / 포인트를 검토 할 수 있습니다.

우리의 최고 사용자 중 일부는 적극적으로 사용하지 않거나 모르는 언어로 최고의 답변을 얻습니다. 상위 10 개 중 2 개조차도 내 컴퓨터에서 컴파일 / 실행할 수없는 언어로되어 있습니다.

심지어 누군가의 의사 코드를 검토하는 것과 동일하다고 말할 수도 있습니다. 당신이 이해하는 것과 관련된 것들을 관찰하고 의견을 말할 수있는 한, 괜찮을 것이며, 관련 될 것입니다.


2
심지어 PHP 프로그램에 대한 답변썼습니다 . 가장 큰 대답은 아니지만 원래 루프 선언이 추악하다고 유지합니다.
Hosch250

4
C #을 검토하고 작성하고 작성한 내용을 검토함으로써 C #을 배웠습니다.
RubberDuck

5
파이썬을 모른다면, 언어 들여 쓰기의 중요성을 인식하지 못할 것입니다 ...
Floris

2
당신이 모르는 언어로 된 가장 큰 답변의 2/10에 대해. 유권자들이 그들에 대해 알고 있다고 말하는 사람은 누구입니까?
Martin Smith

나는 언어를 모르지만, 나는 여전히 내 진술을 확인하고, 엉망인 경우 ... 나를 믿어 라, 나는 그것에 대해들을 수있다
Quill

44

일반적인 조언

내 생각에 결론은 다음과 같습니다.

  • 기능과 일반적인 관용구 를 알 수있을만큼 언어를 잘 모르면 검토에 크게 기여하지 않을 것입니다.
  • 언어의 특징과 숙어 를 배우고 싶다면 검토에 참여할 수 있습니다. 초점은 관용구를 관찰하고 자신에게 적합하지 않은 패턴과 조직에 대한 질문을해야합니다. 이것은 문제 영역을 식별하는 데 도움 이 수 있지만 개발자가 자신이 한 일을 방어하도록 강요 할 수 있다는 의미에서만 가능합니다. 지식 격차의 여지가있는 방식으로 질문하십시오. 이는 검토 자체에서 순 비용 이 될 수 있지만 그 비용은 지식에 대한 투자입니다.
  • 언어의 기능, 숙어 및 표준에 익숙해 질 때까지 기여할 수있는 능력이 제한됩니다. 실제로 언어 로 상당한 양의 코드를 작성 하기 전까지는 이것이 변경되지 않을 것 입니다.

파이썬 특정 고려 사항 및 예제

파이썬을 모르는 특정 상황에서는 특히 주의해야합니다. 파이썬에는 좋은 관용구가 다른 언어에서 기대할 수있는 것과 크게 달라지게하는 많은 관용구와 표준 관행이 있습니다. (실제로, 파이썬이 강조하는 것들로 인해 코드 가 다른 언어로 더 좋아 보이게되었다고 생각합니다 .) PEP8 외에도 파이썬이 권장하는 사고 방식을 완전히 놓칠 수있는 좋은 예가 있습니다.

간단한 예를 봅시다. 이 코드를 보자 :

f = open('/home/me/something.txt')
try:
    content = f.read()
finally:
    f.close()

이 코드의 문제를 보시겠습니까? 파이썬으로 작업하지 않았다면 아마 그렇지 않을 것입니다. 문제는 있다는 것입니다 많이 하지 파이썬에서 선호하는 스타일 정확히 같은 일이 :

with open('/home/me/something.txt') as f:
    content = f.read()

이것은 컨텍스트 관리자입니다. 그들이 좋은 점을 알고 있습니까? 언제 사용하는 것이 적절한 지 알고 있습니까? 자신 만의 것을 만드는 것이 언제 적절한 지 아십니까? 아니? 그렇다면 파이썬을 검토 할 준비가되지 않았을 것입니다.

다른 예를 봅시다.

def add_fifty(other_list):
   result = list()
   for i in other_list:
       result.append(i + 50)
   return result

x = range(10)
y = add_fifty(x)

문제가 보입니까? 문제는이 방법이 완전히 불필요하다는 것 입니다. 작업이 이렇게 간단한 경우에는 이해력을 사용해야합니다.

x = range(10)
y = [i + 50 for i in x]

그것을 보지 못했다면 파이썬의 기능과 관용구에 익숙하지 않습니다.


1
마지막 예제에서 최종 코드를 보았을 때 (파이썬을 알지 못하는 채로) 그것이 무엇을 할 수 있는지 알았을 것입니다. 내가 전에는 고려하지 않은 좋아하는 언어로 비슷한 것을 할 수 있는지 궁금해하기 시작할 수 있습니다.
gnasher729

1
@ gnasher729 "실제로, 파이썬이 강조하는 것은 코드가 다른 언어가 아닌 다른 언어로 더 좋아 보이게 만들었다 고 생각합니다." =) 내가 다른 언어에서 원격으로 비슷하다고 알고있는 유일한 것은 .NET의 LINQ와 Java 8의 Stream 입니다. 루비는 뭔가가있을 수 있습니다, 그리고 난 확실히 함수형 언어는 뭔가 가까이 온다. 예제를 통해 필자의 요점은 파이썬에 익숙하지 않다면 "나쁜"버전에 도전하는 것조차 알지 못할 수도 있다는 것이다.
jpmc26

@x = 1 .. 10; @y =지도 {$ _ + 50} @x;
파이프

2
코드 검토는 (외부 프로그래머에게) 특정 언어로 모호한 구문을 구현하는 것보다 논리 오류에 관한 것입니다. 그것은 알고리즘을 완전히 잘못 구현하는 것과 같은 논리 버그를 찾는 것입니다 (추가해야 할 때 나누기 사용). 따라서 코드는 사양에 정확하게 맞지 않습니다. 결과 출력이 올바른 한 중요하지 않습니다. 적어도 이와 같은 특정 최적화가 걱정된다면 팀 코드 검토가 훨씬 좋습니다.
phyrfox

3
@phyrfox 그것은 사실이 아닙니다. 논리 오류가 발견 될 수 있지만 코드 검토는 모범 사례, 보안, 성능, 안정성, 가독성 / 유지 보수 가능성 등에 관한 것입니다. 무언가를 검토하기 전에 실제로 테스트해야합니다. StackExchange의 코드 검토 정의 는 매우 중요 합니다. 파이썬에서 내가 언급 한 예제는 "작은 최적화"가 아닙니다. 이러한 패턴을 사용하지 않는 Python 개발자는 경험이 부족하거나 시대를 초월하거나 무능합니다. 이것들은 언어의 기본 요소입니다.
jpmc26

21

Python을 모르기 때문에 Python 코드를 정확하게 검토하도록 요청했을 수도 있습니다 . 팀에 "어리 석음"을 갖는 것이 유용한 관리 이론 이 있습니다. 나는 당신에게 나쁜 이름을 부르지 않습니다 :) 아이디어는 팀이 그룹 사고로 고통 받고 터널 비전을 개발할 수 있다는 것입니다. 이 문제를 해결하는 한 가지 방법은 다른 팀 구성원이 "어리 석음"을 고려할 팀원, 즉 주제를 모르는 사람을 포함시키는 것입니다. 자신에게 알리기 위해 질문을 할 것이며, 다른 팀 구성원이 고려하지 않은 관점에서 질문이 나올 것입니다.

당신은 파이썬을 모른다. 그래서 파이썬 코더들에게 평범하게 보일 수있는 것은 당신에게 이상하게 보일 수있다. 팀이 고려하지 않은 개선을 제안 할 수 있습니다.


1
이것은 나의 대답이되어야했다. 나는 주어진 파이썬 루틴과 주어진 파이썬 전문가 그룹과 함께 주어진 날에 코드를 추가하고 싶습니다. 그 코드는 GARBAGE입니다.
dwoz

그리고 종종 "바보"에게 무언가를 설명하는 단순한 행동은 "아!" 코드가 의도 한 작업을 수행하지 않거나 일부 핵심 사례를 놓친다는 것을 갑자기 깨닫는 "전문가"의 순간. 또한 지식의 보급을 시작하는 적절한 방법이기도합니다.
TripeHound

21

코드 검토는 잘못된 철자와 잘못된 형식의 변수를 검색하는 것이 아닙니다. 코드 검토를 사용하여 그러한 것을 찾으면 시간 낭비를 멈추고 도구를 사용하십시오.

코드 검토는 초보자 프로그래머가 설계를 개선하고 일반적인 실수를 감지하는 것입니다.

C ++로 프로그래밍하고 파이썬을 충분히 알지 못하므로 파이썬 코드를 감히 감히하지 않을 것입니다. 그러나 Java 코드 검토를 도울 수 있습니다.

프로그래밍 언어를 말하지 않았지만 프로그래밍 언어를 모르는 경우 코드 검토에 기여할 수있는 내용이 없습니다.


23
실제로, 잘못 명명 된 변수와 좋은 변수를 구별 할 수있는 도구가 있습니까? 나는 reeeeealy 하나를보고 관심이있을 것입니다.
Davor Ždralo

1
@ DavorŽdralo Java에 Checkstyle이 있다는 것을 알고 있습니다. 보다 공식적인 정적 분석 도구는 많은 언어에서 일반적으로 사용되며 코딩 표준을 적용하는 것이 일반적으로 가장 적은 의무입니다.
Shaz

9
여기에 Code Review의 정의에 약간의 차이가 있다는 느낌이 들었습니다. CR Meta에 대한이 질문을 상기시켜줍니다 . 코드 검토 란 무엇입니까? . 구체적인 내용을 배제하지 않고 "코드 검토는 XYZ에 관한 것이 아닙니다"라고 말합니다. 또한 숙련 된 프로그래머는 코드를 검토 할 필요가 없으며 매우 동의하지 않는 것 같습니다.
Simon Forsberg

3
@SimonForsberg 그것은 내가 말하는 것이 아닙니다. 선임 프로그래머조차도 좋은 코드 검토를 통해 무언가를 배울 수 있습니다. 그러나 유일한 주석이 "여기에서 변수의 철자를 잘못 입력했습니다"종류의 주석이면 시간 낭비입니다.
BЈовић

2
@ BЈовић 아니, 그것은 당신이 찾을 수있는 최악이 아니지만 "아직 가치있는 가장 작은 것"에 아주 가깝습니다.
Vatine

11

코드 검토 (실제로 결함을 찾는 것 외에도)는 코드가 추가되거나 변경되는 한 팀 구성원에서 다른 팀 구성원에게 좋은 소개입니다. 당신이 경우 숙련 된 개발자 , 당신은 대부분 무슨 일이 일어나고 있는지 이해하기에 충분한을 통해 읽을 수 있어야합니다.

팀 리더의 관점에서 코드 검토를 살펴보십시오. 애플리케이션 이 수행해야하는 작업 을 이해하는 사람이 있고 (비즈니스 로직), 코드가 수행되고있는 것을 이해하는 사람이 있습니다 (구현 로직). 거기에 모든 사람들이 어떻게 어울리는 지에 대한 아이디어가 필요합니다.


7

당신은 반드시 유일한 검토자가 아니어야 하지만, 당신 이 검토 자 중 하나 가되어야 할 많은 이유가 있습니다 . 언어를 알지 못하는 것은 코드 검토에서 대답해야하는 많은 질문에 방해가되지 않습니다. 예를 들어, 저는 이 사이트 의 C # 태그 에서 상위 20 명의 답변자 중 한 명이며 C # 에서는 컴파일 된 hello world만큼 많지 않습니다.

언어를 몰라도 공유 할 수있는 몇 가지 전문 지식 :

  • 도메인 지식.
  • 일반적인 객체 지향 디자인.
  • 일반적인 프로그래밍 실습 : 이름 지정, 명확성 등

또한 새로운 제품의 속도를 높이는 좋은 방법입니다. 방금 새 팀에 합류하여 언어를 잘 사용하지만 도메인을 모릅니다. 코드 검토에 참여함으로써 도메인 측면을 더 잘 배울 수는 없었지만 도메인 측면을 더 잘 배울 수있었습니다.

귀하의 경우 다른 검토자가 남겨둔 의견을 보면서 새 언어의 관용구를 배우는 좋은 방법이 될 것입니다. 인터프리터는 코드가 파이썬인지 아닌지를 신경 쓰지 않기 때문에 다른 방법으로는 배우기가 매우 어려운 종류입니다.


5

이것은 상생의 상황 일 수 있습니다. 나는 당신이 지식저주에 의해 오염되지 않은 파이썬 처녀 이기 때문에 당신이 특히 귀중한 검토자가 될 수 있다고 말할 것입니다 .

이런 식으로 생각하십시오 : 파이썬 처녀조차도 그것을 이해할 수있을 정도로 코드가 명확하다면, 그것은 좋은 코드 여야합니다. 이해하기 어려운 부분은 재 작업 또는 더 나은 주석의 후보 일 수 있습니다.

당신이 갈 때 새로운 언어를 선택할 것이기 때문에, 그것은 또한 당신에게도 유익 할 것입니다. (행복하게도, 여러분이 제공 한 코드는 배우기 좋은 예입니다.)이 배열은 "실행 가능한 의사 코드"라는 평판을 가진 언어 인 Python에 특히 효과적입니다. 숙련 된 개발자라면 파이썬 프로그램의 요점을 이해하는 데 큰 어려움이 없어야합니다.

주의 사항은 언어 별 문제로 인해 발생하는 버그를 발견하지 못할 것이라는 점 입니다. 그러나 버그 찾기 만이 코드 검토의 목적은 아닙니다. 다른 것이 없다면, 동료의 코드에서 어떤 종류의 일이 일어나고 있는지를 인식함으로써 지식 이전에 참여하게 될 것입니다.


2

한때 하청 업체가 수행 한 프로젝트를 감사하라는 요청을 받았으며 심각한 성능 문제가있는 것으로 보입니다. 중요한 요소가 단일 Perl 모듈이라는 것을 금방 알았습니다. 나는 전에 Perl을 본 적이 없었으며 그것을 아는 조직에는 아무도 없었으므로 직접 이해하려고 노력했습니다. 나는 세부 사항을 이해하는 한 결코 얻지 못했지만 사용중인 알고리즘이 데이터 크기에서 2 차적이라는 것이 매우 분명했으며 이것이 모든 문제의 원인이었습니다. 그렇습니다. 완전히 이해하지 못하는 언어로 코드를 읽는 것은 확실히 생산적 일 수 있습니다. 보너스는 당신이 그것에 대해 새로운 트릭을 배우는 것입니다.


1

몇 가지 관찰 :

1) 숙련 된 개발자라면, 작업을함으로써 파이썬 (또는 최소한 알아야 할만큼)을 선택하게됩니다. "행함으로써 배우는"경우가 될 것입니다. 처음에는 어려울 것이지만 언어를 선택하면 더 쉬워 질 것입니다. 이것을 다른 언어를 배울 수있는 기회로 생각하십시오 (사람들은 종종 "몰입"을 통해 "외국어"언어를 배웁니다).

2) SE 사이트에는 "비 기술적"이지만 문법, 커뮤니케이션 및 논리에 능숙한 귀중한 사람들이 많이 있습니다. 그러한 사람들은 피험자에게 "신선한 눈"을 가져오고, 다른 사람들이 그리워하는 많은 "두뇌가없는"수정을합니다. 논리 및 전체 프로그래밍에 정통한 "기술적"(비 파이썬) 기술에 대해 아마 상담을 받고 있습니다.

많은 코드 검토를 수행하지 않은 경우 거의 모든 코드 검토 경험이 개발자로서 도움이 될 것입니다. 이것은 당신의 기술과 요구와 팀의 기술 사이에 잘 ​​어울리는 것 같습니다.


1
나는 코드를 검토하는 것이 "학습에 의한 학습"이 의미있는 정도인지에 의문을 제기한다. 아마도 내 리뷰 경험이 당신의 경험과 다르지만, 거의 의미가 없거나 실질적인 코드 작성이 거의 없으며 거의 ​​실행되지 않습니다.
화면 이름

@EsotericScreenName-코드를 작성하거나 알고있는 사람으로부터 얼마나 많은 피드백을 받는지에 달려 있다고 생각합니다. 또한 다른 언어로 작업하는 도메인 영역에있을 가능성이 높으므로 일반적인 코드 예제보다 관련성이 높습니다. 대부분의 코딩 예는 단지 작은 압정 조각을 수행하는 방법을 보여 주지만 큰 프로젝트의 일부로 거의 표시되지 않습니다.
JeffO

0

이는 검토의 목표가 무엇인지에 달려 있습니다. 즉, 효과적인 의미 입니다.

여전히 일부 문제를 감지 할 수 있습니다. 당신이 그들이 검토해야 할 전부이고 그들은 당신이 그것을 살펴 보는 것이 도움이되고 무언가를 잡을 수 있기를 바라고 있습니다. 많은 구조 개념이 언어간에 유사합니다. 특히 댓글을 검토 할 수 있습니다. 특정 언어를 사용하지 않는 프로그래머는 여전히 무슨 일이 일어나고 있는지 잘 이해할 수 있어야합니다. 그렇지 않다면 ... 그러면 주석이 부족한 곳을 알려줄 수 있습니다. 잘 주석 처리 된 경우 ... 진행중인 코드를 실제로 읽는 것이 아니라 진행중인 주석을 통해 구조를 검토 할 수 있어야합니다.

그러나 다른 많은 문제는 감지하지 못할 것입니다. 따라서 그들이 당신의 검토가 이것이 잘 만들어 지거나 실행 가능한 프로그램인지에 대한 철저한 결정이 되길 원한다면 그들은 실망 할 것입니다.

그 결과가 당신이하는 시간에 가치가 있는지의 여부는 프로젝트에 크게 좌우됩니다.

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