Programcı olmayanların gelişim sürecini anlamalarını sağlamak


66

Öncelikle bir programlama firması olmayan bir şirket için bir projeye başlarken, beklentilerden biri sonunda tüm hatalardan arınmış ve bitmiş bir ürünün olması ve ihtiyaç duyulan her şeyi hemen yapmasıdır. Ancak, nadiren durum budur.

Beklentileri yönetmenin ve programcı olmayanlara, yazılım geliştirmenin diğer ürün geliştirme türlerinden ne kadar farklı olduğunu açıklamanın bazı yolları nelerdir?


Bazen "kontrol sizde" oluyorsunuz ve teknik olmayan iş arkadaşlarınız cahil, mütevazi ve meraklı değil, kendi yollarıyla zeki. Spektrumun diğer ucunda (benim durumumda olduğu gibi) 1 saat içinde sihir yapmak isteyen biriyle çalışıyor olabilirsiniz ve bir şirketin geliştiricilere neden saygı duyması gerektiğini açıklıyorsunuz. Söylemeye gerek yok, ben bir iş avı yapıyorum. Ne tür bir çevredesiniz, çünkü cevap "Kaçmak, kaçmak!" Olabilir.
İş

Yanıtlar:


34

Hemen hemen bilgisayarlı herkes bugünlerde "böcek" kavramına rastladı, o yüzden buradan başlayabilirsiniz. “Bir uygulamanın sizin için başarısızlığa uğradığı en can sıkıcı yol nedir? Onları çarpın ve test etmeye ve bakıma yeterli kaynak ayırmazsak kullanıcılarımızın deneyimine sahip olacaksınız.”

Ve programcı olmayanlarla iyi bir iş ilişkisi kurmanın değerini küçümseme. Eğer kararınızın güvenilir olduğunu kanıtlayabilirseniz, nedenini tam olarak anlamamış olsanız bile, Y pronto yapmazsanız, X'in olağanüstü şekilde başarısız olacağı alarmını çaldığınızda sizi ciddiye alırlar.


Bunu işaret etmek için +1. Teknoloji uzmanları ve teknik elemanların birbirlerine karşı saygısız olmaları durumunda hiçbir şey bir proje için daha tehlikeli olamaz.
saat

28

Başarılı bulduğum bir yaklaşım şudur:

Hepimiz bir bilgisayarın sadece ve tam olarak ne yapması gerektiğini söylediğini biliyoruz.

Programlama, şimdi bir bilgisayara sonradan ne yapacağımızı söyleyiş biçimimizdir .

Bu, davranışınızın şu anki davranış biçiminin , makinenizde çalışan herhangi bir kodu yazan herkesin birleşik niyetleri nedeniyle olduğu anlamına gelir . İşletim sisteminin karmaşıklığını, sürücüleri, programlama ortamını, kütüphaneleri vb. Göz önüne aldığınızda, çoğu sistemde 20k kişinin katılımı gerektiğini ve 100k'in üzerinde olabileceğini görmek kolaydır.

Her bir kişi tarafından yazılan kod kendi anlayışını, motivasyonunu, niyetini ve kabiliyetini yansıtır. Sistemin kusursuz çalışması, bu 20k kişi tarafından yazılan tüm kodların hatasız bir şekilde etkileşime girmesini gerektirdiği göz önüne alındığında , kodun tümünün , gerekli davranışın anlamı ve yorumlanması üzerinde hemfikir olması gerektiğine göre, şaşırtıcı gerçek şu ki hatalarımız değil, onlardan çok azımız var.


4
"Şimdi ne istediğimizi söylemek" için +1. Ayrıca çoğu yazılımın yeni şeyler yaptığı fikriyle .

12

IMO, çevik süreçlerin (örneğin Scrum, Crystal, vb.) Sunduğu şeffaflığın, kalkınmanın ortalama paydaşlara nasıl çalıştığını gösterme yolunda uzun bir yol kat ettiğini buldum.


1
Gelişimin% 100'ünü yapıyorsanız, bu mükemmel bir stratejidir. Dev'in herhangi bir kısmı başka bir tarafça ele alınırsa, belki biraz uzlaşmanız gerekecek.
JBRWilkinson

3

Metaforla yapılan açıklama sızdıran bir soyutlamadır, ancak işte benim için sıklıkla işe yarayan bazı fikirler:

Bu açıklamaların hiçbiri özensiz çalışma mazeret olmadığını unutmayın.

Her değişkenin hareketli bir parçası olduğu bir bilgisayar programını makine olarak düşünün. Bu, önemsiz bir programı bile yüzlerce hareketli parçadan oluşan bir makine haline getirir.

Bu başarısız olduğunda, bir programın hatasız olduğunu ispatlamak matematiksel olarak mümkün olsa da, çok fazla zaman aldığı ve çabaya değmeyeceği gerçeğine inanıyorum.

Son olarak, Intel ve Microsoft'un hataları önleyemediğini sorun. Bizden nasıl beklerler?


2
Microsoft hakkında çok iyi bir nokta
Casebash 8:10

1
Bir programın bunu yaptığını kanıtlamak imkansız değildir. Ancak, herhangi bir programın sonunda bunu yapmayı bırakıp bırakmayacağını bilgisayarın söylemesi imkansızdır.

1
-1 @ ThorbjørnRavnAndersen doğru. Bu gönderi yanlış. Programların doğru olduğunu ispatlamak çok mümkün (belli bir doğruluk nosyonuna kadar), bazılarımız her zaman bunu yapıyor. Posterin durma sorununun epistemolojik sonuçlarını yanlış anladığını düşünüyorum ve bu nedenle programcı olmayanları yanlış iddialarla karıştırıyor.
Philip JF,

2

Benzer bir soruyu daha ayrıntılı olarak cevapladım , ancak asıl önemli olan "Programlama bir fabrika veya montaj hattı inşa etmek gibidir".


Bu üzücü. Programlamanın bir sanat olduğuna inanıyorum. Çok fazla özelliğe sahip bir şey inşa etmeye çalışıyorsunuz, basit komutların, yöntemlerin ve sınıfların küçük parçalarını oluşturmaya çalışıyorsunuz. Çoğunlukla bir çekiçle çalışmazsınız - şeyleri istediğiniz gibi dikkatlice şekillendirmeye çalışırsınız ...
mhr

@mri - Aslında bir fabrika kuran herhangi biri, ne kadar iyi tasarlanmış olursa olsun, fabrika makineleri ne kadar iyi olursa olsun, parçalarının hala elle sığması gerektiğini söyleyecektir. Araçlarımız elle takmayı kolaylaştırabilir, ancak biz artık çevrimlerden ve hafıza sınırlarından yararlanmak için (çoğumuzun) 'işçiliği' Meclis kodunu kullanmıyoruz. Tıpkı güzel "el yapımı" Esnaf tarzı mobilyalar, gününün otomasyonundan faydalandı.
DaveE

2

Bunu ifade etmenin geleneksel yolu Proje Yönetimi Üçgenidir: kapsam, maliyet ve programın rekabet eden üç kriteri; genellikle "ucuz, hızlı, iyi - iki tane seç" olarak ifade edilir.

At sonunda bir tasarım, geliştirme ve dağıtım işleminin, bir ürünüdür beklenti tasarım kusurları nispeten serbest ve belirli bir işlevi mükemmel makul çalışır. Aynı beklenti bir proje, süreç veya mesleğe ilişkin olarak tamamen makul değildir.

Bilime dayanan profesyonel, sert ya da yumuşak, bir keşif sürecinden geçmez, yanlış ve kesin olmayan kavramsallaştırmalar gerçekleştirmez, optimalin altında olmayan (ya da sadece düz yanlış) taktikleri takip eder, deneme ve yanılma yoluyla neyin işe yaradığını keşfeder ve tekrar eder. ya kaynaklar tükenene ya da yeterli bir performans elde edilinceye kadar tekrar tekrar işlemek mi?

Asemptotik olarak daha yüksek kalite seviyelerine yaklaşabilmesine rağmen, hiçbir işlem hiçbir zaman hatasız değildir.

Bu, taktiklerin genellikle tahminde bulunma ve protokolleri içerdiği tıp mesleği için geçerlidir ve faaliyetlerin çoğu temelde çoğunlukla sulak alan makinelerinde hata ayıklama yapmaktadır. Yeni tasarlanmış malzemelerin uygulamalarının sahada onaylanması gerektiği ve standartlara sıkı sıkıya bağlı kalmasına rağmen yıllar süren aniden başarısız olabileceği inşaat mühendisliği ve mimarlık için geçerlidir. Uygulanan mühendislik veya onarım hizmetlerinde hiçbir hata olmadan, yaşın ve çalışma koşullarındaki değişikliklerin genellikle arıza noktasına kadar performansı etkilediği otomotiv alanı için geçerlidir. Yazılım geliştirme, bu açıdan bu mesleklerden temelde farklı değildir , sadece yeni, amaçlı makinelere odaklanan odak noktasının daha büyük bir kısmını oluşturmaktadır.


Otomotiv karşılaştırması ile harika bir nokta, konuşlandırılmış bir uygulamanın devam eden bakımına dikkat çekmek için harika bir yol.
Kingsolmn

0

Nükleer reaktör kontrolü, derin alan iletişimi veya tıbbi implant cihazları (vb.) Gibi yüksek kaliteli yazılım geliştirme ile ilgili herhangi bir bilginiz varsa, bu seviye yönetim ve kalite güvencesi için maliyet ve teslimat süresi yapısının nasıl olduğunu açıklayabilirsiniz. Tipik işletmelerin yazılım projeleri için karşılayabileceklerinden daha büyük olabilir.


0

Görebilecekleri bir şeyle karşılaştırabilir ve mümkünse her gün kullanabilirsiniz.

Örneğin, otomobil. Arabalar bugün sahip olduğumuzdan daha az rafine ve güvenilir cihazlarla başladı. Arabalar 100 yıldan uzun bir süredir yapılsa da, yazılımlar muhtemelen yaklaşık yarısı kadardır. Bazıları fiyata dahil (renk seçimi gibi), motor boyutu, şanzıman tipi, tekerlek / lastik, trim seviyesi gibi diğerleri de önemli maliyet faktörleridir.

Otomobiller ve yazılımlar için birçok özellik, kalite ve maliyet sürücüsü var. Daha sonra, yazılım teknolojisinin, uzmanlığın kullanılabilirliğinin, hatta inşa edildiğinde bile büyük bir fark yaratacağını tartışabilirsiniz. Uygun şekilde geliştirme döngüleri (örneğin, küçük değişikliklere sahip yıllık modeller, her üç yılda bir gövde / motor / platform değişikliği), müşteri ihtiyaçlarının bir kombinasyonu ve karmaşık bir tasarım süreci tarafından yönlendirilir. Bazı ürünler küçük ve basit görünmeye başlar (Honda Accord'u düşünün), ancak her yıl en yüksek puan alana kadar geliştirildi.

Otomobillerde geri çağırma (çoğu zaman yazılım yükseltmelerinden çok daha maliyetli) ve parça listelerinde değişiklik yapma biçiminde artımlı iyileştirmeler vardır (hata düzeltmeleri düşünün) ve genellikle uzun vadeli desteğe ihtiyaç duyarlar (geriye dönük / ileriye uygunluk düşünün). Eve götürdükten sonra aracınızın maliyetinin büyük bir kısmı gelir. Yazılım maliyetinin büyük kısmı, müşterileri güncellerken ve yükseltirken ilk ürün sürümünden sonra gelir.

Bazı durumlarda, yazılımı veya diğer yazılım ürünlerini içeren iyi bilinen ürünlere başvurabilirsiniz. Örneğin, telefonlar bir serbest bırakma döngüsüne sahiptir ve ilk satıştan sonra daha fazla gelir elde etmek için işlevsellik ekleme güncellemeleri ve yöntemleri vardır. Telefonlar ileri / geri uyumluluk için harika bir örnek. Çok fazla, ve insanlar eskisini yenisini almayacaklar. Çok az ve müşteriler kontratı dolmadan nefret etmeyecekleri bir telefon için umutsuz davranıyorlar.

Windows, Microsoft Office, web tarayıcıları ve web sayfaları gibi ürünler, tartışmalarda kullanılabilecek tüm yazılımlardır. Yıllık veya üç yıllık dönemlerde güncellenmiştir, ancak daha sık otomatik güncellemeler olabilir. Müşterileri farklı derecelerde etkileyen böcekler ve güvenlik delikleri var, ancak elimizden gelenin en iyisini yapmamıza rağmen peyzajın bir parçası. Müşteriler düzeltmeleri ücretsiz alabilir, ancak genellikle bir paket olarak, bazen ayrı bir modül olarak veya bir lisans anahtarı aracılığıyla geliştirmeler için ödeme yapabilirler.

Microsoft, Apple, Google ve Amazon gibi sektör liderlerinin tümü, kullanıcılara nispeten ucuz müşteriler sunmaktadır. Ancak bu ürünleri sağlayan çok büyük masraflar var. Deneyimleri yazılımın pahalı, ancak değerli ve karlı olduğunu gösteriyor. Genellikle kalite, istedikleri tüm özelliklere sahip olma ve zamanlama doğru olduğunda piyasaya girme arasında taviz verirler. Yaptıkları her ürün bir başarı değildir ve bazen köpekleri yeniden adlandırarak, pazarlamayı ve satışları iyileştirerek veya zararlarını azaltarak ve sonraki ürünlerinde öğrendiklerini kullanarak kazananlar haline getirir.


0

Belki de, bire bir veya küçük gruplar halinde ideal olarak, geliştirmeniz gereken yazılım örneklerini kullanmaya çalışın. Kullanım durumlarını tanımladıkları gibi, farklı şeylerin olabileceği durumdaki noktaları tanımlayın (beklenmeyen ancak makul olmayan durumlar). Onları numaralandırmaya başlayın, bazı açıklamalar isteyin ve yapılması ya da çözülmesi gereken tüm kararları ve talimatları ve bunu yaparken yapılan takası açıklayın. Onlar ölene kadar devam et ve sana bir cevap veremem. Şimdi onlarla ne yaptığınızı, hem yüzlerce, hem de binlerce kişi için kursa karar vermede ve kodu yazarken, muhtemelen kendi başınıza, muhtemelen daha az net bir yöne sahip olduklarını anlamalarını sağlayın. kimse tarafından konulabilecek ya da vermeyebilecek davaları kullanın. Ve ne zaman orada Kendinizi düşünmemişseniz, programın ne yapacağını garanti edemezsiniz. Belki de "doğru" şeyi yapar, belki not. Ve bu bir böcek. İşte bu yüzden yazılım yazmak zaman alıyor. Ne kadar az zamanınız olursa, değerlendirme ve uyum sağlama şansınız o kadar az olur ve programın bilinmeyen bir durumda "doğru" şeyi yapmaması daha olasıdır.


0

Maliyet ve Zaman.

zaman

X'i Y zamanında teslim edeceğinize dair beklentileri belirleyin. Daha fazla hiçbir şey olmayacak, daha az olmayacak. O zaman onlara bir sonraki sürümün saat kaçta olacağını söyleyin. İlk başta, X binasının Y miktarını aldığına inanmaya şaşırmış olabilirler - bu, bir yazılım geliştirmenin zamanını ve karmaşıklığını açıkladığınız yerdir. Eğer şaşırmazlarsa, ya çok daha az zaman tahmin edersiniz ya da bina yazılımı hakkında düşündüğünüzden daha iyi bilirler.

Maliyet

Bu, Steve McConnel's Code Compete kitabından (bellekten alıntı yapmak, aynı etkiyi iletemem durumunda afedersiniz) - Müşterilerin yeni özellikler istemeleri kolaydır. Bir ürün yöneticisi olarak, müşterinin ne istediğini söylememelisin. Bu yeni özelliği oluşturmak için ne kadar çaba ve maliyet gerektiğini tahmin etmelisiniz. Yeni özelliğin gerçekten paraya / zamana değmeyeceğini veya belki de gerektirmediklerini yavaş yavaş anlayacaklardır. Onları korkutmak için bu silahı kullanmanı önermiyorum, ama dürüstçe kullan ve eve gitmesinde yardımcı olabilir.


-2

Metaforlar sızdıran soyutlamalar olmakla birlikte sizi anlamaya daha yakın kılan adımlardır.

Benim açımdan, bina yazılımının genellikle bir ev inşa etmeye benzer bir süreç olduğu düşüncesindeyim. Yine de, bazı parametrelere dayanarak özel tasarımlı bir taslak çıkaran ve her bir kullanıcı için farklı bir sistem oluşturan bir sistem oluşturmak olarak düşünmek daha kesin. Geek konuşmada bu meta-architeting olmak.


-2

Onlara kod yazmanın ne anlama geldiğini gösterdiğinizde gerçekten yardımcı olabileceğini öğrendim. Paydaşlara birlikte çalıştığınız kod tabanını gösterin. İyi değişken ve yöntem adları seçmiş olsanız bile, insanların çoğu bir tür kara büyü kullandığınızı düşüneceklerdir. Belki de yazılımları için yeni bir özellik uygulamak için neden "birkaç gün" den daha fazlasına ihtiyacınız olduğunu anlarlar.


Bu kötü bir fikir IMO. Islak zemini temizlemenin ne kadar zor olduğunu göstermek için müşteriye bir paspas koymak gibi.
Sundeep
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.