이 질문 을 읽는 동안 최상위 투표 답변은 코딩 표준에 대해 Uncle Bob을 인용 했지만이 팁에 혼란 스러웠습니다.
- 피할 수 있으면 적어 두지 마십시오. 오히려 표준이 포착되는 방식으로 코드를 작성하십시오.
이것은 내 뇌에서 튀어 나왔지만 나는 고집 할 곳을 찾을 수 없었습니다. 새로운 사람이 팀에 합류하거나 코딩 표준이 변경되면 정보가 혼동 될 수 없습니까?
코딩 표준을 작성해서는 안되는 이유는 무엇입니까?
이 질문 을 읽는 동안 최상위 투표 답변은 코딩 표준에 대해 Uncle Bob을 인용 했지만이 팁에 혼란 스러웠습니다.
- 피할 수 있으면 적어 두지 마십시오. 오히려 표준이 포착되는 방식으로 코드를 작성하십시오.
이것은 내 뇌에서 튀어 나왔지만 나는 고집 할 곳을 찾을 수 없었습니다. 새로운 사람이 팀에 합류하거나 코딩 표준이 변경되면 정보가 혼동 될 수 없습니까?
코딩 표준을 작성해서는 안되는 이유는 무엇입니까?
답변:
몇 가지 이유가 있습니다.
코딩 표준은 사람들이 해야 할 일이 아니라 실제로하는 일 에 관한 것 입니다. 사람들이 표준을 벗어나면 코드 검토 프로세스 및 / 또는 자동화 된 도구를 통해이를 선택하고 변경해야합니다.
코딩 표준의 요점은 우리의 삶을 편하게한다는 것입니다. 그것들은 중요한 것들로부터 필요한 것들을 걸러 낼 수 있도록 우리 두뇌의 지름길입니다. 이를 검토하기 위해 문서에서 형식화하는 것보다 검토 문화를 작성하는 것이 훨씬 좋습니다.
또 다른 해석이 있습니다. 나는 그것이 삼촌 밥이 의미 한 바라고 생각하지 않지만 고려할 가치가 있습니다.
문서에서 코딩 표준을 캡처하지 마십시오. 표준을 충족하는지 확인하는 자동화 된 프로세스를 통해 코드로 캡처하십시오 .
문서를 참조하는 사람들에게 의존하지 말고 동시에 존재하는 코드를 해석하고 컨벤션과 우연의 일치를 식별하는 사람들에게 의존하지 마십시오.
Checkstyle과 같은 것을 커밋 빌드에 통합하십시오. 이를 통해 형식 지정 및 명명 표준과 같은 기본 규칙을 적용한 다음 스타일을 고려하는 데 정신적 노력을 기울이지 않고 적어도 철저한 보장을받는 바보 같은 프로세스로 오프로드 할 수 있습니다.
중요한 경우 원하는 것을 엄격하게 정의하고 잘못되면 실패합니다.
After the first few iterations, get the team together to decide.
규칙 # 3만으로 코딩 표준을 옹호하지 않는 것처럼 보이지만 모든 규칙을 함께 고려할 때 대부분 # 6을 고려할 때 실제로 다음과 같이 말하는 것 같습니다. 처음에는 코딩 표준을 강제해야합니다. 유기적으로 개발되도록하고 잠시 후 팀과 함께 세부 사항을 해결하십시오. " "코딩 표준을 공식화하지 마십시오"(많은 답변의 본질 인 것)와는 매우 다릅니다.
사람들은 분쟁 을 해결하기 위한 코딩 표준 문서의 실제 목적을 간과합니다 .
코딩 표준의 결정은 대부분 가독성과 생산성에 미미한 영향을 미칩니다. 특히 언어에 '정상적인'스타일을 채택하고 언어 디자이너는 이것이 사양의 일부 여야한다는 것을 인식하기 시작합니다 (예 : Go).
그것들은 너무 사소하기 때문에 논쟁은 실제로 가열되고 끝없이 실행될 수 있으며 생산성과 팀 응집력에 실질적인 손상을 줄 수 있습니다. 또는 둘 이상의 사람들이 선호하는 스타일 사이에서 끝없이 다시 포맷하여 변경 기록을 숨길 수 있습니다.
서면 표준이 있으면 논쟁이 끝납니다. 관리자는이를 지적하고 문서에 대한 불만을 피할 수 있습니다. 당신은 한 장의 종이로 논쟁 할 수 있지만 그것은 당신의 말을 듣지 않을 것입니다.
( 구조가없는 폭정 참조 )
의견은 거짓말 이기 때문 이다.
코딩 표준은 코드의 내용에 대한 큰 의견입니다. 코드 자체는 궁극적 인 진실의 원천입니다. 이 경우 진실은 코드 동작이 아니라 표현 된 스타일입니다. 표준이 아직 코드에 반영되지 않은 경우에는 앞서 작업을 많이 수행해야합니다.
Bob 아저씨는 주석이 프로그래머의 개인적 실패라고 생각합니다. 왜냐하면 프로그래밍 언어 자체로 코드 조각의 목적을 표현할 수 없었기 때문입니다. 마찬가지로 표준 문서는 코드베이스에서 일관된 스타일을 표현하지 못합니다.
새로운 프로그래머는 코드를 살펴 보는 데 시간을 소비해야하며 여러 장의 표준 문서를 읽는 데 며칠을 소비하지 않아야합니다.
표준 문서는 그다지 나쁜 아이디어는 아니지만 표준 문서를 유지 관리하는 것이 정규직 인 프로그래밍 상점에있었습니다. 표준 문서를 보관해야하는 경우 한 페이지에 보관하십시오. 그러나 이미 코드가 있다면 누구나 하루 안에 같은 문서를 만들 수 없어야합니까?
코드 표준이 중요합니다. 그것이 무엇인지 지시하는 문서를 갖는 것은 아닙니다.
Bob 아저씨가 코딩 표준을 피할 수 있다면이를 기록해서는 안된다고 제안하는 이유는 무엇입니까?
그의 의견 뒤에 이유를 묻는다면 여기에 답변을 게시 할 때만 답변을받을 수 있습니다 ( 우리의 의견은 관련이 없습니다).
코딩 표준을 작성해서는 안되는 이유는 무엇입니까?
당신은 그가 묻는 경우 바로 그것에 대해 : 내가 당신이 그것을 피할 이유가 없다 말할 수있는 유일한 인기를 (지금까지) 할 수 있습니다.
쓰기 중지 . 그러나 나는 내 이유를 설명하려고 노력할 것입니다 ...
David는 Stephen의 답변의 요점은 문서를 작성 하지 말고 어떤 형식으로 작성 해야하는지에 대한 의견을 제안했습니다 . 지침이 도구 로 공식화되는 경우 (수동 코드 검토 만이 아님) 동의 할 수 있습니다 (법에 다른 사항이 필요하지 않은 경우). 불행히도 도구는 특정 번역 단위 또는 패키지 또는 선호하는 언어가 경계 라고 부르는 모든 것으로 제한되어 있기 때문에 모든 것을 확인할 수는 없습니다 (계산 이론은 우리의 친구가 아닙니다) .
그러나 Bob 아저씨의 말은 그가 그것에 대해 이야기하고 있다고 생각하지 않습니다.
그런 선임 전문가와 의견이 맞지 않습니까? 나는 인용 된 게시물의 거의 모든 시점에 대해 (자세한 내용은이 답변의 두 번째 부분을 참조하십시오). 이유 를 이해하려고 노력하십시오 (코딩 지침이 사소한 형식 지정 문제 가 아니라는 것을 이미 알고 있다고 가정 ).
"무료 자체 구성 프로그래밍"은 16 세 닌자 에게는 좋지만 조직에는 다른 요구 사항이 있습니다 .
프로세스 전에 사람들 에 대해 생각하고 있다면 TPS에 대한 독서 만 제안 할 수 있습니다. 인간은 린의 중심 부분이지만 절차는 고도로 공식화되어 있습니다.
물론 하나의 팀으로 구성된 소규모 조직 에서는 팀이 채택 할 표준을 결정할 수 있지만이를 기록해야합니다. 여기 Programmers.SE에 에릭 Lippert의 게시글을 읽을 수 있습니다 : 내 생각 그는 (몇 가지 규칙이있을 수 있습니다 경우에도 자신의 작성 지침을 준수했다 마이크로 소프트에서 일할 때 우리 모두가, 그가 숙련 된 개발자 동의 잘못 , 적용 할 수 없습니다 또는 쓸모 Jon Skeet은 어떻습니까? Google 가이드 라인은 매우 엄격하지만 (많은 사람들이 동의하지 않음) 해당 가이드 라인을 준수해야합니다. 그들에게 무례합니까? 아니요, 그들은 아마도 그러한 지침을 정의하고 개선하기 위해 노력했을 것입니다. 회사는 한 명의 회원 (또는 한 팀) 이 만들지 않으며 각 팀은 섬이 아닙니다 .
처음 몇 번의 반복 동안 진화하게하십시오.
사실, 당신이없는 때까지 표준 및 조직이 당신에게 작업을 할당 구축 을.
회사 별이 아닌 팀별로 지정하십시오.
아니요, 위에서 설명한 모든 이유로 인해. 코드 형식 만 공식화한다고 생각하더라도 (형식화하려는 가장 유용한 것) 형식화에 대한 끝없는 (그리고 쓸모없는) 전쟁에 대한 기억이 여전히 남아 있습니다. 나는 그들을 반복해서 살고 싶지 않다.
피할 수 있으면 적어 두지 마십시오. 오히려 표준이 포착되는 방식으로 코드를 작성하십시오.
아니요, 위에서 설명한 모든 이유로 (물론 가이드 라인이 변경 될 때 모든 코드를 한 번에 리팩토링하지 않는 한). 코드를있는 그대로두고 싶습니까? 현재 지침 을 이해하기 위해 코드베이스를 어떻게 검사 합니까? 파일 에이지 별로 검색하고 코딩 스타일을 소스 파일 에이지에 맞게 조정 하시겠습니까?
좋은 디자인을 제정하지 마십시오. (예 : 사람들에게 goto를 사용하지 말라고 말하지 마십시오)
사실 지침은 짧거나 아무도 읽지 않아야합니다. 명백한 것을 반복하지 마십시오.
모든 사람이 표준이 의사 소통에 관한 것임을 알도록하십시오.
사소한 세부 사항에 대해서만 표준을 설정하지 않는 한 좋은 표준은 품질 에 관한 것입니다.
처음 몇 번의 반복 후에 팀이 함께 결정하도록하십시오.
첫 번째 요점을 참조하고 코딩 표준은 일반적으로 개발 및 수정하는 데 몇 년이 걸리는 프로세스라는 것을 잊지 마십시오. 정말? 노인 (있는 경우)의 기억에 의존하고 싶습니까?
세 가지 메모 :
코딩 표준을 작성해서는 안되는 이유는 무엇입니까?
여기에는 여러 가지 이유가 있습니다. 다음은 몇 가지 고려 사항입니다.
코드 표준을 검토, 토론, 문서화, 수정하는 등 전체 팀에 많은 시간을 할애하기 위해 사람들이 "학습"코드 표준을 소비하는 시간은 얼마나됩니까? 이것은 "직원 핸드북"을 지속적으로 논의하는 것과 같습니다. 얼마나 자주 팀 회의 의제에 표시됩니까?
프로젝트가 취소되거나 보류되는 경우 등 그런 다음 보통 남아있는 소수의 사람들은 표준을 계속 준수 할 수 없거나 읽을 수도 없습니다. 다음으로 아는 것은 "코드를 깨끗하게 유지"하려는 모든 노력은 어쨌든 거의 낭비되었습니다.
프로젝트가 중단되거나 새로운 리드가 도입되면 이전 규칙을 완전히 무시하고 새로운 방식으로 수행하려고 할 가능성이 큽니다. 다시 말하지만 표준을 체계화함으로써 얻은 것은 무엇입니까?
# 6을 읽어야합니다.
처음 몇 번의 반복 후에 팀이 함께 결정하도록하십시오.
다시 말해, 프로젝트를 시작할 때가되면 잠시 흐름을 따라 가십시오. 그런 다음 현재 팀이 사용하는 코딩 표준의 일반적인 규칙을 논의하고 기본적으로 준수하십시오. 이렇게하면 실행 코드를 얻는 데 필요한 "구문 설탕"을 작성, 검토 및 문서화하는 데 필요한 노력을 최소화하면서 제품을 개선하는 노력을 극대화 할 수 있습니다.
코딩 표준에서 큰 이점을 얻는 팀은 거의 없습니다. 일반적으로 "가독성"은 너무 모호합니다. 대부분의 개발자는 간격, 줄 바꿈 등에 대한 정확한 규칙의 이점을 크게 누리지 못하지만 최소한 몇 가지 규칙을 지정하여 끊임없이 성가신 개발자를 피할 수 있습니다 .
첫째, 내가 아는 한 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
있습니다. 마찬가지로, 코딩 표준이 조건 또는 "빈 문장" =
내에서 사용될 수없는 경우, 이 오류를 추적하기 위해 코드 검사기를 빌드 시스템의 일부로 사용할 수 있습니다.if
if
C / C ++에서 멀어 질 때 코딩 표준에 대한 견해가 크게 바뀌 었습니다. 나는 엄격하게 시행되고 많은 페이지 길이의 코딩 표준을 좋아했습니다. 이제는 사용중인 도구를 나열하고 몇 가지 명명 규칙에 따라 원래 팀 구성원간에 비공식적으로 동의하면된다고 생각합니다. 우리는 더 이상 C / C ++로 애플리케이션을 작성하는 30 명 이상의 개발자로 구성된 팀의 세계에 살고 있지 않습니다 ...
JScript를 좋아하지 않는 이유가 있으며 TypeScript가 수년 동안 웹 개발에 가장 좋은 방법이라고 생각합니다. HTML / CSS / JScript 등의 디자인 결함으로 인해 웹 UI 개발자는 여전히 코딩 표준이 필요하다고 생각합니다.
소스를 자체 문서화 코딩 표준으로 두는 것은 두 가지를 의미합니다.
자주 업데이트되고 잘 작성된 코드 표준 문서는 매우 유용 할 수 있지만 일반적으로 그렇지 않습니다. 표준 문서는 좋은 표준 문서를 작성하는 것이 매우 어렵고 최신 상태로 유지하기가 더 어렵 기 때문에 회사에서 사용하는 실제 코딩 표준을 반영하지 않습니다.
열악하고 오해를 불러 일으키는 코딩 표준 문서를 보유하는 대신, 코드 자체를 가지고 있지 않고 코드 자체가 해당 표준을 나타내는 것이 좋습니다. 가장 중요한 부분은 코드의 표준을 적용하는 것이며 문서를 작성하는 것 이상의 것을 요구합니다. 동기 부여, 프로세스, 교육, 도구 등이 훨씬 더 중요합니다.
명확하게 언급되지 않은 매우 중요한 것은 코딩 표준이 언어와 유사하다는 것입니다. 서면 코딩 표준은 이러한 방식에 있으며, 그렇지 않으면 지속적으로 구식이 아니며 쓸모가 없습니다.
코드화 된 코딩 표준이없는 것은 그리 나쁘지 않습니다. 체크인시 피어 리뷰를 수행하는 경우 코딩 표준을 준수하지 않는 것이 저장소에 들어갈 때마다 2 명이 생각하고 *이 변형의 이점이 나머지 코드와의 불일치보다 중요하다는 결정을 내립니다.
서면 표준이 없으면 회사 팀이 무언가를 시험 해보고 싶거나 다른 표준에 실제 응용 프로그램이 있기 때문에 새로운 프로젝트의 새로운 코딩 표준 변형을 시도하지 못하게하는 빨간색 테이프를 제거합니다. 그들이 사용하는 자동 도구 중 일부에.
표준을 작성하는 것은 원래 의도했던 것보다 더 많은 유연성을 제거하는 경향이 있으며, 다른 일을하는 데 상당한 시간이 소요됩니다. 코딩 표준을 적어 두어서는 안된다고 말하는 것은 아닙니다. 특히 다른 지역에서 일하는 팀이 동일한 코드 기반으로 작업하는 경우, 작성된 표준에는 확실히 이점이 있습니다.
강력하게 관련 : 코딩 표준의 진화, 어떻게 처리합니까?
* 사람들이 체크인시 코드를 검토하는 동안 생각하지 않으면 문제는 코딩 표준보다 훨씬 더 큽니다.
나는 많은 게시물이 코딩 표준 과 스타일 가이드를 혼동한다고 생각 합니다.
서로 다른 팀에서 개발 한 모듈에 동일한 컴파일러 옵션이 있고 ABI는 들여 쓰기 된 공간 수와 다른 종류입니다.
헤더 파일에서 #include 파일을 구성하고 전역 네임 스페이스를 오염시키지 않는 올바른 방법과 같은 것들을 문서화하여 초기 코딩 및 코드 검토시 점검 목록으로 사용할 수 있도록 해야 합니다.
특히 "YYY와의 호환성 문제가 발생하기 때문에 XXX를 사용하지 마십시오"는 다른 코드를 따르지 않는 경우 예를 들어 볼 수 없습니다 . 따라서 코드가 표준을 캡처하는 방식으로 일부 표준에 대해 명확하지 않거나 완전히 누락 될 수 있으므로 이것이 보편적 인 계획이 될 수 없습니다.
예외를 사용하지 않거나 new
특정 임베디드 시스템에서 사용하지 않는 것과 같이 심각하고 널리 퍼져있는 것은 "정보는 문화적 (유일한)"ISO-9000과 같은 제조 표준의 기본 원칙과 모순되기 때문에 일반적인 문화 지식으로 남겨 둘 수 없습니다 . 이러한 임베디드 시스템의 개발자가 사용하고 있습니다 (예 : 자동차 애플리케이션). 이러한 중요한 사항은 공식적으로 문서화하고 사인온 한 후 제출해야합니다.
그러나 이는 스타일이 아닌 코딩에 적용됩니다 .
C와 C ++의 발명자들은 CaMelCaSe가 아닌 소문자 이름을 사용하는 것을 예로 들었습니다. 그렇다면 왜 그렇게 많은 개발자들이 멍청한 암시 적 예를 따르지 않습니까? 표준 라이브러리와 표준 교육 자료의 스타일이 따라야 할 인상적이지 않아야합니까?
한편, 사람들 은__Ugly
매크로 매개 변수에 대한 이름 사용 및 반복되지 않는 파일 포함 패턴과 같이 복사해서는 안되는 것에 대해 표준 라이브러리 헤더의 예를 따릅니다 .
따라서 물건을 갖는 것이 종종 중요한 스타일로 보이지 않거나 반대로 예제를 갖는 것은 프로젝트 코드에서 따라야 할 것에 대해 명확 하지 않을 수 있습니다. 둘 다 "스타일"(또는 코딩 규칙)이 가장 암시 적으로 남겨진다는 이론에 반대되는 예입니다.