Para dar el salto de saber programar a saber DISEÑAR, por dónde empezar?

PlayingDead

Imagina que estás en este punto:

Tienes conocimientos medios de más de un lenguaje de programación, de entornos de desarrollo, de sistemas de bases de datos, en general conocimientos de programación decentes (+5 años desarrollando)

Peero aunque has seguido buenas prácticas de desarrollo (Clean Code) estás muy lejos de saber DISEÑAR SOFTWARE.

¿Por dónde empiezas?

¿Clean Architecture? ¿Igual es demasiado avanzado en esta fase?

Normalmente cuando me enfrento a un proyecto personal o de empresa improviso el diseño del software de la aplicación sobre la marcha. Me gustaría cambiar esto y ser más profesional en ese sentido, a parte de poder dar soluciones mucho más potentes con diseños escalables, sin acoplamiento, etc etc etc.

Gracias.

Perkele

va @HeXaN estrénate, di lo tuyo.

JuAn4k4

De la experiencia, al final todo hay que probarlo, que hay mucho guru de tutoriales y a la hora de la verdad son fiascos.
Lo recomendable es ir evolucionando el producto acorde a las necesidades, es decir empezar simple e ir añadiendo la complejidad necesaria.

Sobre dimensionar la arquitectura cuando no hay necesidades solo da problemas, generalmente de tener que mover de una arquitectura compleja a otra diferente, en lugar de mover desde algo más simple.

Serverless con Java he visto yo fracasar vilmente, intentando ir a lo moderno del serverless y pegarse la ostia.

2
amfro

Pues si dominas de verdad la programación, y entendemos el diseño al que te refieres que se trata del back y no lo que se ve en el front, existen los patrones de diseño precisamente para esto, solventar problemas comunes de forma correcta y funcional, quizá el más conocido sea el modelo vista controlador, donde separas las capas del software de manera que cambiar una de ellas no afecta al resto, muy práctico a la hora de migrar a nuevas tecnologías.
Edit: Precisamente estoy trabajando con MVC a full en un proyecto para Idae
:upside_down::upside_down::upside_down::upside_down::upside_down::upside_down::upside_down::upside_down:

1 respuesta
1 comentario moderado
Geekalvaro

Discrepo de #4 , olvidate de MVC y patrones de diseño.

O mejor aún, aprendelos, pero luego no los apliques nunca (o en el caso de los patrones, casi nunca, especialmente los que abusan de la herencia).

MVC, especialmente en el mundo Java ha quedado muy en el pasado. Supongo que puede ser útil en algún caso de uso, pero no se me ocurre cual la verdad.

Empieza por las bases, SOLID, DRY, YAGNI, composition over inheritance, alta cohesión, bajo acoplamiento, etc. Leer el libro de clean architecture puede darte algunas ideas y ayudarte a familiarizarte con algunos conceptos. Busca ejemplos de layered architecture, luego intenta entender la arquitectura hexagonal. Aprende a aplicar TDD o similares.

Práctica y resuelve problemas reales, juntate de gente que sea mucho más buena que tu y ves asimilando estos conceptos poco a poco. No trates de volverte un experto en arquitectura y diseño a base de echarle horas y aprender de golpe. Estos conceptos se van asentando a lo largo de los años, lo importante es que conozcas que existen y cuando te topes con problemas en los que puedas aplicarlos, se solidifique tu conocimiento, hasta que pienses que los has entendido. Luego un tiempo después te darás cuenta de que en realidad no los entendias y así hasta que realmente obtengas un conocimiento realmente profundo.

Ves poco a poco escalando y leyendo sobre el tema, aunque al principio no te enteres bien de que va la cosa, meses o años después eso que leistes irá cobrando sentido y entenderás en que casos aplicarlo o que problemas vuelve más faciles.

Como han comentado es importante no aplicar soluciones a problemas que aun no tienes, no hacer sobreingeniería. ¡Ojo! Esto no quiere decir que no tengas que diseñar para que tu software sea facilmente modificable y extensible. YAGNI no significa que no debas tener tu implementación especifica de persistencia en Oracle, por ejemplo, completamente independiente de tu dominio y casos de uso solo por pensar que jamás cambiaras el Oracle por un Cassandra o lo que sea.

Según vayas asimilando lo más básico puedes ir a por DDD, microservicios, arquitecturas dirijidas por eventos, CQRS, Event Sourcing, sagas, circuit-breakers, etc.

Estoy mezclando churras con merinas, pero bueno, el camino saldrá de forma natural según vayas avanzando y aprendiendo cosas.

1
P

se te ha olvidado decir que con los años terminaras suicidandote

esto es lo mejor de todo --> O mejor aún, aprendelos, pero luego no los apliques nunca

Stricken

Los cursos de Codely pueden ser un buen punto de partida para ir viendo las distintas opciones.

Usuarios habituales