Çift Programlamanın Nedenleri


13

Yönetimin çift programlama fikrini bana ya da başka bir yöneticiye / geliştiriciye geçirdiği birkaç mağazada çalıştım ve arkasına geçemiyorum. Bir geliştirici bakış açısından, bu kodlama stiline geçmenin yararlı olmasının bir sebebini bulamıyorum ya da küçük bir takımın yöneticisi olarak herhangi bir fayda görmedim.

Temel sözdizimi hatalarına yardımcı olduğunu ve bir şeye sahip olmanız gerekiyorsa yardımcı olabileceğini anlıyorum, ancak programlama döngüsünün dışındaki yöneticiler bunu tasarımcılarının Facebook veya Reddit'e gitmesini engellemenin bir yolu olarak görmeye devam ediyor gibi görünüyor bir tasarım aracı.

Görünüşe göre bir kitaptan yolumu veya konuyla ilgili bir wiki sayfasını tam olarak anlayamayan geliştirme tabanına yakın biri olarak ... üst düzey bir yönetim konumundan, Scrum veya Agile ile uğraşırken Çift Programlamanın faydaları nelerdir? ortamlar?


2
Çok özel durumlarda faydalı olduğunu düşünüyorum. Ancak genel bir geliştirme modeli olarak, işe yaramaz.
Ryan Kinal

4
Bu, görünümünüzü renklendirebilecek yazılıma bağlı olabilir. Çok sayıda küçük widget'ınız varsa ve her gün farklı küçük özel yazılım parçaları üzerinde çalışıyorsanız, muhtemelen işe yaramaz. Geliştiricilerin uyguladıkları işlevsellik tarafından yapılan sistem genelinde kaskatı hesaba katmaları gereken büyük bir kurumsal sistemle uğraşırken son derece faydalı olur. 30'dan fazla farklı yerde kullanılan verileri etkileyen bir sınıf yazmak, genellikle çeşitli zihinsel süreçlere sahip olacak 2 kişi tarafından akla getirilebilir. Önceden tespit için monte edilmiş bir carlo yöntemi gibi.
Jimmy Hoffa

@JimmyHoffa Yani ana düşünce süreci, hataları kabul testine bile getirmeden önce hataları bulursak, kod incelemelerinde / satırda testte harcanan zamanı büyük ölçüde azaltabilir miyiz?
Jeff Langemeier

3
@JeffLangemeier Aslında bundan daha fazlası; Altsistem A'nın ortasında iki geliştirici arasında gerçekleşen doğal söylem nedeniyle A1'in alt bölümünün A1 bölümünün tasarımındaki kusurları görüyorsanız, sadece sabitleme için harcanacak zamandan tasarruf etmiyorsunuz A1 ve A1'e bağımlı olan bölümler A5 ve A7 (veya çağrının A1'i sabitlemesinden dolayı bu bağımlı bölümlerde hatalar bulabilir), bu kötü bölümü tamamen yazmadan zaman kazanırsınız. Test süresini azaltır evet, ancak bu şekilde geliştirme süresini daha da azaltır.
Jimmy Hoffa

@MartinWickman Bu bir kopya değil. Başlığınız Artılar ve Eksiler istiyor olsa bile, bağlantılı olanınızda gerçekten Eksilerini arıyorlardı. Ayrıca, bu konuda profesyonellerin daha kapsamlı bir cevabı verildi; noktaya gelince, topluma, diğerine yakın olsa bile, bu topluluğa sahip olmak faydalıdır.
Jeff Langemeier

Yanıtlar:


25

Kısmen, nasıl çift programlama yaptığınıza bağlıdır. Bazı durumlarda, çiftin sürücüsü kod yazarken, çiftin ikinci üyesi sistemin tasarım ve uygulama ayrıntılarını gözlemler ve tartışır. Çift programlamanın başka bir örneği, her iki kişinin aynı anda kod yazmasını içerir - bir kişi uygulanan işlevselliği yazarken, diğeri etkin bir şekilde birim ve entegrasyon seviyesinde test kodu geliştirip yazarak sistemin tasarım ve uygulama ayrıntılarını tekrar tartışır.

Çift programlama türünden bağımsız olarak, etkin bir şekilde sürekli kod incelemesi işlevi görür . Kod üzerinde iki kişinin gözü var, daha sonraki bir sistem / kabul test ortamına veya alana kaçmadan önce hataları izliyorlar. Ayrıca, otobüs faktörünüzü en aza indirmek için artıklık olarak hizmet etmek için sistemin belirli bir bölümünü çok iyi anlayan iki kişiniz var . Hem hataları yakalamak hem de ekip bilgisini ekip etrafına yaymak, bir sistem kurmanın maliyetini azaltır.

Bilginin yayılması sadece ekibin teknik bilgisiyle sınırlı değildir. Paritenin kim olduğuna bağlı olarak, şirketin daha üst düzey bir üyesi arasında, projeyi aşan diğer şeyler hakkında yeni bir üyeye - kodlama stili, şirket kültürü, beklentiler, vb. Ayrıca, bir teknolojiye veya araca daha aşina olan birisinin bu teknoloji veya araçtaki bilgilerini gerçek dünyaya uygulanan bir ortamda paylaşmasına izin verebilir.

Bahsettiğiniz gibi, geliştiricilerin odaklanmış ve akış halinde kalmasına da yardımcı olur . Akışın yanı sıra, birçok bireyin bir şey üzerinde çalışan birden çok kişiyi bir şey üzerinde çalışan tek bir kişiden daha az kesmesi daha olasıdır. Birinin masasının yanında yürürseniz ve yalnız çalışırlarsa, ancak onlarla konuşmanız gerekiyorsa, çalınabilir ve onlarla konuşabilirsiniz. İki veya daha fazla kişinin birlikte çalıştığını veya bir tartışma yaptığını görürseniz bu daha az olasıdır - onları kesintiye uğratmazsınız. Kesintiler zamana mal olur ve daha fazla zaman harcamak daha yüksek maliyetler anlamına gelir. Çalışanların verimliliğini en üst düzeye çıkarmak işin yararınadır.

Ancak, çift programlamayı uygulanabilir kılmak için aşılması gereken bazı zorluklar vardır. Kişilik çatışmaları veya bilgiyi doğru bir şekilde dağıtmak için çiftleri seçmek gibi şeyleri düşünün. Çiftlerin tam olarak ne zaman döndürüleceği de dikkate alınmalıdır. Gelişigüzel yapılan çift programlama muhtemelen planlandığı gibi etkili olmayacaktır. Ekibinizin yapısına bağlı olarak, insanları hiç eşleştirmek etkili olmayabilir.


Harika cevap için +1. Fikirden kesinlikle hoşlanmıyorum, ancak faydalarını iyi sunuyorsunuz.

Pergelinizin kesilmesini seviyorum, bu açıklama aslında bunu uygulanabilir kılıyor.
Jeff Langemeier

9
Mevcut ihtiyaçlara göre eşleştirmelerin daha ad hoc olduğu hibrit bir modeli tercih ediyorum. Ayrıca, tek başına çalışmanın daha verimli olduğu ve bir ortakla çalışmanın daha iyi olduğu zamanlar vardır. Kalıcı çiftlere zorlanmak benim için keyfi ve esnek görünmüyor.
jfrankcarr

Çok iyi bir cevap. Ayrıca çevik bir takımın programcısıyım ve çok fazla eşleştirme yapıyoruz. Başlangıçta biz de şüpheliydik, yalnız çalışmanın en iyi yol olduğunu düşündük. Daha sonra, ekibin evriminin bir noktasında, çift programlama uyguladık. Programlanan çift değilse HİÇBİR üretim kodu işlenmedi. Bu, eşleştirme konseptinin yapay bir uygulamasıydı, ancak takıma çok yardımcı oldu. Son olarak, hepimiz tekniğe ve birbirimize alıştıktan sonra stilini değiştirdik ve geçici olarak ekip oluşturuyoruz ve çoğunlukla uygulama daha karmaşık veya hataya eğilimli olduğunda.
Patkos Csaba

@jfrankcarr, kimse kalıcı çiftler bile önermedi; Bu fikri nereden bulduğunuzdan emin değilim. (Bu yanıtın özellikle "çiftlerin ne zaman döndürüleceğinden" bahsettiğine dikkat edin.) Ekibimiz, aynı iki kişinin bir veya iki günden fazla birbirleriyle eşleşmesinin gerçekten kötü bir fikir olduğunu buldu; bir rut içine girmeye başlar. Bazı takımlar bir buçuk saatte bir dönüyor (PDF bağlantısı).
Joe White

3
  1. Daha az Son koddaki hatalar (verimlilik)
    Kod incelemelerini tamamen değiştirmemekle birlikte, işleri erkenden doğru yapmak için oldukça etkilidir. Orada bu yönde bir araştırma var.

  2. Daha hızlı tamamlanma (etkililik)
    Bunu gösteren birkaç araştırma vardır. Karmaşık özellikler söz konusu olduğunda 2 kafa daha etkilidir. Eşleştirme deneyimi bunun için bir zorunluluktur.

(not: Bu, yöneticiniz için satış konuşmanızdır: Finansal açıdan akılcı bir karar çünkü daha az sayıda hatadan daha verimli ve daha hızlı tamamlama ile daha etkili olursunuz)

  1. Juniors Öğretme
    Bir junior'ı daha deneyimli bir programcıya doğrudan ekleyebilirsiniz. Bir grup mutlak yeni başlayanınız varsa, etrafta dolaşmak ve çiftler olarak temelleri çözmelerine izin vermek kolaydır. Etrafınıza sadık kalın ve tavsiye verin. Kavram görünüşte çok eskidir ve işçilikten kaynaklanmaktadır.

3

Hızlı Yanıt: Avantajların ve maliyetlerin çoğu Wikipedia'da yayınlanmıştır, ancak biraz farklı bir açıdan bakalım.

Blog gönderisinden alınan çevik / scrum geliştirme ortamına uygulanan çift programlama avantajlarından bahsetmek istiyorum :

Yazılımın başarısı veya başarısızlığı kalitesine bağlıdır ve Eşli Programlama kaliteyi çeşitli şekillerde doğrudan geliştirir. İki geliştirici birlikte çalıştığında, çift kısa, basit ve bakımı daha az hata ile kolay kod geliştirdikçe tasarım deseni kalitesi artar. Hatalar yazılım geliştirmede önemli bir kalite sorunudur; iki göz grubu kodu yazarken, daha fazla hata yakalanır, böylece geliştirme maliyeti azalır. Geliştirme sürecinin sonlarında bulunan hataların düzeltilmesi genellikle maliyetlidir. Yazılım hatalarını erken bulmak yolda zor problemleri önler ve önlemeye yardımcı olur. Programlamada genellikle karmaşıklık ortaya çıkar ve bir problemi birlikte çözmek için çalışan iki zihin, daha fazla seçenek görebilir ve birden fazla sonuç çıkarabilir.

Özetle:

  • Takım iletişimini teşvik eder
  • Verimli uygulama bilgi transferini teşvik eder
  • Tasarım yaklaşımında hesap verebilirliği teşvik eder
  • Daha iyi, bakımı kolay kod sonuçları
  • Erken aşamada buggy kodunu ortadan kaldırmaya yardımcı olur
  • Takım üyeleri kodlama sırasında dikkatleri dağıtacağından takım verimliliğini artırır
  • Ekip üyelerinin iletişim ve işbirliği becerilerini geliştirir
  • İşyerinde arkadaşlık kurar
  • İşi daha eğlenceli hale getirir

When two developers work together design pattern quality improves-> bu ifade hiç mantıklı değil. En azından When two bakers work together wheat quality improvesveya daha mantıklı değil When two race drivers work together asphalt quality improves.
phresnel

Bu blogdan bakabileceğiniz bir alıntıdır. Bununla birlikte, amacım, her geliştirici oluşturulan kodla gurur duymaya çalıştığından, teknik tasarım ve kod kalitesine daha iyi odaklanmaktı.
Yusubov

2

Çift programlama için birkaç avantajı vardır:

  • İki programcı tasarım üzerinde birlikte çalışabilir ve potansiyel olarak daha iyi mimari / kod üretebilir - iki çift göz hataları tespit edebilir
  • Kurum bilgisi daha iyi korunur - eğer bir programcı ayrılırsa veya yoksa, diğeri üretkenlik kaybı olmadan çalışmaya devam edebilmelidir.
  • Yeni geliştiricileri hızlı bir şekilde eğitmenin bir yolu - onları geliştirme ekibinin deneyimli bir üyesi ile eşleştirin ve kod tabanını ekibin kıdemli bir bakış açısıyla deneyimleyebilecekler
  • Daha iyi disiplin - eşleştirilmiş programcılar muhtemelen daha uzun bir süre boyunca üretken olacaktır, çünkü biri veya diğeri faaliyet patlamaları için devralabilir. Birim testi gibi potansiyel olarak sıkıcı görevler, solo geliştiricilere göre daha az atlanabilir.

Wikipedia ayrıca wiki girişindeki maliyet ve faydaların güzel bir özetine sahiptir .

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.