Çelişkili programlama tavsiyelerinin uzlaştırılması: kodlamadan önce bir şeylerin çalışmasını ve yinelemesini ve gerçekten düşünmesini sağlayın


19

Birkaç yıllık mesleki deneyime sahip, yüksek lisans derecesinin ortasında olan bir ara programcıyım. Programlamayı öğrenirken çoğu zaman çelişkili görünen iki öğüt duydum.

İlk tavsiye, bir şeyin hızlı bir şekilde çalışmasını sağlamak, nasıl çalıştığını görmek (prototip veya resmi olmayan testler yoluyla), sürümü iyileştirmek, nasıl tekrar çalıştığını görmek, tekrar geliştirmek ... ve bitene kadar döngüyü tekrarlamaktı. . Buna bazen "spiral gelişimi" denir veya "erken bırak, sık bırak" olarak ifade edilir.

İkinci tavsiye şuydu: herhangi bir kod yazmadan önce bir projeyi gerçekten düşünün.

Her iki yöntemde de başarılı oldum ve her felsefeye katıldığımı söyleyebilirim.

Ama şimdi nasıl tamamlayacağımı bilmediğim çok daha karmaşık projeleri ele almaya başladım (dağıtılmış uygulamalar ve performans odaklı grafik programlama gibi).

Bu projelere nasıl gidebilirim?

Sadece SOMETHING kodlamaya başladım ve (platformlar / yöntemler / diller / mimariler) öğrenmeye devam ediyor muyum - yoksa IDE'yi açmadan önce kodlamadan uzak durup bir ton araştırma / okuma yapıyor muyum?

Bu çelişkili programlama tavsiyelerini nasıl uzlaştırırım?


Her ikisini de aynı anda yapın. Yineleyin, belgeleyin, yineleyin, belgeleyin, yineleyin ve işe yarayan net bir planınız olduğunda. İnşaa edin: D
Matt D

1
Kent Beck'in "Çalıştır, sonra doğru yap VS. Doğru yap, sonra çalıştır" konulu makalesi: facebook.com/notes/kent-beck/runright-and-vice-versa/…
Thiago Silva


1
Onların nasıl çelişkili olduklarını görmüyorum. İlk önce çok düşünürüm ve sonra hızlıca bir şeyler yaparım.
fjarri

Çok derin. Katılıyorum. Ortalama profesyonel projem, ön tasarım çalışmalarında yaklaşık% 40 - 50, 10, maksimum% 15 kodlama ve test için geri kalanı.
Mawg, Monica

Yanıtlar:


20

Bir problemi vaktinden önce yinelemeli yaklaşıma karşı düşünmenin birbiriyle çeliştiğinden emin değilim. Diğer birçok şey gibi, sanırım ikisi arasındaki dengeyi sağlamak için çaba göstermelisin. Dengeyi nasıl buluyorsunuz? Bu, deneyimle öğrendiğiniz bir şeydir ve çoğu zaman en iyi dersleri (yani size deneyim veren şeyler) tam olarak doğru anlamadığınız zaman (veya daha iyi bir ders: sadece yanlış anlayın). Daha önce de belirttiğin gibi, "hızlı bırak, sık bırak" diyen bir söz vardır. Başka bir benzer var, "erken başarısız, hızlı başarısız, sık başarısız"

İleriyi düşünmek harika ve kesinlikle yapmalısın. Ancak deneyimle, tüm verilere sahip olmasanız bile düşünmeyi ne zaman durduracağınızı ve sadece bir şeyler inşa etmeyi öğrenin. Bunu oluşturarak, sorunlu alan hakkında daha fazla bilgi edinebilir ve potansiyel olarak çok daha iyi bir çözüm bulabilirsin. Bu yüzden birini diğerinden dışlamamanızı ve "düşünme kafasını" yinelemelerinizin bir parçası haline getirmenizi tavsiye ederim ve zamanla bu soruya doğru cevabı kendiniz bulacağınızı düşünüyorum.

Sadece küçük bir örnek. Geçen gün bir yazılım tasarımı kararıyla uğraşıyordum. Gezde nispeten önemsizdi ama iki alternatifim vardı ve her ikisi de işe yarayacak gibi görünüyordu. Ben her birinin artılarını / eksilerini geri dönüp sonra geri dönüp kararlarımı yeniden gözden geçirmeye devam ettim. Geriye dönüp baktığımda, düşünmek için ne kadar zaman harcadığım biraz utanç verici. Sonra kendi kendime dedim ki, f # @ k! Tasarımlardan birini kullanmak yerine, devam ettim ve bazı kodları birlikte hackledim, iyi tasarım hakkında öğrendiğiniz tüm iyi şeyleri tamamen görmezden geldim. Bu özelliği yaklaşık 45 dakikada çalıştırdım. Sonra geri döndüm, koduma baktım ve onu sağlam bir şeye dönüştürdüm ve kaynak kontrolünü kontrol etmekten utanmayacağım bir şey. Komik yanı, kesmek çalıştıktan sonra "

Şu anda karşılaştığınız sorunlar için özellikle tavsiye edeceğim başka bir şey (yani, büyük, karmaşık görev öne çıkıyor). Seri olarak bir şeyler yapmak yerine, paralel olarak yapın. Gününüzü araştırma yaptığınız parçalara ayırın ve en azından projenin tam olarak bilinmeyen olmayan kısımlarında durun, vitesleri ve kodu bir süre değiştirin. Bu şekilde koda yakın kalmak size daha iyi bir bakış açısı kazandıracak ve çok fazla bilgiyi çok hızlı bir şekilde almaya çalışarak yanmayacaksınız. En azından benim için, birkaç saatlik araştırmadan sonra, beynin bir şeyler sindirmesine, görevleri değiştirmesine ve bir süre başka bir şey yapmasına izin vermek iyi. Sonra daha fazla araştırmaya geri dönün.


Eklersem: gerçekten gerekliyse kodlamaya başlayın. Sorun yoksa, kodlamaya başlanmamalıdır.
Tassisto

5

Önceden alınması gereken bazı kararlar var.

Bir web uygulaması yapıyor musunuz? O zaman genel mimarinin nasıl görüneceğini bilmeniz gerekir. MVC gibi mimariler zaten büyük fonksiyonel parçalarınızın ne olacağını tanımlar (yönlendirme, kontrolörler, modeller, servis katmanları, iletişim protokolleri ve benzeri); Bunların hepsini sıfırdan icat etmek uzun bir mesafe, gereksiz ve muhtemelen zaten icat edilmiş olandan daha aşağı olacaktır.

Nesne veya veri koleksiyonlarını içeren herhangi bir uygulama yazıyor musunuz? Ardından, sizin senaryo için hangi tür veri yapılarının en uygun olduğunu ve performans özelliklerinin ne olduğunu bilmeniz gerekir. Hızlı arama süresine mi ihtiyacınız var? Sıralı veri kümelerine ne dersiniz? Bellek içi bir koleksiyon yapacak mı yoksa veritabanı gibi daha endüstriyel güce sahip bir şeye mi ihtiyacınız var? Bu kararları düşünmeden kodlamaya başlayamazsınız, çünkü yanlış bir seçim yaparsanız baştan başlamanız gerekir.

Bununla birlikte, teknolojik kararlar verildikten sonra, belirlediğiniz çerçeve dahilinde özgürlüğe sahip olursunuz. O zaman amaç esnek, yinelemeli ve (söylemeye cesaret edebilen) yeterince çevik kalmaktır, böylece müşteri istediği şeyle ilgili fikrini değiştirdiğinde, bunları minimum miktarda yaygarayla karşılayabilirsiniz.

Bunu nasıl yaptın? Deneyim, çoğunlukla. Birinin dediği gibi, deneyim ihtiyacınız olan şeyden hemen sonra elde edersiniz. Ancak başkalarının başarılı tasarım kararlarını takip ederseniz (platformlarda, kütüphanelerde ve ticaretin diğer araçlarında olduğu gibi), onlardan öğrenebilir ve riskinizi azaltabilirsiniz.


1

İkisini karşılıklı olarak ayrıcalıklı görmüyorum.

Her tür proje yönetimi gibi, hem uzun vadeli bir vizyona hem de kısa vadeli hedeflere ihtiyacınız vardır.

Birincisi olmadan, örneğin asla kullanılmayacak özelliklerde zaman harcayacaksınız ve ikincisi olmadan projenizi bitirmeden mükemmel uygulamayı nasıl oluşturacağınızı düşünerek tüm gün harcayacaksınız.

Ne sıklıkla bıraktığınızı / vb. kullandığınız belirli metodolojiye bağlıdır.

Araştırmanız gereken, bildiklerinize ve neyin rahat olmadığınıza bağlıdır.


1

"Yineleme" ve "baştan sona düşünme" çelişkili değil, tamamlayıcıdır.

Aşırı uçlarında bile, aynı yere ulaşmak için iki yolu yansıtırlar.

  • Yinelemenin en uç noktası, bin klavyede vuran bin maymun. Yeterli zamanla belki gereksinimleri karşılayan bir şey elde edersiniz.
  • "Bunu düşün" in uç noktası Şelale yaklaşımıdır. Şanslıysanız, şartlar projenin başlangıcından itibaren kod teslim ettiğiniz zamana kadar önemli ölçüde değişmemiştir. Ya da analiz felci ile sonuçlanacak ve hiçbir şey sunamayacaksınız.

Kodlamaya başlamadan önce etki alanını ve sorunu biraz anlamış olmanız gerekir. Bu "baştan sona düşün" bölümüdür. İdeal olarak, sorunun nasıl çözüleceği konusunda baştan sona kadar üst düzey yolu göreceksiniz.

Ancak bu yolun sadece büyük bölümlerini görebilirsiniz ve kesinlikle yol boyunca her durakta kalmayabilirsiniz. Yineleme burada devreye girer. Uygulamanın sürümleri aracılığıyla yinelemeye başlayabilir ve şunları yapmak için geri bildirim isteyebilirsiniz:

  • Daha düşük ayrıntı düzeylerinde ortaya çıkan birlikte gösterimleri belirleyin
  • Üst düzey yoldaki bulanık alanları açıklığa kavuşturmak için paydaş geri bildirimlerine bakın.

Karar latin kök demektir "kesti". Yineleme, sadece teori yerine pratikte neyin işe yaradığına karar vermenize izin verir ve yineleme, mümkün olmayan diğer seçenekleri kesmenize izin verir.

Bu yüzden ne yapacağınızı anlamak için sorunu düşünmeniz gerekiyor. Ama sonra fikri gerçek koda dönüştürmek için uygulamanın sürümlerini tekrarlamanız gerekir.


0

Temel kuralım: Sorunun herhangi bir bölümünü tam olarak anlamadıysanız geri adım atmanız ve tamamen düşünmeniz gerekir (API'leri anlamak için prototipleme ve atma kodunu dahil ediyorum "bunu" düşünün ") . Temel olarak daha önce çözdüğünüz bir sorun topluluğuysa ve bu özel örnekte her şeyi bir araya getirmenin en iyi yolunu bulmanız gerekiyorsa, tekrarlayın.

Dürüst olmak gerekirse, bu zor ve hızlı bir kural değil. Gerçekten herhangi bir proje için ikisini de karıştırmanız gerektiğini düşünüyorum. Her birinin ne kadarının büyük olasılıkla projenin daha önce tamamlamış olduğunuz projeye ne kadar yakın olduğuna bağlı olacaktı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.