Geliştirme yöntemleri bir geliştiricinin bireyciliğini ezmeli mi?


9

Üniversitenin son dönemindeyim ve bir yazılım mühendisliği kursu alıyorum. Sınıfta çeşitli yazılım geliştirme yöntemlerini öğreniyoruz. Odaklandığımız ve projemizi geliştirmek için kullandığımız şelale yöntemiydi.

Eğitmenin yanlış uyguladığını hissediyorum. Sınıf diyagramlarımızda, özel olanlar da dahil olmak üzere TÜM özellikleri ve yöntemleri listelemek zorunda kaldık. İşlevleri olabildiğince kısa ve odaklanmış tutmak için Temiz Kod adlı birkaç kitap okudum. Diğer geliştiricilere yardım etmezlerse, şemalarımızdaki her küçük işlevi listelemek sıkıcı görünmektedir (özeldir, başka kimse bunları kullanmaz). Ayrıca, programı tasarlarken her küçük işlevi düşünmeyebilirim, yeniden düzenlerken ortaya çıkabilirler.

Eğitmen her fonksiyonu listelememizi isteyerek bize yanlış mı söyledi? Ve bu tasarım yöntemleri, geliştiricinin bireyciliğini en iyi nasıl anlayabileceklerini kod yazmak için eziyor mu?


20
Sınıfınızın yazılım geliştirme için kötü süreçlerin kanonik bir örneği olan Şelale yöntemini öğretmesi oldukça kötü.
whatsisname

6
Bu sınıfın size çok şey öğrettiğini söyleyebilirim.
JeffO

7
Aslında, orijinal şelalenin birbirlerine geri bildirim yapan iterasyonları vardır. Yıllar boyunca Şelalenin yanlış öğretimi, yararlılığını yok etti. Scrum gibi bir şeyle bile, bir Sprint'te bir Hikayenin attığı adımlar kendi içine bir şelalenin öykünmesini taklit eder. UML diyagramları yalnızca üst düzey tasarım için kullanışlıdır. Kod yazılır yazılmaz, koddan önce yazılan belgeler artık güncel değil. Bu mühendisliğin gerçekleşmesidir. Sonunda, kod dokümantasyon olmalıdır.
Andrew T Finnell

10
Hemen hemen her geliştirici, geliştirilmesinin ezilmesi gereken bireysellik vakalarını gördü. (Muhtemelen şelale metodolojisi ile değil).
psr

2
@whatsisname, kesinlikle katılmıyorum. Her geliştirici Şelale gelişimini öğrenmelidir, böylece kötü yazılım geliştirmenin kanonik bir örneği olarak ANLAYIN ve DENEYİN. Ayrıca, birçok dükkan hala doğru ya da yanlış için Şelale'dir ve bunun için mezunların hazırlanması önemlidir.
maple_shaft

Yanıtlar:


10

Eğitmene neden tüm yöntemleri listelemeniz gerektiğini sordunuz mu?

Bir sınıf ortamında istenenlerin çoğunda olduğu gibi, niyetiniz sınıf diyagramlarınızı geliştiriciler için daha yararlı hale getirmek değil, size ve sınıf arkadaşlarınıza sınıflarınızı nasıl tasarlayacağınızı düşünmelerine yardımcı olmaktı. Öğrenciler daha büyük problemleri daha küçük problemlere nasıl ayıracağını öğrenirken, muhtemelen hangi özel yöntemlere ihtiyaç duyacaklarını düşünmeleri yararlı olacaktır. Ve muhtemelen, birisinin tasarımı iyi düşünülmezse, sürecin erken aşamalarında müdahale etmek için öğrencilerin hangi yöntemleri uygulamayı düşündükleri hakkında daha iyi bir fikir edinmesi için eğitmen için yararlıdır. Bir sınıf ortamındaki dokümantasyon, gerçek dünyadaki dokümantasyondan çok daha fazla dahil olur çünkü eğitmen

Tabii ki, eğitmenin bu düzeyde dokümantasyonun gerçek bir projede yardımcı olduğuna inanması da mümkündür. Durum buysa, eğitmen muhtemelen güncel değildir veya bu planlama ve belgelendirme düzeyinin uygun olduğu belirli bir niş geçmişten gelmiştir. Örneğin, uzay mekiği için navigasyon sistemi oluşturuyorsanız veya tıbbi cihazlar tasarlıyorsanız, geliştirme sırasında kodu yeniden düzenlemek yerine, ön taraftaki tasarıma yatırım yapmak genellikle çok daha uygundur. Bir sosyal ağ sitesi geliştiriyorsanız, daha çevik bir yaklaşım daha uygundur.


+1, farklı amaçlar için farklı tasarımın nasıl gerekli olduğunu belirtmek için. Sınıf tasarımı ile ilgili iyi noktalar; eğitmene sormak iyi bir fikirdir
Ethel Evans

1
Bir kolej dersini geçme kuralını hatırlayın: Profesörün ne istediğini öğrenin ve bunu verin.
Christopher Mahan

9

Hayır, eğitmen size şelale yöntemini kullanıyorsanız tüm özellikleri ve yöntemleri önceden listelemeyi söyleme hakkına sahiptir. Wikipedia bir şelale eleştirisine dikkat çekiyor:

Birçoğu, şelale modelinin uygulamada kötü bir fikir olduğunu iddia ediyor - önemsiz olmayan herhangi bir projenin, bir sonraki aşamaya geçmeden ve onlardan öğrenmeden önce bir yazılım ürününün yaşam döngüsünün bir aşamasını mükemmel bir şekilde bitirmesinin imkansız olduğuna inanıyor. Örneğin, müşteriler çalışan bir prototipi gözden geçirmeden ve ona yorum yapmadan önce tam olarak hangi gereksinimlere ihtiyaç duyduklarını bilmeyebilirler. İhtiyaçlarını sürekli değiştirebilirler. Tasarımcılar ve programcılar bunun üzerinde çok az kontrole sahip olabilirler. Tasarım tamamlandıktan sonra istemciler gereksinimlerini değiştirirse, tasarım yeni gereksinimleri karşılayacak şekilde değiştirilmelidir. Bu, etkili bir şekilde çok sayıda çalışma saatini geçersiz kılmak anlamına gelir, bu da özellikle projenin kaynaklarının büyük bir kısmı Büyük Tasarım Önüne yatırılmışsa artan maliyet anlamına gelir.

Bu tasarım yöntemleri, tasarımın bireyciliğinin uygulayıcısını ezmez, çünkü hala yorumlanacak parçalar ve kişinin yapısına benzersiz dokunuşlar koymanın yolları vardır, örneğin bir iskelet verilen resim ve kas ve diğer dokuları ekleyerek ne kadar olduğunu merak eden bir hayvan yaratmak o hayvanı tasarlamak zorunda mıydın?

Şelalenin eksik olduğunu gördünüz, ama her şeyin güçlü ve zayıf yanları var.


4

Sınıfta çeşitli yazılım geliştirme yöntemlerini öğreniyoruz. Odaklandığımız ve projemizi geliştirmek için kullandığımız şelale yöntemiydi.

Muhtemelen başlangıçtan itibaren belirtilen yazılım geliştirme dünyasına tanıtmakla ilişkilendirilen klasik Şelale modelini öğrendiniz, büyük ölçekli yazılım sistemleri geliştirmek için uygun değildi. Muhtemelen birçok insanın Şelale modeli olduğunu düşündüğü sorunlarla ilgili daha fazla bilgi edinmek için Winston Royce'un Büyük Yazılım Sistemlerinin Geliştirilmesini Yönetme başlıklı makalesini okumak istersiniz .

Bununla birlikte, Şelale modeli, yazılım geliştirme yaşam döngüsünü ilerlerken öğretmek için iyidir ve mühendislik, mimari tasarım, ayrıntılı tasarım, uygulama, test ve bakım işlemlerini öğrenmek ve gerçekleştirmek için çok net, farklı aşamalarda zaman harcayabilir.

Sınıf diyagramlarımızda, özel olanlar da dahil olmak üzere TÜM özellikleri ve yöntemleri listelemek zorunda kaldık. İşlevleri olabildiğince kısa ve odaklanmış tutmak için Temiz Kod adlı birkaç kitap okudum. Diğer geliştiricilere yardım etmezlerse, şemalarımızdaki her küçük işlevi listelemek sıkıcı görünmektedir (özeldir, başka kimse bunları kullanmaz). Ayrıca, programı tasarlarken her küçük işlevi düşünmeyebilirim, yeniden düzenlerken ortaya çıkabilirler.

Bunların hepsi çok geçerli noktalar.

Şelale kullanılırken bile tasarım aşamasında tüm özelliklerin ve yöntemlerin listelenmesi muhtemelen aşırıdır. Temel özelliklerin yanı sıra halka açık olan her şeyi kesinlikle listelemelisiniz. Gerçekte, diğer her şey, uygulamanızı diyagramlara tersine çevirerek elde edebileceğiniz bir uygulama detayıdır.

Clean Code'un tavsiyesi (Hiç okumadım - sadece yayınladığınız şeyle gidiyorum) Şelale metodolojisini kullanırken bile adil ve uygulanabilir görünüyor. Sınıflarınızı ve yöntemlerinizi Tek Sorumluluk İlkesi , endişelerin ayrılması ve diğer SOLID ilkeleri doğrultusunda tasarlayabilirsiniz . Şelale size nasıl tasarlamanız gerektiğini söylemez. Bununla birlikte, uygulama sırasında bunu yapmanın daha iyi yollarını öğrendikçe ve düşündüğünüzde ön tarafta daha zor olduğunu söyledi.

Bence bu, tasarım ve uygulama arasında çok açık bir şekilde yinelemenin gerekli olduğu gerçeğine işaret ediyor - geleneksel Şelalenin açıklanmadığı bir sorun.


1
@pillmuncher Çok az insan okudu, biraz üzücü.
Thomas Owens

3
Bu makalenin en üzücü yanı, çoğu insan aslında içinden şelale keşfetti, bu ise uygulamayı tamamen gözden düşüren bir kağıt.
Joeri Sebrechts

3

Diğer geliştiricilere yardım etmezlerse, şemalarımızdaki her küçük işlevi listelemek sıkıcı görünmektedir (özeldir, başka kimse bunları kullanmaz).

Bunun sıkıcı olduğunu düşünüyorsanız, gerçek bir iş programlama elde edene kadar bekleyin. Bir an için, bu yazılımın sizin için uygun bir kariyer olmadığını düşünün.

Ayrıca, programı tasarlarken her küçük işlevi düşünmeyebilirim, yeniden düzenlerken ortaya çıkabilirler.

Yani?

her fonksiyonu listelememizi isteyerek eğitmen bize yanlış mı söyledi?

Hayýr. Bu ortak bir gereklilik.

Ve bu tasarım yöntemleri, tasarımın (geliştiricinin) bireyciliğini en iyi nasıl anlayabileceklerini kod yazmak için eziyor mu?

Evet. Bireylerin ruh ezmesi, yazılım geliştirmenin önemli bir parçasıdır. Tüm bireysellik, tüm programcılardan mümkün olan her şekilde yenilecektir. “Tanrı'nın Programlama Kuralları” nda bir yerde bir dağdan bir peygambere teslim edildiğini söylüyor.

Hayýr. Sadece tediumda bađlýyorsun. Üstesinden gel ve işe geri dön.


1
@FreshDaddy. "Onlar (çoğunlukla) hiçbir zaman özel işlevleri görmeyecekler." Yanlış. Piyangoyu kazandıktan sonra, diğer programcılar kodunuzu devralacak ve özel işlevleri görecektir. Ayrıca. Bazı diller (örn. Python) bu tür mahremiyetten kaçınır.
S.Lott

2
@ S.Lott - Her özel işlevi listelemek hiç de ortak bir gereklilik değildir. Bu, beni yanlış anlamayın, ancak tam ölçekli bir "kod yazmadan önce her özel işlevi listeleme" kesinlikle oldukça nadirdir. "Gerekli tedius" var ve sonra "değersiz tedius" var. Programcıların "değersiz tedius" u ortadan kaldırma işini göz önünde bulundurarak, gerçek dünya müşterileri, "yaşam ya da ölüm" tipi kod olmadıkça, bu kadar pahalı ve anlamsız bir şey istemeyeceklerdir.
Morgan Herlocker

1
@ironcode: '"kod yazmadan önce her özel işlevi listele" kesinlikle oldukça nadirdir.' Benim tecrübelerime göre değil. İnsanlar tasarım yapmayı böyle öğreniyorlar. Genç programcılar, çalışmalarının bu düzeyde bir gözetim gerektirmediğini kanıtlayana kadar genellikle bu standarda sahiptirler. Genellikle bir yıldan az. Okuldan n00bs alan ve gözetim olmadan programlamada onları atan bir organizasyon çoğunlukla sadece büyük sorunlar yaratıyor. Bu gözetim düzeyi, kodun savaşma şansına sahip olduğundan emin olmak için gereklidir.
S.Lott

1
@S Lott - benim sloganım yazılım geliştirme sıkıcı ise, yanlış yapıyoruz. Biz programcıyız. Tediumu otomatikleştiriyoruz. Kendimizi kod olarak tekrarlamıyoruz ve kendimizi de dokümantasyonda tekrarlamak için bir neden yok.
kevin cline

1
@kevin: Bu cevap saf alaycılık. Bu nedenle, tamamen uygunsuz ve ben işaretledim.
Michael Borgwardt

1

Programlama, kısıtlar dahilinde çalışma sanatıdır. CPU sınırlı bir komut seti sağlar; IO, donanımın tasarımı ile sınırlıdır; OS API'leri belirli davranışları teşvik etmek ve diğerlerini kısıtlamak için oluşturulur; üst düzey diller genellikle bir dizi deyimi diğerleri üzerinde tanıtmak için tasarlanmıştır ...

Ve metodolojiler de kısıtlamak için hazırlanmıştır.

Gelişim sürecinizin her alanında karşılaştığınız zorluk, vizyonunuzu bu kısıtlamalar dahilinde gerçekleştirmektir . Kafanızı donanım, dil, API ve metodoloji tarafından atılan her duvara dayayacak mısınız? Yoksa ulaşmak istediğiniz şeyi izin verilen ve teşvik edilenle uyumlu hale getirmenin bir yolunu bulabilecek misiniz?

Sen gerçekten eğitmeninizin sonsuz minutia sayfasını okumak istediğini düşünüyor ? Sonra bu teoriyi test edin: bir programı parçalayın ve her atomu belgeleyin. Masasının ağırlığı altına düştüğünde, gerçek arzusunun beklediğinizden biraz farklı olduğunu göreceğinizden şüpheleniyorum.

Ya da belgeleri hazırlamak Eğer uyum bakın. Netleştirin, anlaşılır yapın, bir Dashiell Hammett romanı gibi okuyun. Sonra oturun ve onunla konuşun, ona ne yaptığınızı gösterin, onu liyakate ikna edin.


1

Eğitmen size bu projeyi yapmak ve böylece Şelale gelişiminin artılarını ve (çoğunlukla) eksilerini öğretmek için mükemmel olduğunu düşünüyorum.


1

Proje analizi karmaşıklığını ölçmek için basit bir kural şudur: "Geliştiricinin veya çalıştığı şirket, oluşturulan yazılımda meydana gelen yeterince dramatik bir şeyden (genellikle ölüm veya büyük miktarda para dahil) sorumlu tutulabilir mi?".

Bazı kurslarımda sizinle aynı deneyimi yaşadım. Askeri endüstride geçmişi olan insanlar bize analiz öğretirdi. Ve bu, projenin tüm seyrini, en küçük ayrıntılarda bile planlayarak, eksiksiz ve kapsamlı bir analiz olacaktır. Bu tür bir projeyle çok fazla iterasyon yapamazsınız (bomba patlaması da iyi olabilir, bütçe patlaması değildir), bu yüzden burada yaratıcılık için yer yok, plana gitmelisiniz.

Öte yandan, biraz okuduysanız, kesinlikle çevik metodolojileri okursunuz. Genellikle daha az dokümantasyon ve geliştiricinin karşılaştığı soruna bir çözüm geliştirirken yaratıcılığını kullanması için daha fazla alan vardır.

Sonuç olarak, ne kadar çok tecrübe ederseniz o kadar iyi ve eğitmeninizin size gösterdiği şey endüstrinin bir bölümünde geçerlidir. Bir projeyi yönetmenin ve tasarlamanın kesinlikle onları kodlayacak kadar çok yolu olduğunu unutmayın. Ve hepsi için savunucuları ve eleştirmenleri bulacaksınız. Okurken onları test edin ve mutlu olduğunuz birini seçin.


"Kaza yaparsa insanları öldürebilir mi?" Konusunda dikkatli olun. "Birisi yanlış veri yazdırırsa birileri hapse girebilir mi?" gereksinimleri, en küçük ayrıntısına kadar.
Christopher Mahan

@Christopher: cevabımı buna göre ayarladı, yorum için teşekkürler :)
Matthieu

0

Sahip olduğum gibi bazı yazılım mühendisliği sınıfları, 'başarısızlık başarıdır', başarı başarısızlıktan öğrenmek için boşa giden bir fırsattır ve daha fazlası daha az ve daha fazla olduğu garip bir tarzda öğretilir. Bu onlardan biri ise, ödevlere sadık kalın ve tuhaflığın tadını çıkarın.


0

Bence eğitmeninizin bağlantısı kesildi. Ticari yazılım nadiren bu kapsamda tasarlanır veya belgelenir. Çok pahalı ve elde edilen belgeler daha fazla masraf olmadan sürdürülemez. IMO bu tür uygulamalar, kodlamanın genellikle montaj dilinde yapıldığı günlerden kalma bir miras. Daha çevik uygulamaları denemek için zamanınız daha iyi harcanırdı: test odaklı geliştirme, çift programlama, sürekli yeniden düzenleme.

Eğitmen "sana yanlış söyledi mi?"

Sanırım.

Fikri mülkiyet çalışanlarına sıkıcı iş atamak israftır. Okulda, belki de öğrencileri sıkıcı çalışmaya teşvik etmek dışında, sıkıcı işin pedagojik değeri çok azdır veya hiç yoktur. Bu tür egzersizlerin hem öğrenciler hem de endüstri için olumsuz sonuçları vardır. Zamanları boşa harcandığı için öğrenciler zarar görür. Endüstri zarar görüyor, çünkü bazı öğrenciler böyle bir tediumun gerekli ve yararlı olduğu sonucuna varabilirler. İkisi de değil. Yazılımda otuz yıl içinde, hem sıkıcı hem de yararlı olduğunu düşünebildiğim tek iş, yedekleme bantlarını değiştirmekti. Bunu yapabilen robotlar vardı, ama onlar çok pahalıydı.


2
Cesaret diyorum ki, Hükümet sözleşmelerinden para kazandıran bir şirkette hiç çalışmadınız. Ticari yazılım dediniz .. İfadem şu an anlamsız.
Andrew T Finnell

@Andrew Finnel: Gerçek pek çok düzeyde acı verici.
Peter Rowell

2
@Andrew - DOD2167 için çalıştım. Uygulandığı gibi korkunç ve verimsizdi. Daha sonra devlete sık teslimat yapan çevik bir gelişme gösteren başka bir şirkette çalıştım. Müşteri çılgınca mutlu. Altı ayda yararlı bir başvuruları vardı ve üç ayda bir yeni özellikler kazanıyorlar.
kevin cline

@Andrew ABD DoD işlerinde, bir devlet çalışanı ve yüklenici olarak 2 yılı aşkın deneyime sahibim. Çevik yöntemler benimseniyor. Üzerinde çalıştığım bir ekip Scrum'ı aktif olarak kullanarak "tam zamanında" yeterli "dokümantasyon" üretiyordu. Evet, dokümantasyon ("yeterli" dokümantasyon) bile diğer yerlerden önemli ölçüde daha kapsamlıdır, ancak bu genellikle ilgili tarafların sayısı (sözleşmeler el değiştirebilir, diğer taraflar başka sistemler geliştirebilir, vb.) Ve / veya geliştirilmekte olan sistemlerin güvenlik veya yaşam kritikliği ve önemi.
Thomas Owens

2
@Ve bu sadece hükümetler değil. Ben "ürünler" için 40 sayfa özellikleri gördüm; normalde bu tablodan her şeyi seçebilir ve bana boru ayrılmış lütfen verebilir. Kimse onları okumak için rahatsız edilemez ...
Ben
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.