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


16

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

Tuttavia, in molti progetti nella vita reale la progettazione del software - specialmente nelle fasi iniziali - ha un grande impatto e nelle fasi successive non può essere modificata facilmente come semplici algoritmi. Al fine di migliorare queste competenze, sto cercando qualsiasi raccolta di problemi di progettazione.

Quando dico "design", intendo la progettazione astratta di una soluzione software - ad esempio quali moduli ci saranno e quali sono le dipendenze tra loro, come i dati scorreranno nel programma, che tipo di dati devono 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 è un diagramma di lavagna senza una singola riga di codice.

Naturalmente questo tipo di problemi non ha un'unica soluzione corretta, ma sarò particolarmente contento di qualsiasi luogo che mostri anche vantaggi e svantaggi delle soluzioni tipiche che potrebbero essere utilizzate per affrontare il problema.


Risposte:


7

Che ne dici di Code Kata . Ho fatto alcuni di questi, e sono divertenti da fare e abbastanza impegnativi che c'è sempre qualcosa da imparare.

I commenti per ciascuno dei kata in genere contengono informazioni sufficienti per rispondere a qualsiasi cosa su cui rimani bloccato.


Il primo è certamente un problema di progettazione, ma ho avuto la sensazione che gli altri siano tutti molto più orientati al codice. Lo darò un'altra occhiata, grazie!
Oak,

3

Inizia con il classico problema di progettazione: KWIC.

David Parnas ha usato KWIC come esempio nel suo classico documento sulla modularità: sui criteri da utilizzare per decomporre i sistemi in moduli , che probabilmente tutti dovrebbero leggere ogni 10 anni.

KWIC, per parole chiave nel contesto , è un semplice problema di indicizzazione e ordinamento in cui leggi righe di testo, quindi ruota ciascuna riga in base a parole chiave (ad esempio, escludendo "il", "con"), aggiungendo ogni spostamento a un elencare quindi ordinare. L'idea è che l'uso di KWIC sarebbe utile per generare un indice per un libro. Al tempo del suo articolo classico, Parnas disse che un programmatore esperto poteva risolverlo in una o due settimane, ma la Legge di Yannis afferma che ora può essere fatto in una o due ore . [I sistemi operativi e le librerie standard sono migliorati molto.]

Leggi l'articolo di Parnas e non appena puoi capire cosa dovrebbe fare il programma KWIC, vai a scrivere il tuo come esercizio di progettazione. Quindi, leggi il resto del documento, che discute di due diversi progetti: entrambi sono modulari, ma uno ottiene informazioni nascoste mentre l'altro no.

Dopo aver conosciuto l'esempio di KWIC, sarai in grado di apprezzare altri documenti di progettazione software che lo utilizzano. Ad esempio, l'articolo di Michael VanHilst che disaccoppia il cambiamento dal design lo usa per mostrare una tecnica di design davvero interessante usando i modelli C ++. E, finché parliamo di modelli e design in C ++, leggi il documento sugli oggetti di sintesi di Czarnecki ed Eisenecker .

Passando da KWIC sono altri esempi classici, come l' esempio di Spacewar , che è stato portato / riprogettato in diverse 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.


Ri: Il tuo chiarimento ... Sto parlando principalmente del livello di design della lavagna bianca qui. Ma vale la pena approfondire anche a livello di codice, in quanto puoi capire che molte delle tue soluzioni di design hanno difetti che le rendono molto più difficili da esprimere.
Macneil,

1

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


1

Sono d'accordo che Katas ed Euler sono bravi a progettare algoritmi e ad esercitarsi nella codifica - forse puoi ampliarli, essere un po 'creativo e progettare un sistema attorno a uno dei problemi.

Ad esempio, sto lavorando non solo per risolvere i problemi di Euler per trovare la risposta più veloce e più breve, ma per risolverli in modo distribuito - Voglio creare una serie di nodi Erlang per affrontare uno dei problemi. Naturalmente, questo significa che devo capire come separare il problema in blocchi discreti e farli riferire sui loro progressi e aggregare i risultati insieme (tutto in un linguaggio funzionale di cui non sono esperto).

Forse puoi progettare un sistema per risolvere uno di questi problemi come una soluzione aziendale - come puoi farlo in modo che più "clienti" possano avere accesso al tuo problema in una volta, puoi passare attraverso la progettazione di un client e le interazioni del livello di servizio , eccetera.

Si tratta di essere creativi e divertirsi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.