The talking bit

Personal learning journal about programming, maybe more.


Project maintained by franiglesias Hosted on GitHub Pages — Theme based on one by mattgraham

Temas

good-practices php refactoring testing tdd python blogtober19 design-principles bdd misc legacy dungeon design-patterns tips tools ddd bbdd soft-skills golang ruby javascript books api sql oop ethics swift java

Como mejorar tus tests

En este artículo tomaré algunos ejemplos del proyecto Dungeon y explicaré cómo mejorar tests usando distintas técnicas y patrones.

(2023/01/22)

Read More

Dungeon 14. Salir con un tesoro. Parte 2

En esta entrega lidiaré con varias jerarquías de herencias, así como con estrategias para mantener mayor consistencia en la gestión de eventos. Además, solucionaremos problemas de usabilidad.

(2023/01/04)

Read More

Decoradores en Python

El proyecto Dungeon me está sirviendo para aprender Python más a fondo, así que voy a dedicar algunos artículos a cuestiones específicas que me interesan más allá del proyecto en sí. En esta ocasión hablaré de los decoradores en Python.

(2022/12/16)

Read More

Dungeon 9. El camino equivocado

Antes de pasar a otra iteración quiero dedicar un rato a pensar sobre ActionResult, ya que no me convence el planteamiento que he tenido hasta ahora. Y alguna cosa más.

(2022/12/03)

Read More

Dungeon 8. Energía y feature flags

Ahora que ya se puede jugar en una mazmorra, aunque sea pequeña, ha llegado el momento de empezar a ponerlo difícil. La primera dificultad para la jugadora será tener un límite de energía. Pero antes necesitamos tener una representación de esa jugadora en el juego.

(2022/11/23)

Read More

Dungeon 7. Code Review

No soy partidario de las Code Reviews en Pull o Merge Requests, pero creo que hay momentos en que puede ser un buen ejercicio de equipo.

(2022/11/20)

Read More

Mis problemas gestionando errores en Golang

El manejo de errores en Golang es uno de los puntos que más me cuesta de este lenguaje. Y, a juzgar por comentarios y artículos, es uno de los puntos que más le cuesta a casi todo el mundo. Y eso que es, aparentemente, sencillo.

(2022/09/14)

Read More

OOP e Inyección de dependencias en Go

Golang es un lenguaje multiparadigma. Puedes trabajar con orientación a objetos y, por tanto, aplicar patrones y principios de este paradigma. Pero a Golang le gusta hacerlo a su manera.

(2022/09/07)

Read More

Aprendiendo Go con TDD 1

Pues nada, que me ha dado por aprender Golang y para ilustrar algunas de las ideas de este lenguaje he pensado en hacerlo mediante katas de TDD.

(2022/05/29)

Read More

Constructores limpios

Después de haber leído los dos volúmenes de Elegant Objects, tengo un montón de ideas dando vueltas en la cabeza. Así que para darles salida he empezado a dedicar un rato a practicar algunas de las recomendaciones de la obra. O, al menos, intentarlo.

(2022/04/03)

Read More

Como hacer una kata de código

Con cierta frecuencia he escrito sobre katas de código, especialmente de TDD o refactoring, pero creo que puede ser útil un artículo acerca de cómo abordar los ejercicios de código.

(2022/03/31)

Read More

Test && Commit || Revert

Kent Beck es experto en proponer ideas aparentemente sencillas capaces de generar efectos enormes. Hoy hablaremos del flujo Test and Revert or Commit.

(2022/02/16)

Read More

Métodos largos

No hace mucho dejé caer en twitter que tener métodos de más de 10 líneas me parecía un smell. Por supuesto se levantó cierta polémica y hubo algunas respuestas a favor y en contra.

(2022/01/25)

Read More

Outside-in y Behavior Driven Development 1

Outside-in TDD se ha convertido en mi primera opción para desarrollar nuevas features en los proyectos en los que trabajo. Hasta ahora he estado trabajando únicamente con phpunit, pero estoy preparando una especie de side-project para cambiar el modo en que hago los tests de aceptación.

(2021/10/17)

Read More

El falso dilema. Calidad versus velocidad

De vez en cuando me encuentro con artículos o comentarios que mencionan la idea de que, a veces, tenemos que aparcar las buenas prácticas al programar en aras a cumplir un plazo de entrega o salir a producción.

(2021/01/01)

Read More

Las seis preguntas para comentar tu código

La técnica de las seis preguntas (ó 5 según la fuente) es una especie de framework que se utiliza en algunas disciplinas para determinar si una cierta fuente proporciona una información completa.

(2020/11/20)

Read More

Representation pattern

O cómo resolver el problema de mover información entre las capas de una aplicación sin violar las leyes de dependencia ni exponer el dominio en infraestructura.

(2020/11/15)

Read More

Trabajar con legacy y entender el dominio 2

En el artículo anterior el código ha quedado algo mejor estructurado de lo que estaba y, sobre todo, las dependencias están ahora bajo nuestro control. En esta ocasión querríamos avanzar un poco más en esa misma área de organización de código y, sobre todo, conseguir que la capa de domino sea capaz de contarnos la historia acerca de qué trata la aplicación.

(2020/09/22)

Read More

Value Objects con Doctrine

Como xa saberedes, os Value Objects son obxectos do dominio que representan conceptos que nos interesan polo ser valor, son inmutables, non teñen identidade, nin ciclo de vida.

(2020/07/27)

Read More

Añadir una migración Doctrine en un proyecto

Cuando llega el momento de aplicar cambios a la base de datos siempre me preocupo un poco. Como nuestro ORM y acceso a la base de datos es mediante Doctrine en Symfony utilizamos las migraciones de Doctrine para cualquier actualización del esquema.

(2020/07/27)

Read More

Pong en Python. Convivencia entre legacy y código nuevo

En este primer paso quiero mover el código chusco del prototipo a un objeto App, que será el nuevo punto de entrada de la aplicación. De este modo, el código del prototipo es tratado como legacy, pero puede convivir con la aplicación moderna y no perdemos la funcionalidad mientras mejoramos el código.

(2020/06/01)

Read More

Las tres leyes de TDD

Este es un artículo de introducción a Test Driven Development a partir de las “tres leyes” y cómo estas restricciones generan un proceso poderoso para construir software sólido.

(2020/03/06)

Read More

Tests y excepciones

Habitualmente no usamos las excepciones en los tests. Como mucho, esperamos que la unidad bajo prueba lance una excepción y ahí se queda todo:

(2020/02/26)

Read More

De directory driven a DDD paso a paso

Muchas bases de código que han sido creadas tratando de seguir la metodología DDD se quedan atascadas en ese falso DDD que solemos llamar “directory driven development”, que es básicamente una aplicación de la Arquitectura Hexagonal. Esto es, utilizan la típica distribución de carpetas Domain, Application e Infrastructure, pero el código en ellas está mal organizado y mal distribuido porque en su día no se tenía una comprensión completa de lo que implica Domain Driven Design.

(2019/12/17)

Read More

DDD no es lo que te han contado

Acabo de leerme, por fin, El Libro sobre Domain Driven Design de Eric Evans. Después de mucho tiempo leyendo de segunda mano sobre el tema, mi conclusión es: DDD no es exactamente lo que nos han contado.

(2019/12/06)

Read More

DDD, el lenguaje ubicuo

Creo que una de las cosas que provocan que se haga bola la parte estratégica del DDD tiene que ver con que se trata de una metodología muy orgánica. Es difícil incluso definir un principio y un final del proceso. De hecho, diría que el DDD bien entendido no termina nunca mientras el negocio evoluciona.

(2019/11/24)

Read More

DDD, identificando el dominio y los subdominios

Domain Driven Design no puede tomarse como una guía con instrucciones para ir de un punto a otro siguiendo una ruta determinada. Es más bien, un conjunto de estrategias, métodos y tácticas para orientarse en un territorio desconocido y moverse hacia un objetivo deseado que, para mayor dificultad, es móvil.

(2019/11/12)

Read More

Blogtober 2019

Mi compañera y manager en Holaluz Mavi Jiménez va a hacer un dibujo cada día del mes sobre una palabra propuesta en twitter. Y aquí vamos a intentar escribir un post por cada una de ellas.

(2019/10/01)

Read More

Al menos uno

Un ejemplo sencillo que refleja el proceso de refinamiento iterativo que es escribir software.

(2019/09/25)

Read More

Guía para testear con dobles (1)

Se diría que uno de los puntos más problemáticos a la hora de testear sea, para muchas personas, el utilizar dobles: cuándo usarlos, cómo y un largo etcétera de preguntas. En este artículo voy a proponer una serie de consideraciones para testear con dobles y no sufrir.

(2019/05/26)

Read More

Testing expresivo

Desde hace un tiempo estoy explorando una forma de organizar el código de mis tests, al menos de una parte de ellos. A falta de un nombre mejor he decidido llamar a esta organización testing expresivo.

(2019/05/12)

Read More

Un doble para SplFileObject

La Standard PHP Library incluye unas cuantas clases que merece la pena conocer, entre ellas SplFileObject de la cual nos ocupamos en este artículo. Sin embargo, a veces tienen alguna sorpresa oculta.

(2019/05/05)

Read More

Refactor cotidiano (8). Dónde poner el conocimiento

En anteriores entregas hemos propuesto refactorizar código a Value Objects o aplicar principios como la ley de Demeter o Tell, don’t ask para mover código a un lugar más adecuado. En este capítulo vamos a analizarlo desde un punto de vista más general.

(2019/04/28)

Read More

La dualidad del testing

Para ser una disciplina dedicada a que el software se comporte correctamente, lo cierto es que cuando hablamos de testing usamos el lenguaje con muy poca precisión.

(2019/04/05)

Read More

Let it fail

Artículo sobre antipatrones en el uso de dobles de tests y algunas heurísticas útiles para hacer buenos tests cuando necesitamos dobles.

(2019/03/24)

Read More

Testeando lo desconocido (1)

Recientemente he comenzado a trabajar en otro proyecto dentro de la empresa ayudando con el testing. Es una parte del negocio que conozco poco todavía y la aplicación con la que estoy trabajando es, por supuesto, distinta, aunque similar en planteamiento.

(2019/02/22)

Read More

Descuento del 50% en CodelyTV Pro con el libro

Hace unos días anunciábamos que el libro Testing y TDD para PHP estaría incluido gratis para los suscriptores de CodelyTV Pro. Ahora, además, si compras el libro tienes un 50% de descuento en el primer mes de suscripción.

(2019/01/31)

Read More

Refactor cotidiano (4). Sustituye escalares por objetos

PHP viene de serie con un conjunto de tipos de datos básicos que denominamos escalares: bool, int, float, string…, que utilizamos para representar cosas y operar con ellas. La parte mala es que son tipos genéricos y, a veces, necesitaríamos algo con más significado.

(2019/01/13)

Read More

La kata del DNI para aprender TDD

Una vez que comprendemos el concepto, no es difícil hacer TDD. Pero ese primer paso necesario para arrancar suele necesitar ayuda. Lo mejor es encontrar un ejercicio de programación que sea sencillo sin ser trivial y que ayude a poner de manifiesto los elementos más importantes de la metodología TDD.

(2018/12/12)

Read More

What the book

Después de darle vueltas a la idea una temporada hemos agrupado varios artículos del blog sobre testing en un libro.

(2018/11/25)

Read More

Normalización de bases de datos

La normalización de las bases de datos es un proceso que persigue reducir la redundancia de datos y controlar las dependencias entre las entidades representadas en las tablas, de modo que éstas puedan evolucionar fácilmente y se reduzcan los errores que generen inconsistencia de datos.

(2018/11/18)

Read More

Null coalesce operator

El operador ternario comparte con null coalesce el símbolo de la interrogación, pero ahí se acaba el parecido.

(2018/10/25)

Read More

La ética de las buenas prácticas (1)

La ética es la rama de la filosofía que se ocupa del “buen vivir”. Pero no en el sentido hedonista que podrías imaginar por la expresión, sino en el sentido de la manera correcta de vivir.

(2018/10/15)

Read More

Introducción a Behavior Driven Development en PHP (1)

Como desarrolladores nos gusta que las historias de usuario que definen nuestros Product Owners estén bien escritas, de modo que podamos implementar lo que se nos pide. Lo mejor de todo es que existe una herramienta conceptual y técnica para lograr eso.

(2018/09/16)

Read More

Splat operator

Aunque está entre nosotros desde la versión 5.6 de PHP, splat operator es relativamente desconocido y su uso no deja de ser un poco confuso.

(2018/09/06)

Read More

El drama de los objetos anémicos

Pululan por nuestras bases de código como almas en pena, transportando datos de un lugar a otro. Sin embargo, podrían dar esplendor a nuestras aplicaciones si les damos un poco de atención.

(2018/09/02)

Read More

Crear y usar un canal de log en Symfony

De vez en cuando nos puede interesar disponer de un log específico para una parte concreta de una aplicación. Fundamentalmente lo que pretendemos es aislar esos mensajes para poder analizarlos con facilidad.

(2018/08/29)

Read More

Cómo poner nombres

¿Por qué razón poner nombres a las cosas se considera uno de los aspectos más difíciles de la programación?

(2018/06/20)

Read More

Dependencias y acoplamiento

Cómo aplicar el principio de inversión de dependencias, entendiendo qué es dependencia y qué acoplamiento. ¡Ah! Y cómo saber cuándo necesitamos usar inyección o instanciación al crear objetos.

(2018/06/05)

Read More

Clean testing

Algunas estrategias con las que intento que mis tests sean cada vez más limpios y legibles y, por tanto, más capaces de comunicar lo que hace el software que escribo.

(2018/06/03)

Read More

Programar sin ifs

If/then es una de las estructuras de control básicas de la programación, pero su abuso puede multiplicar la complejidad de un algoritmo y la dificultad de mantenerlo. En este artículo exploraremos alguna estrategias para usar los if con cabeza.

(2018/05/09)

Read More

TDD de un validador de NIF

Hay validadores de NIF a espuertas, pero escribir uno con TDD resulta ser un interesante ejercicio con el que desarrollar algunas estrategias de test.

(2018/05/01)

Read More

Sobre la expresividad del código

Al hablar de código expresivo queremos decir no solo que el código debería indicar con claridad su intención, también queremos que el código revele más cosas de sí mismo.

(2018/05/01)

Read More

Psicología del testing

Mi primer contacto con los tests, con el propio concepto de test para ser precisos, fue de todo menos una epifanía.

(2018/04/25)

Read More

Uniones de tablas en SQL

Este es un artículo rescatado del olvido. Lo escribí en 2010, como forma de aprender el funcionamiento de las uniones de tablas en SQL.

(2018/04/16)

Read More

Testeando lo impredecible

¿Cómo testear lo que no podemos predecir? En muchos sentidos los tests se basan en que el comportamiento del código es predecible: si hacemos ciertas operaciones con ciertos datos podemos esperar ciertos resultados y no otros. Pero esto no siempre se cumple, a veces tenemos que testear algo que no sabemos qué será.

(2018/04/14)

Read More

Builder pattern

Estos últimos días he trabajado bastante con el patrón Builder, así que toca escribir algo sobre su utilidad para la creación de objetos complicados.

(2018/04/02)

Read More

Test doubles (1)

Estaba pensando en comenzar el artículo con la manida metáfora de los test doubles como especialistas de cine, los que doblan a los actores en ciertas escenas, no necesariamente peligrosas. Pero cuando más vueltas le doy, menos claro tengo que sea un buen símil.

(2018/03/22)

Read More

Manejar excepciones

Las excepciones son elementos del lenguaje que nos permiten indicar situaciones que rompen el flujo normal de un programa. Cuando se lanza una excepción, ésta asciende la pila de llamadas del lenguaje hasta encontrar algún punto en que sea gestionada. Si no lo encuentra, el flujo del programa se detiene y se muestra un error.

(2018/02/22)

Read More

El patrón decorador

El patrón decorador tiene como objetivo permitirnos modificar el comportamiento de un objeto en tiempo de ejecución, esto es, de manera dinámica.

(2018/02/19)

Read More

Luhn Test kata en Python

Hoy voy a hacer un experimento interesante: una kata en Pyhton. Llevo una temporada jugueteando un poco con el lenguaje y he podido probar algunas cosillas.

(2018/02/08)

Read More

Clean Validation

La validación es el proceso mediante el cual nos aseguramos de que los datos introducidos al sistema cumplen ciertas condiciones necesarias para poder utilizarlos sin peligro, sin provocar errores, y con la posibilidad de proporcionar resultados, al mantenerse dentro de los límites de tolerancia de los algoritmos que los emplean.

(2018/01/28)

Read More

Código mentiroso

En esencia, el código mentiroso es todo código que dice que hace algo, pero en realidad no lo hace, o hace algo diferente, o desvía nuestra atención de algo que deberíamos saber.

(2018/01/07)

Read More

Ejercicio de refactoring (4) Finalizando

En el artículo anterior quedaron pendientes algunos refactors en nuestro proyecto. En esta entrega mi intención es tratar de rematarlos, así como hacer alguna reflexión sobre los resultados obtenidos y sus consecuencias.

(2018/01/05)

Read More

Ejercicio de refactor (2) Extraer hasta la última gota

Una vez que hemos conseguido describir con tests el comportamiento del método que nos interesa, llega el momento de refactorizar. Queremos cambiar la implementación, pero no alterar el comportamiento público del método. Por lo tanto, los tests han de permanecer en verde tras cada cambio, procurando que la fase roja dure lo menos posible, lo que implica realizar baby-steps y no grandes refactors de una sentada.

(2017/12/17)

Read More

TDD en PHP. Un ejemplo con colecciones (4)

Con lo pequeñita que es la clase Collection y está dando para un montón de artículos. En esta cuarta entrega voy a intentar desarrollar el método filter, el cual también nos dará un punto de partida para otros métodos.

(2017/11/25)

Read More

TDD en PHP. Un ejemplo con colecciones (2)

Ahora que tenemos una clase Collection a la que podemos añadir objetos de un tipo determinado o sus descendientes, vamos a desarrollar algo de comportamiento. Al fin y al cabo, queremos nuestras colecciones para hacer algo con sus elementos, no solo para admirarlas… (ejem!).

(2017/11/21)

Read More

Consistencia de objetos

El último artículo me dejó con un poco de mal sabor de boca porque la solución propuesta al problema de tratar casos especiales en una colección de objetos que estábamos construyendo a partir de datos obtenidos de una API externa cojea en algún punto.

(2017/11/12)

Read More

Modernizando el legacy

Hace unos días trabajamos en una de esas historias que mola porque puedes reducir un poco de legacy code y refactorizar, contribuyendo a mejorar la calidad del código y su extensibilidad futura.

(2017/10/01)

Read More

Strategy pattern

El patrón Strategy (estrategia) se basa en encapsular una familia de algoritmos de modo que sean intercambiables.

(2017/09/29)

Read More

Presenter pattern

Existen una serie de patrones de diseño de sóftware básicos, pero nada nos impide crear nuevos patrones a partir de alguno de los clásicos, con el fin de adaptarlos a situaciones más específicas. Sencillamente, son patrones menos generales.

(2017/09/01)

Read More

Dos semanas

Mañana miércoles se cumplen dos semanas de mi nueva etapa profesional.

(2017/08/29)

Read More

Katando PHPSpec 4

En las entregas anteriores de la serie he tratado de explicar cómo hacer TDD usando PHPSpec. En esta última, voy a mostrar cómo dar un “salto” en el desarrollo, usando los test existentes como protección.

(2017/05/29)

Read More

Katando PHPSpec 3

En esta tercera entrega, vamos a examinar cómo los nuevos requisitos nos pueden llevar a refactorizar una solución existente y discutiremos lo que define la sobreingeniería.

(2017/05/26)

Read More

Sirviendo API rest (1)

Voy a hacer un ejemplo de controlador que responde a peticiones por API Rest distribuido en varias entregas. Me voy a limitar a lo más básico y en futuros artículos iré añadiendo los elementos de seguridad, etc. En la primera parte, quiero centrarme en la parte de diseño.

(2017/05/14)

Read More

API rest

Las API REST permiten a aplicaciones, servicios y capas de aplicación comunicarse entre sí, independientemente de las tecnologías subyacentes.

(2017/05/09)

Read More

El patrón Specification del dominio a la infraestructura (3)

En las entregas anteriores hemos hablado del patrón Specification y cómo implementarlo en las diversas capas de arquitectura con la ayuda de Abstract Factory. Ahora toca ver cómo combinar Specification mediante el patrón Composite para construir especificaciones complejas a partir de otras más simples.

(2017/04/30)

Read More

Experimentos con read-model

En los últimos días he estado trabajando ya en módulos específicos de la aplicación. En concreto la parte del CMS por ser la más visible y conceptualmente bastante sencilla. Así puedo hacer algunos experimentos interesantes en la separación de responsabilidades entre capas.

(2017/04/23)

Read More

Empezando con Doctrine DBAL

Cuando hablamos de Doctrine casi siempre pensamos en su ORM. Sin embargo, su capa de acceso a la base de datos es una gran herramienta poco conocida, de la que hay poca información aparte de la documentación oficial.

(2017/04/06)

Read More

Huyendo del database-first

Database-first: al principio puede parecer fácil y hasta lógico. Es como el reverso tenebroso de la Fuerza, pero con datos.

(2017/04/03)

Read More

Commits, tags y branches en git

Trabajar de forma individual hace que, a veces, descuides aspectos del flujo de trabajo que son cruciales en equipos. Uno de estos aspectos es la gestión de versiones y la ramificación de proyectos.

(2017/03/27)

Read More

Historia de una reescritura (1)

Hace unos 15 años comencé a escribir mi primera aplicación seria en PHP. Esta aplicación fue creciendo y sufriendo diversos cambios y prestaciones. Ahora ha llegado el momento de replantearla.

(2017/03/04)

Read More

El patrón visitante

El patrón visitante es uno de los que más difícil me ha resultado entender y aplicar, así que voy a escribir sobre él para afianzar el concepto.

(2016/12/22)

Read More

Cadena de responsabilidad

El patrón Cadena de Responsabilidad (Chain of Responsibility) nos permite manejar una petición que puede ser atendida por varios objetos, sin saber a priori cuál de ellos lo hará.

(2016/12/05)

Read More

Los principios SOLID

Los principios SOLID son cinco principios en el diseño orientado a objetos compilados por Robert C. Martin, aunque quien primero se refirió a ellos con este nombre fue Michael Feathers. Martin los tomó como base para sus trabajos “Clean Code” y “Clean Architecture” y les dio la formulación más conocida.

(2016/11/29)

Read More

Polimorfismo y extensibilidad de objetos

En Programación Orientada a Objetos el polimorfismo es una característica que nos permite enviar el mismo mensaje, desde el punto de vista sintáctico, a distintos objetos para que cada uno de ellos lo realice con un comportamiento específico.

(2016/11/29)

Read More