Küçük bir şirkette Çift Programlama / İşbirliği


20

Küçük bir geliştirme şirketinde lider geliştirici olarak çalışıyorum. İki geliştiricimiz var, ayrıca geliştirici olan patronum var ama gerçek kodlamanın çoğunu yapmıyor.

Üstesinden gelmeye çalıştığım sorun çok yönlü. Aramızda çok fazla işbirliği olmadan hepimizin kendi projelerimiz üzerinde çalışmaya meyilliyiz. Nitekim ben (en gelişmiş geliştirici olarak) başkalarının görüşlerini / yardımlarını benimkinden daha fazla isterim çünkü dış gözün değerini değerlendiriyorum.

İşbirliğimizi arttırmak istiyorum ve bunu onlara söyledim. Genel olarak, onlara nasıl daha iyi geliştiriciler olacağına ve daha iyi uygulamaları nasıl takip edeceğine dair bazı şeyler göstermek istiyorum. Ancak diğer geliştiricilerin kişilik tipleri göz önüne alındığında, yalnız çalışmaktan daha rahat olduklarını düşünüyorum.

Çift programlamayı okudum ve bazı geliştiricilerin (ben olduğum gibi) diğerlerinden daha gelişmiş olması durumunda (bazı forumlarda) iyi çalışmadığını okudum. Yine de, çalışmamızın birbirinden tamamen farklı olmaması için işbirliğine başlamamızın şart olduğunu düşünüyorum.

Sorum şu ki, hiç kimse benzer bir durumda olup olmadığını ve onlar için ne işe yaradı?

Bunun herkese uyan tek bir durum olmadığını fark ettim, ancak birden fazla yaklaşıma bir şans vermek istiyorum.

Hepimiz ortak bir alanda çalışıyoruz, geliştiricilerin bireysel ofisleri / kabinleri yok.


2
Siz ve diğer geliştiricilerin bireysel ofisleri, kabinleri var mı veya ortak bir alanda mı oturuyorsunuz?

@hatchet Hepimiz ortak bir alanda çalışıyoruz.
Ryan Williams

Yanıtlar:


12

İkili programlamanın sizin için neden bir çözüm olmadığı diğer cevaplarda zaten tartışıldığından , şu anda neyi denediğimizi ve sonuçlarından memnun olduğumuzu tartışacağım.

Bana göre işbirliğini arttırmak için yapabilecekleriniz her projede iki kişinin birlikte olması. Her biri projenin farklı bir bölümünde çalışıyor, ancak bu kısımların birleştirilmesi gerektiğinden iki geliştiricinin işbirliği yapması gerekiyor. Bu aynı zamanda iki programcının projenin mimarisini (katman ve arayüzler) tartışmasını ve ardından farklı roller almaya karar vermesini gerektirir.

Ve bu yaklaşım, şirketinizin bir kerede gerçekleştirebileceği proje sayısını sınırlarsa, bu işbirliği çiftine aynı anda iki projeyi atayabilirsiniz.

Yakın zamanda bu yaklaşımı denedik , bunlardan biri apis ve diğer programcıların görüşlerini ve denetleyicilerini kullanma modelleri + entegrasyonu geliştirdi . Bu ayarın avantajlarını bulduk:

  1. Kod yapısı, projenin tüm yönleri üzerinde sadece birisinin çalışmasından çok daha iyi sonuç verir.
  2. Onlara depoya kod işleme vb. Hakkında hatırlatmak zorunda değiliz.
  3. Sadece bunun için özel QA'ya güvenmek yerine, birbirlerinin kodlarını test etmek için biraz çaba sarf etmek zorundalar.

1
Bunun üzerinde de düşüneceğim. Geliştiricilerin modellerden görünümlerin ve denetleyicilerin gelişiminin ayrılmasını gerçekten seviyorum, çünkü geliştiricileri modeller için iyi bir API bulmaya zorluyor. Aynı anda çalışmak için, aynı zamanda ilgili testlerin yazılmasını zorlar.
Ryan Williams

1
Bu cevabı kabul etmeye karar verdim, çünkü üstesinden gelip birkaç ekip üyesiyle konuştuktan sonra, işbirliğini sağlamanın en iyi yolunun aynı projedeki rolleri bölmek olduğuna ikna oldum. İşe yaramayabilir, ama duyduğum en uygun gibi görünüyor.
Ryan Williams

7

Bence çift programlama, dile getirdiğiniz sorunun çözümü değil.

Bir çift programlamasında iki ayrı rol vardır. Gözlemci tarafından yazılmış kodu inceleme ve geri bildirim yoktur sürücüsü . Küçük programcılarınızın verdiği kararları iyileştirmek için fikirler vermeye çalışıyorsanız, sürücünün rolünü yaparken yazdığınız kodu eleştirel olarak gözden geçirme yeteneklerini ne kadar etkili bulabileceğinizi sorguluyorum.

Bu dinamik olmadan çift programlamanın faydası kaybolur.

Üst düzey programcı olarak patronunuzla daha güçlü bir çalışan eğitimi ve gelişimi programı düşünmenizi öneririm. Küçük programcınıza yeteneklerini geliştirmek için bir çerçeve verilmelidir. Genellikle aydınlanma, bir kodlama standardı belgesi yazma, kendi kendine yeten görevleri kendi işinizden ayırma ve uygun kod inceleme işlemlerinin yapıldığından emin olma gibi yöntemleri kullanabilirsiniz.


Düşüncelerinizi dikkate alacağım. Şu anda yaptıklarımıza karşı zihinsel olarak ayrıştırmak ve düzeltmek biraz. Dürüst bir his, baş geliştirici olarak benim konumumda biraz güvensizlik. Beceri perspektifinden rahat olmadığım için değil, diğer geliştiricilerimizin her ikisinin de kendimden daha yaşlı olması (birincisi, biri değil) ve birinin birkaç yıl daha tecrübesi olduğu için. Durum böyle olunca, geleneksel kod incelemeleri garip görünüyor, çünkü boyunlarını soluyor gibi görünmek istemiyorum. Sonra tekrar, belki de yapmam gereken şey bu.
Ryan Williams,

Bir diğer şey. Şoför olduğumda, programın onlarla eşleştirilmesinden daha az fayda olduğunu düşünüyor musunuz? Yine de en iyi uygulamaları işaret etmenin bir yolu olarak kullanılabilir ve hala ne yaptığım hakkında bazı girdi ve geri bildirimler alabilir (ilişki kesinlikle dengesiz olsa bile).
Ryan Williams

Çift programlama ilişkisi bir yöntemse, ilgi çekici olmayacağını ve iş arkadaşlarınızla belki de hafifçe patronlaşmayacağını öneririm. Nasıl modellediğinize bağlı olarak, bu "kolayca nasıl programladığım ve en iyi yaklaşım bu" olarak kolayca görülebilir. Her iki bileşene de sahip olmadığı için bu çift programlamayı gerçekten çağırmazsınız.

Sanırım gerçekten korktuğum şey bu. Düşünceleriniz için teşekkürler. İlk olduğun için cevabını kabul edeceğim. (Birkaç tane de iyi olanlar vardı.)
Ryan Williams

@RyanWilliams Code incelemeleri "boynunu kesmek" ile ilgili değil. Onları kontrol etmenle ilgili değil. Bizim yerimizde, ReviewBoard'u bir platform olarak kullanıyor ve birbirlerinin kodları hakkında yorum yapıyoruz . "Hiyerarşi" yok. Bu durumda öğrenme "örtük". Sizin ve onların kodlarını, sizden ve diğer aygıtlardan gelen soruları ve bu soruların cevaplarını / yorumlarını okumaktan öğrenirler. Ve kod tabanının diğer bölümlerini tanıyorlar, bu da oldukça faydalı bir IMHO.
Johannes S.

5

TL; DR : Çift programlamanın sizin için işe yarayacağını sanmıyorum. Bunun yerine kendi kod uzun vadeli kalitesi hakkında endişe insanları elde etmeye çalışmak ve onları yapmalıdır istediğiniz cevapları bulmak için. Bu gayri resmi olarak yapılmalıdır.


Kültür ve kalite hakkında

Bu konunun programlama metodolojisi ile değil kültürü ile ilgili olduğunu düşünüyorum . Tecrübelerime göre, kültür yönlendirilebilir, ancak nadiren insanlara söyleyerek. Diğer bir deyişle, doğal olarak evrimleşmemiş ya da mevcut uygulamadan çok uzakta olan insanlar üzerinde belirli bir iş akışını zorlamaya çalışmak olumsuz sonuçlara yol açıyor.

Başka bir deyişle, nihayetinde olduğunuzda bile en son konuşma sözcüklerini çalmakla gelen elbise gibi görünmek istemezsiniz . Tanıdığım çoğu programcı zihinsel olarak sizi arka plan gürültüsü olarak etiketlerdi. Kurumsal bir arı olmayın.

Benim düşünceme göre, kendinize sormanız gereken asıl soru "kuruluşumun koyduğu kodun kalitesi ve işletme değerinden memnun muyum?" ve bunun cevabı olumsuz ise, "bunu nasıl tersine çeviririm?" diye sormalısınız.

Nihayetinde kalite ve değer, yalnızca sizin veya kuruluşunuzdaki başka birinin düşünebildiği (ve gerektiği) insan tanımlarıdır.

Çift programlama ve mikro yönetim

Bu yüzden, biraz ileri ve sert ses çıkma riski altında, bana çift programlamaya ilişkin okumaların aslında bir çeşit mikromanişantasyon veya başka bir yol hakkında düşündürdüğünü gösteriyor . MM çoğu insanı yabancılaştırmak için kesin bir reçetedir.

Çift programlamanın savunmasında: çift programlama başka bir adamın omzuna bakan bir adam hakkında değildir. Bu yönetimin aldığı kadar mikro. PP aynı anda iki seviye hakkında düşünmek için iki zihin kullanmakla ilgilidir - bir kişi yüksek seviye , büyük resim sorunları ile ilgilenirken, diğeri çalışma kodu üretmek için gereken somun ve cıvatalarla ilgilenir . Benim düşünceme göre, eğer iki katılımcı yer değiştirebilecek konumda değilse, nadiren işe yarar. (- biz bağlantılı sakıncası değiliz Onlar kavramların benzer profesyonel bir cephanelik ve ortak profesyonel bir kelime bilgisine sahip benzer deneyimli yeterli olmalı henüz , muhahaha).

Durumunuz için, çünkü siz küçük bir takım olduğunuz ve gerçek deneyime sahip tek kişisiniz (yazınız bana öyle geliyor), çoğu zaman yazılan kodun çoğunu çift programlama veya inceleme Çalışmıyor Günde sadece 24 saatin var. Bunun yerine, düşünebileceğiniz bazı çözümler:

  • Onları SO'ya uygun dil etiketi altında katılmaları veya Code Review SE'de incelenmek üzere bazı kod parçacıklarını göndermeleri için teşvik edin. Haftada en çok SO puanını kimin kazanabileceği üzerine küçük bir gayri resmi yarışma başlat.

    SO yeni başlayanlar için geliştiriciler için harikalar yapabilir çünkü sürekli geri bildirimde bulunur ve topluluğun kalbini takip eder.

  • Kontrol ettikleri bazı kodlara bir göz atın ve uzun vadeli evrimi ile ilgili bazı sorularla gayrı resmi olarak onlara meydan okuyun. Başlangıç ​​seviyesindeki programcıların çoğu, kodlarını okunaklı ve bakımları yapmayı düşünmeye alışkın değillerdir. Bu sorunları kendi başlarına ele geçirdiğinizde, sizden veya diğer kaynaklardan kendi başlarına daha fazla bilgi arayacaklar.


Diğer herkes gibi, girişinizi takdir ediyorum. Bunu gönderirken anladığım tek şey, omuzlarına bakan biri olmaktan rahatsızlık duymam. İkisi de aslında benden büyük ve birinin çok daha fazla tecrübesi var. Bu yüzden onları CE üzerinde dolanacak ve kod incelemeleri isteyen insanlar olarak görmüyorum. Yeni değiller. Fakat farklı dillerden ve geleneksel olmayan uygulamalardan geliyorlar.
Ryan Williams

Anlıyorum. Omuzlarına bakmaktan rahat hissetmemeniz iyi çünkü bence yapmamalıyım. Hiç kimse birisinin yaptıkları her tuş vuruşunu tahmin etmesini istemez (abartıyor).
idoby

4

Çift programlamanın çevrenizde size yardımcı olacak bir şey olduğunu sanmıyorum. Bu, daha az deneyimli geliştiricilerin beceri kazanmasına yardımcı olmayacak bir şey değil - çeşitli beceri seviyelerinde mühendislerle çift programlama hakkında bir Programcı sorusu bile var . Bilgi paylaşımı ve daha az hata gibi faydalar olsa da, çift programlama daha fazla zaman yatırımı gerektirir. Üç geliştiriciden oluşan bir ekip ve geliştirme geçmişine / deneyime sahip yalnızca dört kişiyle, bir çift programlama rutinini sürdürmek zor olacak gibi görünüyor.

Durumunuzda daha iyi bir alternatifin kod incelemeleri olduğunu düşünüyorum, özellikle de uygun şekilde uyarlarsanız. Bir kod incelemesi, küçük bir kod parçasını inceleyen ve bir bileşenin tasarımını ve uygulanmasını incelemek için bir odada bir veya iki saat boyunca birden fazla kişiye (hatta tüm ekip) geri bildirim sağlayan herhangi bir kişiden oluşabilir. Bunlar, özellikle ekibin bilgisine, deneyimlerine ve ihtiyaçlarına göre, yapılan işe uygun olarak çeşitlendirilebilir. İncelemede birden fazla kişinin, sorunları bulmak, öneride bulunmak ve yorumları gözden geçirmeden önce kendi çalışmalarına dahil etmek için incelemenin çıktılarını okuyarak bilgi edinmesini sağlayarak bilgi paylaşma özelliğini elde edebilirsiniz. .


Popüler bir fikir gibi görünüyor. Kod incelemesi fikrini seviyorum. Ama aklımda, kişilikleri ve beceri düzeyleri ile, incelemeyi yapan benim ve onların sadece dinleyen (çoğunlukla icat edilmemiş) olacağı tahmin ediyorum. Ama belki onları daha fazla dahil etmenin bir yolu var. Sanırım bunu düşünmek zorundayım.
Ryan Williams,

Ayrıca, açık olmak gerekirse, her zaman yaptığımız bir şey olarak çift programlamadan bahsetmiyordum. Aksine, daha büyük veya daha karmaşık özellikler için çalışma haftasının önemli, ancak büyük olmayan bir kısmını buna tahsis edin. (Bu kısmen pratik gereklilikten mahrumdur. Karşılanması gereken kendi taleplerim var.)
Ryan Williams

2

Sorum şu ki, hiç kimse benzer bir durumda olup olmadığını ve onlar için ne işe yaradığını.

Deneyimi davet ettiğinden beri, yaptığım şey işte. Düşük riskli yaklaşımı seçtim ve onlardan daha genç birine birlikte çalışarak biraz zaman geçirmelerini istedim. Etkinliği etiketlemedik. Benim dışımda hiç kimse yeni bir teknik denediğimizi bilmiyordu.

Hangi ayrıntılarla ilgili olduğunu tam olarak bilmiyorum, ancak süreç çok iyi çalıştı. Akıl hocası olmak istememişti, bu benim önceden hiç ipucu almadığım bir şeydi. Böylece her iki yönde de iletişimi çok olumlu bir şekilde başlattı.

Nitekim ben (en gelişmiş geliştirici olarak) başkalarının görüşlerini / yardımlarını benimkinden daha fazla isterim çünkü dış gözün değerini değerlendiriyorum.

Bunu, şu anda yapmakta olduğunuz şeyin mantıksal ilerlemesi olarak çerçeveleyebileceğiniz anlaşılıyor.


Endişelendiğim, "mentor" olmak istediklerinden emin değilim. İkisi de benden yaşlı ve biri (önemli ölçüde yaşlı) aslında benden birkaç yıl daha fazla deneyime sahip. Ama tavsiyenin ikinci bölümünü beğendim.
Ryan Williams

Ve bir şey yapmadan önce endişelenmek doğaldır - çünkü bilginiz yok. Tecrübelerim, bunu sadece yaparsanız, insanların endişe etmediğinizi ve rahatladığınızı hissedecekleri ve devam edecekleri olmuştur. Ve sonra eğer çalışırsa - devam edin ve eğer olmazsa - başka bir şey deneyin.
dcaswell

Belki de normalde kendimi yapabileceğim daha büyük bir projeye dahil etmelerini sağlamak bu işi biraz kolaylaştırabilir. Mesela, yakında CMS'yi tekrarlıyoruz. Yine de bu fikre alışmam biraz zaman alacaktı.
Ryan Williams

0

Bu soruyu sorduktan birkaç ay sonra, sonuçlarımızdan memnun olduğumu söylemeliyim. Ama başlangıçta kabul ettiğim tam olarak bu değildi. Bunun küçük bir ekip olduğunu unutmayın, bu nedenle bu çözüm herkese uyamayacak.

Herkesin kendi işini yapmasına izin vermenin en iyisini buldum. Ve zamanla, bir sorunla karşılaşırsak diğerlerini de yardımımıza çağırdığımız, birbirimize güvendik. Kimsenin omzunun üzerinden izleyen biriyle çalışmak istediğini sanmıyorum. Bazen birinin arkasına otururum veBazen bazen talep edilmeden bir problemde onlara yardım . Bazen ekleyecek hiçbir şeyim yok ve belki onları biraz sinirlendiririm. Ama onlar üzerinde durmak için orada olmadığımı anlıyorlar. Yaptıklarımdan bir mola vermek ve biraz işbirliği yapmak için oradayım.

Bulduğum şey, zamanla SAĞ olan kişilerin (küçük bir takımda) diğerlerinin yaptıklarını alıp senkronize etmeleri. Mikro yönetmeye veya birisine her zaman yanlış yaptıklarını anlatmaya gerek yoktur.

Zaman zaman, birisiyle oturun ve bir uzmanla ya da öğrenen biriyle veya her ikisiyle de, bir problemle çalışın. Neden bir şeyi bir başkasına göre bir şekilde yapmak istediğinizi veya yapamayacağınızı açıklayın. İyi fikirler genellikle başarılı olurken, diğerleri geride kalıyor. Ve günün sonunda, farklı şeyler üzerinde çalışabilen ancak ortak bir amacı paylaşan üretken ve uyumlu bir insan grubuna sahipsiniz.

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.