Çift programlama ne zaman çalışır? Ne zaman kaçınmalı?


50

Her zaman slavca bir şekilde çift program yerine, çiftimizde seçmeli olarak ekibimizde program kullanıyoruz. Aşağıdaki durumlarda en iyi şekilde çalıştığını düşünüyorum:

  • Bir projede yepyeni ekip üyelerini hızlandırmak (kendi başlarına dokümantasyon veya kodları gözden geçirmelerine izin vermek yerine).
  • Küçük ve yaşlı insanların birlikte çalışması (daha deneyimli geliştiricilerin bazı beceri ve püf noktalarının gösterilmesine yardımcı olur, ayrıca yaşlı köpeklerin bazen yeni püf noktaları öğrenmelerine izin verir).
  • Birisi bir kusuru izlemeye çalıştığında, genellikle taze bir göz setiyle eşleşmeye yardımcı olur.

Çift programı ne zaman ve neden kullanılır?

Çift programlamayı ne zaman engellemelisiniz? Neden?


11
Bu soruyu kapatmanın değerini ve mantığını anlamaya çalışmak, deneysel araştırmalara atıfta bulunarak, nesnel olarak açıkça cevaplandı. Çevik'te ortak olan tüm uygulamalardan en çok araştırılan ve belgelenenlerden biridir. Sorunun ifadesinin bir şekilde değiştirilmesi gerekiyor mu? Beklentiler / standartlar yayınlandıktan sonra üç yıl içinde değişti mi?
Michael,

Yanıtlar:


44

Laurie Williams tarafından derlenen araştırmalar , çift programlamanın en iyi endüstriyel ekiplerde çalıştığını göstermektedir.

  • Çiftler teknik özellikler, tasarım ve karmaşık programlama görevleri üzerinde çalışır - deneyler, bir çiftteki basit görevler üzerinde çalışırken hiçbir kalite iyileştirme gösterilmediğini, ancak hız iyileştirmelerinin olabileceğini gösterir. Ayrıca "programlama" çiftinin genellikle kod yazma dışındaki aktiviteleri içerdiğini unutmayın.
  • Bir eşleştirmedeki her birey yaklaşık aynı uzmanlık seviyesine sahiptir - çift programlama eğitim için harika olsa da, çiftler en fazla aynı seviyede olduklarında meşgul olurlar.
  • Roller düzenli olarak döner - düzenli olarak döndürme , mevcut yardımcı pilotun araç kullanmaya devam etmelerine yardımcı olur;
  • Çiftler düzenli olarak dönerler - ekipler inşa ettikleri sistemin farklı bölümlerini bilmenin rahatlığını dile getirdiler. Çift rotasyon, projedeki belirli riskleri azaltan bilgi transferinde yardımcı olur. Akademik bir ortamda çiftler genellikle atanır, ancak endüstri genel olarak stand-up'larda sıklıkla kendilerine atanır. Her iki durumda da, çift ​​her iki birey de eşleştirme etkinliğinde değer görmeye istekli katılımcılar olduğunda etkilidir.

Kişisel deneyimlerime göre, XP ekibimin geliştirme zaman çiftinin yaklaşık% 60'ını ortalama olarak harcadığını buldum. Zamanın geri kalanı bireysel gelişim için harcanır. İlk tasarımın yaratılması, birkaç saat boyunca tasarım üzerinde tek başına çalışmanın ardından kodun zor veya zor kısımlarının bitirilmesi için tekrar bir araya gelmesi nadir değildir.

Ayrıca çift programlamanın yaklaşık 1,5 ila 2,5 saatlik bloklarda en etkili olduğunu buldum. Çok daha az şey, kurulum için çok fazla ek yük gerektirme eğiliminde olurken, çiftler daha da sıkılır ve yorulur. Kaba ve yorgun, iyi iletişim kurmamanız ve kusurların sisteme kaymasına izin verilmesi anlamına gelir.


Harika cevap Michael. Kişisel deneyimin doğru bir karışımı olduğu ve araştırmayla büyük bir bağlantısı olduğu için bunu birçok iyi cevaptan kabul etmek.
Paddyslacker

Her ne kadar, ironik bir şekilde, cevabınızı yayınladığınızda bağlantı çalışırken, şimdi bir 404, doh!
Paddyslacker

Cevabınızdaki köprüyü Michael'a düzelttim, bu yüzden her şey yolunda.
Paddyslacker

"karmaşık" kısım çok önemlidir. Önemsiz yazma çalışmaları yaparsanız, eşiniz çok çabuk sıkılacak.
Dave O.

2
@DaveO .: Sadece çift programlamayı kullanarak basit şeyler yapabilirim. Karmaşık işler için düşünmem gerek ve çift programlama sadece bir dikkat dağıtma kaynağıdır (bkz. Will Sargent'ın cevabı). Meslektaşlarımla karmaşık sorunları tartışmayı hala çok faydalı buluyorum, ancak bu tüm kodu bir arada yazmaktan farklı.
Giorgio

28

Çift programlama benim için çok, çok az durumda işe yaradı.

Çift Programlamanın Benim için Başarısız Olduğu Noktalar

Kısa hikaye, çift programlamanın benim için yazılım geliştirmenin ana yolu olarak çalışmadığıdır. Programı, özellikle belirli bir soruna odaklanırsak, bir gün veya belki bir hafta boyunca eşleyebilirim. Ama ondan sonra? Bitirdim. Kızarmış ekmek. Kimseyle görüşmek istemiyorum, kimseyle görüşmek istemiyorum ve en azından birkaç günlüğüne bir mağarada insan şirketine tekrar uygun olana kadar ihtiyacım var.

Bu üzücü bir hikaye, ama komik olan şu ki, nasıl bittiği ile ilgili şimdi çok daha mutluyum. Evden ya da kafeden çalıştığım bir sözleşmede mutlu bir şekilde çalışıyorum ve yeni arkadaşlar edindim ve düşündüğümden daha fazla San Francisco'yu araştırdım. Bir bisikletim ve bir dizüstü bilgisayarım var ve son başvuru tarihlerimi karşıladığım ve kodları düzenli olarak kontrol ettiğim sürece zamanım benim.

Çift programlama ile karşılaştığım en büyük sorunları listeleyeceğim ve daha sonra size ayrıntı ve anekdotlar vereceğim.

  1. Odak bölünmüş.
  2. Hiçbir deney.
  3. Not yok.
  4. Sahip olmanın gururu yok.
  5. Kaçış yok...

İş arkadaşlarımdan ne gördüğümü gördüklerini görüp görmediklerini, bir şeyleri kaçırıyorsam, herhangi bir şeyi - sordum - bunun nasıl işe yarayacağını, insanların bunu nasıl devam ettirebileceklerini görmedim. İyi olduğumu, yerleşip uyum sağlamanın zaman aldığını söylediler. İlk başta herkes için zordu.

Sonunda kendime çekildim. Kör edici baş ağrıları, uykusuzluk ve çarpma arasında, karşılanmayan kod yazmam gerekiyor, girdilere cevap vermeyi bıraktım. Ekrana bakıp bir şey göremedim. Birisi beklenmedik bir şekilde benimle konuşabilir ve ben de onları duymazdım. İşimin eziyet şartlarını yerine getiriyordum ama orada değildim. Sadece gün boyunca gösterdiğim her şeyi kullandım. Diğer ortağım yazarken iPhone'umu kontrol etmeye başladım.

Sonunda - sadece üç ay sonra utangaç ve şimdiye kadar ilk defa - çift programlanırken uygun bir takım olmadığım için kovuldum.

Yalnız değil

Bunu sadece anlamak için değil, aynı zamanda bunun hakkında konuşabilmek için yazdım. Çift programlamanın çoğu insan için işe yaradığı ve solo programlamanın olacağından çok daha kolay ve daha hızlı olduğu varsayımı var. Bu olabilir veya olmayabilir, ancak uzun vadeli bir uygulama olarak çift programlama benim için işe yaramıyor. Çift programlamanın her ikisi için de işe yaramayan başka birçok kişi var. Biz de önemliyiz ...


2
Ben de. Hemen hemen sadece kusur takibinde ve hatta o zaman bile gerçek programlamadan çok beyin fırtınası ve felsefedir.
hplbsh

3
+1 Anlayışlı cevap. Çift Programlama savunucuları bazen yalnızları ve içe dönükleri unutuyorlar. Ve tesadüfen, programlama ile ilgilenen birçok kişi de içe dönük ...
Andres F.

5
@AndresF .: Yalnızların ve içe dönüklerin yanı sıra, bağımsız olan ve düşüncelerini düzenlemek için kendi alanlarına ihtiyaç duyan insanlar da var. Bilgiyi ekip üyeleri arasında yaymak için, kod incelemeleri en azından çift programlama kadar etkilidir.
Giorgio

1
@Giorgio Anlaşıldı. Aslında kısmi Çift Programlama'yı destekliyorum : çiftlerde bazı zor problemlerle mücadele etmek. Ancak bazı savunucular, çoğu zaman benim katılmıyorum olan çoğu programlama görevi için kullanılması gerektiğini düşünüyor.
Andres F.

3
@AndresF .: Size katılıyorum. "Kısmi çift programlama" ya da daha az moda kelimeler kullanmak, "gerektiğinde birlikte zor bir sorunu tartışmak" sadece programlama için değil, aynı zamanda okulda öğrenirken de kullanılan çok makul bir yaklaşımdır. Ancak, bu uygulamayı dikkate almıyorum. her zaman kullanılması gereken bir gümüş kurşun.
Giorgio

10

Ekibim, kuruluşundan bu yana, çoğunlukla "aşırı programlama" tarzı bir mağazanın parçası olarak çalışmadan çok önce çift programlama yaptı. Çift programlama varsayılan durumdur ; İnsanlar sadece tek bir numara varsa ya da zaman zaman soruşturmalar için, özellikle düşman teçhizatla uğraşmayı ve çalışmayı denemeyi içerecekse, tekilleşir.

"Junior / Senior" gitmek için tek yol değil. "Orta / junior" yararlıdır; orta seviye erkeğin, onu bir başkası ile iletişim kurmaya zorlayarak elde ettiği bilgileri sentezlemesine yardımcı olur. “Orta seviye / Orta seviye”, iki kişinin bilgilerini paylaşmak, iletişim kurmak ve bir ekibin parçası olarak çalışmak için birlikte çalışması konusunda zorluklar. İki üst düzey erkeğiniz olsa bile, şansları farklı uzmanlık alanlarına sahipler ve farklı yaklaşımlar ortaya koyabilirler. Bilgi paylaşma yönleri, bir kişi bir projede belirsiz bir şekilde “hızlanmaya” başladığında bitmez. Aksine, çift programlama bir öğrenen organizasyonun özüdür . Yeni teknikler ve en iyi uygulamalar hızla yayıldı.

Çifti programlama da kodun kalitesini (daha az kusurlar) ve kod aklı (sadece o niyetinde ne yapmaz korumak yardımcı olur, ama ne o olmalı ... ideal olarak çok-haftalık tavşan- aşağı gitmeden yanlış şeyi ya da çılgınca çatışacak iki farklı doğru şeyi yapan delik). Programcıların odaklarını korumalarına yardımcı oluyor: burada 80 saatlik çalışma haftasına ev sahipliği yapan Silikon Vadisi'nin kalbinde, haftada sadece 40 saat çalışabiliriz çünkü günde sekiz saat boyunca yoğun kodlamalar yapıyoruz. birbirleriyle. (Ayrıca, ikili programlama yapmaya daha uzun süre devam ederseniz, muhtemelen geri dönerdiniz. Veya en azından tükenmiş.) Bu, iş / yaşam dengesi için mükemmeldir ve ayrıca hızlı geri dönüşe sahip olmak (özellikle düşük gecikmeli geri dönüş) için kuruluşunuzun organizasyonuna yardımcı olur.

Hepsi, tamamen değil,% 100 şeftali ve krem; İkili programlamanın zaman zaman belirli problemler için faydalı olan sezgisel beyin süreçleri uygulamasının önündeki bir engel olduğunu düşünüyorum. Son zamanlarda, bellek sızıntısı olan bir görevde, hem çiftlerle hem çiftlerle zaman geçirdim; bir olmadan, herhangi bir anda ne yaptığımı tam olarak nasıl açıklayacağımı bilmeden, etrafa karışmak ve deneyler yapmak konusunda daha özgür hissettim. Ayrıca tekil olarak çalışmanın, teğet patlayabilmenin ve bir hevesle bazı vahşi refactorings (XP metodolojisinde değer verilmiş) yapabilmenin bazı avantajları vardır.

Ancak herkes, faydaların maliyetlerden çok daha ağır olduğunu ve eşleştirmenin bizim için çok iyi sonuç verdiğini söyledi: başlangıç ​​aşamasından daha büyük bir şirket tarafından satın alınmasına ve daha sonraki entegrasyonuna kadar. (Bundan bahsetmek gerekirse, ikili programlama bize genişleme yoluyla ve küçük bir ciroya rağmen kültürün sürekliliğini korumamıza yardımcı oldu).

(Perl'de, 4.000 - 40.000 dolar arası liste fiyatı olan bir yazılım geliştirdik.)


4

"Çift Programlama" kurulumunda hiç çalışmadım ve yine de listelediğiniz üç koşulun bir parçası olduğunu iddia edebilirim. Bahsettiğiniz senaryo, atılan yardım / eğitim aşamaları ile daha “düzenli programlama” gibi görünüyor. “Çift programlama” ortaya çıkmadan önce bunların hepsini yapmadık mı? Çift Programlama, bir ekip içindeki paylaşım sürecinin elinizdeki acil işle ya da problemle başa çıkacağınız dakikayı durdurmadığı durumlarda daha kararlı bir yaklaşım gerektireceğini farz ediyorum. Ama o zaman benim "bildiğim" değil "düşündüğüm" budur.

Şahsen Çift Programlama için, bilgimi öğrenme ve paylaşma şansımın olduğu bir ekipte çalışmak istiyorum. Beraber çalıştığınız herkesin önünüzde mil ötede olduğu veya daha sonra parın altında kaldığı dengesiz bir ekip oldukça çabuk ilgi çekebilir. Ayrıca, inançlarına bağlı ve inandırması zor insanlarla çalışmaktan korkarım.


Haklısınız, bahsettiğim koşulları ikili programlama olmadan çözebiliriz, ancak bir kişinin diğerini takip eden ve diğerlerini düzenli aralıklarla izleyerek kapatan çift programlama tekniklerini kullanırız. Bu sadece yardım / eğitimden biraz daha resmi. Birçok XP mağazası bundan çok daha fazla çift programlama yapıyor - insanlar için "doğru" eşleştirme miktarının ne olduğunu merak ediyorum.
Paddyslacker

Evet, ben de PP'yle uzun süre çalışmış olanlardan duymak istiyorum. Birden fazla şirket veya ekiple çalışan danışmanların PP'den nasıl faydalanabileceğini anlayabiliyorum, ancak bu görevler genellikle birkaç ay sürüyor. Projelerin genel olarak bir yıldan fazla sürdüğü tipik bir yazılım firmasında PP'nin nasıl çalıştığını bilmek ilginç olurdu.
Preets

2

Son birkaç aydır ekibimizdeki Pair programlama ile denemeler yapıyoruz. Yeni bir şey üzerinde çalışırken (yeni teknoloji, yeni özellik vb.) Fikirlerinizi ekibin bir başkasıyla hızlı bir şekilde zıplatabildiğiniz ve doğruladığınız / geçersiz kıldığınız için oldukça yararlı olduğunu düşünüyorum. Ayrıca, yan yana yapılan gözden geçirme böcekleri uzak tutmaya yardımcı olur.

Diğer bir takım arkadaşı, ATDD'yi yapmak için bir test ile çift programlamayı denedi ve sonuçlardan oldukça memnun kaldılar (hesaplamalarına göre,% 20 dev maliyetindeki bir artış test süresinde yaklaşık% 50 azalmaya neden oldu)


1

İyi geceler

Extreme Programming pratikleri ve çift ​​programlama hakkında defalarca tartışma yaptık . Zaman içinde, programlamanın yalnız bir aktivite olduğunu anlayabiliyoruz, çünkü programcıların konsantrasyon ve izolasyona ihtiyacı vardı. O zamandaki programcılar , kodda etkin bir şekilde odaklanabilecekleri ve güzel ve yaratıcı kararlar alabilecekleri zihinsel bir durum olan bölgedeydi .

Bir programcının birbirini keseceğini varsayarsanız, çift programlama da riskli görünmektedir. Öte yandan, birlikte çalışan iki programlayıcıyı kesmek daha zordur. Örneğin, Solo programlamada, kesintiye uğramak daha kolay olacaktır, bu nedenle solo bir programcının “bölgede” kalması neredeyse imkansızdır.

Ölü çizgi sadece köşeyi dönünce kod kalitesi bir başkadır. İnsanlar her zaman acele edecek, bir çift programcısı veya yalnız bir programcı olacaklar: en iyi uygulamaları kullanmayacaklar ve sadece ünite testlerini unutacaklar.

Çift programlamaya bağlı kalacağım. Çünkü riskler söz konusu olduğunda, bir programcı gittiğinde, süreci belgelemek ve herkese nasıl çalıştığını öğretmek için her zaman başka bir erkeğe sahip olacaksınız.


1

Önemsiz olmayan karmaşıklık içeren herhangi bir şey üzerinde çalışmak çift programlamaya iyi bir aday olma eğilimindedir, böylece birden fazla kişi kod tabanının bir bölümünü bilen bir geliştirici yerine kodu anlar. Başka bir durum, birinin bazı becerileri aktarmak istediği yerdir. Buradaki örnek, ünite testlerinde gerçekten iyi olan birisinin, konsepte aşina olmayan bir kişiyle eşleşmesi olabilir ve bu nedenle bir şey için ilk alışkanlık edinilmesine yardımcı olur.

Çift programlamanın önlendiği yerlere gelince, işleri iki gruba ayırmanın daha iyi olacağı ve her geliştiricinin işi yapmak için her bir çalışmayı ayrı ayrı yapmasına izin verecek olan basit iş görevlerini anlayın. Bazı görevler sadece biraz yazma gerektirebilir ancak o kadar büyük değil ki, her geliştirici birkaç dakika için kaba kuvvet yaklaşımı yaparsa, yapılabilecek daha iyi bir yol bulmak için birkaç saat harcamakta fayda var. saatler.

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.