Tek geliştirici olarak çalışmak: kodu incelemek


39

Ben başka seçeneği aklı en iyi uygulamaları tartışırken ve benzeri ile beyin fırtınası fikirleri birine sahip kontrol başıma ama işe ve benim çalışma baktı almak için yeterli bir çözüm bulamıyor.

Jeff Atwood'un makalesinde bir cevap alabileceğimi düşündüm : Programlamada, Bir Konuyla İlgili En İyi Bulanlar: Birincisi , konuyu bulabileceğim en iyi şeydi , ama sadece sorumu tekrarladım.

Bunun gibi Stack Exchange sitelerinin ve Kod İncelemenin bariz bir potansiyel cevap olduğunu biliyorum , ancak çoğu kişinin takdir edeceği gibi, FAR idealdir:

Tüm tuzakları listelemesem de, çoğu zaman, bir soruyu formüle etmek ve kendi kendine yeten bir soruna kutulamak çoğu zaman o kadar çok iş gerektiriyor ki, yeterince hazırladığınızda, kendi sorunuzu daha fazla cevaplamışsınızdır. Aksi takdirde alacağı zaman. Ayrıca, iyi tanımlanmış bir soru sormak için ayrıntıları gizlemek, hiç kimsenin düşünmediğiniz sorunları tespit etme ihtimalini ortadan kaldırır. Ayrıca, parmağımı tam olarak tutamazken, özgür konuşmanın yanıtı, düşünebildiğim herhangi bir metinsel internet tartışmasıyla eşleştirilemiyor. Son fakat en az değil, tüm sebeplerimi dünyanın sonsuzluğa bakması için tüm projemi göndermek istemiyorum.

Koduma bakmak için bir danışman ödemekten başka cevap var mı?


3
Benim de bu problemim var (yine de eğlenceli projeler için), sadece koduma bakmak isteyen birkaç yakın programcı arkadaşım olduğu için şanslıyım.
Austin Hyde,

23
Her zaman kendinizle konuşabilirsiniz - bu özellikle delilik kontrolleri için iyidir :-)
Danny Varod 14:11

4
Bunu karşılayabiliyorsanız, bu, bir iş parkında ofis / masa kiralamanın iyi bir nedenidir (ideal olarak BT çalışanlarının kümelendiği yerde). Bir ofiste çalışan yalnız bir programcı iken komşu ofislerimdeki BT insanlarıyla çok iyi sohbetler yaptım.
JW01

6
Tek başına çalışmak, salaklarla çalışmaktan daha iyi olabilir.
İş

2
Gerçekten bir çözüm değil, ancak SO sohbeti veya uygun bir IRC kanalına takılabilir; bu, çalışma zorluğunun bir kısmını kendiniz hafifletebilir.
Tikhon Jelvis,

Yanıtlar:


36

Ayakkabılarında bulundum ve kolay bir çözüm olduğunu sanmıyorum. Kodunuza bakmak için bir danışmana para harcamak için iyi bir yol değil. Eğer probleminiz yalnız hissediyorsanız ve programlama hakkında konuşacak hiç kimseniz yoksa, o zaman size yardımcı olamam ama kodunuzun kalitesini yükseltmekle ilgileniyorsanız, yapılacak en iyi şey ayarlamaktır. kenara ve bir hafta kadar içinde geri dönün. Eğer kod gerçekten kötüyse, açık olacaktır çünkü herhangi bir anlam ifade edemezsiniz ve mantıklı olmak için yeniden düzenlemeye başlayabilirsiniz. Bu işlemin birkaç tekrarından sonra, kodun anlaşılmasını kolaylaştıran kod kalıplarını fark etmeye başlayacaksınız ve kod kaliteniz artacaktır.


İyi bir! ... 15
Marjan Venema

2
Teoride bu işe yarayabilir, pratikte Cehennemde YOK YOK , işe yararsa 2 hafta önce yazdığı koda tekrar bakacak. Muhtemelen .. Muhtemelen .. “Güzel” olmak için tek başına zaman harcamak için çalışırsa, zaman kaybı olur, ne zaman ve tekrar dokunulduğunda yapılması gerekir.
Thomas Bonini

3
@Krelp: Her zaman geçmiş koda bakarım ve özellikleri ekleyebilmenizin ve genel olarak önceden yazılmış koda bakmadan yazılım bulundurmanızın bir yolu yoktur. Mükemmel bir mimari diye bir şey yoktur ve sızan soyutlamalar istisnadan ziyade kuraldır, bu nedenle önceden yazılmış kodlara bakmak kaçınılmazdır. Maraton kodlayıcıların programlama çevrelerinde putlaştırıldığını biliyorum ama maraton kodlaması hızlı bir şekilde tükenmişlik ve sahipsiz projelere yol açıyor, böylece kod kalitesini artırmak ve molaları geri almak aynı zamanda aklı başında tutmamı sağlıyor.
davidk01

@david: şu anda gerek olmasa bile, belirli bir süre sonra koda bakmaktan bahsettiniz. Başlangıçta koda sadece yeni özellikler eklemek için yapmak zorunda kaldığınızda geriye bakmak istemedi .. Öyleyse - söylediklerinize göre - en sonunda tüm eski koda tekrar bakmak zorundasınız, neden yapmıyorsunuz? Yani, belli bir süre sonra yerine ilgili olan bir anda?
Thomas Bonini

3
@Krelp: Yeteneklerinizden yeterince eminseniz, o zaman hemen devam edin ve sadece kendiniz gibi hissettiğinizde çalışma koduna bakın, ancak daha yeni başlıyorsanız ve kodunuzu ne kadar iyi yapılandırdığınızdan emin değilseniz, o zaman sürekli göz atın Birkaç hafta önce yazdıklarınızı tekrar gözden geçirmek ve yeniden düzenlemek, doğru kod yapısını öğrenmek için gerçekten iyi bir yoldur. Tavsiyem, önceden yazılmış kodun yeniden yapılandırılmasının daha az ve gerekli hale geldiği noktaya gelmek ve geliştirmek isteyen insanlar içindi; çünkü ilk sürüm uygun genişletilebilir yapıya sahipti. Tavsiyemi görmezden gelmekten daha çok hoş geldiniz.
davidk01

17

Koduma bakmak için bir danışman ödemekten başka cevap var mı?

Hayır.

Tavsiyem yerel bir geliştirici \ kullanıcı grubuna katılmak ve fikirlerinizi başkalarıyla konuşmak. Tasarımınız hakkında konuşun. Diğer bazı problemlere nasıl yaklaştığını sorun.

Tasarımınızı doğrularlarsa, kodunuza bakmadan bile, bu yeterince iyi olmalıdır.


4
Birçok profesyonel yazar bunu yapar.
JeffO

10

Geri bildirim sağlamaya yardımcı olacak test odaklı geliştirme gibi öz kontrol teknikleri vardır. Bunu yapmak zorlaştığında, mimarinizin büyük olasılıkla yetersiz kaldığını biliyorsunuz.

Bir soruyu formüle etmek ve kendi kendine yeten bir soruna kutulamak çoğu zaman o kadar çok iş gerektirir ki, sorunuzu yeterince hazırladığınızda, kendi sorunuzu aksi takdirde alacağından daha fazla sürede cevaplamışsınızdır.

Sorun çözüldü. İyileştirmek için her bir kod satırı hakkında harici bir geri bildirim almanıza gerek yoktur, sadece yoldaki ana çatallarda iyi bir örnekleme ve aradaki noktalarda kendi kendini kontrol etme konusuna dikkat edin.

Bir takımda çalışan biriyle aynı sürede tek başına aynı kalitede çalışmayı sürdürebileceğiniz fikrini yenmelisiniz. İnsanların takım halinde çalışmasının bir nedeni var. İyi haber şu ki, tasarım kararları konusunda ihtilafınız yok. Kötü haber şu ki, tasarım kararları konusunda ihtilafınız yok. Umarım kaliteyi korumak için harcadığınız fazladan zaman, yalnız çalışmanın avantajları ile biraz dengelenir.


TDD'nin burada nasıl bir cevap olduğunu göremiyorum.
Aaron,

1
@Aaronaught Ben TS ile aynı teknedeyim ve size test testleri (ya TDD'deki koddan önce ya da ondan sonra) kodunuzun aklı başında olup olmadığını kontrol etmenin yoludur. Eğer test edemezsen, kötü.
stijn

1
@ stijn: Kötü kodun sınama yazmak için daha zor olduğu doğru olabilir, ancak hiçbir zaman imkansız değildir. İyi değerin iyi testlere yol açtığı şüpheli iddiasını gerçek değerle kabul etsek bile, ters iddia hala kanıtlanmamıştır; Başarılı bir test, kodun herhangi bir makul kalitede olduğu anlamına gelmez. Aslında, TDD'nin önceliği - "kırmızı, yeşil, refactor" - esasen testi geçen özensiz kodların yazılması ve daha sonra kaliteyi arttırmak için yeniden düzenlenmesi anlamına gelir. sadece testler ile.
Aarona

2
@Aaronaught: geçerli puanlar veriyorsunuz, ama yine de, testlerin kod uygunluğunu kontrol etmek için çok iyi bir yol olduğunu düşünüyorum (aslında tek yol olmasa da); Tecrübe beni kanıtladı, özellikle de SRP'nin şiddetli bir şekilde ihlal edildiğini görmek yararlı.
stijn

@Mark: Bu çok güzel, ama tüm bu fıkralar "2 haftada 50 kilo verdim" reklam iddiasından bile daha düşük, çünkü konuşulan şey aslında kontrol edilmiş koşullar altında bile göz önüne alınmadan ölçülmedi bile . Evet, TDD'nin salım öncesi kusurları azalttığına dair kanıtlar var ve bu harika bir şey; kod incelemeleri tamamen farklı bir sorunu çözüyor ve TDD'nin de aynı sorunu çözdüğünü varsaymak için bir neden yok. “Eski okul” ünite testleri muhtemelen bunun için daha iyidir, çünkü test grupları kendileri yerine bireysel sınıflara test edilebilirlik kısıtlamaları koyarlar.
Aarona

6

Konferanslarda ve yerel kullanıcı gruplarında mümkün olduğu kadar ağ kurmayı öneriyorum. Sanitize edilmiş kodları çeken birçok geliştiricinin, e-posta veya im aracılığıyla ileri geri geldiğini biliyorum; Hayır, yüz yüze konuşma yapmak değildir ve evet, bazen kodu dezenfekte etmek acı vericidir, ancak zaman zaman 20 anlık mesajlaşma kodu incelemesi özellikle ikinci bir çift göz için çaresiz olduğunuzda oldukça yararlı olabilir.


4

Benzer bir durumdayım ve ağır sorular hakkında geri bildirim almak için büyük ölçüde Stack Overflow'a güveniyorum. Ayrıca, sorunun cevabının sıklıkla belirginleştiği problemin bir tanımını yazmak zorunda olduğum için de buluyorum. En iyi uygulamalar açısından, bir .NET geliştiricisiyim ve ReSharper'ı kullanıyorum, ki kod yazmam için iyi uygulama alternatifleri önerileri sunacağım (ki bu sadece bazen görmezden geliyorum - biraz sersemletici olabilir). Diğer bir kullanışlı araç da statik kod analizi yapacak ve kendi kurallarına uymayan sorunları vurgulayan FxCop'tur.

Aksi halde, mevcut uygulamalarla ilgili bilgileri okumak ve güncel kalmak size kalmıştır. .Net dünyasındaki yenilikler ve yenilikler ile ilgili bağlantılar için Alvin Ashcraft's Morning Dew'i seviyorum .


4

Küçük bir kullanıcı grubu oluşturmaya (veya bulmaya) çalışmayı öneririm. Kodunuzu kullanılabilir duruma getirin ve herkesin çalışmasını sağlamalarını sağlayın - günde yarım saat veya daha fazla.


3

Tecrübelerimin yapıcı bir geri bildirimi , gelişiminizin ilk yıllarında, deneyimli bir geliştiricinin temeli oluşturmak için kodunuzu incelemesi zorunlu olmasa da, çok önemli olacağı yönündedir. Deneyiminiz gerçekleştiğinde, @ davidk01 tarafından önerilen yaklaşımı uygulayabilirsiniz, yani kod kalitesini artırmak için kendi kodunuzu düzenli olarak gözden geçirin.


2

Durumunuzun ayrıntılarını bilmiyorum, ama şu an bulunduğum yerde stajyer olarak çalışmaktan ve bir şeyler öğrenmekten çok mutlu olan deneyim öğrencilerine çok açım var.

Onlarla başa çıkmak ve onlara bunu ve bunları öğretmek için fazladan iş gelebilir, ama ilk başladığımızda hepimiz oradaydık ve sanırım geri ödeme sırası biziz.

Onlar uzman değillerdir ve bazen sizi yanlış yönlendirebilirler, ancak genellikle her şeyle mücadele ederler ve fikirlerle doludurlar ve kodunuzun her detayını savunmanız gereken bir tartışma için mükemmeldirler.


2

Tüm tuzakları listelemesem de, çoğu zaman, bir soruyu formüle etmek ve kendi kendine yeten bir soruna kutulamak çoğu zaman o kadar çok iş gerektiriyor ki, yeterince hazırladığınızda, kendi sorunuzu daha fazla cevaplamışsınızdır. Aksi takdirde alacağı zaman.

Aynı şeyi, gönderdiğim soruların>% 75'inde yaşıyorum.

Ancak, bunu yapma zahmetine girmeyen bir argüman değildir. Bu etkili bir şekilde lastik ördek hata ayıklamasıdır. Sorunuza cevap verebileceğini düşündüğünüz soruların cevaplarını buluyorsunuz ; bu, sorunu farklı insanların bakış açısıyla düşündüğünüz anlamına gelir; bu, sorunu mümkün olan her yönden düşündüğünüz anlamına gelir; Bu kusur bulmak için en iyi yoldur.

En iyi ihtimalle, kesin olarak burada cevabı düşünemediğinizi kanıtladınız. En kötüsünde, kendi soruna cevap veriyorsun. Alıntılara dikkat et, çünkü bu hiç de fena değil. Belki biraz zaman verimsizdi, ancak sorunu yavaşça çözmek, sorunu çözmemeye karar vermekten daha iyidir . Sonunda sorunu çözme daha hızlı alacaksınız.

Konuşma konusu olan mesele:

Acemi bir geliştiriciyken, ASP.Net eror sayfasını birçok kez ele aldım . Sorunun ne olduğunu bulmak için Google’a mesaj atmam gerekiyordu. doğru çözümü bulmam birkaç saat alabilir. Temel olarak kitaptaki her hatayı yaptım ve daha sonra sorunları ayıklamak zorunda kalmanın sonuçlarını ele aldım.

Şimdi, bir hata ortaya çıktığında, soruna neyin neden olabileceğinin "olağan şüphelilerini" zaten biliyorum. Zihinsel "olağan şüpheliler" listem, kariyerim boyunca en çok yaşadığım sorunlara dayanıyor. İlk önce Googling saatlerinin verimsiz bacak işlerini yapmamış olsaydım, bu zihinsel listeyi asla yapmazdım . Ama şimdi o zihinsel listeye sahibim, sorun giderme konusunda oldukça hızlıyım.


Ayrıca, parmağımı tam olarak tutamazken, özgür konuşmanın yanıtı, düşünebildiğim herhangi bir metinsel internet tartışmasıyla eşleştirilemiyor.

Burada biraz aynı fikirde değilim. İnternet iletişiminin daha az duyarlı olduğu konusunda haklısın, ama (bence) bunun senin için kötü olduğunu düşünüyorum.

Yalnız bir geliştirici olarak, lastik ördek hata ayıklama güveniyor olacaksınız. RDD'nin çalışmasını sağlayan ana unsur , lastik ördeğin sizin için olabilecek soruları önceden tahmin etmenizdir . Belli ki lastik ördeğin gerçekte söylediklerine güvenemezsin.

Yavaş mesajlaşma sistemleriyle (StackOverflow'a gönderme veya mektup yazarak iletişim kurma) uğraşırken, ilk seferinde doğru yaptığınızdan emin olmak için doğal olarak teşvik edilirsiniz. Çünkü bir hatayı düzeltmeye ihtiyaç duymak, yavaş ve zorlu bir süreç olacaktır.
Karşılaştırma yapmak gerekirse, hızlı mesajlaşma sistemlerinin (sohbet, anlık mesajlaşma) hemen bir şeyi düzeltebileceğinizi düşünün . Bir şeyi hızlı bir şekilde düzeltme yeteneği, doğru olduğundan emin olmak için insanları daha az teşvik eder.

Bu noktada dört vaka:

  • Bir geliştirici olarak kendi kişisel analiz / yapılacaklar listemi oluştururken hala kalem ve kağıt kullanıyorum. Notlarımı yazarken varsayımları ve yanlışlıkları anlattığımı fark ettim, çünkü aklım "bunu daha sonra kolayca düzeltebileceğimi" düşünüyor. Bununla birlikte, kağıda yazdığınız bir şeyi düzeltmek zorunda kalmak can sıkıcıdır, satırları yazmanız ve çizgiler arasında yazmanız gerekir ve belge üzerinde çiziklerin olduğu zaman çok daha kötü görünür. Kağıda yazmak, yazmayı taahhüt etmeden önce kendimi kontrol etmemi sağlıyor . Bu, böcek üretecek kod bile yazmadan önce, birçok yanlış anlaşılmalara neden oluyor.
  • Büyükannem sekreterdi (daktilo yaşı). Resmi bir belgede bir yazım hatası yapmak, tüm sayfayı tekrar yazmak zorunda kalmak anlamına geliyordu. Teyzem sekreterdir (kelime işlemcisinin yaşı). Otomatik bir yazım denetleyicisine güvenebilir ve hatalar kolayca ve en az çabayla düzeltilebilir. Şaşırtıcı olmayan bir şekilde, büyükannem teyzeme kıyasla yazım hatalarını ve yazım hatalarını önemli ölçüde azaltır.
  • Kartuşlara yazdırılan eski video oyunları. Serbest bırakıldıktan sonra bir hatayı düzeltmek hemen hemen imkansızdı. Sen, bütün kartuşları yeniden yazdırmak tüm satıcıları onları dağıtmak ve gerekiyordu umut satıcıları nasılsa zaten oyunu aldım müşterileri ile temasa olabilir. Tonlarca paraya mal olacak (fiziksel üretim maliyetinin iki katı) ve hala bazı müşterilere ulaşamayacaktı. Şimdi, internet yamaları çağında, oyun geliştiricileri oyunlarını test etmeye önemli ölçüde daha az yatırım yaptıklarını gösterdiler, böylece piyasaya sürülen günlük hataları önleyebiliyorlardı, çünkü her müşteriye doğrudan bir düzeltme yapmak çok daha kolay. Hata yapmanın etkisi, olası tüm durumları test etmek zorunda kalmaya kıyasla, olaydan sonra bir avuç problemi çözmenin daha iyi olduğu bir noktaya indirgenmiştir. oluşabilecek hatalar.
  • Üçüncü kattaki dairede oturuyordum, asansör kullanmıyordum ve binamdan bir ya da iki sokağı sık sık park etmek zorunda kalıyordum. Arabamdan bir şey almayı unutmuşum. Şimdi, arabamın yanında, yanımda arabamla bir evde yaşıyorum. Her zaman arabamdan bir şeyler almayı unuttum .

Buradaki temel fikir, zorlu bir değişim sisteminin insanları doğru ve gerçeği kontrol edilen değiş tokuşlar yapmaya teşvik ettiğidir . Cezanın ciddiyeti (= zor düzeltme işlemi) size hata yapmamayı öğretir.


Ayrıca, iyi tanımlanmış bir soru sormak için ayrıntıları gizlemek, hiç kimsenin düşünmediğiniz sorunları tespit etme ihtimalini ortadan kaldırır.

Bir MCVE yaptığınızda, sadece onu yaratmamalı ve soruya göndermemelisiniz. Sorunu izole edebilmeniz için önce kendiniz için yapmalısınız . Ve sonra, sorunun artık azaltılamayacağını düşündüğünüzde ve nedenini hala göremiyorsunuz; Sonra StackOverflow için geçerli bir sorunuz var.

Konuşma konusu olan mesele:

Her zaman Sandbox adlı basit bir konsol uygulaması ile çalışan ikinci bir Visual Studio'ya sahibim. Ne zaman bir teknik sorunla karşılaştığımda, sorunlu kodu sanal alana kopyalarım ve onunla oynamaya başlarım.

  • Bu ayarı değiştirdiğimde ne olur?
  • Kodu kısaltırsam sorunu tekrar edebilir miyim?
  • Hangi ayarlar sorunu yeniden oluşturmayı mümkün kılar / imkansız kılar?

Vakaların% 90'ında sorunun nedenini buluyorum çünkü sanal alan çevre bağlamdan (veya örneğin, kodun farklı bölümleri için gelen değerler hakkındaki belirsizliklerden rahatsız edilmeden) rahatsız edici koda bakmama yardımcı oldu.

Vakaların diğer% 10'unda, StackOverflow'a gönderilecek mükemmel bir örnek pasajı olan sorunu yeniden oluşturmak için minimum kodla ayrıldım.


Son fakat en az değil, tüm sebeplerimi dünyanın sonsuzluğa bakması için tüm projemi göndermek istemiyorum.

MCVE'niz zaten elinizde olduğunda, kişisel (ya da şirket) bilgilerinde çok fazla bilgi olmamalıdır. Bunu yaparsanız, kod minimum olduğundan, daha basit bir foo / bar / baz örneğinde bir şeyleri yeniden adlandırmak kolaydı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.