İnsanların bisikletleri durdurmalarını (önemsizliklere odaklanma) nasıl sağlayabilirim?


139

Diğer ekiplere yeni bir kod temeli öğretmekle görevlendirildim, ancak bir sorunla karşılaşmaya devam ediyorum. Aslında insanlarla kod üzerinden yürümek gitmek her çaba tümüyle bir devolves önce, çok uzak alamadım bikeshedding (bir kuruluşun üyesi önemsiz konulara orantısız ağırlık vererek) egzersiz. Kod tabanını bilmediklerinden, ancak geliştirmeye yardımcı olmaları gerektiğini düşündükleri için anlayabilecekleri şeylere odaklanırlar :

Why is that named that? (Neden adını açıklamak için 2 dakika, yeni bir isim tartışırken 10+ dakika)

Why is that an abstract base class rather than an interface? (2 dakika açıklamak, bu kararın göreceli değerlerini tartışmak 10 + dakika)

...ve bunun gibi. Şimdi, beni yanlış anlamayın - iyi isimler ve iyi, tutarlı tasarım önemlidir ama biz kod aslında neyi tartışmaya asla yapar sistem herhangi bir anlamlı şekilde tasarlanmıştır ya da nasıl. İnsanları bu teğetlerden uzaklaştırmak için bazı toplantılara atıfta bulundum, ancak onlar gittiler - evcil hayvanlarının önemsizliği giderildiğinde kodun ne olacağı / olması gerektiğine dikkatleri dağıldı ve büyük resmi özlediler.

Bu yüzden daha sonra tekrar deneyelim (veya kod tabanının farklı bir kısmını kullanarak) ve insanlar bisiklet sürmenin etkisini aşmak için yeterli bilgi alamadıklarından tekrar ediyor.

Daha küçük gruplar, daha büyük gruplar, kodlar, beyaz tahtalar, visio diyagramlar, metnin dev duvarları, sadece ölüme kavuşmalarını sağladım, argümanları hemen keserek bıraktım ... bazıları diğerlerinden daha çok yardımcı oldu, ama hiçbir şey işe yaramadı . Kahretsin, ekibimden başkalarının açıklamasını bile denedim çünkü olayları açıklamakta kötü olduğumu düşündüm.

Öyleyse, diğer programcıları önemsizliğe dayanmayı bırakıp tasarıma anlamlı bir şekilde katkıda bulunabilecekleri kadar nasıl eğitiyorsunuz?


44
Söylemekten nefret ediyorum, ama sanırım bu fenomen, kod üssünde yeni başlayanlardan daha fazla bir sorun olduğunu gösteriyor.
Nicole

30
Sonuna kadar soruları ertelemeyi denedin mi? "Birkaç dakika daha bekle ve sonunda açıklayabilirim" ve sonra sadece içeriğin geri kalanını iterek. Muhtemelen bu sorulardan bazıları kendilerine cevap verecektir
jozefg

21
@NickC, kodun iyi olup olmadığına, onu nasıl anladığına, net bir büyük resmini almayı nasıl başardığına inanıyorum. Başlangıçta büyük bir resim elde etmek için zaman ayırmadan baştan sona küçük ayrıntılarla zaman harcamak kötüdür ve asla bu olası kötü kodu düzeltmede yardımcı olmaz.
Shivan Dragon

11
Birine kod temeli öğretmenin amacı nedir? Belki bu hedefi daha net bir şekilde ve neden önemli olduğunu anlatabilirsiniz, böylece bir nesne için yeni bir isim tartışmanın bu hedeften rahatsız olduğunu ve başka bir toplantı için ayrılmasının gerektiğini görebilirler.
Lars

56
Bu cevaplarda iyi tavsiyeler var. Kısaca şunu eklerdim: müttefikiniz olarak "süreç" kullanmayı düşünün. Birisi "bu tasarımın en düşük seviyede olduğunu" söylediğinde, doğru cevap "mükemmel" demiştir, bunu fark ettiğinize sevindim. Bu toplantıdan sonra lütfen izleme veritabanına sorunun ayrıntılı bir açıklaması ve önerilen düzeltmenizle ilgili bir hata girin. Triyaj ekibi ., teklifinizi incelemek çalışma öğelerinin kalanı karşı öncelik ve tüm yüksek öncelikli öğeleri sabit bir kez bunu düzeltmek için uygun bir geliştirici atar üzerine ... Hareketli "
Eric Lippert

Yanıtlar:


159

Sanırım problem şu: "Diğer ekiplere yeni bir kod temeli öğretmekle görevlendirildim".

Yanlış bir iş verildi, ya da verilmiş olduğun işi yanlış yorumladın.

Kod düzeyinde sunarak, kod düzeyinde düşünmeye davet edersiniz.

Sistem düzeyinde başlayın ve yapılan tasarım ve tasarım seçeneklerini sunun. Uzun tartışmalara izin verme: siz incelemiyorsunuz. Sorulara izin verin: sistemi anlamalarını istersiniz. Eğer insanlar "farklı yapsaydı", tamam. Belki katılıyorum. Ya da değil. Ama devam et. Şu an böyle.

Kod seviyesine ulaştığınızda, bunları sistem terminolojisiyle birlikte hazırlamış olacaksınız. İsimler (sanırım) mantıklı olacak. Yukarıdakiyle aynı: uzun tartışma yok, anlama soruları. Devam et.

Şimdi çalışmak için bazı sınıf problemleri ayarlayın. X geliştirmesini nasıl yapabiliriz? Sistem tasarımının "akışına uygun" önemsiz bir şey seçin ve neyi değiştireceğinizi araştırın. Şimdi sistemin gerekçesini alıyor olmalılar. Yanlış yapılırsa sistemi kırabilecek başka bir donanım seçin ve nasıl doğru yapılabileceğini gösterin. Bu onlar için bir Ah Ha anı olmalı . Bazıları bile seni yenebilir!

Bu, özellikle de yaptığınız yanlış başlangıçtan sonra zor bir iş. Zaten çok zaman ve emek harcadığınıza benziyor ve belki de onlara karşı hissettiğim bir miktar benden söz ediyor. 'Mücadele et ve tekrar başla. Onların akıllı insanlar olduğunu varsayıyoruz. Onlara daha üst düzeyde düşünme mücadelesi verin. Ve yeni oturumlar için ekiplerin farklı kesitlerini seçerek zaten mevcut olan grupları ayırın.


3
Öncelikle biraz yüksek seviyeli tasarım eğitimi verdim, aynı zamanda bazı yeni / yabancı teknolojiler (IoC kapları, dinamikleri) hazırlanmasına yardımcı oldum. Bu eğitim oldukça iyi geçti. Yükseltmek için iyi bir nokta.
Telastyn

"Psişik saldırılara" sahip kişilerle savaşmaya çalışmayan +1, "kapalı konudaki sorularınıza ve zamanda yanıtlayacağım!" ama daha ziyade bakış açısını değiştirmek
Buksy

3
Harika cevap Özellikle odak noktasını 'iç bileşenlerinin isimlendirilmesi' yerine 'ne yaptığını' öneriyorum.
Daniel Hollinrake

66

"Onları park et". Dersin başında, neyi tartışacağınızı açıklayın ve Neyin kapalı olduğunu düşünün. Açıkça OT olan bir soru sorulursa, bunu söyleyin ve devam edin. Geri dönerlerse soruyu daha sonra tartışmak ve devam etmek için beyaz tahtaya yazın (Bu kritik öneme sahiptir). Dersin sonunda, onlar değil, kendi zamanlarında, bu soruların ne kadar çabuk çözüldüğünü izleyin.


8
+1 Bu şekilde insanlar görmezden gelinmediklerini düşünüyorlar.
andy256 21:13

Buna katılıyorum. Sorun çok uzun süre alakasız şeyleri tartışıyorsa, o zaman alakasız şeyleri tartışmayın ...
Chris

7
Belki bir beyaz tahtaya OT soruları yazarak herkesin zamanını almak yerine, soru sorucundan not almasını isteyin (belirlenmiş bir wiki sayfasında, nerede olursa olsun JIRA sorunu).
Lars

14
Sanırım, sorularını beyaz tahtaya yazmak için bir dakikanızı ayırmanın fiziksel eylemi, soru sorucuyu soruya ertelediğinizi açıkça gösterir (bunu görmezden gelmek yerine) ve tüm soruları soran ve böylece geciktiren izleyicilere gösterir. ilerleme.
JBRWilkinson 21:13

1
@LarsH - kesinlikle. Beyaz tahtaya koyarak, herkesin görmesi için konuşma durdu. Tekrar gelirse, eğitmen soruyu işaret eder ve “Geri döneceğimize söz veriyorum” der.
mattnz 23:13

21

Beklentileri doğru bir şekilde belirleyin ve dürüst, açık ve açık olun.

Hedeflerinizin açık ve şeffaf olduğundan emin olun.

Tartışmalara andy256 (+1) tarafından desteklendiği üzere üst düzey görüşlerle başlayın, ancak aynı zamanda hedeflerinizi de eklediğinizden emin olun, örneğin

“... bu konuya baktığımızda, x, y ve z'ye odaklanmadığımızdan emin olalım. A, b, c veya önemsiz detaylar gibi uygulama ayrıntılarına bakmadığımızdan da emin olun. j, k, l gibi. Kodda çok fazla ayrıntı bulunmasının zorunlu olduğunu biliyorum ve ele alınabilecek, geliştirilebilecek ya da daha standart hale getirilebilecek olan şeyleri ayrıntılarıyla belirtin, ancak önce gerçekten daha yüksek bir düzeyde neyin başardığını kontrol etmeye çalışın. "


İlk 2 cümle için +1. Ancak, insanlara bir şey düşünmemelerini söylemek, düşünmelerini engellemenin iyi bir yolu değildir. “Ne yaparsan yap, pembe tek boynuzlu atlar hakkında düşünme.” Pembe tek boynuzlu atlardan bahsetmeden önce, onları düşünüyor muydun? Muhtemelen değil. Bunun yerine "Haydi hayali hayvanlar tarafından rahatsız edilmeyip Avustralya hayvanlarına odaklanmayalım" demişsem, koalas ve kanguru size olmuş olabilir, ama muhtemelen pembe tekboynuzlar değil.
Michael Shaw,

İyi bir nokta. Ancak asıl mesele insanların düşünmeyi (ve söylemediğini) durdurmak değil, insanların katiller ve moral emicilerle buluşan uzun süren konuşmalara girmelerini engellemektir. İnsanlar her zaman söylenmemiş şeyleri düşüneceklerdir. Bu iyi. Profesyonel bir iş durumunda bazı şeyler söylenir ve çoğu söylenmez.
Michael Durrant,

17

Öyleyse, diğer programcıları önemsizliğe dayanmayı bırakıp tasarıma anlamlı bir şekilde katkıda bulunabilecekleri kadar nasıl eğitiyorsunuz?

İlk olarak, endişelerini "önemsizlikler" veya "bisiklet sürmek" olarak düşünmeyin. Bunlar yargılayıcı sözler ve hakaret ediyorlar. Kaygıları geçerlidir. Şu anda önemli değiller.

İyi bir toplantının anahtarı herkesin bilmesidir:

  • neden toplantı yapıyorsun
  • Bundan kurtulmayı umduğun şey
  • ne kadar sürmeli

Bu şeyleri açıkça ve açıkça belirtin ve hedefleri açıklayın.

Örneğin, şöyle diyebilirsiniz: "Bu toplantı, size Foo paketini ve raporlama modülümüzde nasıl kullanıldığını tanımak için. Amacım, Bar Reports projesi hakkında çalışabilecek Foo hakkında yeterince bilgi sahibi olmanız. gelecek hafta. Gelecek 90 dakika içinde yapılmamızı istiyorum. "

Sonra, bir konu ortaya çıktığında, şöyle olabilir:

Yeni insan: "FooWidget neden cephe modeli olarak uygulanmaktadır?"

Siz: "Eh, sanırım bunun nedeni (tasarım kararının kısa açıklaması)" veya "Bilmiyorum".

Cevap yeterliyse, bu harika. Değilse ve devam eder:

NP: "Singleton olarak daha iyi olacağını düşünmüyor musun?"

Siz: "Gerçekten düşünmedim, ama FooWidget'in nasıl çalıştığını açıklayarak ilerlemeye devam etmek isterim."

NP: "Ama eğer bir singleton olarak yapılırsa, biz yapabiliriz ..."

Siz: "Böldüğüm için özür dilerim, ancak FooWidget’ın nasıl çalıştığına odaklanmam gerekiyor. Bu toplantı yalnızca saat 11: 00’e kadar planlanmış ve baş etmek için çok şeyimiz var. Tasarım tartışması başka bir zaman beklemek zorunda kalacak ."

Bunu bir ya da iki kez geçtikten sonra, "Bu toplantı kapsamı dışındadır" kısmına kısayol atabilirsiniz.

Eğer unutmayın değil "Fark etmez" veya "Kes sesini" ya veya "Bu endişelenecek aptalsa" diyerek "Sen girişi olmayacak kadar yeniyiz." Sadece toplantıya ne yapılması gerektiği ve ilgili zamana odaklanacaksınız.


1
Sunum yapan kişinin geri bildirim ile gerçekten ilgilenmediğini söylemek kolaydır. Bu toplantılar hızlı gidiyor. Kimsenin umrunda değil.
chux

4

Bazı organizasyonlarda bunu başaramayacaksınız. Birçok kurum, politik tartışmalar ve merdiven çıkma konusunda entelektüel kapasite, çalışkanlık ve sadakatten daha fazla değer veriyor. Ve neden onlar olmasın? Merdiven tırmanma, insanları iktidar pozisyonlarına sokar, kişisel yaşamlarını daha isteğe bağlı gelirle geliştirmelerini sağlar ve hiçbir zaman eskimez hale gelir.

Bu güç çekişmeyi, gerçek problem çözme, soyut düşünme ve daha sonra çıkacak sonuçlardan sorumlu olabilecek zorlu meseleler hakkında karar verme ile zıtlaştırın ve birçok çalışan, mümkün olduğu kadar çok bisiklet almaya çalışırken ağır basar.

Önerdiğim tek tavsiye, kuruluşunuz bağlamında, mümkünse, bu katılımcıların kişisel kaderinin çözmeye çalıştığınız asıl soruna yönelik anlamalarına, katkılarına ve çabalarına bağlı olduğunu açıkça belirtmenizdir . Eğer bu-kodlayıcı-temelinde ifade edilen kurumsal mimarlık ve bunun başarısızlıklarıysa, işte budur. Onlara bu konuda önemli ve anlamlı girdiler sağlamaları gerektiğini açıkça belirtin . Başka bir rastlantısallık değil, bu kıdemli bir başkasının ya da başkalarının evcil hayvanlarına bakar ve söz konusu üst düzey birisiyle anlaşarak onlara güzel bir browni puanı kazandırır.

Bunu yapmak çok zordur, çünkü kıdemli birisi genellikle teknolojinin devam ettiğini anlamaz, ilgilenmez ve ne yazık ki ham maddeleri kontrol eder: çalışan zamanı; kiralamak ve ateş etmek, konferans salonu politikaları, promosyonlar vb. ciddi şekilde, vb.


3

Bisiklete binme dediğiniz şey, birinin düşünce akışını kendimize dönüştürmek olarak adlandırılır. İsimleri, kalıpları tartışarak, kodu kendi terimleriyle anlarlar ve bunu engellemenin bir yolu yoktur, buna ihtiyaç vardır.

Ayrıca, kod kodlarının tamamı için çok detaylı bir adım atmaya gerek yok çünkü detaylar üzerinde çalışılmadan çok önce unutulacak.

Bu iki düşünceye dayanarak, kod tabanını birimlere ayırmayı ve öğrenicileri iki kişilik gruplara ayırmayı öneriyorum. Her bir kod birimi için, her grubun , kodun diğerlerine 5-10 dakikalık bir adım atması için 25 dakikalık ( tabii ki LOC'ye bağlı olarak ) olacağı söylenebilir. Üç dakika soru ve sonraki birim ile tekrarlayın. Açıklamak anahtar kelimedir; diğerlerinin hepsini anlamalarını sağlamak zorundadırlar.

Sadece zamanı zorlamak için orada olacaktınız, konu dışı ve ünitenin yeterince anlaşıldığını kontrol etmek. Öğrenimlerinin aktörleri olacaklar ve diğerlerine bisiklet sürmekten daha çok açıklamaya odaklanacaklar.

Kod biriminden kopyalanacak ve ekip tarafından paylaşılan belgelerde tutulacak üst düzey elle çizilmiş bir şema isteyebilirsiniz, böylece gelecekte atıfta bulunacak somut bir şeyleri olabilir. Bu da hatıraları tutturmak için iyi.

Üzgünüm, daha önce denediysen ...


1

İnsanların bireysel olarak baktıkları ön dersler çıkarmayı denediniz mi?

İçeriği, kodun nasıl çalıştığını ya da temelde onlara kendi başlarına bakmaları gereken bir formatta öğretmek istediklerinizi açıklayan kısa videolar veya sunumlar yapın ve öğretmeye çalıştığınız bilgileri öğrenin.

Ardından, içerikle ilgili sorunları tartışmak için ekip tabanlı oturumları kullanırsınız. Ekip oturumlarının yalnızca içerikle ilgili sorunları tartışmak ve gidermek için olduğunu açıkça belirtmeniz gerekir.

Dersleri insanlara bireysel olarak verirseniz, tek bir maddenin grubun sesi haline gelebileceği ve derslerin fiili amacından uzaklaştığı diğer sosyal sorunlardan kaçınabilirsiniz.


13
Nooo ......., videolar değil ..... "Power By Death Point" daha da kötü bir kader tarafından yerini aldı ...... 30 okunup .... saniyede anlaşılabilir açıklamak için 10 dakika sürebilir daha fazla video
mattnz

6
+1 mattnz Tek yönlü etkileşimlerle iletişim sorunlarının iyileştirilmesi muhtemel değildir.
Michael Durrant

1
Videoda olsam bile duraklatılmak istemiyorum! Hangi video formatı / codec duraklatmayı devre dışı bırakır? :) :) :)
Kaz

1

Onlara ilk önce kod temeli tasarımını öğretmeyi deneyin, belirli örneklere bakmadan önce, mimari boyunca onları yönlendirin. Bu şekilde baktığınız kod örneklerinin büyük resme nasıl sığdığını görebilirler. Eğitim programınızın nasıl yapılandırıldığını düşünün. Ve tasarımın arkasındaki iş motivasyonunu da dahil edin.

Birkaç yıl boyunca diğer geliştiricileri eğiterek geçirdim ve sistemin nasıl bir araya getirildiğini göstermeden önce asla koda girmedim. Sonra onları çerçevede kod çalışmaları yaparken aldığımda sorular yapılandırıldı ve konuyla ilgiliydi.

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.