1 / 16
jul. 2017

Buenas,

El tema que quiero proponer es el siguiente. Tengo la sensación de que la gente "aprende" a utilizar Frameworks, librerías, herramientas en general, paradigmas... Pero en realidad se pierde cuando se baja de nivel. El otro día escuché un Podcast (NTN) que hablaban sobre DDD. Me encuentro a mucha gente que dice que hace DDD y, bueno, sería más que discutible. En el podcasts y en varios libros de DDD hacen énfasis en programar orientados a objetos.

Tengo la sensación también, y aquí va un poco el origen de la discusión, de que las plataformas de enseñanza online, los post, las cosas chulas, los meetups, hablan desde la posición de que la gente conoce la programación orientada a objetos. Pero creo que no es así.

A parte de qué opináis, ¿Qué recursos utilizáis/utilizasteis para aprender POO?

La biblia de la POO pero cuando veo "1296 páginas":

el mejor sobre el tema!

Pasa lo mismo cuando hablamos de DDD con el libro de Vaughn Vernon...

Cuando yo empecé en esto, de chaval, mi padre tenía un libro que me gustó mucho:

Es corto, pero lo recuerdo con cariño.

Tiene otro que también es interesate:

Hola @RebeldeCuantico,

¿te refieres a que en general a mucha gente la faltan conocimientos básicos/intermedios de POO?

Lo he pensado alguna vez, a veces el nivel es demasiado alto para la gente que está intentando salir del lado oscuro y eso puede ser una barrera. Quizás deberían montarse más cosas con la idea de dirigirse a ese público que está muy perdido y necesita empezar con afianzar conceptos más básicos, una especie de mentoría global. :astonished:

A mi me encantan los videos de Clean Coders14, eso sí :euro: :euro: :euro:

Exacto, creo que la gente aprende a usar cosas a alto nivel, y no saben qué están haciendo. Tengo esa sensación al menos.

(Disclaimer: estoy todavía en el medio del largo camino de aprender DDD y paradigma funcional)

Bueno, DDD no tiene pq significar solo orientación a objetos. Se puede aplicar DDD con lenguajes funcionales:

Y recordad que la parte más importante de DDD es la estratégica, no la táctica.

Salut,
Vicenç

Claro DDD no tiene por qué estar ligado a la POO.

En mi humilde opinión, muchas veces se puede detectar falta de conocimientos de POO cuando las clases no representan "cosas" del negocio. Y digo cosas con toda la intención. cuando los objetos representan procesos y no elementos con identidad propia del negocio, algo falla.
No sé si me explico. Por ejemplo, en mi opinión, una clase CRUD, como regla general, por mucho que tenga la palabra "class" en su declaración, no es verdaderamente un objeto. No tiene estado, no es elemento del negocio, no tiene lógica interna más que agrupar funciones que permiten modificar objetos que están fuera del objeto CRUD en sí mismo.

Tanto es así, que en mi opinión, tiene mucho más sentido utilizar una aproximación funcional para el diseño del negocio (reglas, procesos, etc.) mientras se mantiene una aproximación de POO para crear los verdaderos objetos de negocio. Es decir, POO para la capa de "objetos del dominio" y funcional para la capa de aplicación.

Puede parecer raro y incluso no tener demasiado sentido pero si ligas estas ideas con conceptos básicos de DDD o de arquitecturas del estido de ports and adapters, en mi opinión empieza a tener sentido.

+1

yo es algo que echo de menos en Java, obligar a que toooodo sean clases se hace antinatural. Y utilizar clases llenas de static final es una chapucilla. Kotlin te permite crear funciones fuera de clases y lo veo útil en ese sentido (aunque luego lo traduce a código java y son clases con static final :sweat_smile: pero no es importante supongo).

Completamente de acuerdo con los camaradas que mencionan el tema de que se puede hacer DDD son OOP. No recuerdo de qué forma lo mencioné en el podcast, pero me refería al escenario en el que se hubiera decidido usar un lenguaje orientado a objetos, claro :wink:

Y muy importante lo que comenta @vgaltes, creo que la parte estratégica es de lejos la que más valor aporta en DDD

Genial reflexión! Esto es algo que me llevo preguntando desde hace tiempo. Cuando hablan de excelencia técnica, qué se supone que significa eso?
Es decir, mi duda surge cuando ves a alguien que domina mil frameworks, te cita las bondades de todos los clouds con sus pros y contras, o implementa 300 patrones para hacer un método que sume 2 números..., pero cuando hace una kata, tipo como la famosa bowling, y se pierden en el primer caso...
En mi opinión, prefiero que quizás no conozca tantos frameworks y demás, pero haga diseños de base que sean auténticas obras de arte. Me da la sensación de que a veces nos centramos tanto en la solución (a través de herramientas) que nos olvidamos del problema y de que surja la solución de forma natural (sí, me refiero al diseño emergente)

Me gusta diferenciar entre excelencia técnica y excelencia tecnológica, y creo que es algo que se mezcla.

Ojo, realmente no sé si está bien dicho o no o si es fiel a la definición de los términos, pero en mi cabeza "compila" :wink:

Tal como lo veo, la excelencia tecnológica se centra en el ámbito de las herramientas, frameworks, y demás artefactos que generalmente nos intentan poner fáciles problemas complejos.

La excelencia técnica se centra en otro tipo de conocimientos mucho más relacionados con los principios y con campos de conocimiento cercanos a las bases, que suelen ser agnósticos de lenguajes, herramientas y frameworks.

En mi experiencia, buscar la excelencia técnica suele llevar a buscar la simplicidad (aunque no siempre sea posible).

Gracias por el aporte! En mi experiencia, siempre he oído usar la excelencia técnica para referirse a ambas (aunque más tirando a la tecnológica que a la técnica), pero personalmente las veía diferentes. No acababa de encontrar cómo expresar la diferencia entre ambas... genial! Los términos que has usado me compilan a mi también :blush::thumbsup: