Conway'in “Hayat Oyunu” kod geri çekilmeleri için neden kullanılıyor?


15

Code Retreat, yazılım geliştirmenin temellerine odaklanan tüm gün süren bir eğitim etkinliğidir. Bir "küresel" kod geri çekilme günü yaklaşıyor ve bunu dört gözle bekliyorum. Yani, daha önce birine gittim ve çok fazla kaos olduğunu söylemeliyim ki ... bu iyi.

Hala elde edemediğim bir şey, "Hayat Oyunu" nun neden TDD için iyi bir problem olduğu ve bunun için iyi ve kötü TDD'nin nasıl hissettiğidir.

Bunun oldukça açık uçlu bir soru olduğunu fark edin, bu yüzden yorum yapmaktan çekinmeyin.


Bu, Yazılım Mühendisliği Sohbetimizde en iyi olacak tartışma odaklı bir soru gibi geliyor .
Adam Lear

@Anna Lear: Teşekkürler, ama sohbet etmek istemiyor, cevap arıyor. İyi bir soru değilse, sorun değil.
gaflar

3
@AnnaLear Bence soru OP konusunda kendisine kredi verdiğinden daha fazla konuyla ilgili.
Tom Squires

1
@Tom Tek başıma düşünüyordum ve iyi olduğunu gördüğüme sevindim. Yanlış yaptığım için mutluyum. :)
Adam Lear

Yanıtlar:


26

Başlangıçta, Conway'in Hayat Oyunu seçildi çünkü Ocak 2009'da ilk kodlayıcı tedavide çalışmak için elimizde bir java uygulaması vardı. çünkü biz vardı.

Bundan sonra, birkaç aktif kolaylaştırıcı olarak (özellikle 2009'daki yolculuk turum sırasında ve Bükreş'teki Alex Bolboaca sırasında) GoL'nin bir öğrenme aracı olarak kullanımını araştırdı. Aynı zamanda coderetreat formatını bugünkü haline dönüştürüyoruz. 2009'da Alex en az bir başka problem daha (poker eli skorlaması) denedi, ancak GoL kadar yararlı bulamadı. Tarih hakkında daha fazla bilgiyi http://coderetreat.org/history adresinde bulabilirsiniz.

Coderetreat, basit tasarım (özellikle 4 basit tasarım kuralı), test odaklı geliştirme ve yazılım geliştirmenin diğer temel yönleri hakkındaki anlayışımızı geliştirmeye odaklanmaktadır. GoL, yapısal bir perspektiften hala zengin olmakla birlikte, anlaşılması çok basit bir problem olma avantajına sahiptir. Kod tedavisi sırasında uyguladığımız tüm konulara örnek olarak kullanılabilecek sistem bölümlerini kolayca sağlar. Örneğin, (x, y) parametrelerini birden çok yöntemde alan ortak bir uygulama, KURU prensibi hakkında konuşmak için harika bir fırsattır (her bilgi parçasının sisteminizde bir ve sadece bir temsili olmalıdır) sistemi. Değişim maliyetini en aza indiren bir tasarım oluşturmaya örnek olarak kullanılabilecek birçok başka yön var.

Şu anda birden fazla coderetreats yapan birkaç kişi var ve hala pratik olarak kullanmak için sorunun ilginç yönlerini buluyorlar.


10

Conway'in Yaşam Oyunu iyi bir seçim olacaktır, çünkü oldukça güçlü sonuçlara sahip oldukça basit bir kodlama seti. Test-Driven Development sürmek için kullanmak gelince, ben bahse girerim çünkü testler yazmak oldukça zor çünkü aradığınız sonuçlar yazdığınız koddan belli değil. Daha önce yapmadıysanız veya uzun bir süre yapmadıysanız, size bir planör getiren kod yazmak oldukça zordur. Bu nedenle, özellikle TDD olarak çift programlamada yürütüldüğünde, disiplin sanatını germek için uygundur.

Size faydalı şeyler öğretmek kadar; bir tür yanal düşünme alıştırmasıdır. Kodunuzun nasıl çalışacağını kavramsallaştırmalı, çalıştırmalı, başarısız görmeli, veri toplamalı, yeniden düzenleymeli ve yinelemeye devam etmelisiniz. Tüm bunlar TDD için çok önemlidir. Gerçek dünyaya bağlamak, size sadece "X'i istiyorum" yazan belirsiz bir gereksinim belgesi veren bir müşteriye benziyor. Yani onlara X veriyorsunuz ama X'e ulaşmak zor olabilir. Conway'in Yaşam Oyunu bunu öğretmekte iyidir. Kodlanması da oldukça kolaydır ve genellikle tonlarca kod almaz. ( APL , uygulamanın en uç örneklerinden biridir.) Bu nedenle, genellikle bir üretim ortamında bulabileceğiniz gibi, bir geri çekilmenin bir veya iki haftalık bir yineleme yerine sahip olacağı kısa oturumlar için oldukça uygundur.


10
Bir planörün "acil" davranış olduğunu düşünürdüm. Birim testlerinizin sadece belirli sayıda komşu göz önüne alındığında hücrelerin yaşam ve ölüm kurallarını kodlaması gerekir.
Robert Harvey

1
Planör kesinlikle ortaya çıkan bir davranıştır. Coderetreats'taki bazı katılımcılar planör gibi şeyleri içeren daha büyük testler oluşturacaklar, ancak bunlar birim / tdd odaklı testler değil, rehberlik testleri. Davranış, iyi tanımlanmış kuralların oluşturulmasından ortaya çıkar.
coreyhaines

3

Game of Life bir yandan çok basit bir kurallar kümesidir, öte yandan ölçeklenebilirlikle ilgili gelişmiş programlamanın en kötü uyarılarını içerir . Sonuçlar deterministik olsa da, sonsuz oyun alanı ve sonsuz sayıda hücrenin işlenmesi zorluğu vardır.

Zorluk özellikleri minimum performans ve maksimum bellek ayak izi içeriyorsa, testler hızla büyüyen desenleri veya uzak ve geniş çeşitli yönlerde ilerleyen modelleri içerir, bu çok sinir bozucu bir zorluk olabilir.

X yinelemelerinden sonra bilinen girdiyi ve bilinen çıktıyı aldınız ve oraya ulaşmak için tüm adımları biliyorsunuz ... ancak adımlar çok fazla ve çok uzun sürüyor. Teknik özelliklere uyması için bazı aşırı optimizasyonlar yapmanız gerekir. Sabit boyutlu çift tamponlu bir 2d bit dizisini tarayan önemsiz algoritma, performansı O boyutunda (n ^ 2) düştüğü için tamamen yetersiz hale gelir. Dolgulu bloklara yeni ortaya çıkan nesneler gibi davranmak aniden tonlarca bellek tüketir ve yavaşlar. Her şeyi sınırlı boyutlu tahtalara ayırmak bazen işe yarıyor, bazen başarısız oluyor ...

Ve "küresel" testlerin çoğu performans standardında başarısız olacağından, daha küçük hedefler, uyarıların ütülenmesini sağlayan daha küçük alt testler geliştirmeniz gerekir ...


2

Her şey, sürecinizin hangi yönüyle çalışmak istediğinizi / eğiteceğinizi belirler.

Seçtiğiniz yaklaşım / proje yönetimi paradigmasına bakılmaksızın, yazılım mühendisliğinin tüm yönlerini kapsamak için tek bir gün yeterli değildir. Etkili hale getirmek için muhtemelen bütünün küçük bir alt kümesine konsantre olmalısınız.

Örneğin, TDD'nin teknik yönlerine odaklanırsanız, müşteri ile gereksinimler ve ilişkiler çevresindeki geniş gri alanları serbest bırakmak ve bir çözümün kodlamasını doğrudan kesmek isteyebilirsiniz.

Bu bağlamda, Hayat Oyunu iyi bir adaydır, çünkü basit, iyi anlaşılmıştır ve tartışmaya açık olacak gereksiniminde çok fazla gri alana sahip değildir. Böylece testinizi hemen yazmaya başlayabilir ve bunlara karşı kod yazabilirsiniz.

Öte yandan amaç, gereksinimleri karşılayabilmek için TDD'yi nasıl kullanabileceğimizi görmek olsaydı, o zaman yaşam oyununu seçmiş olabilirim, ancak geliştiricilere istediğim bu olduğunu söylemezdim. Bunun yerine, aslında isminden bahsetmeden ipuçları ve fikirler sunmaya karar verirdim. Buna göre, katılımcılar büyük olasılıkla hızlı bir şekilde manevra yoluyla görecekleri için yaşam oyunu bu tür bir egzersiz için biraz fazla basit olabilir.

Bu tür sentetik egzersizler için örnekler bulmak her zaman kolay değildir. bir günde yapılabilecek kadar basit olmalı, ancak bunu yapmak için o kadar kolay değil. Eğlenceli ama anlamsız değil ... Ama benim için biraz orijinal olmalı, kaç kez öğrencilerden ev ödevi için bir video kulübü yönetim sistemi oluşturmalarını istediğimi hatırlamıyorum .... iiirch.

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.