기본 규칙을 따르도록 프로그래머를 설득하는 방법


20

프로그래머가 자주 따라야한다고 요구하는 몇 가지 규칙이 있습니다. 그들은 코드를 작성하고 작동하면 작업이 완료됩니다. 가장 기본적인 규칙은 다음과 같습니다.

  • 커밋 변경
  • View 또는 Controllers에서 모델 문제를 작성하지 않음
  • 하드 코딩 피하기

당신의 경험에 대해 말해 줄 수 있습니까? 이것을 어떻게 관리합니까?


2
programmers.stackexchange.com에 문의해야합니다. 코드 리뷰를합니까? Crucible과 같은 코드 검토 도구가 있습니까? 철저한 코드 검토 를 수행하고 다른 작업을 수행하기 전에 해결되는 모든 문제를 주장하는 것이 좋습니다 .

15
대부에서 일했던 침대에 말의 머리를 남겨 두어보십시오.
Gaurav

4
나는 고전압으로 큰 성공을 거두었습니다. 귀하의 마일리지가 다를 수 있습니다.
Tim Post

2
@Tim : 롤업 신문이 더 친환경적입니다.
Steven A. Lowe

@Steven, 그럴 것 같습니다. 먼저 신문의 용도를 변경 한 다음 재활용하십시오. 녹색 위협에 대한 예술이 있다고 생각합니다.
Tim Post

답변:


6

모든 지식 근로자는 양질의 작업을 수행해야합니다. 임의의 시간 제약이 있다고 느끼면 품질이 저하됩니다. 모든 사람이 사양을 충족하고 마감 시간을 맞추는 데 관심이있을 때 "충분히 좋은"것을 만드는 것이 어떻습니까?

불만 사항 목록은 단기 목표 달성에 대해서만 보상하며 높은 품질을 강조하지 않는 회사의 증상입니다. 5 성급 호텔 또는 트럭 정류장을 운영하고 있습니까?


1
이것을 지적 +1 문화 문제이며 동기 부여 관점에서 해결해야합니다.
Alex Feinman

그것은 모두 JeffO에 의해 언급으로 기업 문화의 문제를 해결합니다. 그러나 때로는 코딩 담당자와 개발자가 양질의 코드 나 필요에 대한 비전이 없을 때 문화가 처음부터 시작됩니다. 그들이 컴퓨터 과학 학교에 있었을 때, 교수들은 머리 옆에 몇 번 두 드려야했습니다.
robert bristow-johnson 2012

@ robertbristow-johnson-좋은 지적입니다.
JeffO

14

기본 규칙을 따르려면 규칙이 무엇인지 알고 규칙에 동의해야합니다.

이를 처리하는 방법은 모두가 동의 할 수 있는 코딩 지침 문서공동으로 작성하는 것 입니다. 그들에게 이것을 강제로 시도하지 마십시오.

따라서 팀을 구성하고 기본 규칙에 대한 공통 정의를 작성하십시오!

모든 목소리가 들리는 작업장으로하십시오. 끝없는 토론을 피하기 위해 타임 박스. 당신은 여러 가지 생각을 모 으려고 노력하고 있으므로, 모든 사람이 존중하고 열린 마음을 유지해야한다는 긍정적 인 메모로 무대를 설정하고 싶을 수도 있습니다 (코드 작성은 개인적입니다 ...).

이 지침은 팀이 추가하거나 설명해야 할 것이 있다고 느낄 때마다 변경되어야합니다.


2
동의하지만 "이것을 강요하지 마십시오. -모든 것이 말되고 끝났을 때, 누군가 기본 규칙 에 동의하는지의 여부 는 관련이 없습니다. 상사는 규칙을 만들거나 따르거나 다른 직업을 찾습니다. 우리는 고용주-직원 관계가 적용되지 않을 정도로 특별하지 않습니다.
Steven Evers

12

당신의 역할은 무엇입니까? 코드 품질에 특히 관심이있는 또 다른 개발자 인 경우, 사용자가들을 수있는 권한이 없을 수도 있으며, 이러한 아이디어를 경영진에게 버블 링하여 코드 표준을 설정해야합니다. 따라 갔다. 관리자 / 팀장 / 건축가이고 권한이있는 사람은 이러한 관행을 직접 설정할 수 있습니다. 이러한 것들을 제거하기 위해 표준 문서와 코드 검토 프로세스를 연구하십시오.

그것은 당신이 켤 수있는 마법의 스위치가 아닙니다. 속도가 느리고 100 %가되지 않습니다. 어쨌든 그것은 내 경험이었습니다.


1
동의하다. 이것은 기술적 문제가 아닌 정치적 문제입니다.

그리고 모든 코드 표준은 그룹에 의해 적어도 부분적으로 합의되어야합니다. StyleCop과 같은 도구는 큰 도움이됩니다.
Job

상사는 그의 "코드 품질"을 푸시하려고 노력하고 있지만 사람들은 그것을 믿지 않기 때문에 이륙하지 않습니다. 권력을 갖는 것이 항상 정답은 아닙니다.
IAdapter

@ 0101 매우 그렇습니다. 힘은 메시지를 밀어 넣는 데 도움이됩니다. 받아 들여지고 따르도록 메시지를 작성해야합니다.
RationalGeek

7

지금까지 모든 대답을 합리적으로 조합해야합니다. 결국, 똑똑한 사람들 (개발자) 그룹에 대해 이야기 할 때, 행동이 중요한 이유를 제시하고, 행동이 올바르게 수행되도록 투자되는 행동이 어떻게 수행되는지 충분히 제어해야합니다 . 위의 명령은 일반적으로 똑똑한 사람들에게는 느슨합니다. 문제가 문제라는 데 동의하지 않으면 규칙을 따르는 것보다 명령을 해결하는 데 더 많은 시간을 할애 할 수 있기 때문입니다.

내 전술 중 일부는 다음과 같습니다.

변경 사항 커밋 :

먼저, 팀은 언제 커밋 할 것인지, 무엇을 커밋 할 것인지에 동의해야합니다. 사람들이 무언가를 어디에 두어야할지 모릅니다. 언제, 얼마나 자주 체크인해야하는지에 대한 합의는 "빌드를 깨뜨리지 말라"는 것은 명백한 좋은 규칙이지만 어떻게 확인되고 누가 그것에 대해 알게됩니까? 또 다른 기준은 "체크인되지 않은 경우 수행되지 않습니다"입니다.

내가 아는 대부분의 개발자는 코드 IF를 확인하는 것이 행복합니다.

  • 체크인 과정은 쉽습니다
  • 동기화 프로세스가 쉽습니다 (다른 개발자의 변경을 고려하여)
  • 변경 사항 확인 및 버전 간 이동이 쉽습니다.

내가 최근에 알아 차린 한 가지는 새로운 CM 도구를 사용할 때 체크인이 더 빈번하고 고통스럽지 않다는 것입니다. 우리 팀은 이전에 Clearcase를 사용한 Rational Team Concert를 개척하고 있습니다. 툴을 광고한다는 의미는 아니지만 작고 빠른 병합이 많은 새로운 스트리밍 체크인의 물결이 조기 체크인과 자주 체크인에 더 매력적입니다.

개발자가 CM 통증 제거를 담당하게하면 일반적으로 체크인 횟수가 증가합니다.

아키텍처 준수-뷰 및 컨트롤러에서 모델 문제를 작성하지 않음

나는 그것을 "아키텍처를 올바르게 수행하라"는 일반적인 덩어리에 넣었다. 나는 동료 평가에 대해 말한 사람에 동의합니다. 동료의 압력은 이것에 좋습니다. 내가 일반적으로 사람들이이 분야에서 모범 사례를 접어 접하게되는 방법 중 하나는 동료들이 다른 방법으로 왜 그렇게했는지 물어 보는 것입니다 (그렇지 않은 방법). 일반적으로 "왜"질문은 사람들이 왜 다르게해야하는지 깨닫는 길을 안내합니다. 사람들이 모범 사례를 잘 이해 한 이유를 잘 알고 있으면이를 따르는 것이 훨씬 쉽습니다.

또한 사람을 결정에 연결하는 형식이 있다면 해당 영역에 버그를 할당하는 것이 더 쉬울 수 있습니다. 따라서 디자인이 잘못된 영역에서 버그를 수정하는 책임이있는 사람은 바로 전에 무언가를 얻을 필요가 있습니다. 그들은 새롭고 흥미 진진한 무언가로 넘어갈 수 있습니다.

하드 코딩 방지

명확한 코딩 표준으로 시작하고 코딩 검토를 동료 검토에 통합합니다. 하드 코딩은 동료 검토 안건의 확인란이 될 수있는 것 중 하나입니다.

나는 이런 종류의 것이 그것이 규칙을 집행하는 팀 리더의 역할이 된 것을 본 것 중 하나입니다. 내가 운영 한 팀에서는 일반적으로 코드의 동료 검토에서 주석을 수정하기 전까지는 누군가가 계속 움직이지 못하게합니다. "하드 코딩 없음"은 빈번한 동료 검토 의견입니다.

일반적으로

거의 모든 모범 사례를 통해 전투를 선택해야한다고 생각합니다. 완벽한 팀은 없습니다. 그러나 주요 통증 포인트를 주시하고 클러스터에서 문제를 해결할 수 있습니다. 팀의 어려움과 특정 개인의 성가신 점을 실제로 아는 것이 리더의 역할이된다고 생각합니다.

팀이 특정 모범 사례를 수행하지 못한 경우 첫 번째 질문은 "이로 인해 얼마나 많은 피해가 발생합니까?" 대답이 "최소한"일 경우 아마도 시간 가치가 없을 것입니다. 일부 모범 사례는 특정 유형의 시스템과 가장 관련이 있습니다. 전반적으로 우수하지만, 사례가 자주 발생하지 않거나 시스템의 주요 부분이 아닌 시스템의 경우에는 가치가 없습니다.

"얼마나 많은지?" "ALOT !!!"입니다. 모범 사례에서이 한 가지 문제를 해결하여이 모든 고통과 고통을 제거 할 수 있음을 팀에게 보여줄 수있는 사례를 구축 할 수 있습니다. 대부분의 사람들은 고통과 고통을 피하는 것이 기쁘고 대화가 "내가 말한 것이기 때문에"에서 "우리가 더 낫기 때문에 이것을하기로 결정했습니다"로 대화를 바꿉니다.


긴 의견이지만 귀하의 접근 방식은 훌륭합니다. 사람들이 이러한 지침을 준수하도록하려면 그것이 도움이된다고 믿어야합니다. 팀에서 어떻게 작동했는지 몇 가지 예를 들어보고 싶습니다.
jmort253

내가 가장 좋아하는 예는 일관된 테스트 환경 설정입니다. 나는 올바른 길을 강요하지 않았습니다. 설치 문서를 담당하는 사람이있었습니다. "일관된 설치를 보장하는 설치 메커니즘을 만드는 데 필요한 모든 작업을 수행 할 수 있습니다. 설치가 엉망인 경우 모두에게 버그가 발생했습니다." 한 달도 채되지 않아 우리는 탄탄한 도구와 매우 짧은 문서를 가지고있었습니다. 이 도구는 모든 데스크탑에 바로 가기로 설치되었습니다. 나는 집행이 필요하지 않았으며 적절한 설치는 이미 가장 저항이 적은 경로였습니다. 이제 우리의 목표는 바로 가기를 제거하여 자동화하는 것입니다.
bethlakshmi

6

코드 검토. 오류가없는 잘 작성된 코드 만 수락하십시오.


3
그것은 근본적인 문제에 대한 해결책이 아닙니다. 근본 원인 문제를 대신 해결할 수있는 코드 검토에 시간을 낭비하지 마십시오.
Martin Wickman

그들이 계속해서 물건을 재 작업하도록 강요 할 수 있다면, 그들의 고유 한 게으름은 그들이 시간이 지남에 따라 적응하기 시작할 것입니다.
David Thornley

사람들은 단지 책임을 져야하고 아무 말도하지 않고 일을해야합니다. 모든 변경 후 코드 검토는 많은 시간 낭비입니다.
jmort253

5

적어도 :

  • 코드 라인을 쉽게 따라갈 수 있도록하십시오 (resharper, StyleCop와 같은 도구) 쉽게 적용 할 수 있습니다.

그 외에도 조직, 개발자 및 팀 내 역할에 따라 작동하는 것을 선택하십시오.

  • 버그 수정 및 요청 변경을 정기적으로 수행하도록합니다.
  • 숙련 된 개발자와 쌍으로 프로그램
  • 건설적인 방식으로 코드 검토
  • 코드 연습
  • 교육을 시작하고 Code Complete 및 The pragmatic programmer와 같은 책을 사용하십시오.

5

저의 역할은 관리자이지만 소규모 팀으로서 저는 개발하고 차라리 코치를 선호합니다.

코드 파서에 연결된 의자의 전극은 이미 지적되었지만 프로그래머는 두려워하지 않는 것 같습니다. 해고는 가치있는 자산을 잃어버린 것을 의미하므로 좋은 접근 방식으로 들리지 않습니다.

모든 도구를 살펴보고 다른 사람에게 열려 있습니다.


3
당신의 자산이 가치가 있다면,이 문제들이 그렇게 중요하지 않습니까? 전투를 몇 번 선택하고 선택해야합니다.
JeffO

내 질문은 내가 가진 것을 개선하는 것입니다. 그것은 검색 및 대체보다 어렵지만 효과적입니다
Llistes Sugra

코딩 규칙을 따르지 않는 사람들을 해고해도 좋은 자산을 잃지 않고 죽은 나무를 제거합니다.
HLGEM

@HLGEM-규칙을 따르지 않는 사람이 조직의 문제를 해결할 수있는 코드 닌자 일 경우가 아니면 하우스 박사는 규칙을 따르지 않지만 병원에서 그를 해고하면 많은 가상의 사람들이 죽을 것입니다. en.wikipedia.org/wiki/Gregory_House
jmort253

4

이 문제를 해결하는 방법에는 3 가지가 있습니다.

  1. 코딩 규칙 관련 문제를 확인하기위한 소스 코드의 정적 분석 같은 도구를 사용하여 cppcheck 과에서 그 grammatech을 . Wikipedia에는 http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis 목록이 있습니다. 일반적으로 대부분의 소스 제어 시스템에는 체크인하는 동안 이러한 문제를 직접 확인할 수있는 후크가 있습니다. CVS 후크의 경우 http://goo.gl/F1gd2 링크를 참조하십시오 . 준수하지 않으면 체크인 실패, 3 회 이상 실패하면 개발자가 팀에 자신을 설명해야 함을 의미합니다.

  2. 코딩 과정 자체에서 개발자에게 문제를 표시합니다. 선택한 IDE와 통합 된 사용자 지정 스크립트를 사용하는 것이 멋진 방법입니다. 이 링크를 확인하십시오 : http://goo.gl/MM6c4

  3. 민첩한 프로세스를 따르고 코드 검토가 스프린트의 일부인지 확인하십시오


1
+1, 부목 (및 다른 보풀)을 통해 수정 된 모든 항목과 불필요하게 헤더를 포함하지 않도록하는 도구와 들여 쓰기가 공백이 아닌 탭인지 확인하는 커밋 후크가 있습니다.
Tim Post

개발자가 솔루션을 사용해야 할 의무가 없다면 기술 솔루션은 도움이되지 않습니다.
Robert Harvey

2

3 단계 계획은 다음과 같습니다.

  1. 프로그래머 해고
  2. 일부 소프트웨어 엔지니어를 고용하십시오
  3. ...
  4. 이익!

:디

진지하게, 그들이 코드를 작성하는 것 외에는 아무것도 믿지 않는다면보다 균형 잡힌 팀이 필요합니다. 내가 일한 프로그래머는 컴퓨터의 다른 디렉토리를 CM으로 사용했습니다. 우리는 그들의 프로그래머와 거의 1 년 동안 싸웠습니다. 우리는 결국 그들을 해고했습니다.


2
  1. 그들이 기본 규칙을 위반할 때 지적하십시오.
  2. 추적 할 수없는 버그를 만들거나 코드가 유연하지 않아 구현할 수없는 기능 요청에 직면 할 때까지 기다립니다.
  3. 당신이 이전에 말한 것을 상기 시키십시오.
  4. 그들이 잠시 동안 자신의 똥에 빠져 보자.
  5. 시간을내어 문제의 코드를 리팩터링하고 버그를 격리하고 인프라를 제공하여 새로운 기능을 구현하십시오. 시간을내어 자신이 한 일을 설명하십시오.

또는 가장 잔인하지만 매우 설득력있는 작업은 일정이 빡빡 할 때 극도로 저조한 코드베이스를 유지하도록하는 것입니다. : D
그런 다음, 일정이 바뀔 때마다 변경을 위해 잘 작성된 코드베이스를 유지하도록합니다.

일반적으로 특정 표준을 채택하지 않으려는 것은 팀워크에 대한 경험이 부족함을 의미합니다.

결국 사람들은 실수로부터 만 배웁니다. 다른 사람의 완고함을 바탕으로하는 문제를 절대로 고치지 마십시오. 프로젝트에 정말로 중요한 경우 (즉, N 일 이내에 배달하지 않으면 회사에서 소송을 제기 할 수 있음) 먼저 프로젝트에서 제외시킵니다.


나는 이것을 좋아한다. 누군가 당신을 미워하게 만드는 훌륭한 요리법. ;)
Roman Zenka

@Roman Zenka : 네, 가능합니다. 그러나 선택이 미움과 좌절 중 하나라면 팀에 NNPP가 있기 때문에 첫 번째 옵션을 선호합니다.)
back2dos

이 시점에서 급여를 해제해야합니다.
JeffO

나는 실제로 그 일을했습니다! 그리고 그들은 나를 미워하지 않습니다. 결론은 모든 사람이 자신의 똥에 편안합니다. 그리고 그것은이 작업을 너무 어렵게 만듭니다.
Llistes Sugra

1

나는 당신이 프로그래머가 당신이 언급 한 문제들에 대한 태도를 바꾸지 않을 것이라고 생각합니다. 그들이 왜 이런 일을하기를 원하는지 설명해보십시오. 더 좋은 점은 그들이 이점을 경험하게하십시오.


1

한 명의 전문 소프트웨어 엔지니어를 고용하십시오. 그리고 가장 약한 불. 그런 다음 입양 할 수없는 사람들을 천천히 대체하십시오. 그러한 사람들이 때때로 장기적으로 이익보다 더 많은 해를 끼칩니다.

여기에서 주요 아이디어는 전문가가 대부분의 일을 시작하고 다른 사람들을 해고하더라도 귀중한 인적 자원을 감소 시키지는 않는다는 것입니다.


1
이것은 리더십 기술의 부족과 경험이 적은 개인을 멘토링하는 능력을 보충하는 좋은 방법입니다. 설득력이 떨어지면 동의하지 않는 모든 사람들을 해고하십시오.
jmort253

@ jmort253, 만약 기회가 있다면, 정기적으로 버전 관리를하지 않는 모든 프로그래머를 해고 할 것입니다. 필자의 말에 따르면, 나는 모든 프로그래머가 매우 경험이 부족하며 스스로 배우고 개선하고 싶지 않다는 것을 알게되었다.
Konstantin Petrukhnov

1

약간 거칠지 만, 몇 개월 동안 화장실에 Code Complete를 두었습니다. 효과가 있었는지 확실하지 않았지만 당시에는 좋은 생각처럼 보였습니다.


0

그렇다면 규칙을 따르지 않으면 어떤 결과가 발생합니까? 답이 같으면 (아무것도 아닌) 행운을 빕니다. 계층화 된 접근 방식을 제안합니다. 먼저 그들을 모아서 규칙에 사는지 토론하십시오. 다음 단계는 코드 검토에 포함시키는 것입니다. 당근과 스틱을 사용해 볼 수도 있습니다. 밤새 파일을 체크 아웃 한 사람은 다음 주 회의에 도넛을 가져와야합니다. 당근은 한 달 동안 규칙을 따르는 사람이라면 누구나 라스베가스에서 주말을 보낼 수 있습니다. 둘을 위해.

또는 최악의 범죄자를 해고하고 나머지는 땀을 흘리게하십시오.


eep! 단독 체크 아웃 유형의 VCS가 있습니까? 세기와 함께하세요!
David Thornley

0

이러한 규칙을 사용하여 피하고 싶은 결과를 겪게하십시오. 예를 들어 그들이 수정해야 할 작은 통제 된 혼란을 만드는 것은 그들이 당신이 요구하는 이유를 실제로 이해하는 유일한 방법 입니다.


0

이 승무원이 실제로 변경 사항을 확인하는 데 어려움을 겪고 있으며 마법 상수를 하드 코딩하지 않고 우려를 분리하면 승무원 전체를 해고하고 가능한 한 빨리 공예에 관심이 있는 실제 프로그래머 1로 교체합니다 . 한 번에 하나씩 또는 한꺼번에 말할 수는 없지만이 조커들은 가야했습니다.

설명하는 코딩 종류는 일회용 일회용 스크립트에 적합합니다. 실제 응용 프로그램을 만드는 방법이 아닙니다. 그들이 전문 프로그래머로서 돈을 받고 있다면 이런 종류의 일을 아는 것이 그들의 임무입니다.


1 이것은 종종 이진법이나 똑같은 말로 코드를 직접 작성하는 가상의 사람들에게 농담 용어로 사용됩니다. 농담이 아니에요 나는 상당히 신인 프로그래머이며 내 공예에 관심이 있기 때문에 이런 말을 할 필요가 없습니다. 이들은 당신이 다루는 실제 프로그래머가 아닙니다.


나는 발사 부분을 제외한 모든 것에 동의합니다. 숙련 된 전체 직원을 코드에 주석을 달 수 있지만 도메인 지식이없는 사람으로 대체하기 위해 마감일 및 고객 이정표 회의를 포함하여 관리자로 작업중인 다른 모든 중요한 작업을 삭제하는 것이 좋습니다.
jmort253

0

관리자의 일은 직원의 친구가되어서는 안되며 때로는 나쁜 사람이되어야합니다. 코딩 표준 및 커밋 시행, 예측 아키텍처 준수 거부, 규정 된 도구 사용 실패 등은 인기가 없어야 할 때입니다.

정책을 명확하게 표현하십시오. 공식적인 코드 검토를 수행하고 정책을 준수하는지 확인하십시오. 코드 검토의 모든 문제가 판결 될 때까지 다른 작업으로 이동하지 마십시오.

정책이 코드를 커밋하지 않는 것에 관한 것이라면, 요청 될 때이를 수행 할 수없는 경우 서면 경고를 요구합니다. 그들이 코드를 커밋하지 않으면 걱정하지 않는 한 아무 코드도 작성하지 않았습니다.

합리적으로 개선 할 수있는 기회를 얻은 후에도 개선되지 않으면 해고하십시오. 전문가가 아닌 개발자는 어떤 종류의 코드를 작성하든 팀을 끌어들입니다. 그들은 전문성이 결여되어 다른 사람들에게 영향을 미치며 용납해서는 안됩니다. 그들은 어떤 경우에도 좋은 사람들이 아닙니다. 좋은 개발자는 코드를 커밋하고 좋은 개발자는 동의하지 않고 좋은 개발자가 하드 코딩하지 않아도 아키텍처 결정을 따릅니다. 카우보이 코더를 제거하여 두통 이외의 것을 놓치지 마십시오.

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