Açık kaynak kodlu bir projeye katılan zor bir programcı ile nasıl başa çıkabilirim?


65

Ben ve birkaç geliştiricinin yakın zamanda GitHub'a taşındığı belirli bir site için (burada adıyla hiçbir şey aramamaya çalışıyorum) açık kaynaklı bir komut dosyası var. Yeni sisteme taşındığımızdan beri, özellikle aktif olanları da dahil olmak üzere birkaç yeni geliştirici kazandık. Ancak, bu aktif olan projenin çoğunu değiştirmeye başladı.

Öncelikle, versiyonlama sistemimizi silmiş (Git gibi değil, ancak böyle - sürümleri v4.1.16dedik) ve hazır olduğunu düşündüğümüzde kodu siteye itmenin daha iyi olacağını söyledi. Şimdi can sıkıcı hale gelen sürüm notları koymak için merkezi bir yer yok.

Beni çantamı toplayıp gitmeye neredeyse hazır hale getiren şey itme senaryosuydu. Projedeki bir başka geliştirici Python tabanlı basit bir komut dosyası yazdı. Komut dosyasının birden çok sürümünü çevrimiçi olarak çeşitli yerlerde tuttuğumuzdan, Python komut dosyasının yerini alacak grafik arayüzlü daha büyük bir Java programını kodlamaya başladım. IRC'ye herkesi bilgilendirmek için gittim ve programcıdan eski Python tabanlı senaryonun yapabileceği her şeyi yapabileceğini ve çok daha hafif olduğunu söyleyen çok can sıkıcı bir yanıt aldım. Python Java'dan daha iyiydi. Eski basma betiğinin kodunu inceledim ve varolan özelliklerin hiçbirinin orada olmadığını gördüm.

Şimdi ne yapacağımı bilmek istiyorum. Zamanımın çoğunu bu projeye harcadım, bu yüzden kalkıp ayrılmak istemiyorum ama bu yeni geliştiriciyle çalışmayı zor buluyorum. Kapak tarafında, o şimdi lider geliştiriciden daha fazla taahhütte bulunan projenin 1 numaralı üyesi. Bu konuda ne yapacağımdan emin değilim. Bu sorunu yaşayan başka biri var mı? Eğer öyleyse, sen ne yaptın?

GÜNCELLEME 1 : Herkesin bağlılık erişimini engelliyorum ve insanlardan çekme isteklerini geçmelerini istiyorum. Ayrıca diğer sorunları çözmek için birkaç önlem önerdim. Diğer herkes bunun için destek göstermedi. Sorunlu dev, basitçe "taahhüt eylemi" yakından takip etmeyenlerin, projenin gerçekten olmadığında dağınık olduğunu düşünebileceğini söyledi. Açıkça buna katılmıyorum, bu yüzden projeden istifa etmeyi ciddi şekilde düşünüyorum.

GÜNCELLEME 2 : Lider geliştirici, taahhütlerimden birinin koddaki üç yeni çizgiyi silmesi gerektiği yönünden şüphe uyandırmaya başladı (geri alma işlemi tartışmayı yayınladıktan hemen sonra geldi ve hatta "taahhüt ettiğimi" göstermiyordu) ve sonra ikisi, taahhüt erişimimi iptal edip etmeyeceğimi tartışmaya başladı. Bu yüzden, mantıklı bir şey yaptım ve projeden ayrıldım. Buradaki yardımlarınız için teşekkürler!


46
Bir kişi versiyonlama sistemini kendi başına nasıl değiştirebilir ? Elbette, en azından bazı kişiler arasında, halkın desteğini almış olmalı. Ve, başka bir yoruma göre, hepsini kapatmak için bir lisans değişikliği oldu - Projenizin temelleri bir anda sallandığında / değiştirildiğinde neden siz daha fazla ses kullanmıyorsunuz?
Deer Hunter

32
Sorunun amacını özlüyorsun. Yeni gelen bir kişi projenize nasıl katıldı ve görünüşe göre her şeyi devraldı? Açık kaynak olabilir, ancak bir lider veya bir grup lider olduğu ve muhtemelen projenin nasıl işletildiğinin bu kadar önemli bölümlerini değiştirme yeteneğine sahip olanların / liderlerin olacağı ima edilmektedir.
alroc

35
Bu senin github hakkındaki projen, değil mi? Projeye erişimini kaldıramamak için bir neden var mı? Yoksa değişikliklerden hoşlanırsanız, kendisinden alabileceğiniz kendi çatalını yapmasını mı istiyorsunuz? Birisi kodun bir projemde nasıl sürümlendirildiğini değiştirmek için tek başına aldıysa , hemen giderlerdi.
GrandmasterB

6
Ne yaparsın? TheDailyWTF’e yazıyor ve bağlantıyı herkesle paylaşıyorsunuz. Onu utanç içinde bırakacaksın.
Rath

24
Dürüst olmak gerekirse, burada söz konusu olan diğer sorunlardan bağımsız olarak, bir Python komut dosyasını bir web sitesine yazılım itmek için kullanılan grafiksel bir Java programı ile değiştirmek bana deli gibi geliyor.
sam hocevar

Yanıtlar:


55
  1. İstifa edebilirsin. Yapılabilecek en yapıcı şey değil, ama bazen tek seçenek bu. Bunu yaparsanız, etrafta oturmayın ve nasıl pes etmeniz gerektiğine inleme, o enerjiyi alın ve doğrudan başka bir şeye koyun - yani “devam et”.

  2. Onu çatallayabilirsin. Birisiyle çalışmak zorunda olman için hiçbir sebep yok. Fork, kodu geliştir ve diğerlerinin kendilerine ait küçük bir ego festivali yaşamaya devam etmelerine izin ver. Yeni projeniz basitçe eskiyle ve sizin için bir başarı elde edip etmeyeceğinize göre rekabet edecek ya da eski olanı kullanıcılar ve özellikler açısından sizi yenecek.

  3. Sen meşgul olabilir endişelerinizi dile getirmek proje üzerinde geliştirme ekibinin geri kalanıyla. Kişiselleştirmeyin, ancak kod karmaşasından ya da yerleşik kalite süreçlerinin eksikliğinden mutsuz olduğunuzdan veya yeni kararların herkesten anlaşmadan itildiğinden mutsuz olun. Size, hiçbir şeyin değişecek kadar yanlış olmadığı söylenir veya ekibin işleri düzeltmesi gerektiğine dair sizinle aynı fikirde olan birkaç kişi olur. Bu, yıkıcı bir adamın taahhüt girişimini kaybetmesiyle sonuçlanabilir. Belki de bazı değişikliklerin bazılarının iyileştirilmediği ve projenin geri alınması gerektiği konusunda hemfikirsiniz. (Bu ikinci seçenek, yerleşik fikirlerin büyük bir argümanı olmadıkça, en muhtemel sonuçtur.)

Birisi gelip alıştığınız güvenli ve rahat rutinleri değiştirdiğinde zor olabilir, ancak birisinin gelip eski, rahat uygulamaların sallanmasının kendi başına iyi şeyler olduğu söylenebilir.


2
Bir çatal öneririm ();
ott--

1
Neden bırakarak çözüm # 1 olarak belirtiliyor? Proje gerçekten bu kadar heyecanlıysa, bu son seçenek değil mi?
Deer Hunter

2
@DeerHunter: Ben tercih sırasına olarak olasılıklar sırasını okumadım ama 3. tartışılmasını bilgilendirebilir Bu olasılıkların olarak ilk listelenen 1,2 olması yararlıdır
hardmath

36
seçenekleri yazması en kolay sırada listelenmiştir.
gbjbaanb

# 1 ile 1 numaraya geçin, geriye itmek zorundasınız çünkü başka hiçbir şeye sahip olmayan bir yalnız kurt iyi bir projeyi mahvedebilir.
Jonathan Neufeld

39

Rolünün tam olarak ne olduğunu burada belli ettin. Cevap, nasıl sığdığına bağlı.

Projeyi yönetiyorsanız ve git deposunu kontrol ediyorsanız

Kontrolü geri al. Eğer bu adam size danışmadan sevmediğiniz bir taahhütte bulunuyorsa, doğrudan taahhütlü erişimini kaldırın. Projeyi istifade edebilir ve taahhütlerini birleştirmek için talepte bulunabilir. Bir kullanıcı güven kazanana kadar açık kaynağın çalışması gerekir. Hemen tam erişim sağlamak zorunda değilsiniz.

Başka biri depoyu kontrol ederse

Endişelerinizi, değişiklik planlamak ve onaylamak için daha disiplinli bir süreci yapan ve teşvik eden kişiye bildirin. Liderlik bir sürece elverişli değilse, o zaman statükoyu kabul etmeyi ve katkıda bulunmayı seçebilir, projeyi kurabilir ve kendi sürümünüzde çalışabilirsiniz (sizinle aynı fikirde olan herhangi birini getirerek) veya ayrılmayı seçebilirsiniz. ve başka şeyler üzerinde çalışın. Her durumda bununla ilgilenmeye devam etmeniz gerekmez.


23

Lütfen körlüğümü affet, ama göreviniz bir rant gibi okuyor.

Demek ki akılsız değişiklikler isteyen diğer adamsın, ama sonra bu yeni ve parlak Java programınız hakkında konuşurken kendinizle çelişiyorsunuz.

Bir mola; tek yönlü bir cadde değil, lütfen tavizler bulmaya çalışın (eğer proje üzerinde çalışmaya devam etmek istiyorsanız - forking en kolay karardır, ancak ego'nuzu harekete geçirmesine rağmen faydalı herhangi bir yere yönlendirmez).

Lütfen projedeki işbölümünü de iyice düşünün - size neyin yetkili olduğunu söyleyen net sınırlarınız yoksa, çim savaşları kaçınılmazdır . Evet, bazen başkalarının yargılarına güvenmek zorundasın.


4
@ Nathan2055 - Basit ve çalışmak daha iyi, kitabımda (belki de sadece ben). Her neyse, proje fazla rehberlik gerektirmeden başıboş görünüyor.
Deer Hunter

1
Ben başıboş kısmı ile katılıyorum. Bahsetmeyi unuttuğum şeylerden biri, aynı geliştiricinin projeyi rastgele bir şekilde kimseye söylemeden serbest bıraktığı yönünde.
Nathan2055

24
Tam olarak, yeni bir geliştirici, tek başına telif hakkı kontrolü üzerinde olmayan bir kod üzerinde lisansı nasıl değiştirdi? Bu tür bir erişim / yetkiyi nasıl aldı ve neden alınmadı?
KutuluMike

7
Bütün bu durum bir şey yapmıyor. Bir OS projesinde hiç kimse gidip tek taraflı olarak lisans değiştiremez. Kabul etmedin ve (sanırım) katkı yaptın, onun değişikliği çömelme anlamına gelir.
Norcross

9
@ Nathan2055 Bir projenin lisansını izinsiz olarak değiştirmek, muhtemelen açık kaynaklı projelerde bile derhal işten çıkarılmanın gerekçesidir. Sırf açık kaynak olduğu için, bazı rastgele ahbapların içeri girip kontrolü ele geçirebileceği anlamına gelmez. Programlama yetenekleri ne kadar destansı olursa olsun, bir takımda çalışamazsa orada olmasını istemezsin ve onunla konuşmalısın ve / veya onu dışarı atmalısın. Bize herşeyi
Thomas,

10

Bazı cevaplarda, işbölümünün çatışmayı azaltmanın bir yolu olduğu zaten dile getirildi. İşte bazı somut örnekler:

  1. Verimliliği dengelemek ve kararlılık. Strateji oyunlarından bir benzetme almak için bir takım Boom, Turtle ve Rush'ın bir karışımından oluşmalı ve duruma göre rolleri değiştirecek takım arkadaşları hazırlanmalıdır.
    • Biri verimlilik çılgınlığı içindeyse, diğerleri üzerinde çalışabilir:
    • Diğer özellikler
    • Hata düzeltme
    • Özellikler (yeni özellik isteklerini yönetmek ve yazılımın kabul edilen kriterleri karşıladığını doğrulamak)
    • Kalite güvencesi
      • Manuel (keşif) testi
      • Otomatik test
    • belgeleme
    • Yeniden düzenleme ve kod temizleme
    • İyileştirmeler için fikir toplamak üzere kullanıcı çalışmaları yürütmek
    • vb.
  2. Bir proje modüler hale getirilebilir (yazılım mimarisinde olduğu gibi) veya hatta bölümlendirilebilir (proje yönetiminde olduğu gibi) böylece her modül bağımsız olarak çalışabilir.
    • Genel olarak, hem ön hem de arka uç içeren çoğu yazılım modüler hale getirilmelidir, çünkü farklı gelişim hızlarına sahiptirler.
    • UX-zengin yazılımın, çapraz modül olay yönlendirmesinin yoğun kullanımı nedeniyle modüler hale getirilmesi zor olabilir.
    • Bir projenin sağlayıcısı, modülerleştirmeden kaçınarak projeyi basit tutmak isteyebilir.
  3. Özelliği dalı . Her geliştirici projeyi çatallayabilir, en sevdiği evcil hayvan özelliği üzerinde çalışabilir ve uygulama tamamlandığında birleştirme talebinde bulunabilir. Lider geliştirici, birleşmeyi kabul edip etmeme konusunda kesin söz sahibi olabilir.

Çatışmadan kaçınma yönünün yanı sıra, projenin yetersiz yönetişime sahip olabileceği açıktır .

Yönetişim neden önemlidir? Bir gün eski bir takım arkadaşının bir parça yazılım aldığını ve takımı ihlal ettiği için dava açtığını hayal edin. Ya da takım patent trolüyle dava açtı. Veya hiç kimsenin bilmediği kimseler, proje barındırma sitesine DMCA bildirimleri göndermeye karar verdi ve projenin kaynak kodunun silinmesini istedi.

En azından:

  • Tüm kaynak kodlar tarafından kullanılacak lisans
  • Projenin kaynak kodunun yayınlanabileceği lisanslar
    • Yeni bir kamu lisansı aranması durumunda, tüm katılımcılardan nasıl onay alınabileceği
  • Projeye kimler idari erişime sahip olabilir?
  • Yasal isteklere cevap vermek için kim görevlendirilir (DMCA bildirimleri veya patent trolleri gibi)
  • Proje için finansmanı kim yönetecek (sunucu masraflarını ödemek ve reklam gelirlerini veya bağışlarını tutmak)
  • Yeni üyeleri dahil etme ve üyelerini ihraç etme konusunda oy kullanma hakkı olan kişiler.
  • vb.

Çoğu açık kaynaklı proje sitesi hazır proje yönetim çizelgeleri sağlayabilir.


1
Yönetişim için +1. Er ya da geç tüm açık kaynaklı projeler ister büyük projeler için tam kapsamlı bir yönetişim isterse sadece herhangi bir forum, e-posta listesi için basit bir davranış kuralına ( wiki.gnome.org/CodeOfConduct gibi ) bazı kuralların yanı sıra bazı yazılı kurallara ihtiyaç duyar , hepiniz paylaştığınız hata veritabanları veya SCCS.
calum_b

9

Sorunu daha önce görmüştüm. Ancak birkaç yıl sonra projeden gerçekten bıkmışsınızdır, bu yüzden benim çözümüm projeyi bırakmaktı . Sizin için işe yaramayabilir, ama sorun temelde farklı insanların farklı şekillerde düşünmeleridir. Çok önemli olduğunu düşündüğünüz özellikler diğer insanlar için hiç de önemli değil.

İyi bir plan , farklı insanların görevlerini bölmek olacaktır . Projenin hangi bölümünün her bir kişinin sorumluluğunda olduğu konusunda hemfikirseniz, projenin belirli bir bölümünde yalnızca bir kişi karar alır. Ancak takım çalışması her zaman zordur. Diğer programcılar tarafından verilen kararları asla beğenmeyeceksiniz. En iyi çözüm, diğer programcıların karar verdiği şeylere asla bakmamaktır. Sadece doğru olanı yapmaları için onlara güven yeter.

Ortak hedef , çabalarınızı önemli konulara odaklayacaktır. Aynı yöne çalışan herkesin elde edilmesi zor ve çatışmalar yine de olacak. Ortak hedefe karar vermek, projenin şu anki durumunu bilmek ve ardından bir süre sonra nerede olması gerektiğine karar vermeyi gerektirir.

Kaçınılacak şeyler aşağıda verilmiştir: Örneğin, çok sayıda c ++ programcısı, STL kitaplığını kullanmayan kodun bozulduğunu düşünür. Diğer programcılar STL de dahil olmak üzere dış kütüphanelere her bağımlılığın kırıldığını düşünüyor. Bu tür ihtilaflar tam olarak çözülemiyor - her iki durum da aynı anda yerine getirilemiyor - ve en sorunlu insanlar, hangi muhalefetle karşılaşacaklarına bakmaksızın fikirlerini zorlayacaklar.


İş bölümü konusunda iyi bir nokta.
Deer Hunter

3
Asla diğer programcıların karar verdiğine bakma, sadece onlara güven. Bana tehlikeli geliyor. Peki ya kalite kontrol?
Stephan,

6

Dört seçenek, sanırım.

  1. Onu kovmak. Siz (iddiaya göre) hala bu projenin ana dostusunuz; itme haklarını iptal et ve bir gün ara. En muhtemel sonuç, projeyi terk etmesi, topluluğunu bölmesi ve daha sonra bir savaşın dağılmasıdır ve toz çöktüğünde, çatallardan biri popüler olanı olacaktır.
  2. Çatalla ve başka bir yerde devam et. 1'den daha az agresif, ancak sonuçta aynıdır. İnsanları kendi tarafınıza çekmek için toplulukta aktif olmak zorundasınız.
  3. Bırakın öyle olsun: Sadece yaptığı şeyi yapmasına izin verin, sakin olun ve en iyisini umalım.
  4. Toplulukla tartışın, gerektiği gibi uzlaşın ve durumu çözün.

Şahsen, seçenek 4'ü tercih ederim.


6

Google birkaç yıl önce bu konuda birkaç teknik konuşma yaptı. Onları izle:1 ,2 . Kısaca:

  1. Kavrama : Topluluğunuzun projeniz üzerinde çalışmak için diğer tüm fırsat maliyetlerine karşı motivasyonunu anlayın ve bu nedenleri koruyun.
  2. Güçlendirmek : Sosyal kibarlık, saygı, güven ve alçakgönüllülük normlarına sahip sağlıklı bir topluluk oluşturun.
  3. Belirleme : Zehirli kişilerin anlatım belirtilerine bakın (listelenecek çok fazla, ancak bu soruyu sorarsanız muhtemelen çoğunu zaten biliyorsunuzdur).
  4. Dezenfekte : Sakin olun ve yerinize yaslanın, hakaretlere, olaylara, zorluklara, saygısızlığa vb. Karşı tepkisiz olun ve toplum normlarınızı pekiştirmeye devam edin.

Bir kapsamlı yazılı anahat yerine saatin okumayı tercih eğer çok mevcuttur.


3
Bu kaynakların her birinin ne olduğu üzerinde biraz daha genişlemeyi düşünür müsün ve neden sorulan soruyu yanıtlarken bunları tavsiye ediyorsun? "Link-only cevaplar" Stack Exchange'de pek hoş değil
gnat

1
Özet eklendi, bu nasıl?
Kurtosis,

5

Endişelerinizi ve zorluklarınızı dile getirmek için çaba göstermeden istifa edemezsiniz. Bunun zor olabileceğini biliyorum. Eğer siz ve takım üyeleriniz, herhangi bir gelişim ekibinde meydana gelen birçok sosyal sorunu ilk elden deneyimleyemeyecek kadar gençseniz, gerçekten zor olabilir.

Bunu söyledikten sonra, endişelerinizi dile getirmeniz gerektiğine kesinlikle inanıyorum. Onları e-postaya yazabilir ve ekibin bir parçası olmayan ve yaptığınız işe hiç ilgi duymayan veya hiç ilgisi olmayan güvenilir arkadaşlarınıza gösterebilirsiniz. Bu durumda, iyi bir geri bildirim alabilirsiniz, böylece e-postanızın ifadesi çok zor olmaz. Gerçi gerçeklere sadık kalın. Suçlama ya da suçlama. Sadece sizin için bir şeyler yapmanın zor olduğu gerçekler çünkü 'falan' eksik. Neden 'blah' eksik her takım üyesine açık olmalı, yani “yeni programcı” silinmiş veya bir şey başaramamış.

Yine, bu e-postayı göndermek zordur, ancak bu başlı başına ilerlemeniz için çok yararlı olabilecek harika bir deneyimdir. Öğrenmek için harika bir ders.

Not: Ben çok ebeveyn gibi gelmek istemedim. Ancak bu gerçekten çocuklarım da dahil olmak üzere herhangi birine söyleyeceğim bir şey.


7
“Sadece istifa edemezsin” ... Evet yapabilirsin . Bunu yapmak için hafifçe yapmak bir seçim değildir, eğer yaparsanız her köprüyü takımdaki herkesle birlikte yakarsınız, ancak durum yeterince kötüyse (duygusal sıkıntıya neden olan), sadece uzaklaşmak her zaman bir seçenektir .
Shadur
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.