코딩 표준이 더 이상 필요합니까?


13

코딩 표준이 엄청나게 도움이된다는 것이 입증되었습니다. 그러나 프로그래머가 선호하는 표준으로 포맷 할 수있는 다양한 도구와 IDE가 있습니다. 코드가 깔끔하고 주석 처리 된 (스파게티 엉망이 아닌 한) 코딩 표준이 필요하지 않습니다.

코딩 표준 개발에 대한 논쟁이 있습니까? (우리는 없지만 표준을 만들려고했습니다)?


코딩 표준을 구현하기로 결정한 경우 지속적인 통합 중에이를 적용하는 것이 좋습니다.
Leif Carlsen

10
팀의 모든 사람이되어야 하는가 필요 같은 IDE를 사용할 수 있나요?
Keith Thompson

10
코드를 재 포맷 아무리 같은 가이드 라인 교체하려고하지 드문, 특별한 경우를 제외하고는 할 일에 과부하가 걸리지 연산자. . 코딩 표준이 코드의 형식과 거의 관련이 있다면 더 나은 표준이 필요합니다.
Caleb

모든 사람들이 IDE를 사용하는 것은 아니며 Acme를 사용합니다.
dysoco

답변:


33

그러나 프로그래머가 선호하는 표준으로 포맷 할 수있는 다양한 도구와 IDE가 있습니다.

좋은 성과 있길 바래요. 내 경험에 따르면 X 형식에서 Y 형식으로 코드를 올바르게 다시 포맷 할 수있는 도구 (0!)가 거의 없습니다. 너무 많은 것들이 있습니다. 탭 대 공백, 여러 줄 문장 등. C ++ 표준 라이브러리 파일의 GNU 구현을 살펴보십시오. 당신이 할 수있는 일은 IDE가 탭 대신 항상 공백을 사용하고 외래 코드를 다시 포맷하는 것을 방해하지 않는 것입니다. 이제 코드는 원하는 방식으로 보이고 외래 코드는 원래 작성자가 작성한 방식으로 보입니다.

특정한 들여 쓰기 스타일은 코딩 표준이 마지막으로 지정해야하는 것입니다. 그것은 프로그래밍 종교 전쟁을 시작하는 것입니다. 코딩 표준 인 IMO는 수용 가능한 들여 쓰기 스타일의 합리적인 모음을 지정해야하지만 세부 사항은 패키지 작성자에게 맡겨야합니다. 들여 쓰기 스타일은 코딩 표준의 작은 부분이거나 그와 같아야합니다. 코딩 표준의 규칙 번호 제로 : 작은 것을 땀 내지 마십시오. 들여 쓰기 스타일은 작은 것입니다.

더 큰 것들 :

  • 이름을 어떻게 지정합니까?
  • 언어의 특정 부분이 제한되어 있습니까?
  • 코드를 깨끗하게 컴파일하고 어떤 컴파일러 설정으로 컴파일해야합니까?
  • 코드가 특정 메트릭을 통과해야합니까?
  • 어떤 종류의 테스트가 필요합니까?
  • 코드 (코멘트)와 다른 곳에서 어떤 종류의 문서가 필요합니까?
  • 가장 중요한 것은 표준에 대한 면제를 어떻게 받습니까?

부록
아마도 더 중요한 것은 코딩 표준에 포함 하지 않는 것입니다. 요구 사항 작성 방법과 같은 항목은 코딩 표준에 속하지 않습니다. 테스트에 대한 세부 사항도 속하지 않습니다. 프로젝트는 프로젝트 관리 계획, 테스트 관리 계획, 검증 및 검증 계획 등의 표준으로 코딩 표준을 사용해서는 안됩니다. 코딩 표준의 목표는 코드 안전성, 품질, 이해도, 유지 보수성, 그리고 다른 "영양". 이런 일이 일어나지 않도록하는 방법은 많이 있습니다. 단지 몇 가지 : 표준을 일부 국가의 세법과 같이 복잡한 책으로 만들고, 프로그래밍 전쟁을 일으키고, 명명 규칙이 잘못되었습니다.

코딩 표준은 의도하지 않은 결과를 초래할 수 있습니다. 예 : 프로젝트 엔지니어의 일부 바보는 "숫자가 지배 마법"는 것을 의미하는 것으로 해석하는 것입니다 if (index == 0) {...}for (ii = 0; ii < 3; ++ii) {...}변경되어야합니다 if (ZERO == index) {}for (ii = ZERO; ii < NUMBER_OF_DIMENSIONS_IN_THE_UNIVERSE; ++ii) {...}음주 웃지. 나는 그것이 일어나는 것을 보았다. 요즘 코딩 표준을 작성할 때 이런 어리 석음에 대항하기위한 규칙이 아니라 "매직 넘버 가이드 라인"이 아닙니다.

코딩 표준은 나쁜 프로그래밍 스타일 / 위험한 코딩 관행에 대한 최고의 방어책이 아닙니다. 코드 검토입니다. 수년간의 자동화에도 불구하고, 다소 주관적인 인간의 눈으로 코드 덩어리를보고 판단하는 것보다 낫지는 않습니다.


훌륭한 목록을 보려면 +1-내가 가장 좋아하는 답변입니다. 특히 제한이없는 코드, 컴파일러 경고, 테스트 및 설명서. 그러나 여전히 탭 대 공백 및 들여 쓰기가 중요하다고 생각합니다. 다른 누군가가 소스 제어의 변화를 바꿀 때 만드는 악몽에 대해 언급했습니다.
GlenPeterson

탭 대 공백을 처리하는 쉬운 방법은 코딩 표준에서 탭을 허용하지 않는 것입니다. 이를 적용하는 쉬운 방법은 체크인을 거부하거나 공백으로 사용 된 탭을 공백으로 변환하는 체크인 후크를 사용하는 것입니다. 야간 빌드 중 또는 체크인시 (즉석에 가까운 피드백으로 인해 바람직 함)와 같은 일부 코딩 표준을 자동으로 확인하는 것은 매우 유용한 기능입니다. 체크인이 허용 (또는 강제)되어 변환이 엉망인 경우 어떻게해야합니까? 이에 대한 쉬운 답변도 있습니다 : 코드 검토. 추악한 POS는 소집자를 통과해서는 안됩니다. 검토조차해서는 안됩니다.
David Hammen

"탭 없음"규칙 (의견이 다양하기 때문에 필자가 목록에서 피한 것)은 코드를 입력 할 때 탭을 사용할 수 없음을 의미하지 않습니다. 알맞은 편집기는 프로그래머가 입력 한 탭을 공백으로 변환 할 수 있습니다. 에디터가 그렇게 할 수 없다면, 더 나은 에디터로 바꾸는 것을 생각하십시오.
David Hammen

거기에는 논쟁이 없습니다. 들여 쓰기 / 서식이 목록에 속한다고 말합니다. 탭 런타임시 다운로드되거나 구문 분석되는 HTML 또는 파일에 적합 할 수 있습니다.
GlenPeterson

@GlenPeterson-들여 쓰기 / 포맷팅이 내 목록에 있거나 내 목록 바로 앞에 있습니다. "IMO, 코딩 표준은 수용 가능한 들여 쓰기 스타일의 합리적인 모음을 지정해야하지만 세부 사항은 패키지 작성자에게 맡겨야합니다." 그리고 "탭 없음"규칙에는 예외가 있습니다. 예를 들어 메이크 파일.
David Hammen

60

코딩 표준은 선호하는 매개 변수에 관한 것이 아니라 indent명명 규칙, 주석 규칙 및 관용구, 언어 기능 사용 등에 대한 많은 권장 사항을 포함합니다.

요컨대,이 모든 것을 어딘가에 문서화해야합니다. 마지막으로 모든 사람이 코드를 다시 포맷하는 IDE를 사용하고 싶지는 않을 것입니다 ...


1
좋은 대답, 그것은 내가 생각하지 않은 것들을 다루는 좋은 설명으로 내 지식을 넓혔습니다. +1
SomeKittens

또한 크로스 플랫폼 호환성을 처리하는 방법과 같은 것을 다룰 수 있습니다. 이는 새로운 개발자가 크로스 플랫폼 코드 작성에 익숙하지 않은 경우 매우 중요합니다.
Velociraptors

3
이 답변이 좋다고 생각하고 귀하의 질문에 답변 한 경우, 해당 답변으로 표시하십시오.
marktani

3
말할 것도없이 대량 재 포맷은 소스 제어라는 또 다른 좋은 기준을 제시 할 때 두통을 유발할 수 있습니다.
Matthew Scharley

1
@MatthewScharley는 일반적으로 포맷터를 통해 변경된 코드를 푸시 한 다음 커밋합니다 (포맷터가 아무 것도 깨지지 않도록하기 위해 마지막 테스트 실행 후). 포맷 된 코드 만 리포지토리에 도착합니다.
ratchet freak

13

팀 내에서 일관된 스타일을 사용하면 코드를 쉽게 읽을 수 있습니다. 코드를 쉽게 읽을 수있게되면 팀의 생산성이 향상됩니다. 코드를 정신적으로 분석 할 필요가 없기 때문에 생산성이 높아지고 코드를 검토하고 유지 관리 할 때 구문보다는 논리에 집중할 수 있습니다.

각 사용자가 IDE가 자신의 선택에 따라 코드를 다시 포맷하도록하는 경우 두 가지 문제 중 하나가 발생합니다. 저장시 항상 원래 형식으로 다시 변환하거나 diff가 많은 노이즈를 표시한다는 사실을 겪어야합니다. 코드의 논리에서 무엇이 바뀌 었는지보기가 더 어려워졌습니다.


4
차이! 나는 그것을 생각하지 않았다.
SomeKittens

1
그래, 확실히 방식으로 코드 재 포맷 모두를 못하게 그들은 그들이 작업을 좋아마다. 그것은 단지 판 데모 늄입니다. 나쁜 표준조차 그것보다 낫습니다. 선택의 여지가 있다면, 새로운 개발자가 빠르게 속도를 낼 수 있도록 언어에서 가장 인기있는 일을하려고합니다. 웹을 사용하여 언어의 표준 표준을 찾으십시오.
GlenPeterson

5

짧은 답변 : 예, 품질을 반영합니다 .

그것이 무엇이며 왜 필요한가?

코딩 표준은 매우 중요한 고품질 소프트웨어입니다. 그들은 이렇게 증가 생산성을 유지 할 수 있도록 코드를 쉽게 개발 과정에서, 한 사람 또는 팀에 연결되는 코드를 유지한다. 코딩 표준의 일관성은 또한 조기에 작성된 코드와 잘 만들어진 예술을 구별합니다.

여기에 이미지 설명을 입력하십시오

모든 개발자는 코딩 규칙이 좋다는 것을 알고 있습니다. 그러나 표준은 어디에서 오는가?

주로 제품을 소유 한 공급 업체가 지시합니다. 모든 개발자는 다양한 산업 코딩 표준 중에서 선택할 수 있습니다. 일부 회사는 Microsoft, Oracle 및 Sun Microsystems가 지침을 제공합니다.

코딩 표준 개발에 대한 논쟁이 있습니까? (우리는 없지만 표준을 만들려고했습니다)?

예, 사용하도록 권장되는 산업 표준이 있습니다. 그러나 각 코딩 표준은 개발 플랫폼에 따라 다릅니다. 따라서 코딩 표준은 대부분 언어에 따라 다릅니다. 예를 들어 Java의 표준은 .NET과 다릅니다. 예를 들어 C # .NET은이 참조에서 해당 표준을 사용합니다 .

공통 표준

공통 표준은 프로그래밍 언어에 의존하지 않습니다. 공급 업체가 제공 한 표준 (일명 언급 된 산업 코딩 표준) 외에도 헝가리 표기법 또는 CamelCase 와 같은 다른 프로그래밍 표기법이 있습니다 . Microsoft .NET 코딩 표준은 처음에 CamelCase 표기법을 기반으로 한 것 같습니다.

팀 코딩 표준 및 지침

모든 개발 팀 은 프로젝트가 시작되는 즉시 코딩 표준에 동의해야합니다. 코딩 지침은 일반적으로 팀장 또는 회사의 수석 아키텍트가 작성합니다. 일반적으로 필요에 따라 따르고 개선해야하는 공개 문서입니다. 예를 들어, 회사에는이 문서가 업로드되어 회사 개발자가 사용할 수있는 Wiki 페이지가 있습니다.


문제는 그런 것들이 중요한지 묻는 것입니다. 코딩 표준이 다루는 내용을 설명하지만 필요한 이유를 묻는 질문이 있습니다.
Bryan Oakley

아직 답변을 마치지 못했습니다
Yusubov

그것은 While Not완전히이어야합니다 Do Until.
Ry-

2

논란의 여지가있는 의견을 받아들이고 코딩 표준이 필요하지 않다고 말할 입니다. 당신이 말하는 것처럼, 규칙은 IDE 시행 지침, 모든 회사의 모든 사람들이 따라야 할 일반적인 모범 사례이거나, 유능한 팀에서 한 사람 이상이 수행해야하는 팀별 판단 요청입니다. 페어 프로그래밍 또는 코드 리뷰를 통해.

이 변수의 이름을 어떻게 지정해야합니까? 어떤 언어 기능을 사용해야합니까? 피해야합니까? 어떤 테스트가 가장 좋습니까? 이것은 우리가 지금 작업하고 있는 좁게 정의 된 문제에 직면 할 때까지 응답하지 않는 것이 가장 좋습니다 .

이러한 미세한 결정을 통해 결정된 현재 문제 영역과 사용중인 기술의 교차점에 따라 팀 내의 비공식 표준 / 패턴이 발생할 수 있습니다. 이를 체계화한다는 것은 수백 가지의 미세한 결정에 따라이 프로젝트에 사용 된 명명 표준, 적절한 언어 하위 집합 등과 같은 것들이 팀에 의해 비공식적으로 채택되어야한다는 것을 의미합니다.

원칙적으로 그것은 대단한 것 같지만 실제로는 정치의 자석이됩니다. 모든 사람이 어떤 도구를 사용해야합니까? 다른 사람들이 무엇을 피하도록 강요하고 싶습니까? 모든 사람이이 질문에 동의하면 표준이 필요하지 않습니다. 우리는 그냥 할 것입니다. 내 경험상 표준은 개발자의 한 하위 집합이 다른 하위 집합에 대한 통제력을 행사하기를 원합니다. 일반적으로 이러한 유형의 정치 및 그 뒤에 따르는 기술 정책은 지침을 제공하는 대신 혁신을 방해합니다.

도움이되지 않는 규칙이 많은 표준을 읽는 대신 실제 지침 을 원한다면 팀의 유능한 구성원을 찾아서 그들이 어떻게 생각하는지 물어보십시오. 그들은 무엇을 태웠습니까? 코드 작성을 제안하는 방법은 무엇입니까? 귀중한 경험을 바탕으로 다양한 유용한 답변을 얻을 수 있습니다. 일반적인 경험을 바탕으로 많은 교차점이 보입니다. 표준에 의해 시행되는 단일 문화 대신, 문제를 해결하기위한 많은 유효한 방법을 보는 데 도움이되는 다양한 다양성이 있습니다.

누군가가 "표준"에서 규칙의 원인을 밝히지 말라고 주장하지만 그들의 주장에 대한 경험이나 합리적인 백업이 없다면 무시하십시오. 이 표준은 누구에게나 제공되지 않았거나 더 나은 개발자가되었습니다.


제게는 괜찮습니다-특히 모든 개발자가 Resharper 라이센스를 가지고 있고 fxcop / stylecop가 빌드 서버에서 실행중인 경우 시간을 낭비하지 않아도됩니다.
StuartLC

1
표준은 사람들 경험의 정점과 통합이어야하며, 일반적으로 그러합니다. 당신이 말하는 바로 "유능한 사람들". 그들이 틀렸다면, 그들을 개발하되, 손을 hand는 것은 무정부 상태를위한 레시피입니다.
앤드류

@Andrew 이러한 경험은 적용되지 않을 수도 있고 현재 해결중인 문제와 관련
Doug T.

1
혁신을 억제하고, 부분 집합, 일반적인 모범 사례 및 정치를 통제하기 위해 +1. 교육하고 규제하지 마십시오!
kirk.burleson

"작은 코딩 표준이없고, 컨벤션에 의존하고지도를 요구합니다."는 소규모 팀에서 잘 작동합니다 (50 ~ 100 미만). 코드 기반 프로젝트 내에서 수천 명의 사람들이 프로젝트간에 전환 할 경우 코드에 대한 지침을 작성하는 데 도움이됩니다.
Vatine

1

이제 상용 항공기가 와이어로 연결되므로 조종사 입력 작업을 기반으로 비행기를 비행하는 프로그램을 원할 것입니다. 프로그래머가 그러한 코드를 작성할 때 일반적으로 피할 수있는 프로그래밍 오류를 피하기 위해 엄격한 규칙을 따르기를 바랍니다. 이를 수행하는 한 가지 방법은 코딩 표준을 사용하는 것입니다.

참조 : 미국 연방 항공청 C 및 C ++ 코딩 표준 제안

더 말할 필요가 있습니다.

참고 : FAA 온라인에서 실제 표준을 찾을 수는 없지만 보았습니다.


그것은 프로토 타입의 잘못된 코딩 표준입니다. 너무 길고 종교적인 문제가 발생하며 가장 중요한 것은 현대의 C ++ 프로그래밍과 반대로 실행됩니다. 예를 들어, POD (일반 오래된 데이터)를 제외하고 예외에 대한 규칙은 나쁜 것부터 오래된 것까지 다양합니다. 나쁜 것 : std :: bad_alloc을 잡으려고하는 것은 매우 나쁜 생각으로 판명되었습니다. Archaic : 발생 될 수있는 모든 예외를 지정하고 호출 된 함수에 의해 발생 된 모든 예외를 포착하는 Java 아이디어는 C ++에서 작동하지 않습니다. David Abrahams의 예외 보장 개념 개념을 기반으로 예외 안전 코드를 작성하는 것이 훨씬 좋습니다.
David Hammen

1

저에게는 징계 문제와 징계 문제가 항상 도움이됩니다.

그렇게 말하면서, 코딩 표준을 IDE 및 / 또는 도구의 사용 상태를 유지하게 만들 것입니다. 또한 각 개발자마다 IDE를 동일하게 구성해야합니다 (예 : 각 개발자의 IDE는 들여 쓰기를 위해 모든 탭 또는 모든 공백을 사용해야하고 모든 IDE는 동일한 탭 길이를 가져야합니다).

또한 체크인 스크립트를 개발하고 사용하여 코딩 표준을 어느 정도 준수 할 수 있습니다. 예를 들어 체크인 된 파일을 실제로 버전 제어 시스템에 커밋하기 전에 들여 쓰기를 수정할 수 있습니다.


1

코딩 표준은 더 이상 중요 할 수 없습니다! 나는 열렬한 CakePHP 사용자이며 버전마다 변경 사항을 검토하고 개발자는 표준을 따르지 않습니다.

사실, 나는 스타일의 차이에 너무 화가 나서 코딩 규칙에 대한 짧은 Rant 를 작성해야했습니다 . 새로운 개발자를 기존 팀에 데려 오는 데 많은 시간과 비용이 소요됩니다. 표준없이 새로운 개발자를 데려 오는 것을 상상해보십시오.

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