Geliştiricilerin kendi iş istasyonlarında nasıl çalıştığıyla ilgili standartlar


18

Bir geliştirici proje ortasında birkaç gün boyunca hastalandığında zaman zaman ortaya çıkan durumlardan birine rastladık.

Kodunun en son sürümünü kullanıp kullanmadığı veya yerel makinesinde bakmamız gereken daha yeni bir şey olup olmadığı hakkında birkaç soru vardı ve beklememiz için bekleyen bir müşteriye teslim ettik. geri dönmek için.

Diğer geliştiricilerden biri, görünüşte aynı projelerin birçoğunu görünce ve bulmak için oturum açtı, zaman damgaları hangisinin "güncel" olduğunu netleştirmedi (projenin sürümlerinde bazı bitleri prototiplendiriyordu) onun "çekirdek" olanı).

Açıkçası bu boyundaki bir acıdır, ancak alternatif (her bir geliştiricinin en az çaba ile bir şeyleri alabilmesini sağlamak için her bir geliştiricinin kendi makinesinde nasıl çalıştığına dair katı standartlar gibi görünmektedir ) büyük olasılıkla geliştiricilerin kişisel iş akışları ve bireysel düzeyde verimsizliğe yol açar.

Check-in kodu standartlarından, hatta genel geliştirme standartlarından bahsetmiyorum, bir geliştiricinin yerel olarak nasıl çalıştığından bahsediyorum, genellikle (tamamen benim deneyimime göre) geliştiricilerin kendi kontrolü altında olduğu düşünülen bir alan.

Peki böyle durumları nasıl ele alırsınız? Bu olanlardan biri sadece ve başa çıkmak zorundasınız, geliştiriciler için ödediğiniz fiyatın onlara en uygun şekilde çalışmasına izin mi veriliyor?

Veya geliştiricilerden bu alandaki standartlara uymalarını mı istiyorsunuz - belirli dizinlerin kullanımı, standartları adlandırma, bir wiki ile ilgili notlar veya herhangi bir şey? Ve eğer öyleyse, standartlarınız neyi kapsıyor, ne kadar katı, onları nasıl koruyorsunuz?

Yoksa özlediğim başka bir çözüm var mı?

[Burada ne yaptığından bahsetmek için geliştiriciyle iletişime geçilemeyeceği fikrini varsayalım - hangi çalışma alanının bellekten basit ve kusursuz olmayacağını ve hatta bazen insanlar gerçekten İletişim kurulmaz ve tüm olasılıkları kapsayan bir çözüm istiyorum.]

Düzenleme: Birinin iş istasyonundan geçiyor (bu tam olarak neden olduğu hakkında ilginç - ve muhtemelen konu dışı - bir soru olsa da) kötü form olsun ve kesinlikle sınırsız erişim bakmıyorum. Kod dizinlerinin salt okunur bir paylaşımla oluşturulduğu bir standardın çizgileri üzerinde daha fazla düşünün - hiçbir şey değiştirilemez, başka hiçbir şey görülemez vb.


8
Bir programcının komuta merkezinde Gestapo'ya gitmek için -1.
systemovich

17
Bekle, ikinci geliştirici ilk geliştiricinin şifresini nasıl biliyor?
TheLQ

12
Mükemmel bir soru için +1. "Gestapo'ya Geçmek", geliştiricilerin şirket için çalıştıkları ve bu nedenle yerel makinelerine erişim haklarından vazgeçtikleri için bence şirket ortamında geçerli değil. Gizlilik istiyorsanız, kendi donanımınızı kullanın.
Gary Rowe

4
Parola için geliştiriciyle iletişim kurulabiliyorsa, neden geçerli sürümün hangi sürüm olduğunu sormadınız?
Ben L

2
@Gary: ne? hayır, bu tam (ve çok tehlikeli) saçmalık. Bir şirket için çalışmaktan kişisel gizlilik haklarından vazgeçmeye kadar (hem mantıksal hem de yasal olarak) bir çekim. Ben Jon'un eylemi ancak şirketleri (o daha açıkladı bile önce) “Gestapo'yu going” demezdim do bazen Gestapo'yu gidip bu ihtiyaçları engelledi ve her seviyede mücadele edilmesi olduğunu bir şeydir. Sadece Almanya için konuşabilir ama burada yapmak şirketin sahip olduğu donanım üzerinde çalışırken bile belli gizlilik haklara sahiptir.
Konrad Rudolph

Yanıtlar:


64

" Kaynak kontrolünde değilse, mevcut değildir. "

Bu, mesleğimizde dogmatik olduğum sınırda olduğum birkaç şeyden biri. Aşağıdaki sebeplerden dolayı:

  1. İş istasyonu şirket malı olmasına rağmen, bununla yüzleşelim - bir programcının kendi iş istasyonunun kendi kalesi olduğuna dair yazılı olmayan bir kural var. Herkesin rutin olarak oturum açıp içinden geçebileceği bir işyeri kültüründen rahatsızım.
  2. Herkesin kendi akışı vardır (sizin de söylediğiniz gibi). Tüm geliştiricileri kendi yerel çalışma alanlarını belirli bir şekilde düzenlemeye zorlamaya çalışmak, kendi özel çalışma yöntemlerine karşı çıkabilir ve akışlarını kırabilir ve daha az verimli hale getirebilir.
  3. Kaynak kontrolünde olmayan şeyler yarı pişmiş koddur. Yayınlanmaya hazır tamamen pişirilmiş bir kodsa, kaynak kontrolünde olmalıdır. Hangi tekrar ana noktaya geliyor ....
  4. "Kaynak kontrolünde değilse, mevcut değildir."

İnsanların iş istasyonlarındaki kodlara bakmak isteme konusunu hafifletmenin olası bir yolu, düzenli checkin kültürünü teşvik etmektir. Bir keresinde bir şirkette çalıştım - bunu yapmak için resmi bir yetki olmamasına rağmen - hafta sonu için her şeyin kontrol edilmesinin bir tür gurur noktası görüldü. Bakım ve serbest bırakma aday aşamalarında, CR öğeleri küçük, temiz görünür değişikliklere izin vermek için kasıtlı olarak çok ince taneli ve bunları takip etmek için düzenli kontroller yapmıştır.

Ayrıca, tatile gitmeden önce her şeyi kontrol olması zorunluydu .

TL; DR versiyonu : İnsanların iş istasyonlarından geçmek kötü bir form. İstediğimizi bulmak için insanların iş istasyonlarından geçmeyi kolaylaştıracak bir kültür geliştirmeye çalışmak yerine, mantıklı bir kaynak kontrolü kullanımı ve düzenli kontroller kültürünü teşvik etmek daha iyi bir uygulamadır. Muhtemelen hiper düzenli kontroller ve projelerin kritik aşamalarında ince taneli görevler.


10
+1: Birisi hasta, iş istasyonunu karıştırmak muhtemelen değerden daha pahalı olacak. Bir kişi çoktan gitti. Şimdi bir diğeri neler olup bittiğini anlamaya çalışmak için zaman kaybetmek Hiçbir değer için büyük yönetim kabusu. Kaynak kontrolünde olana kadar, asla yoktu.
S.Lott

1
Eğer o gün yola çıkarsa? Evet, haftanın geri kalanında mı? Belki, bir ay boyunca? Şans yok. Bu kötü "gri tonları" sorunlarından biri ... erken, sık sık taahhüt etmek için geri döndük - bu yüzden kalıpların mutlaka iş istasyonları olması gerekmiyor, sürüm kontrolünün kullanılması gerekiyor, ama açıkça bir şey düşünmeye değer.
Murph

Sürüm dediğinizde, derleme veya kullanıcılara sürüm için sürüm mü demek istersiniz?
JeffO

2
@Murph: Değişiklikler her X günde bir işlenirse, yanlış yerleştirilebilecek maksimum iş miktarı X gün değerindedir ve geliştiricinin kaçınılmaz olarak kaçınılmaz olduğu doğru değildir. Yapılacak en uygun şey, kaybedilen iş miktarının kabul edilebilir sınırlar dahilinde olması için yeterince sık kontrol etme politikaları oluşturmaktır.
David Thornley

1
@David benim yorumum S. S.Lott - "kayıp" argümanı açısından bir cevap oldu. İyi sıralama. Taahhütlerin eksiksiz bir dizi değişiklik anlamında atomik olmasını istiyorum (rebase'ın neden bu kadar çekici bir kavram olduğunu anlamaya başlıyorum) - bu yüzden "kurtarmayı taahhüt et" i sorunlu görüyorum (genel olarak ve yokluğunda rebase eşdeğeri). Ve her durumda, sürüm kontrolünden oldukça farklı günlük otomatik iş istasyonu yedeklemeleri olmalıdır.
Murph

22

Geliştiricilerinizin iş istasyonlarını nasıl organize ettiklerine ilişkin bir standart uygulamak yerine, her günün sonunda tüm işlerin kontrol edildiği bir standart uygulayın . Check-in'ler hala tamamlanmamışsa şubelere olabilir.

Bu şekilde kimsenin başka bir geliştiricinin iş istasyonuna erişmesine gerek kalmaz.

Bu politikanın bir miktar muhalefetle karşılanacağını hayal ediyorum, ancak iş istasyonlarının organizasyonu ile ilgili kuralları uygularsanız ne beklediğime kıyasla hiçbir şey.


1
Şubeyi ne sıklıkla birleştirirdiniz? Her zaman istikrarlı olduğunu hissettin mi?
Jon Hopkins

2
@Jon Hopkins: "Serbest Bırakılabilir" i yönetmek "Kararlı" dan daha kolaydır. Serbest bırakılabilir istikrarlı içerir ve ürün sahibi buna hazırdır. Ayrıca, çok sayıda şube-serbest bırakma işlemi yapacaksınız. Şube-istikrar, öznellik için çok fazla potansiyele sahip ve "benim için çalıştı" tartışması.
S.Lott

2
-1 Büyük bir kalifikasyon olmadan buna katılmıyorum, check-inler mantıklı bir noktada olmalı ve günün sonunda keyfi olarak olmamalıdır. (Evet, mantıklı bir kırılma noktasına gelene kadar gitmemeliyiz, ancak hayat her zaman işbirliği yapmaz.) Yedeklemeler farklı olmalıdır. Ve hepimiz kutularımıza erişim konusunda biraz daha az değerli olmalıyız ( değişiklik yok, erişim )
Murph

1
-1 çünkü bu "Gerçekten hasta hissediyorum, şu anda eve gidiyorum. Hmm, daha iyi bir 30mins hazırlık daha yapalım, bu yüzden taahhütte bulunduğum zaman yapıyı kırmam."
Gary Rowe

2
@Murph 'Trunk' veya mainline (ne demek istersen) checkin'leri sadece tarif ettiğin gibi gerçekleşmelidir. Bununla birlikte, geliştiricilerin kişisel bir şubeye taahhüt ederek 'günün sonunda işlerini kurtarmaları' konusunda yanlış bir şey yoktur (bu, git veya mercurial ile SVN'den çok daha kolay olsa da). Ve geliştiricilerin iş istasyonlarının nasıl yapılandırıldığına dair (bu bizim başlangıç ​​noktamız) nasıl uygulanacağına dair yönergeler ile karşılaştırıldığında, bu dürüst bir aklı başında çözümdür.
Kris

6

Birinin makinemde oturum açacağı ve eşyalarıma göz atacağı fikri hakkında tedirgin olduğum gerçeğini size söyleyeceğim. Verilmiş, bu şirket ekipman ve mülkiyet, ama sadece yapmak kötü bir şey.

Son kez bir hafta sonu için ayrıldığımda çocuklar sunucuları veritabanı ve kaynak kontrolü ile yeniden yapılandırdılar ve bir nedenden dolayı makinemde oturum açıp sistemi yeni ayar için yeniden yapılandırmanın gerekli olduğunu hissettiler.

Ne yaptıkları hakkında hiçbir fikirleri yoktu ve son iki aydır üzerinde çalıştığım bir prototipi sildiler.

Doğru iletişimin yerinde olsaydı olmazdı. Siz de buna ihtiyacınız var. Bu geliştiriciye gidin ve şeylerin durumunu öğrenin. Daha da iyisi, insanlardan izin almadan önce bir rapor isteyin, böylece herhangi bir şeye ihtiyacınız olup olmadığına dair bilinçli bir karar alırsınız.

Ama insanların iş istasyonlarıyla uğraşmayın.

PS Bir dizin yapısı için bir konvansiyonumuz var ama ana varoluş nedeni tarih / konfigürasyonun bir karışımı - başka bir yere koyun ve derlenmeyecek.


3
@Murph: Sisteminden bir şeyler almak için acil bir ihtiyaç eşliğinde "hasta" hale gelmek gerçekten nadir bir durumdur. Herhangi bir standardizasyon çabasına değmeyebilir.

1
Neden birisinin postanızı okuması ve makinenizdeki hiçbir şeyi değiştirmemesi gerektiğini anlayabiliyorum, ancak kod dizinlerinizi paylaşmanın (salt okunur) standart olup olmadığı nasıl olur? Bu, itirazlarınız olarak algıladığım şeylerin çoğunu döndürür, ancak yine de insanlara acil bir durumda işinize ulaşma imkanı verir.
Jon Hopkins

3
Bu prototipte yedek yok mu?
JeffO

2
@Developer sanat, neden sürüm sisteminin bir dalında çalışmadı?

1
@DeveoperArt, "bu seçeneği kullanmamak" ne demek? Yani kendi başınıza bir şube oluşturmanın bir yolu yok mu? Bir şekilde dallanmayı devre dışı bıraktılar mı? Bu olasılığı hiç duymadım. Yine de, kendi yerel makinenizde (belki de Dropbox veya bir ağ sürücüsüne yedeklenmiş) kendi "git" (hatta "svn") havuzunuzu başka kimseyi dahil etmeden oluşturabilirsiniz. Ben şahsen "önemli" olsun ya da olmasın 2 ay (hatta 2 saat , gerçekten) bir şey üzerinde çalışmak ve sadece 1 kopyasına sahip kişisel ilişki kuramıyorum.
JoelFan

6

Birkaç ay önce oldukça büyük bir proje üzerinde çalışıyordum ve hastaneye kaldırıldığımı öğrendiğim için aniden işten ayrılmak zorunda kaldım. Proje için en son kodumu kontrol etmek için zamanım yoktu.

Neyse ki, /var/www/ourdomain.comüretimi taklit etmek için kodun saklanması burada ("gerekli olmasa da") . Böyle mantıklı ve takip edilmesi kolay bir kuralla, bir iş arkadaşımın makineme giriş yapması ve son değişiklikleri alması kolaydı.

Bazı sözleşmelerin iyi olduğunu düşünüyorum. Gerçi Bobby ile aynı fikirdeyim

"Kaynak kontrolünde değilse, mevcut değildir."

Ayrıca, herhangi bir programcının çalışma alanına yararlı bir ek, tüm kaynak ve geliştirme projelerini depolamak için önden yerleştirilmiş çalışırken değiştirilebilir bir SATA sürücüsü olabilir. Bu şekilde, böyle bir sorun ortaya çıkarsa, bir çalışan, geliştiricilerin iş istasyonuna giriş yapmaya gerek kalmadan projede yeni kaynak değişikliklerini kolayca alabilir.


"... mevcut değil". Diğerlerine göre.

4

Sorunuzun ilk kısmı, ekibinizdeki iletişim sorunlarını açıkça tanımlar. Eğer denediniz günlük Standups ?

Standartların çok katı olmaları durumunda verimsizliğe yol açacağını söylediğinizde size katılıyorum. Standartlar ekip tarafından tanımlanmalıdır herkesin dahil olduğu .

Sizin durumunuzda, ilgili geliştiricinin işe geri dönmesinden birkaç gün sonra beklerdim. Ardından bu standartlar hakkında konuşmak için bir toplantı düzenleyin.

Herhangi bir psikolojik blok ve dirençten kaçınmak için, gördüğünüz kişileri veya belirli şeyleri adlandırmayın. Genel tutun, buradaki amaç, çalışma şeklini geliştirmesi gerektiğini düşündüğünüz geliştirici de dahil olmak üzere herkesten girdi elde etmektir. Adam da organizasyonunuzu bir karmaşa olarak düşünebilir.

Toplantı sırasında sorunu gösterin ve ekibin durumu nasıl iyileştirebileceğini net bir şekilde sorun .

(Bütün) ekip ne yapacağına karar verir.


2

Bu kullanıcı muhtemelen uygun araçların eksikliğinden muzdaripti. Özellikle, dağıtılmış bir sürüm kontrol sisteminin kullanımı, onun için farklı eyaletlerde farklı kod dizinlerine sahip olma ihtiyacını ortadan kaldıracaktır. Tüm bunları dallarda tutabilirdi ve çok daha mutlu olabilirdi.

Ancak asıl nokta, hayır, kendi iş istasyonumu nasıl düzenlediğim konusunda benim üzerime standartlar uygulanmasını istemiyorum. Şu anda (olsa bile IMO için en iyi araç değil, kullandığı ve iyi bildiklerini, çünkü patronum GERÇEKTEN Eclipse hepimizi isteyen bir IDE benim bölüm standartlaşarak hakkında geri itiyorum benim iş).

Geliştiricilerin kendilerini rahat ettiren her şeyi yapmasına izin verin. Rahat bir geliştirici, rahatsız edici olandan daha üretkendir. Ve eğer birisi üretken DEĞİLSE ve araçlarla yerel olarak uğraştığından şüpheleniyorsanız, yeni kurallar yapmak için iyi bir zaman değil, eğitim için bir fırsattır.


1
Bu nasıl yardımcı olur? Soru hala var olacaktı, sadece yerel DVCS deposundaki hangi şubenin hangi çalışma alanından ziyade bahsediyorduk.
Jon Hopkins

Aletlerini varsaymayın - ayrıca eksik olabilecek araçları en iyi şekilde nasıl kullanacağını takdir etmek. Bazıları için belli olanın başkalarına gösterilmesi gerekir. Kaynak ağacın çok sayıda kopyasının anti-paterni birkaç kez gördüğüm desen. Evet, DVCS yardımcı olabilir - ancak bu bağlamda hala doğru dalı tanımlamak ve - daha ileri gitmek istiyorsak - bu Devam Eden İşler dallarını kullanılabilir hale getirmekle ilgili bir sorunumuz var. @Jon yerel DVCS otomatik olarak kullanıcının deposunun "yedeğine" geçmelidir. En azından sorunu kutusundan çıkarırsa.
Murph

@Jon - Sanırım asıl nokta, çeşitli dalları, sadece dosyaları saptırmak dizinleri dağınık değil, içine birleştirme işlevselliği olacak bir şey olurdu. Ayrıca, onu almak ve DVCS'ye devam etmek bir eğitim fırsatı olurdu.
Dan Ray

1
@Dan - Ama bu dallardan bazıları çıkmaz - kavramın kanıtı, birleştirmek istemediğiniz çeşitli hata ayıklama kodu olan şeyler, eski sürümler. Birleştirme işlevine sahip olmanız, birleştirmeniz gerekenleri bilmediğinizde yardımcı olmaz.
Jon Hopkins

@Jon - Sanırım bu doğru. Belki de ortalığı karıştırmaya kararlı birinden kurtulmak mümkün değildir.
Dan Ray

2

Eski iş yerimde, hata takibimizdeki her görevin kaynak kontrolünde kendi şubesine sahip olduğu bir sistemimiz vardı. Çoğu zaman, bir hata / görevin bir geliştirici tarafından ezildiği anlaşıldı, böylece kırık kodun kaynak kontrolüne kontrol edilmesine izin verildi.

Kod, geliştirme dalında kararlı olduğu bir duruma geldiğinde, entegre edeceğiniz daldan kodu sürükleyerek bir rebase yapıldı. Bu birleştirmeyi test ettikten sonra, kodu entegrasyon şubesine teslim etme vakası olacaktır - şubenizde birleştirme işlemini zaten yaptığınız için birleştirme gerektirmez.

Bu şekilde, geliştiricilerin sorununu bozulan kodu işlemekten endişe ederek kurtarırsınız - ve geceleri ofisten ayrılmadan önce kodu kontrol etmek için süper kabul edilebilir hale getirmek için sosyal politikayı uygulamaya başlayabilirsiniz - güzel ve güvenli.


2

Gelen bu belirli bir durum çağrısı evde kişi, onun hasta olduğunu şüphe olmadığını çok açık hale ama başka birisi var işine devam ve en son malzeme ve ne durumda nerede sormak gerekir.

O zaman buradan ne yapacağınızı düşünmelisiniz. Sorun insanların çok nadiren check-in yapması ise, insanların birbirlerini rahatsız etmeden dallarda çalışmasına izin veren dağıtılmış bir kaynak kontrol sistemi kullanmayı düşünün.

Sorun, makinelerinde birden fazla çalışma alanına sahip geliştiricilerin hoşlanmamasıdır, o zaman üstesinden gelin. Çalışma tarzı bireyseldir ve kaynak deposu kuralları ile iyi çalıştıkları sürece temelde sistemlerinden uzak durmalısınız. Şahsen, farklı projeler için yeni bir kopyayı çok sık kontrol ediyorum ve arada bir temizliyoruz.

Sorun geliştiricinizin ne yaptığını bilmiyorsanız, sorun teknik değil politiktir ve yönetim tarzınızı değiştirmeniz gerekir. Geliştiricilerin, mikro yönetimi çok nadiren seven ve yetki verdiğiniz personel olduğunu unutmayın . Aksi takdirde en yetenekli kişileri uzaklaştıracaksınız.

Bu nedenle, ortak kaynak deposuyla çalışmanın daha iyi bir yolunu teşvik etmenizi öneririm - insanların şubelerde çalışmasının iyi olduğunu ve yerel kopyalarını ana depoya günlük olarak senkronize ettikleri sürece (genellikle her zaman bir dalda geliştirme çalışmaları yapacak, bu başkalarını etkilemeyecektir).


1
Soruda, kişiye ulaşılamayacağını varsaymak için özellikle söyledim.
Jon Hopkins

@Jon, bu durumda bitmemiş işini kaybettiğini düşünün, başka bir programcıya atayın ve bunun neden ilk başta olduğunu düşünmeye başlayın.

Orada mantıklı bir tutarsızlık var - "geliştiricinizin ne yaptığını bilmiyorsunuz" vs "delege etmek zorundasınız", yani ne yaptığını biliyorsunuz ama muhtemelen nasıl yapmıyorsunuz - bu da neden koda girmeniz gerektiğidir ... (evet, iletişim bunu çözmek için yardımcı olabilir, ancak bir sorunu çözmek için geliştiricilerinize güveniyorsanız ve bunun ufacık bir sorunu varsa - belirli bir geliştirici için - o zaman "bunu düzelt, hoşçakalın!" gerekli).
Murph

@Murph, sonra "sık sık - bir dalda taahhüt" kuralını uygulamak ve en azından günlük merkeze itmek.

1

Peki böyle durumları nasıl ele alırsınız?

Bu sorunu, kişisel kararsız dalları destekleyen bir kaynak kontrol sistemi ile ve sık taahhütleri koruyarak çözebilirsiniz. Bir problemin tamamı çözüldüğünde bir taahhüt gelmek zorunda değildir. Kaynak kontrolünden her faydalandığınızda gelmelidir. Günün sonu, değişikliklerin nerede yapıldığını görebilmeniz, yedekleyebilmeniz ve gelecekteki kendinize veya başkalarına açıklayabilmeniz için bir taahhüdün gerçekleşmesi gereken birçok noktadan biridir.

Veya geliştiricilerden bu alandaki standartlara uymalarını mı istiyorsunuz - belirli dizinlerin kullanımı, standartları adlandırma, bir wiki ile ilgili notlar veya herhangi bir şey?

Kurallara işaret eden ancak bir standardı belirtmeyen muazzam bir ortam yapılandırma belgesine sahibiz. Standartlar üretim kodu ve ortamları içindir. Bununla birlikte, geliştirme araçlarımızın çoğu sözleşmeleri destekleyecek şekilde düzenlenmiştir ve çoğu geliştirici trendi yakalamak için çaba harcamamaktadır.

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.