Üzerinde çalışılacak tasarım egzersizlerini nerede bulabilirim? [kapalı]


16

Problem çözme becerilerimi uygulamaya devam etmenin önemli olduğunu düşünüyorum. Kendi mini projelerimi yazmak bir yoludur, ancak bir diğeri ise çevrimiçi olarak yayınlanan sorunları denemek ve çözmek. Çözmek için akıllı algoritmalar uygulanmasını gerektiren ilginç programlama testlerini çevrimiçi olarak bulmak çok kolay - Project Euler bilinen bir örnektir.

Ancak, birçok gerçek yaşam projesinde tasarım yazılımın - özellikle ilk aşamalarda - büyük bir etkiye sahiptir ve daha sonraki aşamalarda basit algoritmalar kadar kolay ayarlanamaz. Bu becerileri geliştirmek için herhangi bir tasarım problemi koleksiyonu arıyorum.

"Tasarım" dediğimde, bir yazılım çözümünün soyut tasarımını kastediyorum - örneğin hangi modüllerin olacağını ve bunlar arasındaki bağımlılıkları, verilerin programda nasıl akacağını, ne tür verilerin kaydedilmesi gerektiğini Tasarım problemleri, herhangi bir projenin erken aşamalarında çözülmesi kritik olan problemlerdir, ancak çözümleri tek bir kod satırı olmayan bir beyaz tahta diyagramıdır.

Tabii ki bu tür problemlerin tek bir doğru çözümü yoktur, ancak soruna yaklaşmak için kullanılabilecek tipik çözümlerin artılarını ve eksilerini de gösteren herhangi bir yerden özellikle mutlu olacağım.


Yanıtlar:


7

Code Kata hakkında ne dersiniz? ? Bunlardan birkaçını yaptım ve yapmak eğlenceli ve her zaman öğrenilecek bir şey olacak kadar zorlu.

Kataların her birinin yorumları, takıldığınız her şeye cevap vermenize yardımcı olacak yeterli bilgiye sahiptir.


Birincisi kesinlikle bir tasarım problemidir, ancak diğerlerinin daha kod odaklı olduğunu hissettim. Bir kez daha bakacağım, teşekkürler!
Meşe

3

İle başlayın klasik tasarım problemi: KWIC.

David Parnas modülerlik üzerine klasik makalesinde KWIC'i örnek olarak kullandı: Sistemleri Modüllere Ayrıştırmak İçin Kullanılacak Kriterler Üzerine herkesin muhtemelen 10 yılda bir okuması gerekiyor.

KWIC için bağlamında anahtar kelime , bir basit indeksleme ve sıralama sorun metnin hatlarında okuyun ve sonra a her vardiya ekleyerek ( "ile", örneğin "" hariç) anahtar kelimelere dayanarak her satırı döndürmek sonra sıralamak. Fikir, KWIC kullanmanın bir kitap için bir dizin oluşturmak için yararlı olacağıdır. Klasik makalesi sırasında Parnas, deneyimli bir programcının bunu bir ila iki hafta içinde çözebileceğini söyledi, ancak Yannis Yasası bunun bir ila iki saat içinde yapılabileceğini belirtiyor . [İşletim sistemleri ve standart kütüphaneler çok daha iyi hale geldi.]

Parnas'ın makalesini okuyun ve KWIC programının ne yapması gerektiğini öğrenirseniz, tasarım alıştırması olarak kendiniz yazın. Ardından, iki farklı tasarımı tartışan makalenin geri kalanını okuyun: Her ikisi de modülerdir, ancak biri diğerinin yapmadığı bilginin gizlenmesini sağlar.

KWIC örneğini bildikten sonra, onu kullanan diğer yazılım tasarım kağıtlarını takdir edebileceksiniz. Örneğin, Michael VanHilst'in Tasarımdan Dekuplaj Değişikliği, C ++ şablonlarını kullanarak gerçekten ilginç bir tasarım tekniği göstermek için kullanır. Ve C ++ şablonları ve tasarımı hakkında konuştuğumuz sürece, Czarnecki ve Eisenecker'ın Sentezleme Nesneleri belgesini okuyun.

KWIC'den devam etmek, Python ve AspectJ gibi çeşitli dillerde taşınan / yeniden tasarlanan Spacewar örneği gibi diğer klasik örneklerdir .

Tabii ki, herhangi bir program tasarım alıştırması olarak kullanılabilir, ancak KWIC ve Spacewar çeşitli alternatiflere bakabileceğiniz örneklerdir.


Re: Açıklamanızı ... Burada daha çok beyaz tahta tasarımından bahsediyorum. Ancak, tasarım çözümlerinizin çoğunun kendilerini ifade etmeyi çok daha zorlaştıran kusurlara sahip olduğunu fark edebileceğiniz için, kod düzeyine inmek de önemlidir.
Macneil

1

Bu tür şeylerin "programlama kataları" olarak anıldığını duydum. Kata, mükemmellik için tekrar tekrar uygulanan bir hareket biçimi veya dizisi için bir dövüş sanatları terimidir. Seçtiğiniz dilde katas için arama yapın ve bahse girerim bir şey ortaya çıkaracaksınız. :)


1

Katas ve Euler'in algoritma tasarlamak ve kodlama yapmak için iyi olduklarına katılıyorum - belki de onları genişletebilir ve biraz yaratıcı olabilirsiniz ve sorunlardan birinin etrafında bir sistem tasarlayabilirsiniz.

Örneğin, sadece en hızlı, en kısa cevabı bulmak için Euler'in problemlerini çözmekle kalmayıp, bunları dağıtılmış bir şekilde çözmek için çalışıyorum - problemlerden birini çözmek için bir dizi Erlang düğümü kurmak istiyorum. Tabii ki, bu, sorunun ayrık parçalara nasıl ayrılacağını ve onların ilerlemeleri hakkında geri bildirimde bulunmalarını ve sonuçları bir araya getirmelerini sağlamam gerektiği anlamına geliyor (hepsi uzman olmadığım bir İşlevsel Dil içinde).

Belki de bu sorunlardan birini bir iş çözümü olarak çözmek için bir sistem tasarlayabilirsiniz - bunu birden fazla "müşterinin" bir kerede probleminize erişebilmesi için nasıl yapabilirsiniz, bir müşteri ve hizmet katmanı etkileşimleri tasarlayabilirsiniz , vb.

Her şey yaratıcı olmak ve eğlenmekle ilgilidir.

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.