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

16

Siento que es importante continuar practicando mis habilidades para resolver problemas. Escribir mis propios mini proyectos es una forma, pero otra es tratar de 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: el Proyecto 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 puede modificarse 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 guardarse en el base de datos, etc. Los problemas de diseño son aquellos que son críticos de 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 tiene una única 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.

Roble
fuente

Respuestas:

7

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

Los comentarios para cada kata generalmente tienen suficiente información para ayudar a responder cualquier cosa en la que te quedes atascado.

Alan
fuente
El primero es ciertamente un problema de diseño, pero tuve la sensación de que los demás están mucho más orientados al código. Le echaré otro vistazo, gracias!
Roble
3

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

David Parnas utilizó KWIC como ejemplo en su clásico artículo sobre modularidad: sobre los criterios que se utilizarán en la descomposición de sistemas en módulos , que probablemente todos deberían leer cada 10 años.

KWIC, para palabras clave en contexto , es un problema simple de indexación y clasificación en el que se lee en líneas de texto y luego se rota cada línea según las palabras clave (por ejemplo, excluyendo "el", "con"), agregando cada turno a un lista que luego ordenas. La idea es que usar KWIC sería útil para generar un índice para un libro. En el momento de su clásico artículo, Parnas dijo que un programador experimentado podría resolverlo en una o dos semanas, pero la Ley de Yannis dice 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 comprender 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 analiza dos diseños diferentes: ambos son modulares, pero uno logra ocultar 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 papel de Michael VanHilst, Desacoplando el cambio del diseño, lo usa para mostrar una técnica de diseño realmente interesante usando plantillas C ++. Y, siempre que hablemos de plantillas y diseño de C ++, lea el documento Sintetizar objetos de Czarnecki y Eisenecker .

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

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

Macneil
fuente
Re: Su aclaración ... Estoy hablando principalmente sobre el nivel de diseño de pizarra aquí. Pero también vale la pena profundizar en el nivel del código, ya que puede darse cuenta de que muchas de sus soluciones de diseño tienen fallas que las hacen mucho más difíciles de expresar.
Macneil
1

He escuchado este tipo de cosas llamadas "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. Busca un poco de katas en el idioma que elijas y apuesto a que encontrarás algo. :)

Josh Earl
fuente
1

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

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

Quizás pueda diseñar un sistema para resolver uno de estos problemas como una solución de negocios: ¿cómo puede hacerlo para que múltiples "clientes" puedan tener acceso a su problema al mismo tiempo, puede pasar por el diseño de un cliente y las interacciones de la capa de servicio etc.

Se trata de ser creativo y divertirse.

Watson
fuente