Bob 아저씨가 코딩 표준을 피할 수 있다면이를 기록해서는 안된다고 제안하는 이유는 무엇입니까?


145

이 질문읽는 동안 최상위 투표 답변은 코딩 표준에 대해 Uncle Bob을 인용 했지만이 팁에 혼란 스러웠습니다.

  1. 피할 수 있으면 적어 두지 마십시오. 오히려 표준이 포착되는 방식으로 코드를 작성하십시오.

이것은 내 뇌에서 튀어 나왔지만 나는 고집 할 곳을 찾을 수 없었습니다. 새로운 사람이 팀에 합류하거나 코딩 표준이 변경되면 정보가 혼동 될 수 없습니까?

코딩 표준을 작성해서는 안되는 이유는 무엇입니까?


47
흠. 수백 명의 개발자와 수십 년에 걸친 코드 기반을 가진 대규모 다국적 회사에서 이것이 어떻게 작동하는지 상상하려고합니다.
Matthew James Briggs

31
@ MatthewJamesBriggs : 대부분의 개발자가 무시하거나 코드가 처음 작성된 시점에 다른 내용을 가진 서면 표준만큼 훌륭하게 작동합니다.
Doc Brown

7
@MatthewJamesBriggs : 동의했습니다. 스타일 가이드에는 더 이상 사용되지 않는 이전 컨벤션을 인식하기에 충분한 정보가 포함되어 있어야합니다. 그렇지 않으면 "기존 스타일 복사"문화가 부활 할 10 살짜리 공포를 발견하게됩니다. 또한 공식 스타일을 추론하기 위해 서로 다르고 호환되지 않는 표본을 사용하는 실수로 도둑이 형성 될 때, 글씨 스타일 가이드는 그 중에서 어느 것이 옳은지를 알려줍니다 (또는 이상적으로는 처음부터 도둑이 형성되는 것을 방지합니다). 그리고 수백 명의 개발자 중 일부가 문서를 읽지 않으면 대기업에서 심각한 총격 사건으로 해고 할 수 있습니다.
Steve Jessop

14
공평하지만, Bob은 또한 회사 전체의 코딩 표준이 서면으로 작성되거나 작성되지 않아야한다고 말했다. 오히려 각 팀 / 도서관은 자체 개발해야합니다.
Steve Jessop

37
아무도 읽을 수없는 문서를 작성하는 대신 코드를 특정 방식으로 적용하는 린터를 사용하십시오. 그것이 개발 과정의 일부라면 피할 수 없습니다.
Seiyria

답변:


256

몇 가지 이유가 있습니다.

  1. 아무도 문서를 읽지 않습니다.
  2. 그들이 읽더라도 문서를 따르는 사람은 없습니다.
  3. 문서를 읽고 따르더라도 아무도 문서를 업데이트하지 않습니다.
  4. 관행 목록을 작성하는 것은 문화를 만드는 것보다 훨씬 덜 효과적입니다.

코딩 표준은 사람들이 해야 할 일이 아니라 실제로하는 일 에 관한 것 입니다. 사람들이 표준을 벗어나면 코드 검토 프로세스 및 / 또는 자동화 된 도구를 통해이를 선택하고 변경해야합니다.

코딩 표준의 요점은 우리의 삶을 편하게한다는 것입니다. 그것들은 중요한 것들로부터 필요한 것들을 걸러 낼 수 있도록 우리 두뇌의 지름길입니다. 이를 검토하기 위해 문서에서 형식화하는 것보다 검토 문화를 작성하는 것이 훨씬 좋습니다.


11
그리고 무언가를 적용하려면 스타일 가이드가 아닌 강제로 빌드 프로세스 단계를 수행해야합니다.
Wayne Werner

31
실제로 표준 문서는 없지만 모든 코드 검토시 처음 몇 주 동안 사람들에게 소리를 지르십니까? 기본적으로 초보자는 코딩 스타일 가이드를 리버스 엔지니어링 할 것으로 예상됩니다. 아니면 이것이 더 가상적인 것입니까? "그가 생각한 것 같아요?" 이제 이것이 규칙을 시행하는 자동 도구에 관한 것이라면 동의해야합니다. 그러나 나는 규칙을 힘들게 파악하고 싶지 않습니다.
Voo

13
@Voo, 문제가 발생하면 코드 검토 중에 소리를 지르는 이유가 무엇이라고 생각하십니까?
Jaap

20
@ Jaap 나는 하이퍼 볼이 명백하다고 생각했다. 사람들에게 고함을 지르는 것이 아니라, 그들이 더 잘 알 수 없었기 때문에 그들이 돌아가서 위반 한 모든 것을 고쳐야한다고 말하는 것입니다.
Voo

5
@Voo :“엔지니어 코딩 스타일 가이드를 바꿀 필요가 없습니다”. 기존 코드를 볼 때 규칙이 분명 해야합니다 . 즉시 눈에 들어 가지 않는 모든 것은 드물거나 고정되어 있지 않습니다. 드물게 발생하는 일에 대해 정말로 중요한 규칙이있는 경우, 그러한 개발자는 그러한 코드를 작성해야 할 때 새로운 개발자와 논의 할 가치가 있습니다. 의사 소통을 과대 평가할 수 없습니다.
Holger

112

또 다른 해석이 있습니다. 나는 그것이 삼촌 밥이 의미 한 바라고 생각하지 않지만 고려할 가치가 있습니다.

문서에서 코딩 표준을 캡처하지 마십시오. 표준을 충족하는지 확인하는 자동화 된 프로세스를 통해 코드로 캡처하십시오 .

문서를 참조하는 사람들에게 의존하지 말고 동시에 존재하는 코드를 해석하고 컨벤션과 우연의 일치를 식별하는 사람들에게 의존하지 마십시오.

Checkstyle과 같은 것을 커밋 빌드에 통합하십시오. 이를 통해 형식 지정 및 명명 표준과 같은 기본 규칙을 적용한 다음 스타일을 고려하는 데 정신적 노력을 기울이지 않고 적어도 철저한 보장을받는 바보 같은 프로세스로 오프로드 할 수 있습니다.

중요한 경우 원하는 것을 엄격하게 정의하고 잘못되면 실패합니다.


6
실제로, 나는 이와 같은 것이 Bob 삼촌의 제안에 대한 추론의 적어도 일부라고 생각합니다. 코딩 표준의 자동화는 품질을 개선하는 유용한 방법으로 자동화 된 테스트와 함께 진행되며 Bob은 다음을 알고 있습니다.
Jules

10
규칙 # 6을 언급 할 가치가있을 것입니다. After the first few iterations, get the team together to decide.규칙 # 3만으로 코딩 표준을 옹호하지 않는 것처럼 보이지만 모든 규칙을 함께 고려할 때 대부분 # 6을 고려할 때 실제로 다음과 같이 말하는 것 같습니다. 처음에는 코딩 표준을 강제해야합니다. 유기적으로 개발되도록하고 잠시 후 팀과 함께 세부 사항을 해결하십시오. " "코딩 표준을 공식화하지 마십시오"(많은 답변의 본질 인 것)와는 매우 다릅니다.
Shaz

항목을 읽으면 이것이 그가 의도 한 바가 아니라는 것을 알게 될 것입니다. 예를 들어 이것 하나만으로도 당신에게 무언가를 말해야합니다.
Bill K

나는 "Bob이 무엇을 의미 했는가"가 아니라 "왜 코딩 표준을 작성해서는 안 되는가?"라는 질문에 답하고 있습니다. 그것은 질문의 제목과 반대 될 수 있지만 그 정신은 아닙니다.
Tom Johnson

이스케이프 절을 제공하지 않는 자동화 된 코딩 형식 시스템 (코드 섹션에서 끌 수 있음)은 어느 시점에서 거의 맬웨어 일 것입니다.
Yakk

66

사람들은 분쟁해결하기 위한 코딩 표준 문서의 실제 목적을 간과합니다 .

코딩 표준의 결정은 대부분 가독성과 생산성에 미미한 영향을 미칩니다. 특히 언어에 '정상적인'스타일을 채택하고 언어 디자이너는 이것이 사양의 일부 여야한다는 것을 인식하기 시작합니다 (예 : Go).

그것들은 너무 사소하기 때문에 논쟁은 실제로 가열되고 끝없이 실행될 수 있으며 생산성과 팀 응집력에 실질적인 손상을 줄 수 있습니다. 또는 둘 이상의 사람들이 선호하는 스타일 사이에서 끝없이 다시 포맷하여 변경 기록을 숨길 수 있습니다.

서면 표준이 있으면 논쟁이 끝납니다. 관리자는이를 지적하고 문서에 대한 불만을 피할 수 있습니다. 당신은 한 장의 종이로 논쟁 할 수 있지만 그것은 당신의 말을 듣지 않을 것입니다.

( 구조가없는 폭정 참조 )


19
레거시 코드를 다루는 팀에게는 매우 중요합니다. 특히 한 표준 집합을 따르는 코드 (또는 표준을 따르지 않는)에서 다른 표준으로 갈 때 참조 할 지침이 없으면 코드베이스에 이미 여러 스타일이있을 때 따라야 할 코드 스타일을 알 수 없습니다. 나는 표준을 쓰지 말라고 권고하는 것은 소규모의 팀이 위험 전환없이 그린 필드 프로젝트를 수행하기위한 것이며 내 경험상 매우 드문 경우라고 생각합니다.
thomij

4
표준의 실제 내용보다 표준에 동의하는 것이 훨씬 더 중요합니다. 오랫동안 사용하면 거의 모든 스타일에 익숙해 질 수 있습니다.
마크 랜섬

3
사소한 것에 대해 논쟁하는 것은 무능력의 표시입니다. IMHO. 구체적인 분쟁을 해결해도 근본적인 문제는 해결되지 않습니다.
Jørgen Fogh

1
예, 분쟁 해결 및 변경 기록을 오염되지 않은 상태로 유지하는 것은 특히 팀에 OCD 및 OOC가 아닌 개발자가 혼합되어있는 경우에 매우 큽니다. 그러나 필자는 서면 표준이 StyleCop과 같은 자동화 도구보다 훨씬 덜 효과적인 중재자라는 것을 발견했습니다.이 도구는 개인이나 관리자의 시간을 낭비하지 않고 법을 정립합니다.
Eric Hirst

12
"사소한 일에 대한 논쟁은 무능의 징조입니다."- 이것이 소프트웨어 공학에서 사실 이었으면 좋겠다 ... 나는 매우, 매우 유능한 (적어도 기술적으로는) 일부 개발자들이 사소한 일에 대해 가장 논쟁하는 사람들이 정확히 두렵습니다. 지옥, 그것은 그들의 국가 스포츠이다. "무한대는 마법사의 논증"-Ursula Le Guin
Spike0xff

21

의견은 거짓말 이기 때문 이다.

코딩 표준은 코드의 내용에 대한 큰 의견입니다. 코드 자체는 궁극적 인 진실의 원천입니다. 이 경우 진실은 코드 동작이 아니라 표현 된 스타일입니다. 표준이 아직 코드에 반영되지 않은 경우에는 앞서 작업을 많이 수행해야합니다.

Bob 아저씨는 주석이 프로그래머의 개인적 실패라고 생각합니다. 왜냐하면 프로그래밍 언어 자체로 코드 조각의 목적을 표현할 수 없었기 때문입니다. 마찬가지로 표준 문서는 코드베이스에서 일관된 스타일을 표현하지 못합니다.

새로운 프로그래머는 코드를 살펴 보는 데 시간을 소비해야하며 여러 장의 표준 문서를 읽는 데 며칠을 소비하지 않아야합니다.

표준 문서는 그다지 나쁜 아이디어는 아니지만 표준 문서를 유지 관리하는 것이 정규직 인 프로그래밍 상점에있었습니다. 표준 문서를 보관해야하는 경우 한 페이지에 보관하십시오. 그러나 이미 코드가 있다면 누구나 하루 안에 같은 문서를 만들 수 없어야합니까?

코드 표준이 중요합니다. 그것이 무엇인지 지시하는 문서를 갖는 것은 아닙니다.


22
실제로 "댓글 없음"정책으로 수십 년 된 코드베이스를 경험했습니다. 매우 길고 서술적인 메소드 이름을 권장하지만 의도를 포착하는 데 절대적으로 끔찍한 일이며,하지 말아야 할 이유 는 있으며, 원래 저자 중 한 명이 여전히 우리와 함께함으로써 그 문제를 해결할 수 있습니다.
pjc50

7
+1 "코드 표준을 갖는 것이 중요하다. 표준을 규정하는 문서를 갖는 것은 아니다." 글쎄요
David

4
@ pjc50 Bob 아저씨가 댓글을 달지 않는 정책을 권장한다고 들었습니다. 그는 당신이 절대로 언급해서는 안된다고 가르치지 않습니다. 그는 당신이 이해하기 위해해야한다고 느낄 때 기분이 나 빠져야한다고 가르칩니다. 주석이없는 읽을 수없는 <주석이 달린 읽을 수없는 <읽기 가능한 코드이며 주석이 필요하지 않습니다. 언급 한 주석은 코드 작동 방식과 완전히 분리 된 주석입니다. 표준 문서는 코드 검토에서 무시되는 뇌사 확인 목록으로 바뀔 수 있습니다. 중요한 것은 모든 진드기를 얻는 것이 아닙니다. 테이블의 사람들이 귀하의 코드를 이해합니다.
candied_orange 17시 43 분

3
"새로운 프로그래머는 코드를 살펴 보는 데 시간을 소비해야하며 여러 장의 표준 문서를 읽는 데 며칠이 걸리지 않아야합니다." 어떤 코딩 가이드를 따를 지 모르지만 Google의 C ++ 스타일 가이드 는 한 시간 안에 쉽게 읽을 수 있으며 기존 코드를 기반으로 선호하는 스타일을 리버스 엔지니어링하는 것보다 훨씬 쉽습니다. 내가 읽은 다른 모든 스타일 가이드도 마찬가지입니다.
Voo

5
@CandiedOrange : 가장 유용한 의견은 종종 특정 일 수행 되지 않은 이유를 설명하는 의견입니다. [해당 의견이 없을 경우, 미래의 프로그래머는 구현하는 데 시간을 낭비하고 나중에 명백하게 명백한 "개선"을 취소 할 수 있습니다. 할 수없는 것으로]. 변수 이름에 정말로 열중하지 않는 한, 가장 훌륭하게 읽을 수있는 코드조차도 해당 정보를 캡처 할 수있는 방법이 없습니다.
supercat

16

Bob 아저씨가 코딩 표준을 피할 수 있다면이를 기록해서는 안된다고 제안하는 이유는 무엇입니까?

그의 의견 뒤에 이유를 묻는다면 여기에 답변을 게시 할 때만 답변을받을 수 있습니다 ( 우리의 의견은 관련이 없습니다).

코딩 표준을 작성해서는 안되는 이유는 무엇입니까?

당신은 그가 묻는 경우 바로 그것에 대해 : 내가 당신이 그것을 피할 이유가 없다 말할 수있는 유일한 인기를 (지금까지) 할 수 있습니다.

쓰기 중지 . 그러나 나는 내 이유를 설명하려고 노력할 것입니다 ...

David는 Stephen의 답변의 요점은 문서를 작성 하지 말고 어떤 형식으로 작성 해야하는지에 대한 의견을 제안했습니다 . 지침이 도구 로 공식화되는 경우 (수동 코드 검토 만이 아님) 동의 할 수 있습니다 (법에 다른 사항이 필요하지 않은 경우). 불행히도 도구는 특정 번역 단위 또는 패키지 또는 선호하는 언어가 경계 라고 부르는 모든 것으로 제한되어 있기 때문에 모든 것을 확인할 수는 없습니다 (계산 이론은 우리의 친구가 아닙니다) .

그러나 Bob 아저씨의 말은 그가 그것에 대해 이야기하고 있다고 생각하지 않습니다.

그런 선임 전문가와 의견이 맞지 않습니까? 나는 인용 된 게시물의 거의 모든 시점에 대해 (자세한 내용은이 답변의 두 번째 부분을 참조하십시오). 이유 를 이해하려고 노력하십시오 (코딩 지침이 사소한 형식 지정 문제 가 아니라는 것을 이미 알고 있다고 가정 ).

  • 법률에 따라 서면 코딩 표준이 필요한 경우도 있습니다.
  • 나는 문서를 읽고 혼자가 아니라고 확신합니다. 팀 구성원은 시간이 지남에 따라 변경 될 수 있으며 지식은 5-10 년 된 코드베이스 또는 팀 구성원의 마음에있을 수 없습니다. 조직은 내부 지침을 따르지 않는 사람들을 해고해야합니다.
  • 코딩 표준은 일단 승인 되면 자주 변경되지 않으며 표준에 대해 알고 싶어합니다. 표준이 변경되면 모든 코드가 새로운 표준을 따르지 않기 때문에 문서 (코드)가 오래되었습니다. 재 포맷 / 리팩토링은 느릴 수 있지만 항상 따라야 정식 지침이 있습니다.
  • 의심의 여지없이 규칙 을 추정하기 위해 10 / 20K LOC를 검사하는 것보다 5 페이지 문서를 읽는 것이 좋습니다 .
  • 디자인 원칙과 코딩 스타일에 대해 많은 책을 쓴 사람이 자신의 지침을 작성해서는 안된다고 제안하는 것이 아이러니하지만, 코드 예제를 우리에게 버려두면 더 좋지 않습니까? 아닙니다. 서면 지침서에는해야 할 일뿐 만 아니라 코드에없는 두 가지 다른 것,하지 말아야 할 것과하지 말아야 할 이유가 있습니다.

"무료 자체 구성 프로그래밍"은 16 세 닌자 에게는 좋지만 조직에는 다른 요구 사항이 있습니다 .

  • 회사 수준에서 코드 품질을 부여하고 정의해야합니다. 이는 단일 팀이 결정할 수있는 것이 아닙니다. 그들은 더 나은 것을 결정하는 기술조차 가지고 있지 않을 수도 있습니다 (예를 들어, MISRA를 검토하거나 각 규칙을 이해 하는 데 필요한 모든 기술을 보유한 개발자는 몇 명 입니까?)
  • 구성원이 다른 팀으로 이동 될 수 있습니다. 모든 사람이 동일한 코딩 표준을 따르는 경우 통합이 매끄럽고 오류가 덜 발생합니다.
  • 팀이 자체 구성하는 경우 팀 구성원이 변경되면 시간이 지남에 따라 표준이 진화 합니다 . 그러면 현재 승인 된 표준을 따르지 않는 거대한 코드베이스를 갖게됩니다 .

프로세스 전에 사람들 에 대해 생각하고 있다면 TPS에 대한 독서 만 제안 할 수 있습니다. 인간은 린의 중심 부분이지만 절차는 고도로 공식화되어 있습니다.

물론 하나의 팀으로 구성된 소규모 조직 에서는 팀이 채택 할 표준을 결정할 있지만이를 기록해야합니다. 여기 Programmers.SE에 에릭 Lippert의 게시글을 읽을 수 있습니다 : 내 생각 그는 (몇 가지 규칙이있을 수 있습니다 경우에도 자신의 작성 지침을 준수했다 마이크로 소프트에서 일할 때 우리 모두가, 그가 숙련 된 개발자 동의 잘못 , 적용 할 수 없습니다 또는 쓸모 Jon Skeet은 어떻습니까? Google 가이드 라인은 매우 엄격하지만 (많은 사람들이 동의하지 않음) 해당 가이드 라인을 준수해야합니다. 그들에게 무례합니까? 아니요, 그들은 아마도 그러한 지침을 정의하고 개선하기 위해 노력했을 것입니다. 회사는 한 명의 회원 (또는 한 팀) 이 만들지 않으며팀은 섬이 아닙니다 .

  • 실제 팀 멤버 가 잘 이해하지 못하기 때문에 C ++에서 다중 상속 및 중첩 클래스를 사용하지 않기로 결정했습니다 . 나중에 다중 상속을 사용하려는 사람은 1M LOC 전체를 탐색하여 사용되었는지 확인해야합니다. 설계 결정이 문서화되지 않으면 전체 코드베이스를 연구하여 결정해야하기 때문에 나쁘다. 그럼에도 불구하고, 그것이 사용되지 않았다면 그것이 코딩 표준에 위배되거나 허용 되었기 때문입니다. 그러나 다중 상속이 적합했던 초기 상황은 없었습니까?
  • C #에서는 선택적 매개 변수를 C #에서 사용할 수 없을 때 코드베이스가 시작되었으므로 기본 매개 변수를 제공하는 메서드가 오버로드되었습니다. 그런 다음 변경하고 사용하기 시작했습니다 (이러한 기능을 수정할 때마다 이전 코드를 리팩토링하여 사용하십시오). 나중에 옵션 매개 변수가 잘못되었다고 판단하고 사용을 피하기 시작했습니다. 코드에서 알려주 는 규칙 은 무엇입니까 ? 표준은 발전하지만 코드베이스는 발전 속도가 느리기 때문에 나쁘고 , 문서면 문제가 있습니다.
  • Jon은 A 팀에서 B 팀으로 이사했습니다. Jon은 새로운 표준 을 배워야 합니다. 배우면서 그는 더 미묘한 버그를 도입 할 것입니다 (또는 운이 좋으면 기존 코드를 이해하고 코드 검토를 더 길게 만드는 데 시간이 오래 걸림).
  • 팀 A는 이전에 팀 B가 소유 한 코드베이스로 이동합니다. 완전히 다른 코딩 표준이 있습니다. 고쳐 쓰기? 개조 하다? 혼합? 그들 모두 똑같이 나쁘다.

엉클 밥

처음 몇 번의 반복 동안 진화하게하십시오.

사실, 당신이없는 때까지 표준 및 조직이 당신에게 작업을 할당 구축 을.

회사 별이 아닌 팀별로 지정하십시오.

아니요, 위에서 설명한 모든 이유로 인해. 코드 형식 만 공식화한다고 생각하더라도 (형식화하려는 가장 유용한 것) 형식화에 대한 끝없는 (그리고 쓸모없는) 전쟁에 대한 기억이 여전히 남아 있습니다. 나는 그들을 반복해서 살고 싶지 않다.

피할 수 있으면 적어 두지 마십시오. 오히려 표준이 포착되는 방식으로 코드를 작성하십시오.

아니요, 위에서 설명한 모든 이유로 (물론 가이드 라인이 변경 될 때 모든 코드를 한 번에 리팩토링하지 않는 한). 코드를있는 그대로두고 싶습니까? 현재 지침 을 이해하기 위해 코드베이스를 어떻게 검사 합니까? 파일 에이지 별로 검색하고 코딩 스타일을 소스 파일 에이지에 맞게 조정 하시겠습니까?

좋은 디자인을 제정하지 마십시오. (예 : 사람들에게 goto를 사용하지 말라고 말하지 마십시오)

사실 지침은 짧거나 아무도 읽지 않아야합니다. 명백한 것을 반복하지 마십시오.

모든 사람이 표준이 의사 소통에 관한 것임을 알도록하십시오.

사소한 세부 사항에 대해서만 표준을 설정하지 않는 한 좋은 표준은 품질 에 관한 것입니다.

처음 몇 번의 반복 후에 팀이 함께 결정하도록하십시오.

첫 번째 요점을 참조하고 코딩 표준은 일반적으로 개발 및 수정하는 데 몇 년이 걸리는 프로세스라는 것을 잊지 마십시오. 정말? 노인 (있는 경우)의 기억에 의존하고 싶습니까?

세 가지 메모 :

  • 내 의견으로는 다른 언어보다 일부 언어의 단점이 더 심각합니다. 예를 들어 C ++에서는 회사 수준 표준이 Java보다 훨씬 더 필요합니다.
  • 소규모 팀이 하나 뿐인 소규모 회사에서 일하는 경우 이러한 추론 완전히 적용되지 않을 수 있습니다 (Bob 아저씨 이유는 덜 극단적 일 수 있습니다 ).
  • 당신은 (팀으로) 고용되었으며 하나의 새로운 프로젝트로 혼자 일할 것이고 잊어 버릴 것입니다. 이 경우 당신은 상관하지 않습니다 수 있습니다 (그러나 고용주는해야 ...)

5
나는 그 질문에 대한 대답이 주제에 맞지 않다고 생각하기 때문에 이것을 하향 투표했습니다 . 나는 모든 사람들이 서면 표준의 장점을 이해한다고 생각하지만 단점은 결정하기가 더 어려우며, 저명한 산업 선임자가 업계에서 일반적인 관행에 반대하는 입장을 제시 할 때 왜 가치가 있는지를 조사합니다.
Jules

5
@gnat 고맙습니다. 주제를 벗어난 게시물에 대해서는 공감대가 필요하지 않습니다. "X 씨가 Y 한 이유는 무엇입니까?" 이 경우에 주제를 벗어난? 우리는 그의 이유를 알지 못하고 설명하지 않았으며, 주제를 벗어난 주제로 문을 닫지 말아야합니까? 어떻게 것입니다 당신은 이 질문에 대한 대답? 임의의 이유를 발명하거나 전제를 잘못 말하는가?
Adriano Repetti

1
@AdrianoRepetti-밥 삼촌은 수년에 걸쳐 많은 설명을 해왔으므로 누군가 자신의 사고 방식에 대한 통찰력을 가지고 있다고 생각하는 것이 합리적이지만 밥 삼촌의 직접적인 해석이 필요한 경우에는 맞습니다.
JeffO

3
@jeff 네, 질문이 "왜 그렇게 생각 하는가"에 관한 것이라면 대답은 추측 일뿐입니다. 질문이 "맞습니까?" 그럼 내 개인적인 대답은 절대 안돼
Adriano Repetti 17시 03 분

1
"마이크로 소프트에서 일할 때는 서면으로 작성된 지침을 준수해야했습니다." 물론 우리는 FXCop과 StyleCop을 사용하여 잘못된 패턴이 체크인되는 것을 방지했습니다.
Eric Lippert

12
  1. 코딩 표준이 유용하기 위해서는 물질의 문제에 대해 이야기해서는 안됩니다. 스타일 만 중요합니다. 임의적이고 모호한 것만 지정해야합니다. 예를 들어 브레이스 배치, 들여 쓰기 깊이, 공백과 탭, 명명 규칙 등
  2. 스타일 문제는 전 세계가 아니라 지역 문제입니다. 각 팀은 각자의 고유 한 스타일을 취하고 업무 및 성격에 맞아야합니다. 이것은 표준을 단순하고 가볍게 유지합니다. 가능한 모든 고려 사항, 구성 및 예외로 인해 회사 표준에 부담이 가중됩니다.
  3. 팀 내에서 별도의 코딩 스타일 문서를 작성하는 유일한 이유는 팀에서 생성 한 코드가 표준을 충족하지 않는 경우입니다. 어떤 경우에는 표준이 없습니다. 효과적이려면 표준이 코드 자체로 표현되어야합니다. 그렇다면, 별도의 문서가 필요하지 않습니다.
  4. 레거시 시스템 팀과 스타일은 시간이 지남에 따라 변경됩니다. 아무 문제가 없습니다. 오래된 코드는 오래된 스타일입니다. 최신 코드는 최신 스타일을 갖습니다. 팀은 스타일과 연령을 알고 있어야합니다. 새 코드가 작성 될 때마다 코드의 위치에 관계없이 새 스타일이어야합니다.

나는 몇적인 혼란이있다 : 1) 코딩 표준은 거룩한 전쟁 만의 형식에 대한 (문제를 이야기하지 말아야 유용하다는 것을 쉽게 코딩) 코드 읽기 이해하지만 피하기 위해 구축하는 패턴 (언어를 이해하는 것은 쉽지 않다, 일반적인 실수를 방지하기 위해 기능) 및 보안 문제. 이것은 코딩 지침입니다 (서식 문제보다 더 유용합니다). 2) 포인트 1의 전제를 감안할 때 그것은 성격 에 관한 것이 아니라 ( 작업 에 관한 것일 수도 있음 ) 가벼운 회사 표준을 가질 수 있으며 그것을 가볍게 만드는 것은 당신의 의무입니다.
Adriano Repetti 8:30에

3) 코드는 수행 할 작업을 알려 줄 수는 있지만 수행하지 말아야 할 것을 전달할 수는 없습니다 (전체 코드베이스를 연구하고 싶을 때조차도 X 구문을 사용하지 않아도됩니다. 아니오?) 또 다른 중요한 것은 추론입니다. 왜 그렇지 않습니까? 그리고 왜 그래? 시간이지나면서 상황이 변할 수 있지만 초기 구내가 여전히 유효한지 어떻게 알 수 있습니까? 4) 그리고 당신이 새로운 팀원이고 새로운 코드를 작성할 때 ... 그 코딩 스타일을 유지하기 위해 같은 나이의 코드베이스를 공부합니까? 다른 최신 구성 요소로 이동 한 다음 날에 코드베이스를 다시 공부합니다 (생성 날짜별로 필터링?)
Adriano Repetti

대신, 당신은 스타일을 서식에만 코드를 기록해 두지 않는 것이 좋습니다 경우 BTW 그때 나는 할 수있다 (동의 아니라, 실제로하지하지만 불가피 때마다 발생합니다 끝없는 쓸모없는 토론의 기억 외에 너무 강하지 않은 이유와 -와 기업 가이드 라인 그러나 한 번만 피하면됩니다. 그러나 명확하게해야합니다. 그렇지 않으면 사람들이 귀하의 단어를 문자 그대로 해석 할 것입니다 (대부분의 답변 + 의견보기). 또한 "고토 (goto)"에 관한 그 점은이 점에서 약간 오도의 소지가있다 (IMO)
Adriano Repetti

4

코딩 표준을 작성해서는 안되는 이유는 무엇입니까?

여기에는 여러 가지 이유가 있습니다. 다음은 몇 가지 고려 사항입니다.

  1. 코드 표준을 검토, 토론, 문서화, 수정하는 등 전체 팀에 많은 시간을 할애하기 위해 사람들이 "학습"코드 표준을 소비하는 시간은 얼마나됩니까? 이것은 "직원 핸드북"을 지속적으로 논의하는 것과 같습니다. 얼마나 자주 팀 회의 의제에 표시됩니까?

  2. 프로젝트가 취소되거나 보류되는 경우 등 그런 다음 보통 남아있는 소수의 사람들은 표준을 계속 준수 할 수 없거나 읽을 수도 없습니다. 다음으로 아는 것은 "코드를 깨끗하게 유지"하려는 모든 노력은 어쨌든 거의 낭비되었습니다.

  3. 프로젝트가 중단되거나 새로운 리드가 도입되면 이전 규칙을 완전히 무시하고 새로운 방식으로 수행하려고 할 가능성이 큽니다. 다시 말하지만 표준을 체계화함으로써 얻은 것은 무엇입니까?

# 6을 읽어야합니다.

처음 몇 번의 반복 후에 팀이 함께 결정하도록하십시오.

다시 말해, 프로젝트를 시작할 때가되면 잠시 흐름을 따라 가십시오. 그런 다음 현재 팀이 사용하는 코딩 표준의 일반적인 규칙을 논의하고 기본적으로 준수하십시오. 이렇게하면 실행 코드를 얻는 데 필요한 "구문 설탕"을 작성, 검토 및 문서화하는 데 필요한 노력을 최소화하면서 제품을 개선하는 노력을 극대화 할 수 있습니다.

코딩 표준에서 큰 이점을 얻는 팀은 거의 없습니다. 일반적으로 "가독성"은 너무 모호합니다. 대부분의 개발자는 간격, 줄 바꿈 등에 대한 정확한 규칙의 이점을 크게 누리지 못하지만 최소한 몇 가지 규칙을 지정하여 끊임없이 성가신 개발자를 피할 수 있습니다 .


4

내가 충분히 생각하지 않은 또 다른 대답은 사람들이 규칙을 맹목적으로 따르지 않는다는 것을 의미한다는 것입니다. 이는 사람들이 디자인 결정 및 코딩 규칙에 대한 실제적인 정당화를 정당화하기 위해 작성된 사실에 의존하기보다는 실제적인 정당성을 제시 해야한다는 것을 의미합니다.


4

첫째, 내가 아는 한 Bob 아저씨는 Java 사람입니다. 이것은 그가 말하는 것을 이해하는 데 매우 중요합니다.

Java 또는 C # 팀에서 작업 할 때 숙련 된 개발자가 현재 코드를 작성한 경우 코딩 스타일을 선택하고 따라 가기가 쉽습니다. 내가 기꺼이하지 않을 경우, 나는 그 일에 대한 올바른 사람 이 아니었을 것입니다 ... 내가 스타일을 지키지 않을 때 나를 데리러 갈 코드 검토 또는 페어 프로그래밍이 없다면 회사는 멤버 필드 이름을 지정하는 방식보다 더 큰 문제가 있습니다!

대부분의 최신 언어와 함께 Java와 C #은 프로그래머가 들어갈 수있는 "간단한"트랩이 거의 없도록 정의되었습니다.

그러나 프로그래밍을 시작할 때 C (및 나중에 C ++)를 사용했습니다. C에서는 다음과 같은 코드를 작성할 수 있습니다

if (a = 3);
{
   /* spend a long time debugging this */
}

컴파일러는 오류를 발생시키지 않으며 많은 코드를 읽을 때 발견하기가 어렵습니다. 그러나 다음과 같이 쓰는 경우 :

if (3 = a)
{
   /* looks odd, but makes sense */
}

컴파일러에서 오류가 발생하고 코드를로 쉽게 변경할 수 3 == a있습니다. 마찬가지로, 코딩 표준이 조건 또는 "빈 문장" =내에서 사용될 수없는 경우, 이 오류를 추적하기 위해 코드 검사기를 빌드 시스템의 일부로 사용할 수 있습니다.ifif

C / C ++에서 멀어 질 때 코딩 표준에 대한 견해가 크게 바뀌 었습니다. 나는 엄격하게 시행되고 많은 페이지 길이의 코딩 표준을 좋아했습니다. 이제는 사용중인 도구를 나열하고 몇 가지 명명 규칙에 따라 원래 팀 구성원간에 비공식적으로 동의하면된다고 생각합니다. 우리는 더 이상 C / C ++로 애플리케이션을 작성하는 30 명 이상의 개발자로 구성된 팀의 세계에 살고 있지 않습니다 ...

JScript를 좋아하지 않는 이유가 있으며 TypeScript가 수년 동안 웹 개발에 가장 좋은 방법이라고 생각합니다. HTML / CSS / JScript 등의 디자인 결함으로 인해 웹 UI 개발자는 여전히 코딩 표준이 필요하다고 생각합니다.


4
"컴파일러는 오류를 일으키지 않습니다"대부분의 최신 C 및 C ++ 컴파일러는 경고 또는 원하는 경우 전체 오류로 이러한 동작보고를 지원합니다. gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
JAB

2
"먼저 밥 아저씨가 자바 인이라는 것을 아는 한, 이것은 그가 말하는 것을 이해하는 데 매우 중요합니다."사실 밥 아저씨는 C ++에 대한 환상적인 기사를 썼으며 C 와도 몇 년 동안 일한 적이 있습니다.
Alessandro Teruzzi

@JAB, 고맙게도 C / C ++는 오래 전 (예 : 모뎀 C / C ++ 컴파일러 이전) 새로운 "비즈니스 응용 프로그램"에 대한 사용을 중단했으며 현재는 UI 전문가 인 사람보다는 C / C ++ 전문가 만 사용합니다. (MFC)를 예로들 수 있습니다.
Ian

1
@AlessandroTeruzzi 단위 테스트는 방법이 실패했음을 알려줍니다. 그것이 실패하는 이유 는 다른 문제입니다. 그런 종류의 코드가있는 메소드에 대한 단위 테스트가 있어도 무엇이 잘못되었는지 알아내는 데 어려움을 겪을 것입니다. C ++는 디버깅하기 가장 어려운 언어 중 하나입니다.
T. Sar

2
나는 여기에 오해가 있다고 생각합니다. UncleBob의 한 문장을 가져 와서 독립적으로 분석 할 수는 없습니다. 소규모 클래스, 짧은 방법 및 방탄 단위 테스트 범위를 가진 SOLID 소프트웨어가있는 경우 코딩 표준이 중복됩니다. 약한 코드, 거대한 인터페이스, 큰 기능 및 적용 범위가 거의 없다면 코딩 표준이 도움이 될 수 있습니다. 그러나 UncleBob은이를 갖지 말라고 제안하는 것이 아니라 협업 및 리팩토링을 통해 구두로 확산 (소스 기반에서 약한 코드를 제거)합니다. 코드를 실제 코딩 표준으로 만드십시오.
Alessandro Teruzzi

3

소스를 자체 문서화 코딩 표준으로 두는 것은 두 가지를 의미합니다.

  1. 유능한 기고자가 되려면 코드베이스를 참조하고 검토해야합니다. 이것은 매우 중요합니다. 코딩 지침을 읽는 것은 코드 기반으로 다이빙하는 것과 비교할 때 시간 낭비입니다.
  2. 사소한 차이는 중요하지 않다는 것을 인정합니다. 기본 원칙에 동의하고 이해하는 것이 중요합니다. l' art pour l' art로 일관된 스타일을 유지하는 것은 추구되지 않습니다. 독창적 인 nitpickers가 다른 사람들을 귀찮게하고 산만하게하는 것을 허용하지 않습니다. 팀의 코드를 통해 커뮤니케이션을 촉진하는 것입니다.

2

자주 업데이트되고 잘 작성된 코드 표준 문서는 매우 유용 할 수 있지만 일반적으로 그렇지 않습니다. 표준 문서는 좋은 표준 문서를 작성하는 것이 매우 어렵고 최신 상태로 유지하기가 더 어렵 기 때문에 회사에서 사용하는 실제 코딩 표준을 반영하지 않습니다.

열악하고 오해를 불러 일으키는 코딩 표준 문서를 보유하는 대신, 코드 자체를 가지고 있지 않고 코드 자체가 해당 표준을 나타내는 것이 좋습니다. 가장 중요한 부분은 코드의 표준을 적용하는 것이며 문서를 작성하는 것 이상의 것을 요구합니다. 동기 부여, 프로세스, 교육, 도구 등이 훨씬 더 중요합니다.


2

명확하게 언급되지 않은 매우 중요한 것은 코딩 표준이 언어와 유사하다는 것입니다. 서면 코딩 표준은 이러한 방식에 있으며, 그렇지 않으면 지속적으로 구식이 아니며 쓸모가 없습니다.

코드화 된 코딩 표준이없는 것은 그리 나쁘지 않습니다. 체크인시 피어 리뷰를 수행하는 경우 코딩 표준을 준수하지 않는 것이 저장소에 들어갈 때마다 2 명이 생각하고 *이 변형의 이점이 나머지 코드와의 불일치보다 중요하다는 결정을 내립니다.

서면 표준이 없으면 회사 팀이 무언가를 시험 해보고 싶거나 다른 표준에 실제 응용 프로그램이 있기 때문에 새로운 프로젝트의 새로운 코딩 표준 변형을 시도하지 못하게하는 빨간색 테이프를 제거합니다. 그들이 사용하는 자동 도구 중 일부에.

표준을 작성하는 것은 원래 의도했던 것보다 더 많은 유연성을 제거하는 경향이 있으며, 다른 일을하는 데 상당한 시간이 소요됩니다. 코딩 표준을 적어 두어서는 안된다고 말하는 것은 아닙니다. 특히 다른 지역에서 일하는 팀이 동일한 코드 기반으로 작업하는 경우, 작성된 표준에는 확실히 이점이 있습니다.

강력하게 관련 : 코딩 표준의 진화, 어떻게 처리합니까?


* 사람들이 체크인시 코드를 검토하는 동안 생각하지 않으면 문제는 코딩 표준보다 훨씬 더 큽니다.


1

그것들을 바꾸는 것은 큰 장애물이되고 사람들은 뇌에 관여하고 옳은 일을하기보다는 법의 서한을 안전하게 준수 할 것입니다.

표준의 일부가 도움이되지 않고 코드가 악화되는 날이 올 것입니다. 일부 사람들은 표준이 작성되어 안전하고 규칙을 준수하기 때문에 표준을 준수합니다. 표준 호환 코드가 아닌 좋은 코드를 작성하려는 사람들은 좌절하고 화를 낼 것입니다. 논쟁과 의견 불일치가있을 것이지만, 표준이 기록되지 않으면 탐구와 토론이있을 것입니다.


0

나는 많은 게시물이 코딩 표준스타일 가이드를 혼동한다고 생각 합니다.

서로 다른 팀에서 개발 한 모듈에 동일한 컴파일러 옵션이 있고 ABI는 들여 쓰기 된 공간 수와 다른 종류입니다.

헤더 파일에서 #include 파일을 구성하고 전역 네임 스페이스를 오염시키지 않는 올바른 방법과 같은 것들을 문서화하여 초기 코딩 및 코드 검토시 점검 목록으로 사용할 수 있도록 해야 합니다.

특히 "YYY와의 호환성 문제가 발생하기 때문에 XXX를 사용하지 마십시오"는 다른 코드를 따르지 않는 경우 예를 들어 볼 수 없습니다 . 따라서 코드가 표준을 캡처하는 방식으로 일부 표준에 대해 명확하지 않거나 완전히 누락 될 수 있으므로 이것이 보편적 인 계획이 될 수 없습니다.

예외를 사용하지 않거나 new특정 임베디드 시스템에서 사용하지 않는 것과 같이 심각하고 널리 퍼져있는 것은 "정보는 문화적 (유일한)"ISO-9000과 같은 제조 표준의 기본 원칙과 모순되기 때문에 일반적인 문화 지식으로 남겨 둘 수 없습니다 . 이러한 임베디드 시스템의 개발자가 사용하고 있습니다 (예 : 자동차 애플리케이션). 이러한 중요한 사항은 공식적으로 문서화하고 사인온 한 후 제출해야합니다.

그러나 이는 스타일이 아닌 코딩에 적용됩니다 .

C와 C ++의 발명자들은 CaMelCaSe가 아닌 소문자 이름을 사용하는 것을 예로 들었습니다. 그렇다면 왜 그렇게 많은 개발자들이 멍청한 암시 적 예를 따르지 않습니까? 표준 라이브러리와 표준 교육 자료의 스타일이 따라야 할 인상적이지 않아야합니까?

한편, 사람들 __Ugly 매크로 매개 변수에 대한 이름 사용 및 반복되지 않는 파일 포함 패턴과 같이 복사해서는 안되는 것에 대해 표준 라이브러리 헤더의 예를 따릅니다 .

따라서 물건을 갖는 것이 종종 중요한 스타일로 보이지 않거나 반대로 예제를 갖는 것은 프로젝트 코드에서 따라야 할 것에 대해 명확 하지 않을 수 있습니다. 둘 다 "스타일"(또는 코딩 규칙)이 가장 암시 적으로 남겨진다는 이론에 반대되는 예입니다.

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