오픈 소스 프로젝트에 참여하는 어려운 프로그래머를 어떻게 처리합니까?


65

저와 다른 개발자들이 최근 GitHub로 옮긴 특정 사이트 (여기서는 이름으로 전화하지 않으려 고 함)에 대한 오픈 소스 스크립트가 있습니다. 우리는 새로운 시스템으로 옮긴 이래로 매우 활동적인 개발자를 포함하여 여러 명의 새로운 개발자를 얻었습니다. 그러나이 활발한 프로젝트는 많은 프로젝트를 변경하기 시작했습니다.

우선, 그는 우리의 버전 관리 시스템을 삭제했습니다 (Git은 아니지만 버전이라고 부름 v4.1.16). 준비가되었다고 생각되면 사이트에 코드를 푸시하는 것이 더 좋을 것이라고 말했습니다. 이제 릴리스 노트를 넣을 중앙 집중식 장소가 없으므로 성가시다.

가방을 싸고 나갈 준비가 된 것은 푸시 스크립트였습니다. 프로젝트의 다른 개발자는 간단한 Python 기반 푸시 스크립트를 작성했습니다. 우리는 여러 곳에서 여러 버전의 스크립트를 온라인으로 유지하기 때문에 더 큰 Java 프로그램을 Python 스크립트를 대체 할 그래픽 인터페이스로 코딩하기 시작했습니다. 나는 IRC에 모든 사람에게 알리기 위해 갔고, 오래된 파이썬 기반 스크립트가 내 모든 것을 할 수 있고 훨씬 더 가볍다는 프로그래머로부터 매우 성가신 응답을 얻었습니다 (그는 또한 그가 생각한 사실에 대해 논평했습니다 파이썬은 자바보다 낫습니다). 이전 푸시 스크립트의 코드를 살펴본 후 그가 말한 기능 중 어느 것도 존재하지 않는 것을 보았습니다.

이제 무엇을해야하는지 알고 싶습니다. 이 프로젝트에 많은 시간을 보냈으므로 그냥 나가고 싶지는 않지만이 새로운 개발자와 함께 일하기가 어렵다는 것을 알게되었습니다. 반면에, 그는 현재 프로젝트에서 1 위 커미터로, 수석 개발자보다 커밋이 훨씬 많습니다. 나는 이것에 대해 무엇을 해야할지 확실하지 않습니다. 다른 사람이이 문제를 경험 한 적이 있습니까? 그렇다면 어떻게 했습니까?

업데이트 1 : 모든 사람의 커밋 액세스를 비활성화했으며 사람들이 풀 요청을 통과하도록 요청하고 있습니다. 또한 다른 문제를 해결하기위한 몇 가지 조치를 제안했습니다. 다른 사람들은 그것을지지하지 않았습니다. 번거로운 개발자는 단순히 "커밋 작업"을 따르지 않는 사람들은 프로젝트가 실제로 그렇지 않은 경우 프로젝트가 조직화되지 않았다고 생각할 수 있다고 간단히 말합니다. 나는 분명히 이것에 동의하지 않기 때문에 프로젝트에서 사임하는 것을 진지하게 고려하고 있습니다.

업데이트 2 : 수석 개발자가 커밋 중 하나가 코드에서 줄 바꿈 3 개를 삭제했다는 사실에 대해 논쟁하기 시작했습니다. 두 사람은 내 커밋 액세스를 철회할지 여부를 논의하기 시작했습니다. 그래서 나는 논리적 인 일을하고 프로젝트를 떠났습니다. 여러분 모두 도와 주셔서 감사합니다!


46
한 사람이 어떻게 스스로 버전 관리 시스템을 변경할 수 있습니까? 분명히 그는 적어도 일부 사람들 사이에서 대중적인지지를 받았을 것입니다. 또 다른 의견으로 판단하면 라이센스가 모두 바뀌 었습니다. 프로젝트의 기초가 갑자기 흔들 리거나 대체 될 때 왜 더 보컬하지 않습니까?
사슴 사냥꾼

32
질문의 요점이 없습니다. 신규 이민자가 어떻게 프로젝트에 참여하고 모든 것을 인수 한 것처럼 보입니까? 오픈 소스 일 수도 있지만 리더 또는 리더 그룹이 있다는 것을 암시하며 아마도 프로젝트 리더가 프로젝트 운영 방식의 중요한 부분을 변경할 수있는 유일한 리더 일 것입니다.
alroc

35
이것은 github의 프로젝트입니까? 프로젝트에 대한 그의 액세스 권한을 제거 할 수없는 이유가 있습니까? 아니면 당신이 변화를 좋아한다면 끌어낼 수있는 자신의 포크를 만들도록 하시겠습니까? 누군가 가 내 프로젝트에서 코드의 버전을 변경하는 방식을 스스로 변경 했다면 즉시 사라질 것입니다.
GrandmasterB

6
너 뭐하니? TheDailyWTF에 게시하고 모든 사람과 링크를 공유합니다. 당신은 그를 제출로 부끄러워 할 것입니다.
rath

24
솔직히 말해서 여기에있는 다른 문제에 관계없이 Python 스크립트를 웹 사이트로 소프트웨어를 푸시하기위한 그래픽 Java 프로그램으로 바꾸는 것은 미친 듯이 지나친 엔지니어링처럼 보입니다.
sam hocevar

답변:


55
  1. 당신은 종료 할 수 있습니다. 가장 건설적인 일이 아니지만 때로는 유일한 옵션입니다. 만약 그렇다면, 포기하고 어떻게 포기해야하는지에 대해 신음하지 말고, 그 에너지를 가져다가 다른 것에 똑바로 넣으십시오.

  2. 당신은 그것을 포크 수 있습니다. 다른 사람과 협력해야 할 이유가 없습니다. 포크, 코드를 개선하고 다른 사람들이 자신의 자아 축제를 계속하게하십시오. 새 프로젝트는 성공 여부에 관계없이 기존 프로젝트와 사용자와의 경쟁 관계에 있습니다.

  3. 당신이 참여할 수있는 우려를 음성 프로젝트의 개발 팀의 나머지. 개인적으로 만들지 말고 코드 이탈, 품질 프로세스의 결여에 만족하지 못하거나 새로운 결정이 모든 사람의 동의없이 진행되는 것에 불만이 있다는 것을 확인하십시오. 변경하기에 아무런 문제가 없다고 들리거나 팀이 문제를 해결해야한다는 다른 사람들의 의견을들을 수 있습니다. 그것은 커밋 액세스를 잃는 파괴적인 사람으로 끝날 수 있습니다. 변경 사항 중 일부가 개선되지 않았으므로 프로젝트를 되돌려 야한다는 데 모두 동의 할 것입니다. (이 후자의 옵션은 확고한 의견에 대한 대규모 논쟁으로 바뀌지 않는 한 가장 가능성이 높은 결과입니다.)

누군가가 와서 익숙해 졌던 안전하고 편안한 일상을 바꾸는 것은 어려울 수 있지만 누군가가 와서 오래되고 아늑한 관행을 동요시키는 것은 그 자체로 좋은 일이라고 말할 수 있습니다.


2
나는 포크 ()를 제안 할 것이다;
ott--

1
왜 솔루션 1로 언급되어 있습니까? 프로젝트가 정말 흥미 진진한 경우 마지막 옵션이 아니어야합니까?
사슴 사냥꾼

2
@DeerHunter : 가능성의 순서를 선호도의 순서로 읽지는 않았지만,이 가능성이 3의 토론에 도움이 될 수 있으므로 1,2를 먼저 나열하는 것이 유용합니다.
hardmath

36
옵션은 입력하기 가장 쉬운 순서로 나열됩니다.
gbjbaanb

# 3을 # 1로 바꾸면 다른 것을 고려하지 않은 고독한 늑대가 좋은 프로젝트를 파괴 할 수 있기 때문에 철회해야합니다.
Jonathan Neufeld

39

당신의 역할이 정확히 무엇인지 조금 불명확하게 만들었습니다. 대답은 당신이 어떻게 적응하는지에 달려 있습니다.

프로젝트를 이끌고 git 저장소를 제어하는 ​​경우

통제권을 되 찾으십시오. 이 사람이 당신과상의하지 않고 마음에 들지 않는 커밋을하고 있다면, 그의 직접적인 커밋 액세스를 제거하십시오. 그는 프로젝트를 포크하고 커밋을 병합하기 위해 풀 요청을 할 수 있습니다. 그것이 사용자가 신뢰를 쌓을 때까지 오픈 소스가 작동하는 방식입니다. 즉시 전체 액세스 권한을 부여 할 필요는 없으며 그렇게해서는 안됩니다.

다른 사람이 저장소를 제어하는 ​​경우

귀하의 우려를 나타내는 사람에게 귀하의 우려를 표명하고 변경 계획 및 승인을위한보다 훈련 된 프로세스를 장려하십시오. 리더십이 프로세스에 적합하지 않은 경우, 현상 유지 및 기여를 유지하도록 선택할 수 있습니다. 프로젝트를 포크하고 자신의 버전으로 작업하거나 (동의하는 사람과 함께 가져 오기) 떠나기를 선택할 수 있습니다 다른 일을하세요 어쨌든이 문제를 계속 처리 할 필요는 없습니다.


23

내 무뚝뚝 함을 용서해주세요.

당신은 생각이없는 변화를 원하는 다른 사람이라고 말하지만, 당신의이 새롭고 반짝이는 Java 프로그램에 대해 이야기 할 때 자신과 모순됩니다.

휴식을 취하다; 일방 통행 거리가 아니므로 타협점을 찾아보십시오 (프로젝트 작업을 계속하려는 경우 포크는 가장 쉬운 결정이지만 자아를 쓰러 뜨릴 수는 있지만 유용한 곳은 아닙니다).

또한 누가 무엇을 할 수 있는지에 대한 명확한 경계가 없다면 프로젝트 잔디 전쟁 에서 분업 이 불가피하다고 생각하십시오 . 그렇습니다. 때때로 다른 사람들의 판단을 신뢰해야합니다.


4
@ Nathan2055- 내 책에서 간단하고 작동하는 것이 좋습니다 (아마도 저뿐입니다). 어쨌든, 많은지도없이 프로젝트가 표류하는 것 같습니다.
사슴 사냥꾼

1
표류 부분에 동의합니다. 내가 언급하지 않은 것 중 하나는 동일한 개발자가 아무에게도 말하지 않고 프로젝트를 무작위로 재 허가했다는 것입니다.
Nathan2055

24
새로운 개발자 한 명이 자신이 독점적으로 저작권을 통제하지 않는 기존 코드 본문에서 라이센스를 일방적으로 어떻게 변경 했습니까? 그는 그러한 접근 / 권한을 어떻게 얻었으며 왜 제거되지 않았습니까?
KutuluMike

7
이 전체 상황은 합산되지 않습니다. 아무도 OS 프로젝트에서 라이센스를 일방적으로 변경할 수 없습니다. 당신이 그것에 동의하지 않았고 당신이 기여한 것은 (나는 가정합니다), 그의 변화는 쪼그리고 앉는 것을 의미합니다.
Norcross

9
@ Nathan2055 허가없이 프로젝트 라이센스를 변경하는 것은 오픈 소스 프로젝트에서도 즉시 해고 사유가 될 수 있습니다. 오픈 소스이기 때문에 임의의 친구가 들어가서 제어 할 수 있다는 것을 의미하지는 않습니다. 그의 프로그래밍 기술이 아무리 장대 한 것이더라도, 팀에서 일할 수 없다면 그를 원하지 않으며 그와 이야기하거나 쫓아 내야합니다. 당신이 우리에게 모든 것을 말하지 않는 한 ..
Thomas

10

노동 분업이 갈등을 줄이는 한 가지 방법이라고 여러 답변에서 이미 언급되어 있습니다. 구체적인 예는 다음과 같습니다.

  1. 생산성과 안정성의 균형. 전략 게임에서 비유를 빌리려면 팀은 Boom, Turtle 및 Rush 의 혼합으로 구성 되어야하며 팀원은 상황에 따라 역할을 변경할 준비가되어 있어야합니다.
    • 생산성 열풍에 빠진 사람은 다음과 같은 작업을 수행 할 수 있습니다.
    • 다른 기능들
    • 오류 수정
    • 사양 (새로운 기능 요청 관리 및 소프트웨어가 합의 된 기준을 충족하는지 확인)
    • 품질 보증
      • 수동 (탐사) 테스트
      • 자동화 된 테스트
    • 문서
    • 리팩토링 및 코드 정리
    • 개선을위한 아이디어를 수집하기 위해 사용자 연구 수행
    • 기타
  2. 프로젝트는 할 수 모듈화 각 모듈이 독립적으로 작업 할 수 있도록 (소프트웨어 아키텍처에서와 같이), 또는 (프로젝트 관리로) 구획.
    • 일반적으로 프론트 엔드와 백엔드를 모두 포함하는 대부분의 소프트웨어는 개발 속도가 다르기 때문에 모듈화해야합니다.
    • UX가 풍부한 소프트웨어는 모듈 간 이벤트 라우팅을 많이 사용하여 모듈화하기 어려울 수 있습니다.
    • 프로젝트 관리자는 모듈화를 피하여 프로젝트를 단순하게 유지하려고 할 수 있습니다.
  3. 기능 분기 . 각 개발자는 프로젝트를 포크하고 자신이 좋아하는 애완 동물 기능에 대해 작업하며 구현이 완료되면 병합을 요청할 수 있습니다. 수석 개발자는 병합을 수락할지 여부를 최종적으로 말할 수 있습니다.

갈등 방지 측면을 제외하고는 프로젝트에 거버넌스 가 충분하지 않을 수 있습니다 .

거버넌스가 중요한 이유는 무엇입니까? 어느 날 전 팀원이 소프트웨어를 가져 와서 침해로 팀을 고소한다고 상상해보십시오. 또는 팀은 특허 트롤에 의해 고소되었습니다. 또는 아무도 모르는 사람이 DMCA 통지를 프로젝트 호스팅 사이트에 보내고 프로젝트의 소스 코드를 삭제하도록 요구했습니다.

최소한 :

  • 컨트 리뷰 션 된 모든 소스 코드가 사용할 라이센스
  • 프로젝트의 소스 코드를 게시 할 수있는 라이센스
    • 새로운 공공 라이센스를 찾고자하는 경우 모든 기고자로부터 동의를 얻는 방법
  • 프로젝트에 대한 관리자 액세스 권한이있는 사람
  • 법적 요청 (DMCA 통지 또는 특허 트롤 등)에 응답하도록 지명 된 사람
  • 프로젝트 재정 관리 담당자 (서버 비용 지불 및 광고 수입 또는 기부금 예약)
  • 신규 회원 및 퇴학 회원을 포함시킬 의결권이있는 사람
  • 기타

대부분의 오픈 소스 프로젝트 사이트는 기성품 프로젝트 거버넌스 헌장을 제공 할 수 있습니다.


1
거버넌스 +1 조만간 모든 오픈 소스 프로젝트에는 대규모 프로젝트에 대한 완전한 거버넌스인지, 포럼, 메일 링리스트에 대한 단순한 행동 규범 ( wiki.gnome.org/CodeOfConduct 등 ) 인지 여부에 관계없이 몇 가지 서면 규칙과 코드가 필요합니다. , 버그 데이터베이스 또는 SCCS 모두가 공유합니다.
calum_b

9

나는 전에 문제를 보았다. 그러나 몇 년이 지나면 정말 프로젝트에 질려서 내 해결책은 프로젝트떠나는 것이 었습니다 . 그것은 당신에게 효과가 없을 수도 있지만 문제는 근본적으로 다른 사람들이 다른 방식으로 생각한다는 것입니다. 당신이 매우 중요하다고 생각하는 기능은 다른 사람들에게는 전혀 중요하지 않습니다.

좋은 계획은 다른 사람들의 작업나누는 것 입니다. 프로젝트의 일부가 각 개인의 책임에있는 사람들과 동의 할 수있는 경우, 프로젝트의 특정 부분에 대해 한 사람 만이 결정을 내립니다. 그러나 팀워크는 항상 어렵다. 당신은 여전히 ​​다른 프로그래머의 결정을 좋아하지 않을 것입니다. 최선의 해결책은 다른 프로그래머가 결정한 것을 절대 보지 않는 것입니다. 그들이 옳은 일을한다고 믿기 만하면됩니다.

공통의 목표 는 당신의 노력을 중요한 것들에 집중시킬 것입니다. 같은 방향으로 일하는 사람은 누구나 구하기 어려우며 어쨌든 갈등이 발생할 것입니다. 공통 목표를 결정하려면 프로젝트의 현재 상태를 파악한 다음 일정 시간이 지나야하는 위치를 결정해야합니다.

피해야 할 예는 다음과 같습니다. 예를 들어 많은 c ++ 프로그래머는 STL 라이브러리를 사용하지 않는 코드가 손상되었다고 생각합니다. 다른 프로그래머들은 STL을 포함하여 외부 라이브러리에 대한 모든 종속성이 손상되었다고 생각합니다. 그러한 갈등은 제대로 해결 될 수 없습니다. 두 상황이 동시에 완전히 채워질 수는 없습니다. 가장 문제가있는 사람들은 어떤 반대에 직면하더라도 의견을 제시 할 것입니다.


분업에 대한 좋은 지적.
사슴 사냥꾼

3
다른 프로그래머가 무엇을 결정했는지 보지 말고 그냥 믿습니까? 나에게 위험한 소리. 품질 관리는 어떻습니까?
Stephan

6

네 가지 선택, 나는 생각할 것이다.

  1. 쫓아 내 당신은 여전히이 프로젝트의 주된 친구입니다. 푸시 권한을 취소하고 하루에 호출하십시오. 가장 가능성있는 결과는 프로젝트를 포크하고 커뮤니티를 나눈 다음 전쟁이 풀리고 먼지가 정착하면 포크 중 하나가 인기있는 것입니다.
  2. 그것을 포크하고 다른 곳에서 계속하십시오. 1보다 덜 공격적이지만 결과는 동일합니다. 사람들을 당신쪽으로 데려가려면 커뮤니티에서 활동해야합니다.
  3. 그대로 두십시오. 단지 그가하고있는 일을하고 진정시키고 최선을 다하도록하십시오.
  4. 커뮤니티와 토론하고 필요에 따라 타협하고 상황을 해결하십시오.

개인적으로, 나는 옵션 4를 선호합니다.


6

Google은 몇 년 전에 이에 대해 몇 가지 기술 강연을했습니다. 그들을보십시오 :1 ,2 . 간단히 말해서 :

  1. 이해 : 프로젝트에서 다른 모든 기회 비용을 처리하려는 커뮤니티의 동기를 이해하고 그 이유를 유지하십시오.
  2. 요새화 : 사회적 예절, 존중, 신뢰 및 겸손의 표준으로 건강한 공동체를 구축하십시오.
  3. 식별 : 유독 한 사람들의 이야기가 들리는 징후를 찾아보십시오 (너무 많이 나열 할 수는 있지만이 질문을하면 이미 많은 사람들을 알고있을 것입니다).
  4. 소독 : 침착하고 자신의 입장을 고수하고 모욕, 사소한 일, 도전, 무례한 태도에 반응하지 않으며 커뮤니티 규범 강화에 지속적으로 노력하십시오.

포괄적 작성 개요 대신 시계의 읽을 선호하는 경우도 있습니다.


3
이러한 각 리소스에 대해 조금 더 설명해 주시겠습니까? 그리고 질문에 대답하는 데 왜 이러한 리소스를 추천하십니까? "링크 전용 답변" 은 Stack Exchange에서 그리 환영받지 않습니다
gnat

1
요약을 추가하면 어떻습니까?
Kurtosis

5

걱정과 어려움을 표현하기 위해 노력하지 않고는 그만 둘 수 없습니다. 어려울 수 있다는 것을 알고 있습니다. 만약 당신과 당신의 팀원이 개발팀에서 발생하는 많은 사회적 문제를 직접 경험할 수 없을 정도로 젊다면, 실제로 어려울 수 있습니다.

그렇게 말하면서, 나는 당신이 당신의 걱정을 표현해야한다고 믿습니다. 당신은 이메일에 그들을 적어 팀의 일원이 아니며 당신이하는 일에 관심이 없거나 거의없는 신뢰할 수있는 친구들에게 보여줄 수 있습니다. 이 경우 전자 메일의 표현이 너무 거칠지 않도록 좋은 피드백을받을 수 있습니다. 그래도 사실을 고수하십시오. 비난하거나 비난하지 마십시오. 'blah'가 없기 때문에 무언가를하기가 어렵다는 사실. 'blah'가 누락 된 이유는 모든 팀 구성원, 즉 "새로운 프로그래머"가 삭제했거나 무언가를 달성하지 못한 것이 분명해야합니다.

다시 한 번이 이메일을 보내는 것은 어렵지만 그 자체만으로도 매우 유용한 경험이 될 수 있습니다. 배우기 좋은 교훈.

추신 : 나는 너무 부모의 소리를 의미하지 않았다. 그러나 그것은 실제로 내 아이들을 포함한 모든 사람에게 말할 것입니다.


7
"당신은 그냥 그만 둘 수 없어"... 네 할 수 있습니다 . 당신이 할 경우 팀의 다른 모든 사람들과 모든 다리를 태울 것이라는 것을 의미하기 때문에 가볍게 선택하는 것은 아닙니다 . .
Shadur
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.