최신 정보
강조에 대한 따옴표 내 답변 :
의견은 코딩 표준에 언급되어서는 안된다고 말한 답은 그에 맞서기 위해 방어적인 질문을 나열하는 것이 유일한 답이라고 생각합니다.
여기서 문제는 코딩 표준 이 바로 표준이라는 것 입니다. 매우 주관적인 아이디어는 코딩 표준 에 있어서는 안됩니다 . 모범 사례 가이드에 포함될 수 있지만 코드 검토 중에는 개발자에게 해당 가이드를 사용할 수 없습니다. 개인적으로, 코딩 표준은 가능한 한 자동화에 가깝습니다. Code Review에서 이름, 간격, 탭, 괄호, 주석 등을 자동화하는 데 많은 시간이 낭비됩니다. 약에도 대답 하고 자동화 할 수 있습니다. LINT는 사전, 개념 당 대문자 확인 (가변, 기능, 방법, 클래스 등)을 허용합니다.tables
chairs
풀 요청이 승인되기 전에 로봇 LINT'er가 JavaDoc 검사를 구현할 수도 있습니다. 많은 오픈 소스 프로젝트가 바로이 일을합니다. 풀 요청을 제출하면 코드는 정적 분석을 포함하여 Travis-CI 파일로 작성되며 객관적으로 표현할 수있는 모든 코딩 표준을 통과해야합니다. 주석과 함께 '가 잘못한 것'또는 '가치 제공'에 관한 인간의 종소리 나 변수의 이름을 잘못 지정하는 방법 등 이러한 논의는 가치를 제공하지 않으며 감정적 인 코딩을 감당할 수있는 타사 로봇에 맡기는 것이 가장 좋습니다.
실제로 질문 에 답하려면 다음 질문에 답하는 방법을 다루는 표준 을 작성하는 방법을 다루어야합니다. 이 의견이 가치를 제공 했습니까? 코딩 표준은 주석의 '값'을 지시 할 수 없습니다. 그러므로 인간은 그 체크리스트를 거쳐야합니다. 코딩 표준에서 주석을 언급하는 것만으로도 원래 포스터가 피하고 싶은 체크리스트를 만듭니다.
그렇기 때문에 주석은 일반적으로 컴파일러에서 처리되지 않고 제거됩니다. 그들의 가치는 결정될 수 없습니다. 해당 의견이 가치 있는가? 예 혹은 아니오?. 이 질문에 대답하는 것은 NP-hard입니다. 오직 인간 만이 그것을 제대로 대답 할 기회가 있으며, 심지어 그것을 읽는 사람 만이 그것을 읽을 때만 대답 할 수 있습니다. 이 의견의 가치는 날씨, 가정 생활, 방금 참석 한 마지막 회의, 시간, 커피 양에 영향을받습니다. 나는 그림이 더 명확 해지고 있다고 믿는다.
어떻게 모든 표준에서 올바르게 표현 될 수 있습니까? 공정성이 감정적이지 않은 객관성에 관한 경우 표준은 일관성 있고 공정하게 적용될 수 없다면 유용하지 않습니다.
나는 코딩 표준이 가능한 한 객관적으로 유지되어야한다고 주장한다. 변수의 이름은 IS objective입니다. 올바른 철자, 문법 구조 및 대소 문자를 사전에서 쉽게 확인할 수 있습니다. 그 이상은 가장 강력한 능력을 가진 사람이나 "눈물을 치는"사람이 얻는 "오줌 싸기"입니다. 내가 개인적으로하지 않은 일로 어려움을 겪고 있습니다.
내가 언급 할 때, 나는 항상 제 3 자에있는 내 미래의 자신에게 말하는 것을 언급합니다. 5 년 후에이 코드로 돌아 오면 무엇을 알아야합니까? 무엇이 도움이되고 무엇이 혼란스럽고 코드가 오래된 것일까 요? 검색 가능한 공개 API를 생성하기위한 문서화 코드와 알 수없는 제 3 자에게 가치를 제공하는 주석 코드는 서로 다릅니다.
여기 좋은 리트머스 테스트가 있습니다. 당신이 프로젝트에서 유일한 사람이라면. 당신은 당신이 프로젝트에서 유일한 사람이라는 것을 알았습니다. 코딩 표준에는 어떤 것이 있습니까? 코드는 깨끗하고 자명하며 앞으로 이해하기를 원합니다. 왜 모든 라인에 주석을 달지 않았는 지에 대한 코드 검토를 원하십니까? 체크인 한 100 개의 파일에 대해 작성한 모든 댓글을 검토 하시겠습니까? 그렇지 않다면 왜 다른 사람들을 강요합니까?
이 토론에서 내가 놓친 부분은 미래 당신도이 프로젝트의 개발자라는 것입니다. 가치에 관해 물을 때, 내일의 당신은 또한 의견에서 가치를 이끌어 낼 수있는 사람입니다. 제 생각에는 팀 규모는 중요하지 않습니다. 팀 경험은 중요하지 않으며 너무 자주 변경됩니다.
이를 검토하는 주석 코드가 많지 않아 페이스 메이커가 환자를 부수고 죽이는 것을 막을 수 있습니다. 코드에 영향을주는 주석에 대해 이야기하면 주석이 아닌 코드에 대해 이야기하게됩니다. 누군가를 죽이는 설명이 빠지면 과정에서 냄새가 나는 것이 있습니다.
이러한 유형의 엄격한 코딩 방법에 대한 솔루션은 소프트웨어 자체를 작성하는 방법론으로 이미 제공되었습니다. 그리고 그것은 의견과 관련이 없습니다. 주석의 문제점은 제품이 궁극적으로 작동하는 방식에 영향을 미치지 않는다는 것입니다. 세계 최고 의견은 페이스 메이커에 내장되어있을 때 소프트웨어 충돌을 막을 수 없습니다. 또는 휴대용 EKG로 전기 신호를 측정 할 때.
두 가지 유형의 주석이 있습니다.
기계 판독 가능 설명
Javadoc, JSDoc, Doxygen 등과 같은 주석 스타일은 코드 세트가 제공하는 공용 인터페이스를 주석 처리하는 모든 방법입니다. 이 인터페이스는 다른 단일 개발자 (두 사람 팀의 독점 코드), 알 수없는 개발자 (예 : JMS) 또는 전체 부서에서만 사용할 수 있습니다. 이 코드는 자동화 된 프로세스로 읽을 수 있으며 HTML, PDF 등의 주석을 읽는 다른 방법을 생성합니다.
이러한 유형의 주석은 표준을 만들기가 쉽습니다. 공개적으로 호출 가능한 모든 메소드, 함수, 클래스에 필요한 주석이 포함되도록하는 객관적인 프로세스가됩니다. 헤더, 파라미터, 설명 외 엘자. 이는 다른 팀이 코드를 쉽게 찾고 사용할 수 있도록하기위한 것입니다.
나는 미쳐 보이는 일을하고 있지만 실제로는 그렇지 않습니다
이 의견은이 코드가 특정 방식으로 작성된 이유를 다른 사람들이 볼 수 있도록 돕기위한 것입니다. 프로세서에서 코드가 실행되고있는 숫자 오류가 있고 항상 반올림하지만 개발자는 일반적으로 반올림하는 코드를 처리합니다. 그래서 우리는 현재 컨텍스트는 것이 일반적으로 어떤 일을하는 이유 코드를 만지지 개발자가 이해할 수 있도록 의견을 보이는 무리를하지만, 현실에서 일부러 그런 식으로 작성되었습니다.
이러한 유형의 코드는 많은 문제를 야기합니다. 일반적으로 주석 처리가되지 않으며 나중에 새 개발자가 발견하여 '고정'되었습니다. 따라서 모든 것을 깨는 것. 그럼에도 불구하고 의견은 WHY가 실제로 어떤 것을 깨뜨리지 못하게하는 이유를 설명하기 위해 있습니다.
댓글은 신뢰할 수 없습니다
주석은 궁극적으로 쓸모가 없으며 신뢰할 수 없습니다. 주석은 일반적으로 프로그램 실행 방식을 변경하지 않습니다. 그리고 만약 그렇다면, 프로세스가 더 많은 문제를 일으키는 것입니다. 의견은 나중에 생각할 수 있으며 그 외에는 아무것도 될 수 없습니다. 코드는 컴퓨터가 처리하는 모든 것입니다.
이것은 마치 소리가 들릴지 모르지만 나와 함께 견뎌야합니다. 이 두 줄 중 실제로 중요한 것은 무엇입니까?
// We don't divide by 0 in order to stop crashes.
return 1 / n;
이 예제에서 중요한 것은 'n'이 무엇인지 전혀 모른다는 것입니다. n이 0인지 확인하지 않으며, 존재하더라도 개발자가 0을 확인한 후 아무것도 막을 수 없습니다 n = 0
. 쓸모없고 자동화 된 것은 아무것도 잡을 수 없습니다. 어떤 표준도 이것을 잡을 수 없습니다. 이 의견은 제품의 결과와 관련이 없지만 (일부에게는) 의견이 없습니다.
테스트 주도 개발
제품에 어떤 결과가 있습니까? 코드를 작성하여 문자 그대로 저장하거나 죽일 수있는 산업은 엄격하게 점검해야합니다. 이것은 코드 검토, 코드 검토, 테스트, 테스트, 코드 검토, 단위 테스트, 통합 테스트, 시험, 스테이징, 몇 개월의 테스트, 코드 검토 및 1 인 시험, 스테이징, 코드 검토, 테스트 및 최종적으로 수행 될 수 있습니다. 생산에 들어가기. 의견은 이것과 아무 관련이 없습니다.
차라리 주석이없고, 사양이 있고, 사양을 검증하는 단위 테스트, 생산 장치에서 코드를 실행 한 결과에 대한 연구, 테스트 된 적이없는 코드화 된 문서 또는 에 대한 코드.
누군가가 어떤 방식으로 무언가를 한 이유를 알아 내려고 시도 할 때 문서는 훌륭하지만, 실제로는 필요하지 않은 때 왜 '영리한'무언가가 수행되었는지 설명하는 데 문서가 일반적으로 사용된다는 것을 알았습니다. 그런 식으로 쓰여질 것입니다.
결론
모든 라인에 의견이 필요한 회사에서 일하는 경우 프로젝트의 두 소프트웨어 엔지니어 중 적어도 두 명이 이미 Perl, Lisp 또는 Python에서 자동 문서 프로그램을 작성하여 해당 라인이 수행하는 작업에 대한 일반적인 아이디어를 결정했습니다. 그런 다음 해당 줄 위에 주석을 추가합니다. 이것이 가능하기 때문에 주석이 쓸모가 없다는 것을 의미합니다. 이 스크립트를 작성한 엔지니어를 찾아 코드를 자동으로 문서화하고 왜 '모든 줄에 대한 주석'이 시간을 낭비하고 가치를 제공하지 않으며 잠재적으로 해를 끼치는 지에 대한 증거로 사용하십시오.
옆으로, 나는 프로그래밍 과제로 친한 친구를 돕고 있었다. 그의 선생님은 모든 라인을 문서화해야한다는 요구 사항을 설정했습니다. 그래서이 사고 과정이 어디에서 왔는지 알 수 있습니다. 무엇을하려고하는지 스스로에게 물어보십시오. 이것이 올바른 일입니까? 그런 다음 스스로에게 물어보십시오. 이 과정으로 시스템을 '게임'하는 방법이 있습니까? 그렇다면 실제로 가치를 추가하고 있습니까? 코드가 특정 사양을 충족하는지 테스트하는 유닛 테스트를 자동으로 작성할 수는 없으며, 가능하다면 나쁜 것은 아닙니다.
장치가 사람 내부에 있기 때문에 특정 조건에서 작동해야하는 경우 장치를 죽이지 않도록하는 유일한 방법은 수년간의 테스트, 동료 검토, 시험 및 코드를 다시 변경하지 않는 것입니다. 이것이 NASA가 여전히 오래된 하드웨어와 소프트웨어를 사용하고있는 이유입니다. 삶이나 죽음에 관해서는 '조금 변경하고 체크인'하는 것이 아닙니다.
의견은 생명을 구하는 것과 아무 관련이 없습니다. 의견은 사람을위한 것이며, 의견을 쓸 때도 실수를합니다. 인간을 믿지 마십시오. Ergo, 의견을 믿지 마십시오. 의견은 해결책이 아닙니다.