Dove posso trovare esercizi di progettazione su cui lavorare? [chiuso]

15

Ritengo sia importante continuare a praticare le mie capacità di risoluzione dei problemi. Scrivere i miei mini-progetti è un modo, ma un altro è cercare di risolvere i problemi pubblicati online. È facile trovare online interessanti quiz di programmazione che richiedono l'applicazione di algoritmi intelligenti per risolvere: Project Euler è un esempio ben noto.

Tuttavia, in molti progetti reali il design del software - specialmente nelle fasi iniziali - ha un grande impatto e in fasi successive non può essere modificato con la stessa facilità dei semplici algoritmi. Al fine di migliorare queste capacità, sto cercando qualsiasi raccolta di problemi di progettazione.

Quando dico "design", intendo il disegno astratto di una soluzione software, ad esempio quali moduli ci saranno e quali sono le dipendenze tra di loro, come i dati fluiranno nel programma, quale tipo di dati deve essere salvati nel database, ecc. I problemi di progettazione sono quei problemi che sono fondamentali da risolvere nelle prime fasi di qualsiasi progetto, ma la loro soluzione è uno schema di lavagna senza una singola riga di codice.

Ovviamente questo tipo di problemi non ha una sola soluzione corretta, ma sarò particolarmente felice con qualsiasi posto che mostri anche vantaggi e svantaggi delle soluzioni tipiche che potrebbero essere utilizzate per affrontare il problema.

    
posta Oak 17.12.2010 - 14:30
fonte

4 risposte

7

Come su Codice Kata . Ho fatto alcuni di questi, e sono divertenti da fare, e abbastanza impegnativo che c'è sempre qualcosa da imparare.

I commenti per ciascuno dei kata in genere hanno abbastanza informazioni per aiutare a rispondere a qualsiasi cosa su cui vieni bloccato.

    
risposta data 17.12.2010 - 14:45
fonte
2

Inizia con il il classico problema di progettazione: KWIC.

David Parnas ha utilizzato KWIC come esempio nel suo classico articolo sulla modularità: I criteri da utilizzare per la decomposizione di sistemi in moduli , che probabilmente tutti dovrebbero leggere ogni 10 anni.

KWIC, per parola chiave nel contesto , è un semplice problema di indicizzazione e ordinamento dove leggi righe di testo, quindi ruota ogni riga in base alle parole chiave (ad esempio, escludendo "il", "con"), aggiungendo ogni turno a una lista che poi ordina. L'idea è che l'utilizzo di KWIC sarebbe utile per generare un indice per un libro. Al momento del suo articolo classico, Parnas disse che un programmatore esperto poteva risolverlo in una o due settimane, ma Yannis's La legge afferma che ora può essere eseguita in una o due ore . [I sistemi operativi e le librerie standard sono diventati molto migliori.]

Leggi il documento di Parnas e, non appena riesci a ingannare ciò che il programma KWIC dovrebbe fare, vai e scrivi il tuo come esercizio di progettazione. Quindi, leggi il resto del documento, che discute due diversi design: Entrambi sono modulari, ma si ottiene la possibilità di nascondere le informazioni mentre l'altra no.

Dopo aver conosciuto l'esempio KWIC, sarai in grado di apprezzare altri documenti di progettazione del software che lo utilizzano. Ad esempio, il paper di Michael VanHilst Decoupling Change from Design lo usa per mostrare una tecnica di design davvero interessante usando i modelli C ++. E, a patto che parliamo di modelli e design C ++, leggi Czarnecki e Eisenecker Synthesizing Objects paper.

Passare da KWIC sono altri esempi classici, come l'esempio Spacewar , che è stato portato / ridisegnato in diversi lingue, come Python e AspectJ .

Ovviamente, qualsiasi programma può essere utilizzato come esercizio di progettazione, ma KWIC e Spacewar sono esempi in cui è possibile esaminare diverse alternative.

    
risposta data 17.12.2010 - 16:05
fonte
1

Ho sentito questo genere di cose chiamate "kata di programmazione". Kata è un termine di arti marziali per una forma o sequenza di movimenti che viene praticata più e più volte alla perfezione. Fai qualche ricerca di kata nella tua lingua preferita e scommetto che ti verrà in mente qualcosa. :)

    
risposta data 17.12.2010 - 14:41
fonte
1

Sono d'accordo che Katas ed Euler sono gentili per la progettazione di algoritmi e la pratica della codifica - forse puoi ampliarli, ed essere un po 'creativi e progettare un sistema attorno ad uno dei problemi.

Per esempio, sto lavorando non solo per risolvere i problemi di Eulero per trovare la risposta più rapida, più breve, ma risolvendoli in modo distribuito - Voglio creare una serie di nodi di Erlang per affrontare uno di I problemi. Ovviamente, questo significa che devo capire come separare il problema in blocchi discreti e fargli riferire sui loro progressi e aggregare insieme i risultati (tutti all'interno di un linguaggio funzionale di cui non sono esperto).

Forse puoi progettare un sistema che risolva uno di questi problemi come soluzione aziendale: come puoi fare in modo che più "clienti" possano avere accesso al tuo problema in una volta, puoi progettare un cliente e interazioni del livello di servizio, ecc.

Si tratta di essere creativi e divertirsi.

    
risposta data 17.12.2010 - 16:20
fonte

Leggi altre domande sui tag