Öğrencilerin sürdürülebilirlik konusundaki eğitimleri nasıl geliştirilir? [kapalı]


18

Sürdürülebilirlik, profesyonel yazılım geliştirmenin önemli bir hissesidir. Aslında, bakım, proje sürümünden temelde zamanın sonuna kadar sürdüğü için, neredeyse her zaman bir yazılım yaşam döngüsünün en uzun parçasıdır.

Ayrıca, bakımda olan projeler, toplam proje sayısının büyük bir çoğunluğunu temsil etmektedir. Http://www.vlegaci.com/298/interesting-statistics-%E2%80%93-numbers-of-programmers-in-maintenance-vs-development/ 'a göre , bakımda olan projelerin oranı yaklaşık 2 / 3.

Geçenlerde bu soruya rastladım , adam işinin esas olarak bakımla ilgili olduğunu keşfetmekten oldukça şaşırmış görünüyor. Daha sonra Fransız yazılım geliştirme uzmanları topluluğunun ana sitesinde bir tartışma (fransızca) açmaya karar verdim ( http://www.developpez.com/ ). Tartışma "Öğrenciler profesyonel yazılım geliştirme gerçekliği konusunda yeterince eğitimli mi?" ve esas olarak sürdürülebilirlikle ilgilidir . En azından Fransa'da, insanların her iki yönde de bakım ile yüzleşmek için yeterince hazır olmadığı belirtildi:

  • mevcut kodu koru
  • sürdürülebilir kod yap

Buradaki sorum bu tartışmaya yankılanıyor ve sürdürülebilirliği öğretmenin iyi bir yolunu bulmayı amaçlıyor.

  • Sürdürülebilirliği nasıl öğretebiliriz?
  • Ne tür bir egzersiz önerirsiniz?
  • Eğer sürdürülebilirlik konusunda iyi eğitim almışsanız, ne tür kurslar aldınız?

Biraz yanlış anladıktan sonra, sorumu açıklığa kavuşturmak zorunda olduğumu düşünüyorum. Proje lideri ve yazılım geliştiricisi olarak sık sık stajyerler veya yeni mezun öğrencilerle çalışıyorum. Bir zamanlar kendim yeni mezun oldum. Mesele şu ki, öğrenciler genellikle bir projenin sürdürülebilirliğini artıran SOLID gibi ilkelere aşina değillerdir. Genellikle projeleri geliştirirken önemli zorluklarla karşılaşırız (düşük sürdürülebilirlik). Burada aradığım şey, sürdürülebilirliğin önemi ve bu konuya ilişkin daha iyi kodun nasıl hazırlanacağı hakkında başarılı öğretimin somut bir akademik örneğidir; veya öğrencilerin eğitilme şeklini geliştirmek için olası öneriler.



PS: Orada cevabım bak, spagetti denemesine değer bulabilirsiniz
Doktora

@Nupul Bir öğretmen olduğunuz ve kodun sürdürülebilirliğini öğretmeye dahil olduğunuz için, lütfen tam bir cevap verin ve nasıl ilerlediğinizi bize bildirin: spagetti kodu bunun sadece küçük bir kısmı
Matthias Jouan

Bir cevap gönderdi ... Umarım sizin için değer katar :)
Doktora

"Pratik API tasarımı" daki API tasarımı ve sürdürülebilirlik projesi, öğrencilere sürdürülebilirlik (ve geriye dönük uyumluluk) zorluklarını öğretmek için mükemmel bir proje olan IMHO'dur.
Marco

Yanıtlar:


8

Sürdürülebilirliği nasıl öğretebiliriz?

Bu bir uygulama meselesi.

Düşünebileceğim kontrollü bir şekilde uygulamanın en kolay yolu, tipik bakım projesini aşağıdaki gibi simüle etmektir .

İyi yapılmış bir proje ( Proje A ) alın ve üzerine birkaç sorun getirin: bazı hatalar, iyi bir çift kopya ve ölü kod enjekte edin, bazı özellikleri, birim testlerini ve belgeleri buraya ve vb. Enjekte edin. Bunun adı, Proje A gibi - hasarlı sürüm .

Bir sorun izleyici kurun ve verdiğiniz belirli hasarlara karşılık gelen taleplerle doldurun. Geliştirme süreci için temel kurallar ve uygulamalar oluşturun - VCS taahhütleri, kod incelemeleri, KG vb. - The Joel Test'in kontrol listesinden neler yapabileceğinizi düşünün .

  • kurs 1.
    Hataları düzeltin, eksik birim testleri, belgeler ve özellikler ekleyin.
  • ders 2.
    Refactor.
  • Kurs 3.
    Bakım / gelecek yıl öğrenciler tarafından kullanılmasına orijinal projelerin iyileştirilmesi
    - Proje bir versiyonu 2.0 ve Proje A - Hasarlı sürüm 2.0 , sırasıyla. Hasarlı versiyonu
    geliştirerek daha iyi eğitimsel hasar vermek demek istiyorum. :)

Yukarıda belirtilen uygulamalardan, kod incelemelerine özellikle dikkat edin . Bu, örneğin ilgili sorunun en üstteki cevabında belirtildiği gibi, kodun bakımı kolay olmasını sağlamanın en etkili yoludur .

Dakikada WTF


11

Yasal Uyarı: CS derecemi aldım. Ben bir öğretmen değilim.

Bu kulağa bariz gelebilir, ancak bence kod bakımını öğretmenin en iyi yolu öğrencilerin kod bakımını yaptırmaktır. İşte yapacağım şey:

  1. Orta derecede karmaşık bir sorun ve anlamsal olarak aynı olan iki uygulama alın, ancak biri diğerinden çok daha sürdürülebilir.
  2. Daha iyi kod tabanına uygulanması çok daha kolay olan bir dizi değişiklik / özellik ekleme isteğinde bulunun. Öğrencilerin bir yarısı bunları daha sürdürülebilir kod tabanına, diğer yarısı daha az bakım yapılabilir kod tabanına uygulamak zorundadır.
  3. Adalet uğruna, bu egzersizi tersine çevrilmiş rollerle tekrarlamak isteyebilirsiniz.
  4. İyi ve kötü kod tabanları arasındaki başarılı bir şekilde gerçekleştirilen değişikliklerin ortalama sayısını ve bunları uygulamak için harcanan zamanı karşılaştırın. Öğrencilerin deneyimlerini paylaşmalarını, şikayetlerini yaymalarını ve genellikle yaptıkları iş hakkında konuşmalarını sağlayın.

Fikir, öğrencilerin sadece bir başkasının koduyla çalışmasını sağlamak değil, aynı zamanda tasarım becerilerini geliştirecek umarım sürdürülebilir kod için bir takdir geliştirmelerini sağlamaktır.


Egzersiz için +1. Bu uzun zamandır koşmak istediğim bir şeye çok benziyor; benim versiyonumda, öğrenciler bir spesifikasyona bir şeyler yazacaklar, daha sonra değiştirmek için başka birisine (benim tarafımdan seçilen) verilecekti. Dikkatinizi çekmek için, sürdürülebilirlik ve iyi uygulamaları öğrettikten sonra etkinliği tekrarlayabilirsiniz.
Andy Hunt

1
Fowler'in Refactoring'in
mjfgates

2

Sürdürülebilirlik bir beceri değil, bir erdemdir. Sürdürülebilir projeler oluşturmanın birçok yolu vardır, ancak bunları üretmeyi garanti eden tek bir formül yoktur.

Nezaket ve cömertlik gibi erdemlere değer veriyorsanız, aynı şeyi günlük yaşamınızda pratik yapmanın yollarını ararsınız. Sürdürülebilirlik için de aynı şey geçerlidir: Siz ve kuruluşunuz sürdürülebilirliğe değer verirseniz, projenizi tasarlarken ve uygularken bunu zihninizin arkasında tutacaksınız. Biraz ekstra zaman harcamak meşru bir neden olacaktır, çünkü bakımın takdir edildiğini biliyorsunuz. Tersine, buna değer vermeyen bir kuruluşta sürdürülebilirlik uğruna fazladan zaman harcanması önerilmez.

İnsanlara işleri sürdürülebilir hale getirmeyi öğretmek istiyorsanız, kuruluşunuzun sürdürülebilirliğe değer verdiğini açıklığa kavuşturmalısınız. Projeleriniz için gereksinimlerde belirtin. Başarılı kod incelemeleri için kriterlerden biri yapın. Kısacası, sürdürülebilirliği kültürünüzün bir parçası haline getirin .

Ardından, mevcut projelerinizde sürdürülebilirliği artırmak için bazı kaynaklar ayırmaya istekli olun. Bir projenin, hataların kesilmeye devam ettiği veya hataları düzeltmenin veya değişiklik yapmanın çok zor olduğu ve uzun sürdüğü bölümleri ve bakımı kolaylaştırmak için yeniden tasarlayın veya yeniden düzenleyin.

Son olarak, yeni geliştiricileri, bunu zaten günlük olarak uygulayan ekiplere atayarak , sürdürülebilirlik kültürünüze öğretin. Birinin bir değeri benimsemesine yardımcı olmanın onlara iyi örnekler ve rehberlik vermekten daha iyi bir yolu yoktur.


1
Buradaki düşüşü anlamakta zorlanıyorum. Yazılım tasarımını istediğiniz kadar incilinizden okuyabilirsiniz, ancak asıl sorun, geliştiricilerin çoğu zaman önemli olmadığı izlenimi altında olması çünkü hiç kimse onlara yaptıklarından daha iyi bir alternatif sunmayı umursamıyor . Öğrencilere, ürettikleri işin kalitesinden sürekli olarak şüphe duymak ve aldıkları kararları sorgulamak için önem duygusu aşılamazsanız, sürdürülebilirlik ile ilgili bir kursun onlar için ne kadar yararlı olabileceğinden şüphe ediyorum.
Filip Dupanović

@ FilipDupanović Kabul ediyorum. Bir adım daha ileri gitmek, insanlar CS dereceli yeni mezunların hazırlıksızlıklarını anmakla birlikte, sorunun şaşırtıcı ya da programlamaya özgü olduğunu düşünmüyorum. Tabii ki yeni bir grad ve deneyimli bir işçi arasında bir fark var: birinin deneyimi var! Herhangi bir alanda iyi bir lisans programı mesleki değil kavramsaldır. Sadece deneyim yeni mezunlara öğrendikleri kavramları uygulamalarını ve hangi işte olursa olsun etkili bir şekilde çalışmalarını öğretecektir.
Caleb

1

Ben biri için Sürdürülebilir teriminden hoşlanmıyorumYazılım geliştirme ile ilgili olarak . Gerçek şu ki, tüm yazılım bakım çalışmalarına tabi tutulabilecek şekilde korunabilir, bu nedenle asıl mesele, yazılımın bakımı pahalı veya pahalı mıdır, nispeten konuşulursa. Bunun cevabın başında yapmak için çok bilgiç bir ifadeye benzediğini biliyorum, ama benim açımdan bir an daha netleşeceğim.

Yazılım geliştirmede önemli olan BT dereceleri ile ilgili sorun, öğrencilere sadece yazılım yazma konusunda bilmeleri gereken en az şeyi öğretmeleri. Mesleki beceri ve bilgi, bundan sonraki ilk birkaç yıl içinde yapılan öğrenme ile kazanılır.derece için uygun. Bu, bir mezunun, gerçekte bir müşteri için önemli olan projeler üzerinde çalışmaya başlaması, büyük bir baskının olduğu bir ortamda ve beklentinin profesyonel bir standarda göre bir ürün yaratmasıdır. Ne yazık ki, birçok şirket yazılımdaki profesyonel standartların korunduğu bir kültürü teşvik etmez ve sonuç olarak geliştirilmesi ve sürdürülmesi maliyetli olan projeler ortaya çıkarır. Ne yazık ki mezunlarımız için, kariyerlerinin ilk yıllarında bu tür ortamlarda çok sayıda kötü alışkanlık öğreniyorlar ve bu alışkanlıkların üstesinden nasıl geleceğini öğrenmeleri uzun zaman alabilir.

Öğrencilere temiz kodların nasıl yazıldığını ve genellikle yazılımda teknik borca neden olan sorunların nasıl tanımlanacağını öğretmek daha iyi olur . Temiz Kod , Yeniden Düzenleme ve Yalın Yazılım Geliştirme ile ilgili kitapları bir başlangıç ​​noktası olarak inceleyin ve yüksek derecede test kapsamı olduğundan emin olmak için öğrencilere uygulama kodundan önce birim testleri yazmalarını öğretin. Öğrencilere, kodları içinde yinelenen ve tekrarlayan kalıpları tanımalarını ve bu tür kopyaları kaldırmak için kodu nasıl yeniden düzenleyeceklerini öğretin. Öğrencilerin SOLID ve DRY gibi ilkeleri anlamalarına ve uygulamalarına yardımcı olun. En önemlisi, kodu sürdürme yeteneğinin yalnızca kodun tasarımına ve uygulanmasına dayalı olarak yapılan bir şey olduğu ve bunun yerine yazılım üretiminin başlangıcından itibaren işçilik ve kalite duygusu aşıp Teknik borcun etkisini en aza indirmek ve böylece yazılımın bakım maliyetini zaman içinde minimumda tutmak için kodu uygulandığı haliyle geliştirin.


Cevabınızı dikkatle okudum ve ayrıca "sürdürülebilir" hakkındaki makalenizi okudum ve size neredeyse tamamen katıldığımı söylemeliyim. Bahsettiğiniz birkaç kitabı okudum ve her gün işyerinde SOLID gibi ilkeleri kullandığım - veya insanların kullanmasını sağladım (ben öğretmen değilim). Ama cevabınızın biraz konu dışı olduğunu düşünüyorum. Ne aradığımı açıklığa kavuşturmak için sorumu düzenleyeceğim.
Matthias Jouan

1
İyi bir noktaya değiniyorsunuz, ancak bir projenin diğerinden daha fazla veya daha az sürdürülebilir olduğunu söylemek de adil. -Able veya -ible ile biten kelimeler mutlak veya göreli olabilir ve OP'nin onu göreceli anlamda kullandığı oldukça açıktır.
Caleb

0

Bu tür becerileri öğrenmenin en iyi yolunun kod incelemeleri ve çift programları yapmak olduğunu düşünüyorum. Kod incelemeleri sırasında deneyimli personel, kodun nasıl daha sürdürülebilir hale getirileceğini (tipik olarak daha okunabilir hale getirerek) gösterebilir ve belirli seçeneklerin neden daha sürdürülebilir kod oluşturabildiğini gerekçelendirebilir.

Çift programlama, bu tür şeyleri öğretmenin daha iyi bir yoludur, çünkü daha az deneyimli personele, nasıl iyi bir şekilde yapılacağını zaten bilen biriyle kod sağlama konusunda doğrudan deneyim sağlar.

Ayrıca temiz, bakımı kolay kod yazma hakkında okuyabileceğiniz bazı harika kitaplar da vardır. Temiz Kod akla geliyor.

Öğrenciler büyük kod tabanlarını nadiren değiştirdiklerinden, bu deneyimi akademi aracılığıyla elde etmek zordur. Bu becerilerin çoğu iş başında öğrenmekten gelecek ve kod incelemeleri ve çift programlama bu öğrenmeyi gerçekten kolaylaştırabilir.


1
Çift programlama, daha yetenekli geliştiricilerden öğrenmenin çok iyi bir yolu olsa da ve Robert C. Martin kitaplarını okumak hayatımı kesinlikle değiştirdi, ancak soru daha saf bir akademik öğrenme yolu hakkındaydı: öğrencilerin gelmeden önce nasıl daha iyi hazırlanabileceği yazılım geliştirme profesyonel dünyası.
Matthias Jouan

1
-1: @ suszterpatt'ın önerisi çok daha iyi görünüyor.
Jim

0

İyi kod = Daha az bakım ve kolay geliştirme / ekleme özellikleri.

Kötü kod = bakım kabusu

Temel olarak, öğrencilerin bir projede berbat bir kod olduğunda, şirkete katılacak yeni bir geliştirici olduğu için kodun orijinal yazarının acı çekeceği ve yazılımın nasıl etkilendiğini ."

Bu nedenle öğrenciye yazılım bakımını öğretmenin en iyi yollarından biri, hem iyi kod hem de kötü kod örneğini göstermek ve onlardan bir özellik eklemelerini istemek ve daha sonra onlara iyi bir kod yazmanın sadece kendi memnuniyeti için değil, kodu koruyacak olan insanlar için bu kolay.

Egzersiz yapmak:

1) Önceden yazılmış bir kötü kod (örn.) Yinelenen kod var, bir yöntem "ipotek ödemesini hesaplamak için" bir projede 9 yerde yazılır .

Öğrenciden "tüm ipotek ödemelerine% 1,2 ek ücret" ekleme özelliğini geliştirmesini isteyin.

Şimdi öğrenci 9 yerde kod bulma ve düzeltme acısını görecek. "İpotek ödemesinin" hesaplandığı 9 yeri bulamamasının birçok şansı var.

2) Şimdi ipotek ödemesini tek bir yerde hesaplayan bu yönteme sahip İyi kodunu gösterin . öğrenciye iyi yazılmış bir kodun geliştirilmesinin ne kadar kolay olduğunu ve kodun / projenin sürdürülebilirliğini nasıl arttırdığını açıklayın.

BTW, öğrencileri yazılımın sürdürülebilirliğine maruz bırakma yaklaşımınızı sevdim.


-1

@mattmattj: Cevapların bir kısmı ve yayınladığım bağlantının bazı iyi işaretçileri olduğundan, umarım zaten gönderilen cevapların tekrarı olmayan bir şey ekleyeceğim.

İlk olarak, "sürdürülebilirlik" tanımlanmalıdır ZORUNLU - herkes tarafından kabul edilen tek bir tanım yoktur - yazılım mimarisine benzer. Bu yüzden en önemli, en kapsamlı olduğunu düşündüğünüz birini seçin ve maksimum 3-4 satırda belirtin. Ardından, kendi kodunuzu (veya başka birinin kodunu hatırlama / anlama zamanı), dakikadaki / saatteki WTF sayısı vb. Gibi bazı metrikler hakkında konuşabilirsiniz. bundan sonra söylemek.

Bazı alıştırmalar (bazı yanıtlarla biraz örtüşen gelebilir, lütfen bunu affedin)

Sınıfı ikiye ayırın - bir bölüme 1-2 gün içinde yapılması gereken basit bir kodlama ödevi verin. Maks. Zor bir son tarih. İşi uygun gördükleri her koşulda - kılavuz - "çalışma kodu" altında yapmak zorundadırlar. Diğer öğrenci grubu için aynı ödev, ancak (adlandırma) sözleşmeleri listesi ve tasarım ve takip edilmezse puanların nasıl çıkarılacağı ile ilgili bazı yönergeler. Bu, kulağa benziyor olsa bile, Hile DEĞİL;) Şimdi kodları değiştirmelerini sağlayın, yani grup 1 şimdi grup 2'nin ne yaptığı üzerinde çalışır ve tersi de geçerlidir. Şimdi orijinal kodlama atamasında bir değişiklik önerin ve aynı zaman diliminde yapmalarını isteyin. Onları yeniden toplayın ve ne kadar kolay / zor olduğunu sorun ve tartışmaları / fikirleri açın. Nokta kesinlikle eve çarpacak - yüksek şansın% 50'si sınıfın mutlu olacağını ve kolay olduğunu ve% 50'sinin zor bulduğunu söyledi. Ayrıca 3 hafta sonra kendi şeyleri üzerinde çalışmalarını ve 1 gün içinde yapıp yapamayacaklarını görebilirsiniz;)

(İyi bir bükülme, aynı kod parçasını kıvrımlı bir şekilde yazmanız ve sınıfa kendi modifikasyonlarıyla birlikte modifikasyon için vermenizdir)

Burada, sürdürülebilirliğin temelini attığınız yer - değiştirilen / güncellenen her kod satırı şirketin parasına mal olur. Kodu okumak ve hatırlamak ne kadar kolay olursa, pazara süreyi kısaltmaya yardımcı olacak değişiklik o kadar iyi / hızlı olur. Günümüzün hızlı teknolojik alanında çok önemli. Sürdürülebilirlik, sistemlerin verimli evriminin anahtarıdır.

Greenfield ve brownfield gelişimi arasındaki farkı anlamak önemlidir - her proje veya sistem sıfırdan yaratılmaz ("sıfırdan" projelerin bulunması veya bir parçası olmak oldukça zordur). Alanın "doğası gereği" kahverengi olduğunu ve "elden" büyüdüğünde nihai aşamayı bitirdiğinizde şekillendirmek için zaman harcamanız gerekir (yalnızca sürüklenme çok fazla ve 'sürdürülemez' olduğunda mümkündür). Bunu ne kadar erken kabul ederlerse o kadar iyi. Programlama, doğası gereği yaratıcı olduğundan, ancak bir başkasının kodunu geliştirmek bu şekilde algılanmadığından zordur - çevirin. Yaratıcılık kodu anlama ve daha sonra geliştirmek için "yaratıcılığınızı" uygulayabilme yeteneği vardır - daha iyi korunursa gelecekte daha yaratıcı bir şekilde geliştirebilirsiniz.

Yukarıdaki bağlantıda spagetti benzetmesine başvurmaktan çekinmeyin ... umarım bu bazı noktaları eve vurmaya yardımcı olur. Diğer cevaplar boşlukları doldurmanıza yardımcı olur ve size öğretmede yardımcı olur! İyi şanslar!


@Downvoter - yazıyı geliştirme şansını artırmak için lütfen yorum bırakın :)
Doktora
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.