Bireysel kod sahipliği önemli midir? [kapalı]


48

Bazı iş arkadaşlarıyla tüm kod tabanının takım sahipliğinin, bileşenlerin bireysel sahipliğinden daha iyi olup olmadığı konusunda tartışmanın ortasındayım.

Ben ekibin her üyesine kod temeli hakkında kabaca eşit bir pay vermeyi devrettiğim için büyük bir savunucuyum. İnsanların yarattıkları için gurur duymalarına izin verir, böcek izleyicilere gelen biletleri atamak için açık bir ilk yer verir ve "kırık pencere sendromunu" hafifletmeye yardımcı olur.

Ayrıca, belirli işlevsellik bilgilerini bir (veya iki) ekip üyesiyle birleştirerek hata düzeltmelerini çok daha kolay hale getirir.

Hepsinden önemlisi, nihai kararını bir komite yerine çok fazla girdisi olan bir kişiyle verir.

Biri kodunuzu değiştirmek isterse izin istemek için savunuculuk yapmıyorum; belki de kod incelemesini her zaman sahibine bildirmelisin. Bilgi biriktirme siloları inşa etmeyi de önermiyorum: bu mülkiyette münhasır hiçbir şey olmamalı.

Ancak bunu iş arkadaşlarıma önerdiğinde, kesinlikle beklediğimden çok daha fazla bir ton baskı aldım.

Bu yüzden topluluğa soruyorum: büyük bir kod tabanında bir ekiple çalışmayla ilgili görüşleriniz nelerdir? Kolektif mülkiyeti dikkatli bir şekilde sürdürme konusunda özlediğim bir şey var mı?


"Bozuk pencere sendromu" nedir? Terime aşina değilim.
uman


1
“Ayrıca, belirli işlevsellik bilgilerini bir (veya iki) ekip üyesiyle yoğunlaştırıyor” ... “Ben de bilgi siloları inşa etmeyi öneriyorum”. Bu bir çelişki değil mi? Bana göre, bilgiyi bir veya iki üyeyle yoğunlaştırmak, bir bilgi silosunun tanımıdır.
sleske

Bu birkaç yıl sonra gelen başka bir soruya çok benziyor .
Eric King,

Yanıtlar:


46

Takım Sahipliğinin uzun vadede çok daha faydalı olduğuna inanıyorum.

Bilginin asgari sayıda insana konsantre olmasının neden idealin altında olmadığını anlamak için aşağıdaki 2 senaryoya bakmanız yeterlidir:

  • Ekip üyesi talihsiz kaza ile karşılaşıyor
  • Ekip üyesi daha iyi bir iş bulma fırsatı yakalar

Doğal olarak, kişi / belirli bölümleri yazma insan bundan daha büyük bir bilgiye sahip olacak, ancak bunları tek yapmak kışkırtmaya yok silo bilgisinin. Silolar , size uzun vadeli acılarla kısa vadeli kazanç sağlayacaktır.

Sırf kod bölümlerine sahip olmamanız, yazdığınızdan, “yaratılışınızla gurur duymanız” gibi şeylere sahip olmayacağınız anlamına gelmez. Yazılan kodun kişisel mülkiyet duygularını azaltmak.


7
Bir OO perspektifinden bakıldığında, her iki senaryo da şöyle olur: "Ekip üyesi mo 'etrafında değil'." “Daha iyi istihdam” sadece “talihsiz kaza” nın bir alt sınıfı değil midir?
Dan Rosenstark

4
@Yar: evet, hala daha iyi bir iş için geri dönmesini "daha iyi bir iş" bulan birinden daha fazla para kazanmasını isteyebileceğini sanıyor olmana rağmen ... bir miktar para onu otobüsün altından geri getiremez :-)
Dean Harding

4
Grubumdaki dev'leri, bazı bilgilerin dağıtımıyla birlikte daha hızlı bir hata düzeltmesi elde etmek için orijinal yazarla eşleşmesini / eşleştirmesini teşvik ediyorum.
dietbuddha

17
Biliyorsunuz, bu teoride çok harika olan şeylerden biri ama nadiren pratikte çalışıyor. Ortak noktaların trajedisi yüzünden. Her şey herkesin sorumluluğundaysa, hiçbir şey kimsenin sorumluluğunda değildir, çünkü her şey bir başkasının sorumluluğundadır. Psikologlar buna "sosyal somun" diyorlar. Bireysel sorumluluk ve ekip sorumluluğu dengesine ihtiyacınız var.
Jason Baker,

4
Jason'a karşı savunurum. Bu durumda, daha iyi çalışanlara, daha küçük takımlara ihtiyacınız var. Akran baskısı, takım bir demet yonga olmadığı sürece kontrol altında tutabilmelidir. Takım Mülkiyeti, bireysel sorumluluk eksikliği yaratmaz.
Dan McGrath

27

Sonuçta, takım kodun sahibi. Ancak bahsettiğiniz tüm nedenlerden dolayı, kodun belirli bölümleri için bireysel yazarlar belirledik. Her yazarın kodun bir kısmı için birincil sorumluluğu ve bir bütün olarak kod tabanı için ikincil sorumluluğu vardır.

Kod tabanının bir kısmıyla ilgili bir sorun olursa, başlangıçta kodu düzeltme için yazan kişiye geri dönmeye çalışırım. Elbette, diğer ekip üyelerinin bir düzeltme uygulamasını engelleyen hiçbir şey yoktur; Tüm ekip üyelerinin, herkesin koduna aşina olması beklenir. Ama biz her zaman önce asıl yazardan bir düzeltme bulmaya çalışırız. Ne de olsa kodu yazdılar; onlar ona en aşina olanı.

Ekip ortamlarında çalıştım, çünkü insanlar yazdıklarında sahiplik duygusu hissetmiyorlardı, mükemmel kod yazmak zorunda değillerdi, sadece ortalama kod yazıyorlardı.


5
+1 Mülkiyet duygusu nedeniyle daha iyi kod kalitesiyle ilgili nokta için. Bu kesinlikle var.
Orbling,

+1 (Yapabilseydim +10): sahiplik kod kalitesini etkiliyor, sadece gurur duygusu ve bununla birlikte daha güçlü bir motivasyon sağladığı için değil, aynı zamanda makalede çok iyi açıklandığı gibi kod karmaşıklığını yönetmeye yardımcı olduğu için "Bir Programın Başında Bir Programın Tutulması ", bakınız paulgraham.com/head.html .
Giorgio,

19

Bir üründen, ürün hakkındaki bilgiyi yayma nedenleri konusundaki tutumumdan hemfikiriz; Gerçek şu ki, çabalarını belirli bir alana odaklayan bir birey, zamanla, verilen alanda çok daha ustalaşacaktır.

Bunu görmezden gelmek bilimi görmezden gelmektir. Ne yazık ki beyin karşılaştığı her şeyi tutamıyor. Belirli bir anda neyin geçerli ve değerli olduğunu hatırlar, ancak depolama zamanla azalır.

Daha büyük kod tabanındaki belirli bir modüle veya bölüme sahip olmanın genel olarak daha iyi sonuçlar vereceği konusunda sizinle aynı fikirdeyim. Haber vermeden ayrılan biri başarısını engeller mi? Kesinlikle. Ancak takım içindeki herkesin kod temeli ile ilgili aynı miktarda bilgiye sahip olması gerektiği gibi davranmak naiftir ve kodu daha iyi hale getirmek için hiçbir şey yapmaz; kodu korumaya çalışır. Kodu korumak, bariz nedenlerden dolayı işletmenin rolüdür. Bir işletmenin kodu korumak için harcayacağı çabaların uzunluğu aynı şekilde zarar verebilir.

Takımınızdaki her oyuncunun oyun kurucu oynayabileceğinden emin değil misiniz? Ekip üyelerinin kod bazında bir hissesi olduğundan emin olmanın, takımınızdaki her oyuncunun oyun kurucuyu tatmin edici bir seviyede oynamalarını sağlamaya çalışmakla aynı çizgide olduğunu savunuyorum ... Yedekleriniz var mı? Tabii ki ... ... ancak ekip üyelerinin takım içinde bir kimlikleri olmalı. Herkese inanmak aynıdır, farklı türde bir acı ister.


5
Profesyonel takımların oyun kurucu yedekleri var
Steven A. Lowe

1
@Steven Zaten dedim ki; ama yinelediğin için teşekkür ederim ... "Yedeğin var mı? Tabii ki ... ama takım üyelerinin takım içinde bir kimliği olması gerekir. Herkesin aynı olduğuna inanmak, farklı türde bir acı ister."
Aaron McIver

NFL takımları üç oyun kurucu var, çapraz eğitimli oyuncular değil. Spor analojileri BT'de nadiren çalışır ;-)
Steven A. Lowe

3
@Steven NFL'nin nasıl çalıştığının farkındayım, yine de yedeklerin mevcut olmadığını söylemedim, ama bu bilgiyi tüm takım boyunca yaymaya çalışmak anlamsız. Geliştiriciler == oyuncular. Oyun kurucu == mimar gibi başlıkları tanıtmak istiyorsak yapabiliriz ancak tek bir hedefe ulaşmaya çalışan tek bir takıma düşüyor. Her hafta 45 oyuncu giyinir ve bu 45 oyuncunun% 6,6'sı oyun kurucu pozisyonunun nasıl işletileceği hakkında bilgi sahibidir. Bana ideal geliyor; takım görevlerinin% 75'inin oyun kurucu pozisyonunun nasıl işletileceği hakkında bilgi sahibi olmasını isteyen bu makamların çoğunluğuna karşı.
Aaron McIver

10

Bireysel kod sahipliğinin iyi bir fikir olduğunu bilmiyorum. En azından insanların "Bu benim kodum ve onunla istediğimi yaparım" diyebileceği anlamında değil. Belki bireysel kod yöneticiliğine sahip olmanız gerektiğini söylemek daha iyidir : kodun takıma ait olması gerekir, ancak ekibin üzerine sorumluluk ve yetki vereceği bir kişi vardır.

Bunun nedeni, eğer herkesin sorumluluğu ise o zaman kimsenin sorumluluğunda değildir.


+1 "Bunun sebebi, eğer herkesin sorumluluğu ise o zaman kimsenin sorumluluğu olmaz."
Karthik Sreenivasan

@KarthikSreenivasan: Kesinlikle, ve sonra bazı işlevsiz ekip üyeleri (1) kodda rastgele değişiklikler yapmaya başlayacaklar çünkü "tüm takım kodun sahibidir" ve (2) tanıttıkları hataları düzeltmemek "çünkü tüm takımın sorumluluğundadır" Onları tamir etmek". Bireysel mülkiyet ile takım sahipliği arasındaki bir yerde ideal çözümü düşünüyorum.
Giorgio

8

Aşağıdaki nedenlerden dolayı takım sahipliğini bireysel olarak benimsemeliyim:

  • Tüm proje boyunca kod tutarlılığı
  • Her zaman daha iyi, daha iyi çözümlere yol açan kod tartışmalarını teşvik eder
  • Bir ekip üyesi hastalandıysa (veya daha kötüsü), kodun tamamı bölüm gecikmelere tabi değildir
  • Ekip üyeleri, projenin tüm bölümlerinde çalışabilir ve bu da geliştirme sürecinde yerleşik kod incelemesi yapar.

6

Uzmanlaşma gayet iyi - büyük bir kod temeli için bu, uzun vadede iletişimin biraz zaman kazanmasını sağlayabilir - ancak mülkiyet değildir.

Demek istediğim, tavrın ekibin bir böceği olması gerektiği ve hiç kimse "ah, sadece X bu koda dokunabilir, bu yüzden benim sorunum değil" demelidir. Eğer ekibin bir parçasıysanız, eğer yapabilirseniz tüm kod tabanında hataları düzeltmek ve doğru şekilde yapmak sizin sorumluluğunuzdadır. X kişisi bunu yapmak için en iyi seçim olabilir, ancak bunu yapmaları gerektiğinden birisinin yapması beklenir. Bu, doğal olarak kodun , ekip üyelerini onunla çalışmaya izin verecek ve davet edecek şekilde yazılmasını gerektirir . Zekice bir koda sahip olmak bunu yasaklayacaktır, bu yüzden çoğu geliştiricinin onunla çalışmasına izin veren kristal gibi basit kodlar için gayret gösterin. Bu şekilde kalması için meslektaş incelemesine gitmek isteyebilirsiniz .


5

Seninle aynı fikirde olmamalıyım: bir kod temeli üzerinde takım sahibi olmak, bireysel mülkiyete göre çok daha iyi bir seçenektir.

Bireysel mülkiyetin dezavantajı, bir çalışanın başına bir şey gelirse (kovulmak, emekli olmak, hastalanmak vb.) , O zaman gerçekten temiz kod yazmamışsa , başka birinin bu kişiyi evlat edinmesi biraz zaman alacaktır. özellikle kendi kodlarını yönetmeleri gerekiyorsa,

Ayrıca ekip sahipliğini kolaylaştıran çok fazla araç var. Kod incelemeleri, kaynak kontrolü - bunlar tüm kod tabanı boyunca ekibin katılımını teşvik eden şeylerdir. Ayrıca, bir kod tabanının belirli bir bölümünü yalnızca bir kişiye nasıl atayabilirsiniz? Sadece bu kişinin bu dosyayı değiştirebileceğini mi söylüyorsun?

Son olarak, bir kod tabanının bir parçası kırılırsa, bundan sorumlu olan kişiyi suçlamanın çok kolay olduğunu ve bunun sadece daha fazla soruna neden olduğunu düşünüyorum.


5

İkisine de ihtiyacın olduğunu düşünüyorum, çünkü her iki yaklaşım arasında da bir gerilim var.

Herhangi bir kod parçası için üzerinde çalışabilecek tek bir kişi varsa, şirket için uzun vadede, özellikle de büyürse / büyürse, bu gerçekten kötüdür çünkü her geliştirici bir başarısızlık noktası haline gelir. Diğer taraftan, bireysel kod sahipliği (umarım) daha hızlı teslimat süresi sağlar, çünkü geliştirici genellikle bu yaklaşımı (teşvik edici) tercih eder, çünkü geliştirici kodu çok iyi bilir, vb ... Ayrıca bir zaman sorunu vardır: bu mümkün olmalı iş gereksinimlerine bağlı olarak geliştiricileri belirli projelerde yeniden tahsis etmek, ancak bunu günlük olarak yaparsanız, bu korkunç (eğer geliştiricilerden nefret ettiği için, ama aynı zamanda değişim maliyeti çok ağır olduğu ve zamanınızı çoğunu harcadığınız için) hiçbir şey değil).

IMO, bir yöneticinin bir rolü her ikisi arasında iyi bir denge bulmaktır. Kod incelemesi, kodlama standartları, bir takım araçlar üzerinde standartlaştırma, başarısızlık sorununun giderilmesine de yardımcı olacaktır. Sonuçta, korunabilir kodun asıl amacı bu konunun üstesinden gelmektir.


4

Toplu kod sahipliğinin, bireysel kod sahipliğinden çok daha iyi olduğunu düşünüyorum.

Ben kamyon argümanını rahatsız etmedim - bireysel bir mülkiyet modelinde, bir sahibinin kaybı, başkasının devralması için gereken süre açısından pahalıdır, ancak bu durum itfa edilmiş maliyetin düşük olması için yeterince nadirdir.

Aksine, toplu kod sahipliğinin doğrudan yüksek kaliteli koda yol açtığını düşünüyorum. Bu iki çok basit nedenden dolayı. Birincisi, acı verici gerçek şu ki, programlayıcılarınızdan bazıları diğerleri kadar iyi değil ve eğer kendi kodları varsa, o kod zayıf olacak; daha iyi programcılarınıza erişim izni vermek onu iyileştirir. İkincisi, kod incelemesi: herkes kodun sahibiyse, herkes inceleyebilir ve geliştirebilir; iyi programcılar bile kendi cihazlarına bırakılırsa alt kod yazarlar.

Bunu mevcut projemdeki deneyime dayanarak söylüyorum. Kolektif mülkiyeti pratik etmeyi amaçlıyoruz, ancak sistemin bazı bitleri uzmanlaştı - ben ve bir başkası yapı sisteminin fiili sahipleriyiz, örneğin, gelen veri yayınları üzerindeki işlerin çoğunu yapan bir adam var , görüntü içe aktarma üzerinde çalışan başka bir adam vb. Bu alanların birçoğunda (özellikle, benim bölgemde itiraf etmeliyim!), Kod kalitesi ciddi şekilde acı çekti - ekipteki diğer kişilerin dikkatini çekebilecek hatalar, kavram yanılgıları, kırılmalar ve saldırılar var.

Belirli bir kod bitinin farklı programcılar arasında düzenli olarak hareket ettiği (örneğin, her üç ayda bir veya her sürümde - belki de her yinelemede?), Belirli kod parçasının mülkiyetinin düzenli olarak farklı programcılar arasında hareket ettiği durumlarda, toplu kod sahipliğinin avantajlarından bazılarını elde edebileceğinizi unutmayın. . Ürün rotasyonunun bir programlama eşdeğeri. Bu eğlenceli olabilir. Yine de kendim denemeyeceğim.


1

Ekip kodu sahipliğinin, birden fazla katkıda bulunanın mevcut alt sistemlerin temel mimarisini anlama kadar önemli olduğunu düşünmüyorum.

Örneğin, ekibimizde sunucu ürünlerimiz için idari web sayfaları yapan birkaç kişi var. Özel bir sunucu tarafı komut dosyası motoru oluşturduk, böylece sunucudaki C işlevlerini doğrudan java komut dosyalarımızdan ya da html dosyamızdan çağırmak için gerekli. "Web" adamlarımızın, bu motoru nasıl kullanacaklarını, birbirlerinin web sayfası uygulamalarının ortak sahibi olmalarına karşı daha iyi anlamaları gerektiğini düşünüyorum.


0

Sanırım kod yazdığınız sırada bireysel kod sahibi olursunuz ve ardından takıma devredersiniz. Bu şekilde herkes sorumluluk alır ve katkıda bulunur. Herkes yarattığı kodlama hatasını düzeltmek istemelidir. Bir kod incelemesinin yanı sıra, bu daha yüksek standartlar yaratır. Kimse diğerlerinden sonra temizlik işini istemez.

Daha fazla sorumluluk ve daha az sahiplik düşünün. Ne de olsa, çekleri kim yazıyorsa yine de asıl mal sahibi.


0

Jim,% 100'ün üstünde seninleyim. İş yerimde aynı savaşın tam ortasındayım - bu yüzden sorunuza rastladım.

Gördüğüm gibi: "herkes sahibi olduğunda, kimse sahibi olmaz".

Bana göre kaliteyi kodlamak için sahiplik ve sorumluluktan daha önemli bir faktör yok.

Gerçek hayattan örnek bu kuyuyu göstermektedir. Hangisine daha iyi bakarsınız: Özel çimleriniz veya halk parkınız? Gayet açık.

Bu arada, “takım esnekliği” için mutlaka işlem görmeniz gerekmez. Bu sadece bir kişi bir şeye sahip olduğu zaman, KENDİ kendisine ait olduğu anlamına gelir - ve eğer sadece gün içinse.


0

Bana göre bu takımınızın dinamiğine bağlı.

Örneğin, standartlar, akran incelemesi, metodik testler ile birleştirilmiş bir ekibiniz varsa veya yetkinlik seviyelerinin üyeler arasında çılgınca değiştiği bir ekibiniz varsa, daha güçlü bir kod sahipliği kavramı istemek iyi olabilir daha kara kutu modüler zihniyet ile.

Örneğin, bunun olmaması, SOLID ilkelerine uygun özenle tasarlanmış arayüzünüz, "SOLID" bile bilmeyen biri tarafından hızlı bir şekilde tahrip olabilir ve örneğin "kolaylık" için arayüze her zaman yeni eklektik fonksiyonlar eklemek ister. Bu, şu ana kadar en kötüsü.

Ayrıca, bir hatayı düzeltme fikri, kök sorununu anlamadan semptomu düzeltmek olan özensiz çalışanlarla da uğraşabilirsiniz (örneğin: yalnızca hatayı gizlemek ve ölümcül aktarımı aktarmak için kodda geçici çözümler koyarak bir kilitlenme raporuna yanıt vermeye çalışmak) başkasına yan etkileri). Bu durumda, arayüz tasarımı sabotajı kadar kötü değildir ve niyetlerinizi dikkatle yapılmış birim testleriyle koruyabilirsiniz.

İdeal çözüm, takımınızı, bu yazarlık ve mülkiyet nosyonunun artık bu kadar önemli olmadığı bir noktaya kadar sıkılaştırmaktır. Hakem incelemesi sadece kod kalitesini arttırmakla kalmaz, aynı zamanda ekip çalışmasını da iyileştirir. Standartlar sadece tutarlılık değil, ekip çalışmasını geliştirir.

Yine de, meslektaş incelemesinin ve gerçekte herkesin bir standarda uymasının sadece umutsuz olduğu ve karışıma umutsuzca deneyimsiz bir çok eleştirmen getireceği senaryolar var. Kod sahipliğinin veya takım sahipliğinin daha güçlü bir öncelik almasının birçoğunun, ekibinizin gerçekten etkili bir akran değerlendirmesi yapma yeteneğine dayanacağını ve aslında ondan yararlanan herkesi ondan çıkarıp bırakmadığını (her iki gözden geçirme açısından da söyleyeceğim) söyleyebilirim. ve sonuç olarak zihniyet ve standartlarda birbirine daha yakın olmak. Büyük, gevşek ve / veya farklı takımlarda, bu umutsuz görünebilir. Eğer takımınız kimin yazdığını bile söyleyemediğiniz bir “takım” gibi çalışabiliyorsa, tek sahiplik aptalca bir fikir gibi görünmeye başlayacaktır.

Bu kadar ideal olmayan senaryolarda, bu kod sahipliği nosyonu aslında yardımcı olabilir. En kötü senaryoyu düzeltmeye çalışıyor, ancak ekip çalışmasının yazarın koduna bir çit koymak için genellikle umutsuz olması durumunda yardımcı olabilir. Bu durumda, takım çalışmasının azalması ancak “takım çalışması” sadece ayak basmalarına yol açarsa daha iyi olabilir.

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.