Blog Jose Cullar

//Agilist, Tech Lead, Full Stack Developer & Life-long learner

Algunos comentarios de los libros que he leído los últimos meses

por Jose el 31 marzo, 2017

No podemos permitirnos el lujo de caer en la monotonía técnica y dejarnos llevar por las mismas formas de hacer las cosas una y otra vez y de la manera que ya conocemos. Necesitamos hacer un esfuerzo en seguir aprendiendo y mantenernos actualizados siempre que nos sea posible. Si te apasiona la programación y todo lo que le rodea, como en mi caso, no te supondrá ningún esfuerzo sino todo lo contrario. El aprendizaje continuo o lifelong learning.

Entre tantos y tantos libros interesantes, lo importante es elegir bien cuales leer y cuales de ellos se convertirán en nuestros consejeros. Me gustaría compartir algunos comentarios de los libros que he leído los últimos meses y que os recomiendo leer.


2015 – Autor: Sam Newman.

Con el tiempo y si no se presta la atención suficiente es fácil generar una arquitectura monolítica o lo que es peor, una arquitectura monolítica convertida en un gran sistema acoplado o Big ball of mud.

Pueden seguirse los principios: Single Responsability Principle, Separation of Concerns, Low Coupling & High cohesion utilizando una arquitectura monolítica aunque estarás limitado a un único sistema conjunto con todas las funcionalidades acopladas. En la medida de lo posible y necesidades debemos dar un paso más allá y dividir el sistema según sus responsabilidades.

El enfoque Domain Driven Design y sus patrones estratégicos ya introdujeron la división del dominio en los llamados Bounded Context y como colaboran entre ellos mediante los Context Mappings. La propuesta de una arquitectura de microservicios se basa en la división mayor de responsabilidades y desarrollar un conjunto de pequeños microservicios que darán soporte a un sistema distribuido.

El libro nos aconseja las mejores estrategias para disgregar la base de datos única de nuestro sistema monolítico en varias base de datos que den soporte a los diversos microservicios según la responsabilidad de cada uno y como manejar las relaciones de las tablas en la división. Así como estrategias y herramientas de automatización de deploy/desplegado para desplegarlos de forma aislada, autónoma y transparente para el conjunto del sistema, como por ejemplo Docker.

Dicha granularidad en los microservicios nos permite escoger el lenguaje de programación idóneo dependiendo de su responsabilidad, escalar y rastrear errores más eficazmente.

API REST como principal protocolo de acceso, colaboración y consumo.
Herramientas de traceo que permiten el monitoreo de toda la actividad entre microservicios, como por ejemplo ELK (ElasticSearch, Logstash y Kibana).

Me llamó la atención un comentario en el que priorizan incumplir DRY (duplicando código en microservicios) con tal de favorecer Single Responsability Principle, Separation of Concerns, Low Coupling & High cohesion. Dado que pueden ser peores los inconvenientes generados en el acoplamiento que sucede en la reutilización de código entre componentes independientes.

Nos recomienda algunas estrategias en la capa de UI para generarlas mediante las peticiones a varios microservicios que retornen contenidos de HTML o la información necesaria para realizar el renderizado en el cliente. También llamadas Composed UI

Puedes comprarlo aquí.

Puedes además ampliar la información aquí:
Introduction to Microservices
Microservices and Front-End
The Monolithic Frontend In The Microservices Architecture


2015 – Autor: Scott Millett.

El libro perfecto para profundizar los patrones, principios y prácticas de desarrollo mediante un enfoque de DDD plasmado en ejemplos prácticos.

Fue el siguiente libro después de Implementing DDD y fue una buena elección ya que solucioné muchas de las dudas de interpretación que tenía pendientes.

En la primera parte del libro se centra en explicar los patrones estratégicos de DDD para en capítulos posteriores profundizar en temas más tácticos como CQRS, patrones que nos ayudarán al desarrollo como Command (processor) pattern, Double Dispatch pattern, Memento pattern, implantación de Event Sourcing, Event Store, reconstrucción de los agregados.

Así como otros patrones de diseño como el Repository pattern, Unit of Work pattern, Table Module pattern, Data Driven programming, Model Driven, Active Record pattern, Transaction Script pattern o Mediator/Visitor pattern. Todos ellos explicados con gráficos y ejemplos. Además también nombra algunos antipatterns como God Object o Anemic Domain model.

Es un libro muy recomendable por la gran cantidad de ejemplos de código donde refleja mucha de la teoría de los patrones tácticos del enfoque DDD, así como algunos de los patrones de diseño más utilizados. El libro me solventó muchas dudas con respecto a CQRS/ES y reconstrucción de agregados mediante el Event Stream y la gestión de proyecciones o snapshots que ayudan a la reconstrucción del agregado de una forma más eficiente. RPC, SOA, EDA, consistencia eventual y otros conceptos interesantes con ejemplos de código.

Además dedica ciertos capítulos en explicar las principales herramientas y técnicas más útiles que nos facilitarán seguir los patrones y prácticas recomendadas como: Fluent API, MassTransit, NServiceBus, RabbitMQ.

Estoy seguro que será un libro que consultaré en muchas ocasiones.

Puedes comprarlo aquí.


2008 – Autor: Robert Cecil Martin.

La biblia de todo buen programador. Nos enseña buenas prácticas que nos ayudarán a mejorar la legibilidad y mantenibilidad del código que generamos a lo largo del tiempo. Pautas y guías recomendadas para crear código de calidad bien estructurado. Con ejemplos de código en cada caso.

En una primera parte del libro explica que es un código limpio y qué beneficios obtendremos para después hacernos entender los mejores prácticas mediante ejemplos de refactorización de código.

Codificar con intención de que cualquier persona pueda entender el código, sepa o no sepa programar.
La importancia del orden de declaración de los elementos, así como los nombres descriptivos de las variables, propiedades, métodos, clases, módulos, etc.

Los grandes beneficios de la cobertura de test y la recomendación de realizar siempre que sea posible TDD siguiendo los principios de la correcta generación de los test unitarios mediante F.I.R.S.T.

Por último nos facilita información para poder detectar fragmentos de código que necesitan ser refactorizados o code smell.

Seguro que te pasará lo mismo que a mí: en cuanto lo hayas leído te arrepentirás de no haberlo hecho antes 🙂

Puedes comprarlo aquí.


2014 – Autor: Sandro Mancuso.

Entender y dar la importancia necesaria en la calidad técnica del producto que entregamos. Dando importancia al conocimiento y a la práctica constante para ser mejores profesionales día a día. Prestando atención a todo el proceso en la entrega de valor de producto implicándose en las soluciones de principio a fin.

Sandro Mancuso cuenta sus inicios y como evoluciona en las diversas etapas en su carrera profesional. Destacando la importancia en dar los pasos correctos orientando y decidiendo en todo momento lo mejor para nuestro futuro profesional sin dejar al azar o que otros puedan decidir por nosotros. Mantener nuestros conocimientos y habilidades actualizados mediante el aprendizaje y entrenamiento continuo compartiéndolo con la comunidad.

Existen grupos de meetups en diversas ciudades donde realizan Katas o prácticas de desarrollo donde entrenar nuestras habilidades:

Software Craftsmanship Barcelona

El libro dedica varios capítulos a dar consejos y explicar buenas prácticas para captar talento y pasión a la organización. Ya que los procesos tradicionales de selección de personal no es lo suficientemente refinado como para atraer el verdadero talento a la compañía. Utilizando comparaciones de ofertas de empleo tradicionales con un nuevo modelo recomendable donde se intenta plasmar la pasión por la tecnología dando un papel importante a la calidad en el desarrollo de sus productos. Reflejando una cultura de empresa que apuesta por el conocimiento interno continuo y con la colaboración activa colectiva para la mejora continua de sus productos.

Los grandes beneficios del uso de técnicas de eXtreme Programming: TDD, BDD, Code review, Pair programming, Mob programming y otras técnicas que apuestan por la robustez técnica mejorando el resultado final del producto, la satisfacción del cliente y su buena evolución a lo largo del tiempo.

A pesar de centrarse en la importancia de la calidad, el libro nos aconseja ser pragmáticos y no caer en la teoría excesiva de todos los temas que pueden llegar a ser un obstáculo en la toma de decisiones y en el desarrollo ágil de las soluciones enfocadas a la entrega de valor del producto.

Puedes comprarlo aquí.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *