Onde posso encontrar exercícios de design para trabalhar? [fechadas]

15

Eu sinto que é importante continuar praticando minhas habilidades de resolução de problemas. Escrever meus próprios mini-projetos é um caminho, mas outro é tentar resolver problemas postados online. É fácil encontrar quizzes de programação on-line interessantes que exigem a aplicação de algoritmos inteligentes para resolver - Projeto Euler é um exemplo bem conhecido.

No entanto, em muitos projetos da vida real, o projeto do software - especialmente nas fases iniciais - tem um grande impacto e em fases posteriores ele não pode ser ajustado tão facilmente quanto algoritmos simples. Para melhorar essas habilidades, estou procurando por qualquer coleção de problemas de design.

Quando digo "design", quero dizer o design abstrato de uma solução de software - por exemplo, quais módulos haverá e quais são as dependências entre eles, como os dados fluirão no programa, que tipo de dados precisa ser salvo no banco de dados, etc. Problemas de projeto são aqueles problemas que são críticos para resolver nos estágios iniciais de qualquer projeto, mas sua solução é um diagrama de quadro branco sem uma única linha de código.

É claro que esses tipos de problemas não têm uma única solução correta, mas ficarei especialmente feliz com qualquer local que também exiba os prós e contras das soluções típicas que podem ser usadas para abordar o problema.

    
por Oak 17.12.2010 / 14:30
fonte

4 respostas

7

Que tal Código Kata . Eu fiz alguns destes, e eles são divertidos de fazer, e desafiadores o suficiente para que sempre haja algo para aprender.

Os comentários para cada um dos katas geralmente têm informações suficientes para ajudar a responder qualquer coisa que você tenha.

    
por 17.12.2010 / 14:45
fonte
2

Comece com o problema de design clássico: KWIC.

David Parnas usou o KWIC como exemplo em seu artigo clássico sobre modularidade: Os Critérios a Serem Usados em Sistemas Decomponentes em Módulos , que todos deveriam ler a cada 10 anos.

O KWIC, para palavra-chave no contexto , é um simples problema de indexação e classificação onde você lê em linhas de texto e, em seguida, gira cada linha com base em palavras-chave (por exemplo, excluindo "the", "with"), adicionando cada turno a uma lista que você classifica. A ideia é que o uso do KWIC seria útil para gerar um índice para um livro. Na época de seu trabalho clássico, Parnas disse que um programador experiente poderia resolvê-lo em uma ou duas semanas, mas Yannis A lei afirma que agora isso pode ser feito de uma a duas horas . [Os sistemas operacionais e as bibliotecas padrão ficaram muito melhores.]

Leia o artigo de Parnas, e assim que você conseguir fazer o que o programa KWIC deve fazer, escreva o seu próprio como um exercício de design. Em seguida, leia o restante do artigo, que discute dois designs diferentes: Ambos são modulares, mas um obtém informações ocultas enquanto o outro não.

Depois de conhecer o exemplo da KWIC, você poderá apreciar outros documentos de design de software que o utilizam. Por exemplo, o artigo de Michael VanHilst, Decoupling Change from Design , o utiliza para mostrar uma técnica de design realmente interessante. usando modelos C ++. E, enquanto estivermos falando sobre modelos e design de C ++, leia o Objetos de Sintetização paper.

A partir do KWIC estão outros exemplos clássicos, como o exemplo do Spacewar , que foi portado / redesenhado em vários linguagens, como Python e AspectJ .

Naturalmente, qualquer programa pode ser usado como um exercício de design, mas o KWIC e o Spacewar são exemplos onde você pode ver várias alternativas.

    
por 17.12.2010 / 16:05
fonte
1

Eu ouvi esse tipo de coisa chamada de "katas de programação". Kata é um termo de artes marciais para uma forma ou sequência de movimentos que é praticada repetidas vezes até a perfeição. Faça algumas pesquisas por katas no seu idioma de escolha e aposto que você vai encontrar algo. :)

    
por 17.12.2010 / 14:41
fonte
1
Concordo Katas e Euler são bons para projetar algoritmos e praticar codificação - talvez você possa expandi-los, ser um pouco criativo e projetar um sistema em torno de um dos problemas.

Por exemplo, estou trabalhando não apenas na solução dos problemas de Euler para encontrar a resposta mais rápida e mais curta, mas resolvendo-os de forma distribuída - eu quero configurar uma série de nós Erlang para lidar com um dos os problemas. Naturalmente, isso significa que tenho que descobrir como separar o problema em partes discretas e fazer com que elas relatem seu progresso e agreguem os resultados juntos (tudo dentro de uma Linguagem Funcional na qual eu não sou especialista).

Talvez você possa projetar um sistema para resolver um desses problemas como uma solução de negócios - como você pode fazer com que vários "clientes" tenham acesso ao seu problema de uma só vez? Você pode projetar um cliente e interações da camada de serviço, etc.

É tudo sobre ser criativo e se divertir.

    
por 17.12.2010 / 16:20
fonte