¿Dónde puedo encontrar ejercicios de diseño para trabajar? [cerrado]

15

Creo que es importante continuar practicando mis habilidades para resolver problemas. Escribir mis propios mini-proyectos es una forma, pero otra es intentar resolver problemas publicados en línea. Es fácil encontrar cuestionarios de programación interesantes en línea que requieren la aplicación de algoritmos inteligentes para resolver: Project Euler es un ejemplo bien conocido.

Sin embargo, en muchos proyectos de la vida real, el diseño del software, especialmente en las fases iniciales, tiene un gran impacto y en etapas posteriores no se puede modificar tan fácilmente como los algoritmos simples. Para mejorar estas habilidades, estoy buscando cualquier colección de problemas de diseño.

Cuando digo "diseño", me refiero al diseño abstracto de una solución de software; por ejemplo, ¿qué módulos habrá y cuáles son las dependencias entre ellos, cómo fluirán los datos en el programa, qué tipo de datos deben ser? guardados en la base de datos, etc. Los problemas de diseño son aquellos problemas que son críticos para resolver en las primeras etapas de cualquier proyecto, pero su solución es un diagrama de pizarra sin una sola línea de código.

Por supuesto, este tipo de problemas no tienen una solución correcta, pero estaré especialmente satisfecho con cualquier lugar que también muestre los pros y los contras de las soluciones típicas que podrían usarse para abordar el problema.

    
pregunta Oak 17.12.2010 - 14:30

4 respuestas

7

¿Qué tal Kata de código . He hecho algunos de estos, y son divertidos de hacer, y lo suficientemente desafiantes como para que siempre haya algo que aprender.

Los comentarios para cada uno de los kata suelen tener suficiente información para ayudar a responder cualquier cosa que se quede atascado.

    
respondido por el Alan 17.12.2010 - 14:45
2

Comience con el problema de diseño clásico: KWIC.

David Parnas usó KWIC como ejemplo en su artículo clásico sobre modularidad: Sobre los criterios que deben usarse para descomponer los sistemas en módulos , que probablemente todos deberían leer cada 10 años.

KWIC, para palabra clave en contexto , es un simple problema de indexación y clasificación donde se lee en líneas de texto, y luego rota cada línea según las palabras clave (por ejemplo, excluyendo "el", "con"), agregando cada turno a una lista que luego ordena. La idea es que usar KWIC sería útil para generar un índice para un libro. En el momento de su artículo clásico, Parnas dijo que un programador experimentado podría resolverlo en una o dos semanas, pero Yannis La ley establece que ahora se puede hacer en una o dos horas . [Los sistemas operativos y las bibliotecas estándar han mejorado mucho.]

Lea el documento de Parnas y, tan pronto como pueda asimilar lo que se supone que debe hacer el programa KWIC, vaya y escriba el suyo como ejercicio de diseño. Luego, lea el resto del documento, que trata dos diseños diferentes: ambos son modulares, pero uno logra ocultar la información mientras que el otro no.

Después de conocer el ejemplo de KWIC, podrá apreciar otros documentos de diseño de software que lo utilizan. Por ejemplo, el documento de Michael VanHilst Desacoplar el cambio del diseño lo utiliza para mostrar una técnica de diseño realmente interesante utilizando plantillas de C ++. Y, mientras estemos hablando de plantillas y diseño de C ++, lea Czarnecki y Eisenecker Sintetizando objetos en papel.

Pasando de KWIC hay otros ejemplos clásicos, como el Spacewar example , que ha sido portado / rediseñado en varios idiomas, como Python y AspectJ .

Por supuesto, cualquier programa se puede usar como un ejercicio de diseño, pero KWIC y Spacewar son ejemplos en los que puedes ver varias alternativas.

    
respondido por el Macneil 17.12.2010 - 16:05
1

He escuchado este tipo de cosas denominadas "katas de programación". Kata es un término de artes marciales para una forma o secuencia de movimientos que se practica una y otra vez a la perfección. Haga una búsqueda de katas en el idioma que elija y apuesto a que encontrará algo. :)

    
respondido por el Josh Earl 17.12.2010 - 14:41
1

Estoy de acuerdo con que Katas y Euler son buenos para diseñar algoritmos y practicar la codificación; tal vez puedas expandirte, ser un poco creativo y diseñar un sistema alrededor de uno de los problemas.

Por ejemplo, estoy trabajando no solo para resolver los problemas de Euler para encontrar la respuesta más rápida y breve, sino para resolverlos de manera distribuida: quiero configurar una serie de nodos de Erlang para abordar uno de los problemas. Por supuesto, esto significa que tengo que averiguar cómo separar el problema en partes discretas y hacer que informen sobre su progreso y agrupen los resultados (todo dentro de un lenguaje funcional en el que no soy un experto).

Tal vez pueda diseñar un sistema para resolver uno de estos problemas como una solución empresarial. ¿Cómo puede hacerlo para que varios "clientes" puedan tener acceso a su problema al mismo tiempo? Puede diseñar un cliente y interacciones de la capa de servicio, etc.

Se trata de ser creativo y divertirse.

    
respondido por el Watson 17.12.2010 - 16:20

Lea otras preguntas en las etiquetas