오픈 소스 프로젝트에 참여하는 어려운 프로그래머를 어떻게 처리합니까? 파이썬은 자바보다 낫습니다). 이전 푸시 스크립트의 코드를

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

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

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

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

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

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



답변

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

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

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

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


답변

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

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

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

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

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


답변

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

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

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

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


답변

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

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

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

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

최소한 :

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

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


답변

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

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

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

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


답변

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

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

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


답변

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

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

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