En iyi uygulamayı benimsemenin önündeki engeller nelerdir? Nasıl aşılabilirler? [kapalı]


22

Hepimiz gördük (ve çoğumuz da yazdık) çok sayıda kötü yazılı kod. Niye ya? İyi uygulamalardan ziyade kötü uygulamaları benimsememize neden olan nedir?

En açık cevap (bana) "cehalet", ama eminim ki tek sebep bu değil. Başkaları var mı? Kötü kod yazma isteğinin üstesinden gelmek için ne yapabiliriz?


Maliyet ---------- Basit olarak basit.
dustyprogrammer

Bugün, kodun, neden yazıldığı yerine zayıf yazılmış olduğunu söyleyebilmenizin nedeni nedir?

@ Thorbjørn: Üzgünüm, soruyu anlamıyorum?
Kramii, Monica

@Kramil, kötü yazılmış kodun kötü yazılmış olduğunu yazdığınızı biliyor muydunuz ve öyleyse neden bu şekilde yazdınız? Olmazsa, o zaman daha önce olduğu gibi şimdi tanıyabildiğinizden beri ne oldu.

4
@Kramii, hiçbir zaman "en iyi uygulama", rasyonel ve eleştirel bir düşüncenin yerine geçemez. Tüm "en iyi uygulamalar" araçlardan başka bir şey değildir ve bunları kör bir şekilde kullanmak sadece zararlı olacaktır. Bir şeyi takip etmek aptalca, çünkü bunun arkasındaki mantığı anlamadan “en iyi uygulama” olarak kabul edilir. Ancak böyle bir anlayışla takip etmek için "en iyi uygulamalarınıza" ihtiyacınız olmayacak. Bu nedenle, "en iyi uygulama" kavramı çok derinden kusurlu ve kendiliğinden zararlıdır.
SK-mantık

Yanıtlar:


29

Değişime karşı direnç.

Cehalet, kötü yönetim vb. Arkasındaki ana itici güç budur.

Peopleware 2. Basımın 30. Bölümü bu konuya ayrılmıştır. Ve biraz daha erken yazılmış olsa da, oldukça tanınmış bir danışman tarafından yazılmış bir kitaptan alıntı:

Ve hiçbir şeyle başa çıkmanın daha zor, başarıya karşı daha şüpheli, ya da yönetmek için daha tehlikeli, daha sonra kendini yeni emirler vermeye başlaması için düşünülmeli. Çünkü tanıtıcı eski emirlerden düşman olarak yararlanan herkese sahip ve yeni emirlerden faydalanabilecek herkeste ılık savunucuları var.

Niccolo Machiavelli: Prens (1513)

DeMarco ve Lister, insanlardan değişmelerini istemeden önce aklınızda bulundurmaları gereken mantrayı belirtmeye devam ediyor:

Değişime temel tepki mantıklı değil, duygusaldır.

Değişim süreci nadiren mevcut en iyi koşullardan yeni, gelişmiş dünyaya doğru düz ve pürüzsüz bir harekettir. Önemsiz herhangi bir değişiklik için, yeni statükoya gelmeden önce her zaman bir karışıklık ve karmaşa dönemi vardır . Yeni araçlar, süreçler ve düşünme şekillerini öğrenmek zordur ve zaman alır. Bu geçiş süresi boyunca verimlilik azalır, moral zarar görür, insanlar, eski şeyleri yapmanın eski yöntemlerine geri dönmenin mümkün olsaydı şikayet edebilirler. Sıklıkla, bütün problemlerde bile, çünkü iyi bilinen sorunların yeni, bilinmeyen, sinir bozucu ve utanç verici sorunlardan daha iyi olduğunu düşünüyorlar. Bu, titizlikle ve nazikçe olması gereken, ancak başarılı olmak için kesin olarak üstesinden gelinmesi gereken dirençtir.

Sabır ve azimle, takım sonunda Kaos'tan bir sonraki aşama olan Uygulama ve Entegrasyona gelir. İnsanlar, yeni araç / işlemlerle tamamen rahat olmamakla birlikte, bunlardan vazgeçmeye başlarlar. Olumlu "Aha" deneyimleri olabilir. Ve yavaş yavaş, takım yeni bir statüko elde eder.

Kaosun değişim sürecinin ayrılmaz ve kaçınılmaz bir parçası olduğunu anlamak gerçekten önemlidir . Bu bilgi olmadan ve bunun için hazırlık yapılmadan, bir Kaos evresine vurulduğunda panik olabilir ve yeni statüko ile hata yapabilir. Daha sonra değişiklik süreci sona erdi ve takım daha önceki sefil durumuna geri döndü, ancak daha az bir şey geliştirmek umuduyla bile ...


Başvuru için yukarıda tarif edilen fazlar başlangıçta Satir Değişim Modelinde ( Virginia Satir'den sonra adlandırılmış ) tanımlanmıştır.


Bunun daha yerleşik programcılar için doğru olduğunu düşünüyorum, ancak en iyi uygulama tarafından kodlamayanların çok küçük bir yüzdesini oluşturduğunu düşünüyorum. En iyi uygulamayı takip etmediğini gördüğüm tüm kodlar burada iki cevabı da beraberinde getirdi: zaman ve saflık eksikliği.
AndrewKS

1
@AndrewKS, bu sadece geliştiricileri değil yöneticileri ve müşterileri de ilgilendirir. İyi bir geliştirme ekibi ve sürecinde, son tarihler gerçekçidir ve geliştiricilere mevcut yeteneklerinin üzerinde görevler atanmaz - veya en azından uygun danışmanlık ve doğrulama olmadan. Bunlardaki başarısızlık, neredeyse her zaman yönetimin en iyi uygulamaları benimsemeye direndiğinin bir işaretidir.
Péter Török

Gerçekten iyi nokta - Bu durumda programcı olmayanları şimdiye kadar düşünmedim.
AndrewKS,

İsteksizlik, genellikle cehaleti besleyen belli bir tembellik ile sonuçlanır.
S.Robins

23

Péter Török haklı, ancak önemli ve iyimser bir nokta bıraktı:

  • insanlar olabilir bunlar dahil olduğunu değişikliği gibi ama neredeyse hiç adil onlara "olur" değişim gibi o

öyleyse onları dahil et, fikirlerini paylaşmalarına izin ver, fikirlerini paylaşmalarına izin ver ve bu çok acı verici olmaz

Not: Bu, teknik olarak başarılı birçok yazılım projesinin başarısız olduğu , kullanıcıların reddettiği için programlama ile ilgilidir .


1
Değişimi yönetmek için gerçekten harika bir yol
Newtopian

Bisiklete binme konusunda dikkatli olmalısınız ! ÇOK karışmasına izin vermeyin!
shapr

18

Çalıştığım yerde büyük bir zaman gibi görünüyor.

Örneğin, neden daha fazla kod yazmanız gerektiğinde birim testini benimseyin ve serbest bırakılabilir bir ürün elde etmek daha uzun sürüyor? Müşteri x şimdi istiyor! Daha hızlı kodla!

(Bu açıkçası iyi bitmiyor)

Bu aynı zamanda, kötü yönetim ve ekonominin bir sonucudur, müşterileri Doğru Yapma konusunda zaman harcayacak kadar para ödememek değildir.


5
Burada da zaman çok büyük. Patronum aslında bir personel toplantısında, "İş harika işler için para ödemez" dedi.
Joshua Smith

@Joshua Smith: wtf !? Ciddi anlamda? Onlar tam olarak ne alırsam sürpriz olmaz yapmak için ödeme.
Steven Evers

2
Doğru yapmayı göze alamayacağımız bir yaklaşımı sıklıkla gördüm. Ancak, karışıklığı gidermek için sonsuz zaman harcayabiliriz. Saatlik fatura alan danışmanlık şirketleri için hangi yaklaşım en iyisidir?
BillThor

1
@jwenting: Daha önceki yorumumu bağlamda koymak için, bir personel toplantısında birim testlerini savunuyordum. Şu anda sadece ikimiz birim testleri yazıyoruz (ve bunu sinsice yapmalıyız). Şahsen ben birim testleri altın süs ve elmas süslemeler olarak düşünmüyorum.
Joshua Smith

1
@shapr: Bu, ROCKETS AND MISSILES kuran bir şirketten duymak çok korkunç bir şey. >: P
Mr. JavaScript

11

Aksine çok büyük kanıtlara rağmen, insanlar genellikle çok rasyonel yaratıklardır. İnsanların en iyi uygulamaları benimsememelerinin nedeni, örneğin TDD gibi, buna değmeyeceklerini düşünmeleridir. Ya uygulamaların aslında en iyi olmadığını düşünüyorlar; ve aslında onlara kurtaracağından daha pahalıya mal olacağını. Veya yararın o kadar marjinal olduğunu düşünüyorlar ki, değişim maliyeti küçük faydadan daha ağır basacak. Sonuç olarak, en iyi uygulamaların sorunu, sonuçta ortaya çıkan bir problemdir.

Değişim ajanı olmak istiyorsanız, göreviniz, sonuçların alt satırdaki algılarının hatalı olduğunu göstermektir. En iyi uygulamanın gerçekten en iyisi olduğunu göstermelisin . Faydaların acil ve önemli olduğu . Öğrenme eğrisinin dayanacak kadar küçük olduğunu ve en azından bazı faydaların hemen başladığını göstermeniz gerekir.

Bunu nasıl gösterdin? En iyi uygulamayı kendiniz benimseyerek! Hiçbir şey başkalarını kendi davranışlarından daha iyi ikna etmeye hizmet edemez. Eğer siz iyi uygulamayı takip edin ve bu konuda vokal, diğerleri göreceksiniz size ekonomik analiz yaptım ve zıt bir karar verdi. Bu onların kararlarını tekrar gözden geçirmelerini sağlayacaktır. Bunu özel olarak yapacaklar ve asla ilk başta kabul etmeyecekler. Fakat sizi bu en iyi uygulamayı kullanarak gören herkes pozisyonunu tekrar inceleyecektir.

Umut edebileceğin en iyi şey bu. En iyi uygulama en iyi uygulama ise , geri kalanı otomatik olarak takip eder. Oh, hızlı olmayacak ve bir sürü destek olacak. Geçiş yavaş ve sivilceli olacak; ve birçok hayal kırıklığı yaşayacaksınız. Ancak geçiş aynı zamanda kaçınılmaz ve kaçınılmaz olacaktır. Bir nesil alabilir ama en iyi uygulama olacaktır kazanmak.

Bunun kanıtı olarak, birinin en son ne zaman kullandığını görünce kendinize sorun.


+1: Üstesinden gelmenin en iyi yolu, en iyi uygulamayı kendiniz benimseyerek, örnek olmaktır. “Dünyada görmek istediğiniz değişim siz olmalısınız.” ?
Johnsyweb

7

Bilmemek, ya da değil sonucudur düşünerek bir ideal yöntemi bilir. İnsanlar değildir seçerek zayıf yazma koduna; daha iyi bilmeme durumu. “ Cehalet ” yerine “ cehalet ” daha iyi bir kelime olacaktır.

İyi uygulamaya uymanın en basit yolu, az önce yazdığınız kodu yazmanın (muhtemelen) daha iyi bir yol olduğunu kabul etmektir ve daha sonra 'daha iyi yolun' ne olduğunu öğrenmeye isteklidir.


1
+1 ve tüm geliştiricilere daha iyi yollar öğrenmek veya öğrenmek için yeterli zaman verilmez. Birçok kişi için (yönetim ve geliştiriciler) göz ardı edilemeyecek bir engel haline gelinceye kadar ertelenir. Bu arada, kararlar buluşsal olarak yeterince sık yapılmaz - birçok insan için mevcut bir çözümü ya da tavsiyeyi kabul etmesi yaygındır. Bu uygulama şans, yaklaşım ve anlaşılması için hayati olan öğrenme sürecinin çoğunu atlar ve içerir. sırayla anlamak, (tersine değil) kişinin daha iyi seçimler yapma yeteneğini etkiler.
justin,

6

İki neden

  • Cehalet.

  • Kibir.

Nasıl aşılabilirler?

  • Teşvikler.

Yöneticileri (yani millet kadar satın geliştiricinin beceri) yazılımın teslimi bir parçası olarak en iyi uygulamaları gerektiren hiçbir şey muhtemelen değiştirebilir. Birçok kuruluş açıkça şizofrendir: geliştiricileri çeşitli teknolojilerde eğitirler ve daha sonra denenmemiş yazılım veya denenemez bir tasarım isterler. Ya da daha kötüsü.


4
Doğru: özellikle ölümcül cahil + kibirli açılan.
Sklivvz

6

Benim için En İyi Uygulama, 8 kişilik bir ekibin yazdığı bir yazılım parçasıdır. Yazılı gerekliliklere, kod incelemelerine, Ünite testlerine, sürüm belgelerini biçimlendirmeye gerek yoktu. Son kullanıcı testi yok, tüm kitapların yapmamız gerektiğini söylediklerinin hiçbiri yok. Kod koştu, arabası ve bakımı imkansızdı. Serbest bırakıldıktan 3 yıl sonra atıldı, çok kötüydü. Peki bu konuda bu kadar harikaydı. İlk piyasaya sürülmesinden iki yıl sonra, (evindeki ipoteği ile gelişimini finanse eden) şirket sahibi arka cebinde 30-40 milyon dolar ile gitti.

İş için para kazandıran bir yazılım yapmak için burada olduğumuz gerçeğini (çoğunlukla değil) görmezden geliyoruz. İşletmeler bize "En İyi Uygulama" kullanarak yazılım geliştirme fırsatı sunmuyorlar, para kazanmak için varlar.

Çoğu "En iyi uygulama" uygulaması, karları iyileştirmez. Bunu yapanlar, yapmalılar ve kabul etmeliler. Bu yüzden “en iyi uygulama” uygulanmadı.


6

Kabul edilebilir risk

Hiç risk almadın ve bir şeye kumar oynadın mı? Bir zaman sıkıntısı var, bu nedenle daha sonra yeniden tadilat yapmak amacıyla (daha sonra tahakkuk ettirmek yerine) çalışacaksınız. Bu aslında bazı insanlar için iyi bir uygulama olarak görülüyor.

Sonunda, yeterince yakılırsın ve yöntemlerini değiştirirsin. Dışarıdaki tüm 'en iyi uygulamaları' düşünün. Hepsini sürekli takip edebiliyor musun? Herhangi biri birbiriyle çelişiyor mu? Her aykırı çalışarak zaman harcamak istemezsin.

İşe yarayan ve hiç kimsenin tekrar bakamayacağı bir kötü kod yazarsam yine de kötü sayılıyor mu? (Lütfen, 'kötü kodun' ne olduğunu tartışarak felsefi tartışmaları mahvetmeyelim.)


İlk önce kod üretmek için bize ödenen nosyon için +1. İkincisi (öznel olarak) sürdürülebilir hale getirme sorumluluğunu da ekledik. Ne de olsa - bahçeciye çim biçme makinesinin bakımını yapmak için fazladan ödeme yapmıyorum - idare etmesi ona kalmış. İyi bir iş çıkarsa ve teçhizatı tutarsa, onu tekrar davet edip tekrar işimi vereceğim.
Bay JavaScript

4

IME, başkalarının söylediklerinin bir birleşimidir. Cehalet ("Sadece hiç DataSets kullandım, neden bu LINQ işleriyle uğraşıyorsun?", Zaman eksikliği ("Patron mümkün olan en kısa sürede yapılmasını istiyor, üzerinde çok fazla zaman harcayamayız"), eksiklik Anlayış ("Tüm kodumu kodun arkasına yazarken yanlış olan nedir?").

Gördüğüm ironi, bir kez o yoldan başladığınızda, kendinizi daha derine soktunuz. Köşeleri şimdi kesip ASPX dosyalarındaki bir uygulamanın tüm kodunu attıysanız, daha sonra hiçbir zaman düzeltemeyeceksiniz; yeni şeyler atılmaya devam edecek, bu da onları hızlı bir şekilde yapmanız gerektiği anlamına gelecek, bu da ASPX dosyasındaki tüm kodu (bir gün düzelteceğinize yemin ederim) vb. spirali - çünkü artık gelişimi durduramazsınız ve ilk önce düzeltilmesi gereken şeyleri söyleyemezsiniz.


4

Genellikle geliştiricilere daha iyi bir uygulama veya daha da önemlisi daha iyi bir uygulama kullanmanın faydaları gösterilmemiştir (Çeşitli sebeplerden dolayı 'En iyi uygulamalar' terimini kullanmayı bırakmaya başladım).

Geliştiricilerin 'kasıtlı olarak tembel' olduğu bir teori var. Başka bir deyişle, en az dirençli yolu seçme eğilimindedirler.

Onlara hızlı bir şekilde daha iyi bir uygulamanın (TDD gibi, ya da SOLID ilkelerini izleyerek) söylediğinin faydalarını göster ve aslında onların daha iyi (ama yine de 'tembel') bir geliştirici olmalarına izin verdiğini göster. uzakta.

Bu bir eğitim meselesi :)


Programlamayı kısa sürede (2 - 3 saat) öğrendim. (Aslında farklı dillerdeki birkaç seans.) Seanslar sırasında kodun çok iyi olduğu ve kodun açıklandığı gibi yazılmasının nedeni açıklandı. Hiçbiri, "resmi" dil kurslarımın hiçbiri iyi kodlar koymaya gelmedi.
BillThor

"en az direnç" oldukça açıklayıcı. Deneyimli programcılar , uygulamanın tüm ömrü boyunca "en az direnç" in ne anlama geldiğine dair daha iyi bir fikre sahipler .

4

(Eksikliği) Bilgi ve Beceri + Yatırım Yapma Zamanı

Kimsenin bunu çıkarmamasına şaşırdım, ama belki de bana göre açık çünkü çalışmalarımın çoğu tek bir programcı olarak çalıştı, kimsenin (yığın dışında) bir şey üzerinde mücadele ettiğimde gideceği bir tek programcı değildi. TDD gibi daha iyi teknikler biliyorum, ancak bunların hepsini kullanabilmem için yeterince iyi anlamıyorum ve onları kullanmama yardımcı olacak iyi bilgiler bulmakta zorlanıyorlar. Yine, TDD'yi bir örnek olarak kullanarak, bunun temel anlamını anlıyorum - kodunuzun belirli bir sonuç verdiğini belirten testler oluşturun - ama gerçekte uygulıyor musunuz?

Bugünlerde XCode'un dahili birim testine sahip olması dışında, nereden başlayacağımı bilmiyorum. Onları yapmak için bir rutin çalıştırdıktan sonra görünümün üzerinde X düğmeleri olduğunu iddia ediyor muyum? Döndürme etiketini çağırdıktan sonra UIView'larımın uygun şekilde yeniden düzenlendiğini iddia etmeye ne dersiniz?

Heck, bir ünite testini XCode'da nasıl yazabilirim ? Bu, zaman öğrenmek için harcamam gereken başka bir şey.


2

@Zues ve @Joshua Smith

Evet, bazen zamanın ve bütçenin, bildiğiniz her "daha iyi programlama" ilkesini bir programa koymanıza izin vermeyen bazı kısıtlamalar olduğuna katılıyorum.

Şu anki görevin, eğer biraz daha zamanınız olsaydı, çok daha sağlam bir şekilde yapılabileceğini biliyorsunuz. Ancak çok az sayıda müşteri (özellikle ilk iPhone Uygulamalarını veya ilk özel yapım iş zekası yazılımlarını kullanıyorlarsa), daha önce yaptığınız bir şeyi tekrar uyguladığınızı söylediğinizde, bunu yapmanın daha iyi bir yolunu bulduğunuzu anlarsınız.

Birim Testleri için aynı. Ne yazık ki, bunun için bütçe ayırmaya hazır bir müşteriyle tanışmadım. Tipik cevap “Otomatik regresyon testi Tamam, anlıyorum ama birim testleri mi? Bunun için zamanımız yok! Pazara hızlı bir şekilde ulaşmamız gerekiyor! ”


Müşterilerden birim test için zaman ayırmalarını istemem ancak işin bir parçası olarak görmelerini istemiyorum. Müşterilerimizin birim testleri yapmasını sağlamak, müşterilerinizi çalışmanızı mikro yönetmeye teşvik eder. Arabanızı tamir ettirdiğinizde mekanik tamircisi size işi yapmak için hangi araçları kullanması gerektiğini sormaz! Aynı ünite testleri için de geçerlidir, işi doğru bir şekilde yapabilmek için gerekli olduğunu düşündüğünüz doğru test dengesini yargılamanız gerekir.
Newtopian

Ne yazık ki, daha iyi programlama teknikleri, geliştirmeyi göze alamayacağınız tekniklerden daha hızlı olabilir.
BillThor

2

Deneyimlerimin çoğunda iki bölüm var:

  • zaman
  • Mevcut durum için hangi uygulamaların en iyi olduğu konusunda hemfikir olmak için yeterli sayıda insanın bulunması

"En İyi Uygulamalar", birçok gerçek dünyada birçok durumda özneldir. Eğer takımın bir yarısı bir grup SOLID & TDD yapmaya çalışıyorsa, diğer yarısı burada geçen süre boyunca saniyeleri tıraş etmek için 60 saat hafta çalışıyorsa ve burada gerekli olan herhangi bir yoldan geçtiniz çünkü çok geç kaldığınız noktayı geçtiniz. Bir sonraki sürümünüz için zamanında performans göstermeyen bir şeyi yeniden tasarlarsanız, çok uzağa gidemezsiniz.

Ekipte çok fazla anlaşmazlık yaşamıyor olsanız bile, hangi politikayı izleyeceğinize karar verirseniz resmi bir anlaşma, dokümantasyon ve eğitim almak çok çaba harcamaktadır. Bu, dikkatlice gerekçelendirmek zorunda kalacağınız iş bakış açısına göre üretken olmayan büyük bir zaman bloğu.


2

Bazen, alışkanlığın aynı zamanda kötü kod yazmaya büyük bir katkı olduğunu göreceksiniz .

Çok deneyimli bir programcı olabilirsiniz ve mevcut en iyi uygulamalar hakkında her şeyi biliyor olabilirsiniz. Cehennem, hatta olabilir böyle şeyleri uzman. Tecrübe bana, bu insanların çoğu zaman kötü kodlar yazmadıklarını ve eski alışkanlıklara geri dönmenin ve kuralları ihlal edeceğini bildiğiniz bir şey yapmanın kolay olabileceğini söylüyor. Bu gibi durumlarda, cehalet ve kibir ve düşündüğünüz diğer tüm parmakla işaret eden sıfatlar gerçekten önemli değil. Bu tür programcıların yaptıkları işte özellikle kötü olmaları gerekmez (bu daha sık durumda olsa da) veya hatta berbat bir karmaşa yaratmak istiyorlar.

Bazı gerçek yetenekli insanların parmaklarını ve beynini birkaç ay boyunca otomatik olarak çalıştırdıkları için, kendimi saymak istediğimden daha fazla defa şahit olduğumun talihsizliği. Çoğu zaman bu, yanma, keder ve stresin yığıldığına dair kanıtlar gördüğünüz yerdir. Bazen bu sadece günlük hareketlerde onları taşımak sadece kör bir alışkanlıktır. Zarar görmeyen insanları gereksiz yere etiketleme riskini önlemek için dikkatlice dikkat etmeyi öğrendiğim bir şey.

Sadece olumsuz sonuca atlamayı daha kolay bulabilenler için, düşünceye göre bir şeyler yiyin ... ne yazık ki haklı olmasanız da haklısınız.


-1

Hiç kimse, yeniden yapılanma boyunca bir şey başlıklı bir proje için faiz ödemeyi göstermez. İş dünyasının çıkarlarına hitap eden bazı kelimeler olmalı. Yenileme, canlandırıcı, tamamen yeniden yapılanma, yaşam döngüsü yükseltme vb. Kelimeler iş yerimde çalışıyor. Neredeyse hepsinde projenin ana bir parçası olarak refactoring var.

Ne yazık ki, ekonomik tetikçi sayesinde iş yalnızca ödeme olduğunda gerçekleşir. İşler sadece işletme servetini uzun vadede kurtarmak olsa bile.

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.