En iyi uygulamalar ve sağduyu arasındaki fark nedir?


13

Yazılım geliştirmede en iyi uygulamalar 1 ile ilgili çok fazla konuşma var . En az üç önemli noktanın hem SE'de hem de başka yerlerde çok fazla tartışma yaptığını gördüm:

  • En iyi uygulama olarak nitelendirilen nedir ve neden?
  • En iyi uygulamalar en başta tartışılmaya değer mi, çünkü hiçbir uygulamanın “en iyi” uygulama olduğunu iddia etmek mantıklı mıdır?
  • Ne zaman uygulanabilir görünmediği ya da ödünleşimi uygulanamaz kılan dışsal kısıtlamalar (zaman, para, vb.) Nedeniyle ne zaman en iyi uygulamadan - ya da belki de en iyi uygulamalardan - vazgeçmelisiniz?

Çok daha az sıklıkta, ancak hiç olmadığı kadar çok ortaya çıkan bir şey, yazılım geliştirmede sağduyulu bir kavramdır . Son zamanlardaki deneyimler bu görüşü tekrar aklımın önüne getirdi.

İlk izlenimim, bunun en iyi uygulamalardan farklı bir tartışma olduğu, ancak belki de bazı çapraz tozlaşma ile olduğu.

Genel anlamda sağduyulu düşündüğümde, aldığınız veya size öğretilen ve size akıl yürütmek ve kararlar vermek için bir temel oluşturan bir dizi kuralı düşünüyorum. Sağduyu izlemek, tüm bacağınızı vurmaktan kaçınmanın iyi bir yoludur. Ancak, oldukça düşük bir başlangıç ​​çizgisinin ötesinde, sağduyu, eğitimli kararlar verme ihtiyacına yol açar ve eğitimli kararlar, kanıtlar yeterince zorlayıcı göründüğünde sağduyu geçersiz kılabilir. Buradaki tanımla biraz gevşek oynuyorum, ama örneğime öncülük etmek için yeterince yakın olduğunu düşünüyorum.

Yazılım geliştirmede sağduyuyu düşündüğümde, bir kod tabanının hızla anlaşılmaz bir karmaşaya dönüşmesini önlemek için tüm temel hijyen kurallarını düşünüyorum. Örnek olarak aşağıdakiler gibi şeyler: önemsiz olmayan bir program içinde durumu korumak ve iletmek için tek bir küresel yapı kullanmamak; sadece rastgele anlamsız değişkenler / yöntem / sınıf adları kullanmamak; muhtemelen anti-desen dediğimiz şeylere çok benzeyen şeyler. En iyi uygulamaları öğrenme modellerine pratik analog uygularken, sağduyu uygulamak, anti-kalıp öğrenmenin pratik analogu olarak görülebilir.

Bunu göz önünde bulundurarak, başkalarının cevaplarını görmenin bana bu konuda yol göstermeme yardımcı olabileceği birkaç soru sormak istiyorum.

Diğerleri yazılım geliştirmede sağduyulu bir kavram olduğuna inanıyor mu? Her iki şekilde de akıl yürütmeyi bilmek isterdi.

Eğer öyleyse, tartışmaya değer bir kavram mı? Bazen en iyi uygulamalarla yaptığımız kadar zorlamamız gereken bir şey mi? Daha da zorlanmaya değer bir şey mi?

Anti-paternlere benzetme makul görünüyorsa, genel kural anti-paternlerin sadece başka bir yolu yoksa ve hatta o zaman sadece çok sınırlı koşullar altında kullanılmasıdır. Bir kod tabanının sağduyudan sapmasına izin vermede ne kadar esnek olmalıdır? Cevabın "hiç" olmadığı mantıksız görünüyor, çünkü bazen uygunluk sapmalar gerektiriyor. Ancak, "en iyi uygulamayı" ne zaman kullanacağınızdan farklı bir argüman gibi görünüyor. Belki de değildir; Eğer öyle düşünmüyorsanız, nedenini öğrenmek isterim.

Bu çok daha açık uçludur ve belki de tamamen kendi başına bir takip sorusuna layıktır, sağduyu meseleleri gibi görünen ne tür tavsiyelere işaret ederdiniz?

Diğer düşünceler de açıktır.


1 Belki de onlara "yaygın olarak yinelenen etki alanı kalıpları" adını vermek daha iyi olur, ancak "en iyi uygulamalar" adı, herkesin ne olduğunu bilmesi için yeterince yaygındır. "En iyi" kısım sizi rahatsız ediyorsa, "en iyi uygulamaları" daha az güvenilir bir sesle değiştirdiğimi düşünün.


2
Sağduyuya sahip olmak, birkaç çözümün artılarını ve eksilerini ortaya çıkarmak ve sorun için en iyisini seçmek için kullanabileceğiniz anlamına gelir. Deneyimi, tasarım desenleri ve en iyi uygulamalar hakkında birkaç kitap okumaktan oluşan biri, bunları nerede ve nasıl uygulayacağını anlamıyor.
Blrfl

Yanıtlar:


10

En iyi uygulamalar, nispeten geniş bir koşullar alanında iyi çalıştığı tespit edilen uygulamalardır. Onlarla ilgili sorun, A) ifadenin bazen pazarlama için kötüye kullanılması ve B) sabit kurallar olarak kullanılması, yeterince esnek olmaması; mevcut duruma uygulanıp uygulanmadıklarını düşünmeden hiçbir sabit kurallar dizisine uyulmamalıdır.

En iyi uygulamalar, neden "en iyi" olduklarını ve hangi koşullarda kullanılmaları gerektiğini açıklamalarıyla birlikte gelir . O zaman onları ne zaman kullanmamanız gerektiği hakkında akıl yürütebilirsiniz.

"Sağduyu" ile ilgili sorun çok esnek olmasıdır - hemen hemen her şeyi haklı çıkarmak için kullanılabilir ve insanlar hemfikir olmadığında ve her ikisi de konumlarının "sağduyu" olduğunu iddia ettiğinde gerçekten rasyonel bir tartışma yapamazsınız. Bir ekibin takip etmesi için bir rehber olması iyi ama fakirdir.


10

Bence geriye doğru sahipsin.

Programcılara güvenliğin temellerini öğretirken, her zaman onlara kullanmayı öğretiyorum best practicesve yine de güvenlik uzmanlarıyla (veya daha fazla "güvenlik tecrübeli" programcılarla) uğraşırken asla tartışmayacağım best practices, aslında onları sık sık ihlal edeceğim.

Daha iyi bir tanım:

"En İyi Uygulamalar", uzman olmayanlar tarafından uygulanması gerektiği gibi uzmanların sağduyudur.

Yani, belirli alanlarda ince ödünleşmeleri anlamak için yeterli uzmanlığa sahip olana kadar "sağduyu" iddiasında bulunamazsınız; ve bunu yaptığınızda, artık çerez kesici "en iyi uygulamaları" körü körüne takip etmemelisiniz.

"En iyi uygulamalar", kendi "sağduyunuzu" kullanmak için yeterli deneyime sahip olana kadar geçici bir yer tutucudur.


3
Oh, ve en iyi uygulamalara aşina değilseniz, sağduyulu da değilsiniz.
AviD

7

En iyi uygulamalar -> "önce kuralları öğrenirsiniz". Deneyim -> "o zaman, ne zaman ve nasıl kırılacağını öğrenir".

Alternatiflerle deneme yapma isteği (kritik olmayan kodda, elbette - tercihen kişisel projeler ve fırlatmalar), ihtiyacınız olan deneyimi oluşturmanıza yardımcı olabilir.

Sağduyu, elbette deneyim ile aynı değildir ve yanlış yerde iyi bir teknik uygulamaktaki kusurları görmek için her zaman çok fazla deneyime ihtiyacınız yoktur - ancak hem aşırı uygulama hem de aşırı uygulama için yanlış rasyonalizasyonlar oluşturmak çok kolaydır. bir tekniği yetersiz uygulamak ve burada "sağduyu" açıkça doğuştan gelen bir programlama bilgisi olmadığından, bu duyu sadece belirli gruplar içinde açıkça "yaygındır".

"Taraf almak" çok kolaydır. Aslında kaçınmak imkansız - bazen bir taraf gerçekten doğru, diğeri gerçekten yanlış ve denge için tartışmak mantıksız olurdu. Buradaki asıl sorun, gerçek cehennem, alaka düzeyi için en iyi uygulamalardan biri değil, birbiriyle çelişen iki en iyi uygulama görüşü çarpıştığında çok ağır.

Bununla başa çıkmak muhtemelen insanların becerileri ile ilgili olarak teknik becerilerden çok daha fazladır. Ben çok kötüyüm :-(

Buna rağmen, diğer insanların deneyimlerinden kendinizin yanı sıra öğrenmek de önemlidir - yani en iyi uygulamaların ne olduğunu, neden kullanıldıklarını ve avantajlarının (ve dezavantajlarının) neler olduğunu bulmak.


6

Bana öyle geliyor ki bu soru anlamsal bir hile. Bu tanımları kullanırsak, o zaman soru yoktur:

En İyi Uygulama: belirli bir alandaki sorunu çözmenin sahada kanıtlanmış bir yolu

Common Sense: Programcıyı kaçınmak için tuzakları uyarmaya yarayan profesyonel deneyim

Sonunda, En İyi Uygulama, problemlerin belirli bir uyumunu çözmek için bir meta tasarım modelidir ve gerçek dünya deneyimlerine dayalı olarak seçilirken, Common Sense, çoklu sorun kümelerinde genel gözlem temelinde sorun çözme için bir rehberdir.


Şey ... anlamsal bir şey ya da başka bir şey. Hile hakkında emin değilim. "Sağduyu" her zaman söylediği anlamına gelmez. Akademik-kurallara uymama duygusu kazanmıştır - temel olarak kural kitabının kapsamı dışında düşünmeye atıfta bulunulan beyin ve sağduyulu olmayan bir şeyin bir yönü. Bazen, en iyi uygulamalar gerçekten geçerli değildir - gerçeklik, herhangi bir sonlu genelleme seti için mükemmel olamayacak kadar karmaşıktır - bu yüzden kendi deneyiminizi ve - ahem - "sağduyu" yu kullanmak zorunda olduğunuz zamanlar vardır .
Steve314

@Patrick: Niyetim hileli değildi. Bu soruyu sormamın bir kısmı, bu noktaya kadar, özellikle "sağduyu" olmak üzere bu iki kavram hakkındaki anlayışımı araştırmaktı. Herhangi bir görünür hile muhtemelen bu fikirler hakkındaki sezgimin hiçbir yerde mükemmel olmadığının bir işaretidir.
Ed Carrel

5
Common sense = You.CommonSense

Best practices = Sum(Experts.Experience + Experts.CommonSense)

2
... * Pazarlama
keppla

4

İlginç zamanlama. Geçen hafta bu makale , sağduyunun neden her durumda ideal olmadığını tartıştı.

Sağduyu, günlük durumlarda ortaya çıkan karmaşıklığı ele almaya mükemmel bir şekilde uyarlanmıştır ... Ve bu durumlarda çok iyi çalıştığı için , her durumda ona güvenmeye meyilliyiz

(kelimelerim kalın harflerle yazılmıştır)

Temel olarak - insanlar, yerleşik bir sistem geliştirmediğimiz bu gibi alanlarda sağduyuyu kullanmakta iyi değildir, bu nedenle DAİMA belgelenmiş bir standartlar seti kullanmalı ve kendi sağduyumuza güvenmemeliyiz!


Bilişsel önyargı ... yine. Bu nedenle, sağduyunuza güvenmeden önce kabul edilmiş bir uzman olmanız gerekir ...
AviD

2

Sağduyu, anti-kalıpları öğrenmeye karşılık gelmez veya en iyi uygulamadan farklı veya bunun aksine değildir.

Sağduyu ile ilgili ilk sorun adıdır - hem yaygın hem de mantıklı olduğu sonucuna götürür. Yaygın olarak kullanıldığı gibi, her iki konuda da saldırıya tabidir. Örneğinizi kullanma:

anti-paternler sadece başka bir yol yoksa ve o zaman bile sadece çok sınırlı koşullarda kullanılır

Anladığım kadarıyla, bu anti-paternlerin ortaya çıkma yolu değil. Kültürel ve sosyal faktörlerin birikmesinden kaynaklanmaktadır; önemli bir süre boyunca en iyi uygulamaları ve standartları göz ardı etme; kısa vadeli faydalar elde etmek için gelecekteki maliyetleri göz ardı etmek - örneğin bir bakım kabusu olan kısa yol çözümünü kullanarak bir son teslim tarihine ulaşmak; Hiçbir vücut kasıtlı olarak bir anti-patern benimsemeye karar vermez - sadece büyürler.

Aynı şekilde, sağduyu "yaygın olarak yapılan" anlamına gelmek için çok sık kullanılır ve çözüm sağlamada neyin çözüleceğine dair düşünce, içgörü ve sıkı çalışmanın eksikliğini haklı çıkarır. Aynı zamanda “benim yaptığım gibi, açık bir şekilde sağduyu” için bir gerekçe olarak ve inceleme ve eleştirilere karşı bir savunma olarak da kullanılır.

En iyi uygulamalar söz konusu olduğunda, @ Michael'ın ilk iki paragrafı en iyi uygulamanın ne olması gerektiğinin mükemmel bir özetidir - herkesin yaptıklarını geliştirmesine yardımcı olacak bir kaynaktır. Ayrıca kararların şeffaflığını (özellikle tasarım kararları) ve başkalarından öğrenme yeteneği sağlar. En iyi uygulamanın dezavantajı, bir kontrol listesi kültürü oluşturmasıdır - "tüm kutuları işaretledim, bu yüzden yaptığım şey iyi olmalı" - kontrol listesinin uygulanabilirliğinin doğasına düşünce, özen ve dikkat uygulamadan.


1

Bu genellikle dini bir savaşa dönüşen kaygan bir eğim argümanıdır.

Hemen hemen en iyi uygulamalar, bunun tersini yapmak için geçerli bir dava ile karşılanabilir.

Bazı en iyi uygulamalar diğerlerinden daha "en iyi" dir. Küresel durum değişkenleri neredeyse her zaman farklı bir şekilde daha iyi yapılır ve GOTO genellikle kötü bir fikirdir, ancak desen / anti-desen veya doğrudan veri / soyutlanmış veri argümanlarına girdiğinizde biraz daha az netleşir. Hatta daha çok geliştirme metodolojileri ve uygulamaları hakkında konuşmaya başladığınızda.

Bazı durumlarda sağduyu ve en iyi uygulamalar birbirine zıttır.

En iyi uygulamaların yönetim organı yoktur ve mevcut olsa bile tek bir grup olası her durum için mümkün olan her "en iyi" yi tanımlayabilir. En iyi uygulamalar olarak etiketlenmiş birçok şey, bilgisiz birey araçları veya eğitimi satmaya çalışan kötü pazarlamadır.

Ekibinizin tamamı bir şeyin en iyisi olduğunu kabul etse bile, çeşitli kısıtlayıcı faktörler için bu şekilde uygulamak her zaman mümkün değildir.

IMHO, tasarımınızda nelerin daha dikkatli düşünüleceğine dair en iyi uygulamaları bir rehber olarak kullanmalısınız. Sapma için geçerli bir nedeniniz olabilir, ancak muhtemelen takımdaki herkesin gitmeden ve garip bir şey inşa etmeden önce kabul ettiğinden emin olmanız gerekir.

Bu noktadan sonra en iyi uygulamalarla ilgili tartışmaların bazıları, üzerinde çalışacak bir sonraki geliştiricinin nefret edeceği bir şey inşa etmemek için hemen hemen kaynar. Herkes kendi tarzı olmayan koddan nefret eder ve herkes ayrılan herkesin her şeyi suçlar, bu yüzden ya bir şey hakkında homurdandıktan sonra bir sonraki geliştiriciye açıklayacaksınız, ya da orada olmayacak ve kötü konuşmayacaksınız. nasıl kodladığınıza bakılmaksızın. Bu endişeyi çoğunlukla önemsiz kılar.


1

Sağduyu her zaman en iyi sonuçları vermez. Ancak en iyi uygulamalar denenmiştir. Bu, en iyi uygulamaları daha güvenilir bir bilgi kaynağı haline getirir.


0

En iyi uygulamalar iyi değildir ve sağduyu yaygın değildir. ;-)

En iyi uygulamalar ya da sağduyu için, onları kalıp olarak düşünmeyi seviyorum; A: Bir desen tanımını Ol çözeltisi bir in bağlamında çözme kuvvetlerine bir içine elde edilen bağlam .

Yapmak istediğiniz herhangi bir şey için, geçerli olduğu bağlamı, çözdüğü kuvvetleri ve ortaya çıkardığı bağlamı bilmelisiniz. Ardından, ekibinize genel olarak kullanacağınız kalıpların ne olduğuna karar verin. (Bu resmi veya gayri resmi olabilir, ancak her iki durumda da, sadece Gang of Four kitabından çok daha büyüktür. Bu, sadece yayınlanan kalıpları değil, dil deyimlerini ve yerel yardımcı kütüphaneleri içerir.)

Deneyiminize dayanarak, belirli bir durumda, belirli bir desen kullanmamanın, ancak başka bir şey yapmanın daha iyi olacağını düşünüyorsanız, insanlara bildirin. Muhtemelen bağlam veya güçler burada farklıdır (veya belki de sonuçta ortaya çıkan bağlam istenmeyen olacaktır.) Bu bir toplantı mı, kod yorumu mu yoksa ne olduğu umurumda değil, ancak kalıbı bilerek kırdığınızı açıkça belirtirseniz , mil ilerde olacaksın.


-1

En iyi uygulama size okulda öğrettikleri şeydir, sağduyu patronun sizden istediği şeydir. İlki, belirli zarafet, stil ve benzeri standartları karşılayan yazılımlar oluşturur. İkincisi faturaları öder / böylece her hafta ödeme alır.

Biri sanat, diğeri iş, çoğumuz bunu unutuyoruz.


Patron, hareket tarzınızı nasıl rasyonelleştirdiğinizi umursamıyor, sorun yaşamamakla ilgileniyor. 'Sağduyu ile başarıldı' adını verdiğiniz bir çözüm, ona 'en iyi uygulamaları takip ederek' ulaştığınız kadar iyi
keppla

Cevabımı yeniden ifade edeyim. En iyi uygulama, çoğu yazılım evinde eşanlamlı oldukları ölçüde, aşırı mühendislik için bir bahane olarak kullanılır. Common Sense, projenin başarılı (genellikle ticari) tamamlanması amacıyla aşırı mühendislikten kaçınıyor.
mattnz

-1

Biraz abartmak için: Fark Ortak Anlamdır Önyargı, En İyi Uygulama Bilim (olmalı)

Deneyimlerime göre, bir şey yapmanın bir yolu için kanıt veya en azından argüman sağlamak istemediğinde 'Ortak Akıl' kullanılır. Bu, yolun zorunlu olarak yanlış olduğu anlamına gelmez, ancak bunun da iyi olduğu anlamına gelmez.

Karşılaştığım şeyler arasında, sağduyu olarak rasyonelleştirilen şeyler arasında bu taşlar var.

  • HTTP-Metodu büyük ölçüde ilgisizdir, az veri aktarırken GET kullanın, daha fazla aktarırken POST kullanın (yani URL için çok fazla)
  • işlevler çok küçük olmamalıdır, çünkü ne yaptıklarını hatırlamak zor. bir büyük işlev 5 küçük işleve tercih edilir, çünkü tek olarak okuyabilirsiniz
  • veritabanı ve web sunucusu aynı makinede ÇALIŞMALIDIR, aksi takdirde web hizmeti yavaşlar. Ölçeklemenin tek yolu kodu hack'lerle ve soyutlama yaparak hızlandırmaktır, böylece bir makinenin gücü yeterlidir.

'Sağduyu' ile ilgili komik olan şey, o kadar yaygın olmamasıdır: iki takım seçin ve onların 'sağduyu' ne olduklarını belirtmelerine izin verin ve dini savaşların tadını çıkarın.

Öte yandan, 'En İyi Uygulama' olarak, biraz daha 'akran değerlendirmesi' olan şeyler yapmanın yollarını düşünürdüm. Bir şeyi 'en iyi uygulama' olarak değerlendirmek için, bir kavram olarak sunulabilmesi için yeterince açık bir şekilde formüle edilmesini beklerdim ('yapılandırılmış programlama' en iyi uygulamadır, 'gotos kafa karıştırıcıdır, onlardan kaçının' sağduyu) ve birden fazla kez, iyi sonuçlarla uygulanır.


"En İyi Uygulama" nın her durumda her zaman uygun olduğunu ve en iyi uygulamanın bilinçli bir şekilde gerçekleştirilmediği durumlarda kötü ("iyi değil") diyor musunuz?
mattnz

1
Hayır, "En İyi Uygulama" nın tamamen mantıksız davranmama şansı daha yüksek, çünkü sadece bir kişi için makul görünmesi gereken sağduyuya rağmen "akran gözden geçirme" den kurtuldu. Birinin "sağduyu" olarak kabul ettiği bir şeyi uygulamaya karşı değilim, her şeyi sağduyu olarak haklı çıkarmaya karşıyım.
keppla
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.