Tasarım tercihlerinin neden iyi olduğunu nasıl açıklayabilirim? [kapalı]


26

Daha iyi bir geliştirici olduğum için tasarım becerilerimin çoğunun sezgiden mekanik analizden daha fazla geldiğini biliyorum. Bu harika. Kod okumamı ve daha hızlı hissetmemi sağlıyor. Tasarımları diller ve soyutlamalar arasında çevirmemi sağlıyor. Ve işleri daha hızlı halletmemi sağlıyor.

Dezavantajı, belirli bir tasarımın neden avantajlı olduğunu ekip arkadaşlarına (ve daha kötüsü, yönetime) açıklamayı zor bulmam; özellikle en iyi uygulamalarda zamanın gerisinde kalan takım arkadaşları. İnternethaber.com "Bu tasarım daha test edilebilir!" veya "Mirasa ilişkin kompozisyonu tercih etmelisiniz" kafalarının tam üzerine gidin ve yazılım mühendisliği alanındaki son on yıla kadar herkesi ipucu vermeye çalışıyorum.

Elbette pratik yaparak daha iyi olacağım, ancak bu arada çok fazla boşa harcanan zaman ve / veya kötü tasarım (daha sonra onu boşa harcayarak zaman kaybına neden olacak) içerir. Yararları izleyiciler için tamamen açık olmadığında, belirli bir tasarımın neden üstün olduğunu daha iyi nasıl açıklayabilirim?


1
Nasıl olduğunu öğrenirseniz bana haber verin .. Normalde önerdiğiniz gibi örnekler kullanıyorum ve test edilebiliyor ya da sürdürebilirliği vurguluyorum, ancak bu kavramlar millet için kaybolduğunda, bu konular için izleyicilerle iletişim ortamına sahip olmak için mücadele ediyorum. .
Jimmy Hoffa

4
Neyin ifade edilmesinin zor olduğunu anlamak için zaman ayırmanızı öneririm. Ne hakkında konuştuğunuzu tam olarak biliyorum, çünkü gerçekten bu tasarım problemini tasarımcı bacaklarımı almaya başladığımda yaşadım. Nedenini ve neyi bulmadığını gerçekten anlamadığım için memnun değildim.
Joshua Belden

1
@JoshuaBelden - Seni doğru anlıyorsam - sorunum nedenini bilmekle ilgili değil . Buraya gelip neden bu genel şeylerin iyi olduğu hakkında uzun cevaplar verebilirim . Bunu şahsen iyi yapamıyorum, özellikle bu tür siteleri ziyaret etmeyen programcılara (veya programcı olmayanlara), eldeki sorun için geçerli bir şekilde (bu genellikle 2-3 adımdır) tasarımdan kaçınıyor) sorundan çıkarıldı). SOLID gibi şeyler ve iyi birim testleri nasıl yazılacağı konusunda bir eğitim programı başlattık, ancak zaman alıyor.
Telastyn

2
@DanielB Bence bu bir sorun, geçmişte tasarım seçimleriniz için tam olarak ikinci argümanınızı kullandım ve "Yine de KISS değil" yanıtıyla karşılaştım. Tüm geliştiriciler, az önce bahsettiğiniz şeylerin neden iyi olduğunu bile bilmiyor.
Jimmy Hoffa,

1
Tavsiye edilen okuma: $ {something} 'i $ {someone}' a nasıl açıklarım? - Zamanın başlangıcından beri
15'te

Yanıtlar:


41

Bu doğrudan sorunuzu yanıtlamayabilir, ancak sizi ilginç bir yöne yönlendirebilir.

Ben daha ilişkilidir yapmanız gerekenler düşünüyorum satan daha fikri üzerine bunları açıklayan onlara. Satış, tümüyle müşterinin sorununun ne olduğunu anlamak ve daha sonra onlara ürününüzün (veya geliştirme yönteminin ne şekilde) onlara fayda sağlayacağını göstermekle ilgilidir . Her insanın farklı ihtiyaçları vardır, bu nedenle bir kişiye fayda sağlayan ve onları heyecanlandıran şeyler başka birini soğuk bırakabilir.

CEO’nuzun pazara sunma zamanının anahtarı olabilir, yöneticiniz için daha öngörülebilir programlar olabilir, programlama iş arkadaşlarınız için daha hızlı kodlama olabilir (veya daha kolay test / dokümantasyon / hata ayıklama / ne olursa olsun) ve şirketinizin müşterileri için olabilir ... ?

Satışlar otomatik olarak gerçekleşmez - diğer kişinin bakış açısını anlamak için uyumlu bir çaba göstermeniz ve ardından fikirlerinizi Happy Place ™ 'lerinde nasıl haritalayacağınıza karar vermeniz gerekir. Onlar nasıl öğrendiğinizde onlar şahsen bu yeni şey yararlanacak, genellikle "ne kadara mal olacak ve bunu ne kadar kısa sürede yapabiliriz?" Diye sorarlar Bu sihirli kelimeleri duyduktan sonra, satış işinizi iyi yaptığınızı biliyorsunuz.


5

Sorunuza gerçekten bir çözümüm yok ama bir süre önce de aynı ikilemle karşılaştım ve aynı soruyu tam olarak cevaplamaya çalışıyordum.

Kendimi argümanın bir tarafında, diğer tarafında bir başkası bulurdum ve vücudumdaki her lif bana doğru tasarımın X olduğunu söylese de, kelimeleri kullanarak onu geri alamazdım.

Daha da kötüsü, bazen noktayı kabul edeceğim ve diğer kişinin sadece tasarımlarının yüzüme çarpması için kendi yöntemlerini kullanmasına izin vereceğim ve sonra şunu düşüneceğim, "Evet, bu neden istemediğimin mükemmel bir örneği. bu şekilde yapmak. Keşke bu kodu onlara geri gösterebilseydim. "

Aslında cevabı hiç bulamadım ama birkaç gün önce Lean Software Development: An Agile Toolkit, Cevabın gerçekten varolmadığını önerebilecek ilginç bir şeyle karşılaştım. Kitabın bir bölümü, özellikle acil müdahale birimlerinde ve bu liderlerin nasıl karar verdiklerinde diğer alanlardaki liderlerden bahsediyordu. Bir yangın olduğunda veya birileri size ateş ettiğinde, bu liderler asla oturmazlar ve takım arkadaşları ile artılarını / eksilerini tartışırlar. Bunun yerine, karar vermelerine yardımcı olmak için eğitim ve deneyim yoluyla geliştirilen sezgiyi kullanırlar. Mesleğimiz için de aynı şey geçerli: Yazılım geliştirmede çok yaygın olan bir sürü bilinmeyen ve değişkenlikle karşılaştığında nasıl tamamen mantıklı bir karar verebilirsiniz? Yazarlar, her kararı gerekçelendirmek yerine, geliştiricilerin içgüdülerini eğitmeleri ve geliştirmeleri yönünde teşvik edilmeleri gerektiğini ve böylece sonunda ne yapacaklarını "sadece bileceklerini" söylediler.

Bu argümanları aşmanın tek yolu, çalışmalarımın kanıtlanmış bir sicilini oluşturmak. Ekibimdeki yönetime ve diğerlerine kodumda verdiğim tasarım kararlarının bakımı kolay, genişletilmesi ve daha güvenilir bir kod verdiğini göstermek. Bunu tekrar tekrar yapıyorsunuz ve insanlar sizi fark edecek. Bu noktada, yalnızca içgüdülerinize dayanan kanaatiniz bugün olduğundan çok daha fazla ağırlığa sahip olacak. Bu strateji, patronum da dahil olmak üzere ekibimin% 90'ı ile çalıştı. Ne yazık ki, tamamen inatçı olan ve bir şeyleri istediğin gibi görmeyi reddedecek bir veya iki adam bulabilirsin. Bu noktada, birkaç seçeneğiniz var:

  1. Rütbeyi almaya çalışabilirsiniz (Patronuma gidip rütbe istemek zorunda kaldım çünkü bu çıkmaz tartışmalardan çok yorgundum)
  2. Takımın çoğunluğunun sizi desteklemesi için lobi deneyebilirsiniz.
  3. Eğer proje karşılayabiliyorsa (yani verimlilikte çok fazla kayıp olmazsa), sizce kötü bir karar nedir, diğer kişinin tartışmayı kazanmasına izin verin. İki şeyden biri olacak:
    • Bazı durumlarda (umarım çok küçük bir kısmı), sezginiz yanlış olacaktır ve bir şeyler öğrenmeye başlayacaksınız. Aferin.
    • Çoğu durumda (yine ... umarım), siz ve "kötü" tasarımını savunan kişi tam olarak neden kötü olduğunu anlayacaksınız; tüm görüşten sonra her zaman 20/20. Umarım, bu, muhtemelen ne hakkında konuştuğunuzu bildiğiniz ve bir dahaki sefere kendi davalarını iki kez düşüneceklerini düşünecekleri bir ders olacaktır.

4

Eh, bu cevap gerçekten düşündüğünüz gibi programlamaya özgü değildir. Anladıkları şeylere geri getirmek zorundasın.

Miras üzerindeki kompozisyon gibi bir şey varsa, muhtemelen şu anda geliştiricilerin% 90'ının en iyi uygulamanın (kısmen geliştiricilerin% 100'ünün neredeyse hiçbir şey üzerinde hemfikir olmadığı gerçeğine dayanan vahşi bir tahmin) ve sizce katılıyorum ve neden gitmek için mutlu olurdu.

Tartışmalı olanlar ve geliştiricilerin yüzde kaçının benimle aynı fikirde olacağı konusunda olabildiğince dürüst olmaya çalışıyorum.

Bu genellikle yönetimle daha iyi çalışır ve geliştiricilere göre daha iyidir; bu da muhtemelen sizi gerçekten iyi bir tasarım savunucusu olup olmadığını ve bunu nasıl bildiğinizi açıklayan tavşan deliğinden aşağıya indirmenize neden olur. Bunda övgüye değer bir şey var, ama bu çok zaman harcayacağınız anlamına geliyor. Bu tür şeyler için sözünüzü almak için yeterince güvenmedikleri sürece, en azından geçici olarak. İyi tarafta, sizi yanlış olduğuna ikna edebilirler; bu da sizi yol boyunca ikna eden soğuk, zor gerçeği yener.

Bir tasarımın daha test edilebilir olması gibi şeyler için, daha test edilebilir olduğunu kabul etmiyorlarsa, ilk örnekle hemen hemen aynı. Daha fazla test edilebilir olmanın istendiği konusunda hemfikir değillerse, anladıkları şeylere geri getirmelisin. Bu büyük olasılıkla yönetim olacaktır ve uzun vadede daha düşük geliştirme maliyetleri, daha az KG, daha öngörülebilir süreçler (tekrarlanan KG döngülerinin uzunluğunun tahmin edilmesi zor olduğu için) hakkında konuşabilirsiniz.

Bence problemin bir parçası, bir ekibin tartışmalı bir konuda sizinle aynı fikirde olmasının ne kadar zor olduğunu hafife almanızdır, doğru olsanız bile (ve tabii ki olmayabilirsiniz). Programlama kısmen sosyolojik bir egzersizdir ve bu tavşan deliklerinden bazılarını aşağı çekmek için zaman planlamanız gerekebilir, çünkü kimsenin anlamadığı veya geride bıraktığı harika bir tasarım pratikte nadiren harika bir tasarımdır. Bu zamanı boşa harcamayın, projenizin başarısının gerekli bir parçası olarak düşünün. Bir şekilde atlayabilseydin daha kolay olurdu.


Belki. Tavşan deliğinin olmadığı takımlara alışkınım. Ortak bilgiye basit bir referans yeterliydi. Ya da sadece tasarımda satılması gereken ilanlar ... gerekli kısımda iyi nokta; bu Peter'ın satış noktasını zorlaştırıyor olsa da:]
Telastyn

@Telastyn - Sanırım "çalışacak daha iyi eğitimli insanları al" için cevap var :)
psr

3

Değişimin tek sesi olmak asla kolay bir şey değildir. İlk zorluk genellikle diğer insanları da yanınıza almaktır (Umarım şirketinizde diğerlerinden daha açık fikirli olan bazıları vardır). Bir kaç diğer üst düzey geliştiricinin / yöneticinin haçlı seferine katılmasının dikkatini çekebilirseniz, bu birleştirilmiş sesler diğerlerinin görmezden gelmesi için daha da zorlaşacaktır.

İnsanlara açıklamak için iyi bir yol buluyorum; aktif olarak yer aldıkları projelerde yapılan geçmiş hataların somut örneklerini sunarak (örneğin, "Bu şeyi ayıklamayı hiç denediniz mi? düzelt.."). Daha da iyisi, bu 'yeni' tasarım fikirlerini ve ilkelerini küçük / deneme projesine uygulamak ve sonunda ne kadar başarılı olduğunu gösterebilmek.

Şirketinizdeki diğer kişilerin tutumlarına bağlı olarak, değişiklik hızlı bir şekilde gerçekleşebilir veya bu, vatana kadar yüzmeye çalışmak gibi olabilir. Bazı yöneticiler, önlerinde somut istatistikler / kanıtlar olmadığı sürece, diğerlerinin de en son düşünceye ayak uydurmakta çok istekli oldukları durumlarda, tamamen taşınmaz durumdadır.

Kiminle uğraştığınıza bağlı olarak farklı taktik denemeniz gerekebilir; Paranın / zamanın / çabanın kurtarılabileceğini ve kalitenin iyileştirilebileceğini önermek, teknik olmayan yöneticilerin dikkatini çekmek için iyi bir yoldur; ve kolay otomatikleştirilmiş test vaadi, genellikle aynı test tablolarında tekrar tekrar çalışarak harcama günlerine dayanamayan birçok geliştiriciye hitap ediyor.


0

Seyirciye bağlı! Geliştiriciler olarak, iyi ve kötü kod için bir sezgi geliştirdik ve "kod kokusu", "çirkin kod", "güzel çözüm" gibi belirsiz duygusal terimler kullanıyoruz. Bu sadece aynı zihniyetteki diğer geliştiricilerle iletişim kurarken çalışır. Teknik olmayan CEO'nuzu açıklamaya çalışın, x kodunu “daha ​​güzel” yapmak için x adam-saat harcayacağınızı, muhtemelen muhtemelen başarısız olacağınızı açıklayın.

Herhangi bir tasarım iyileştirmesinin ya da

  • şirket için para biriktirmek
  • şirket için para kazanmak

Örneğin, tek sorumluluk ilkesine bağlı kalmanın durumu nedir? Her sınıfın tek bir sorumluluğu varsa, hataları bulmayı ve düzeltmeyi daha kolay hale getirir ve özellik ve iyileştirmeler eklemeyi kolaylaştırır. Daha az zaman hataları düzeltmek ve özellikler eklemek = para tasarrufu.

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.