Refactoring y Connascence

Hace poco tiempo hablamos de Connascence. En el post comentamos que el Connascence es una métrica de calidad software y una taxonomía (forma de clasificar) el acoplamiento entre componentes software. Por ello es una buena herramienta para tomar decisiones de diseño sobre todo cuando estamos refactorizando.

En el libro de Refactoring se habla de «code smell» como una manera de identificar la partes del código que pueden tener problemas y que sería bueno refactorizar. El inconveniente de los code smells es que son subjetivos y pueden variar según el lenguaje de programación, el desarrollador. Por ello podemos ayudarnos del connascence para identificar los code smell y así empujar el refactoring tomando decisiones basadas en el connascence.

Para ilustrar esto, lo ideal es tener en cuenta esta gráfica.

Continúa leyendo «Refactoring y Connascence»

Anuncio publicitario

Connascence, otra manera de hablar de acoplamiento y cohesión

Seguro que siendo desarrolladores de software todos hemos oído los términos de acoplamiento y cohesión. Para quien no le suene, el término «acoplamiento» hace alusión al grado de dependencia que tienen dos unidades de software y la «cohesión» tiene que ver con la forma en la que agrupamos unidades de software en una unidad mayor.

31901945494_bd24c12961_z
coupling!

¿Y todo esto a qué viene? Cuando estamos desarrollando, refactorizando, tenemos test y vamos a modificar el código que tenemos por delante tenemos que tomar decisiones: ¿En base a qué tomamos esas decisiones? Unas veces pueden ser principios de diseño de orientación a objetos, otras basándonos en libros como «clean code», «refactoring patterns»,… basándonos en patrones de diseño, basándonos en nuestra experiencia (buena o mala), o basándonos en los principios SOLID, o a code smell o incluso sobre la base de Kent Beck(¿qué haría Kent Beck aquí?)… al final tomamos decisiones basándonos en todo lo que hemos aprendido hasta el momento y de nuestra intuición.

Este post está basado en la charla de Alfredo Casado «Acoplamiento & Connascence» del meetup Software Craftsmanship Madrid

Continúa leyendo «Connascence, otra manera de hablar de acoplamiento y cohesión»

Optimizando aplicaciones web – No solo WPO

En este post no vamos a hablar de como tunear el apache para que cargue más rápido, ni de como modificar el htaccess para que cachear assets e imágenes, ni siquiera vamos a hablar de Varnish o de niveles de caché. Vamos a hablar de todo lo que rodea a la optimización web, del entorno que tenemos alrededor de nuestra web y que es necesario tener en cuenta para optimizar la carga de nuestro sitio web.

Tanto si trabajamos con un ecommerce y lo que queremos son más ventas, como si lo hacemos con un blog y lo que queremos son más visitas o mejorar nuestro sea, es necesario tener unos tiempos de carga pequeños y para ello no solo tenemos que fijarnos en nuestro servidor web, sino en todo lo que lo rodea.

¿Has comprobado la velocidad de carga de tu web? Seguro que ya has pasado por gmetrix o por pagespeed insights y te has dado cuenta de que uniendo los css en uno solo o minimizando los archivos javascripts ganamos bastante performance. Pero no solo eso es importante, muchas veces tenemos mejoras visuales (cargar el contenido antes que los css por ejemplo) con las que no ganamos velocidad de carga pero si ganamos velocidad de percepción. Esta velocidad es importantísima a la hora de convertir a usuarios en clientes o a primeros usuarios en usuarios recurrentes.

Continúa leyendo «Optimizando aplicaciones web – No solo WPO»

Dejar de ser un cowboy del código y aplicar buenas prácticas de desarrollo a WordPress

WordPress es uno de los CMS más populares y uno de los más utilizados en Internet. Además tiene detrás una comunidad de usuarios enorme. Lo que posiciona a WordPress como una de las herramientas más utilizadas cuando vamos a desarrollar un sitio web, una tienda online, es la más recomendada a la hora de hacer un MVP para una startup, etc.

El problema es que entre los desarrolladores PHP hay un poco de odio hacia WordPress. Es cierto el código de PHP es un poco desastre, pero funciona. Y funciona bien. Y como a veces pasa, el problema no esta en el software sino en como las personas se relacionan con ese software.

8322854138_7177baab2a_z
Tram of light

Continúa leyendo «Dejar de ser un cowboy del código y aplicar buenas prácticas de desarrollo a WordPress»

Trucos de Varnish

Bueno ya hemos hablado mucho de Varnish, pero es que este acelerador HTTP da para mucho. Hoy vamos a contar unos cuantos consejos a la hora de trabajar con Varnish.

Como contamos al principio, una de las primeras tareas antes ni tan siquiera de instalar Varnish es distinguir a los usuarios de nuestra web para saber si la mayoría de las visitas son «stateless» (sin estado) o «stateful». Solo sacaremos de verdad partido a Varnish si el grueso de las peticiones son «stateless».

8140086323_ebbbff950e_z.jpg
304/366 Nail Varnish

Continúa leyendo «Trucos de Varnish»

Comandos para manejar Varnish

Seguimos con nuestra serie de Varnish. Ya conocemos bastante sobre este acelerador web, somos capaces de instalarlo, conocemos más o menos como funciona y ahora es hora de sacarle partido a los comandos de Varnish.

Varnish Cache es bastante flexible, ya que ofrece la posibilidad de configurar todas las etapas del proceso de la petición http con un lenguaje parecido a C. Del mismo modo y gracias a las herramientas proporcionadas por la propia herramienta , podemos monitorizar, medir el rendimiento y sobre todo controlar la tasa de aciertos (hit rate) de la memoria cache.

16636213747_326548d6a8_z
shellac surgeon (Todd F Niemand)

Continúa leyendo «Comandos para manejar Varnish»

Curso de Refactoring en PHP

Este es un post un poco especial, voy a impartir este curso sobre refactoring en PHP y me gustaría contar un poco como ha sido todo este proceso desde que empecé como alumno en geekshubs academy hasta que nos pusimos manos a la obra para grabar un curso.

Aunque Internet es una fuente inagotable de información. En la red hay miles de artículos, blogs, wikis, listas de distribución sobre programación, testing, docker,… no terminaba de encontrar un curso que de verdad me aportase algo más. Estaba buscando mejorar mis habilidades como programador, que fuese en español, con comunicación directa con los profesores.

rrss.jpg

Un día casi por casualidad, encontré un post de Xavi Gost hablando sobre el curso «De refactoring a patrones» impartido en GeeksHubsAcademy, la verdad es que era escéptico sobre los cursos en video, pero me convenció el hecho de hacer hangouts para poder resolver dudas y además @islomar me dio un empujón en forma de descuento 😉

Continúa leyendo «Curso de Refactoring en PHP»

npm vs grunt vs gulp vs webpack vs .. ¡vaya lío de frontend!

¡Vaya lío de frontend! Existen 1000 herramientas con las que trabajar. Buscamos en internet, nos encontramos con muchísimos post sobre distintas tools para hacer frontend. Además, si somos más de backend puede «cortocircuitarnos».

Hoy vamos a ver unas cuantas herramientas para mejorar nuestro flujo de trabajo en front. Como ya hemos visto, el «flujo de trabajo» de un programador es una tarea compleja a la que debemos dedicar tiempo para ser más productivos y aprovechar nuestro tiempo en tareas que aportan valor.

2968210374_0c6b4ba435_z
three-headed MacBook 2008

¿Por qué hablamos de esto? Imaginemos que estamos en un proyecto y usamos un framework css, da igual que sea foundation, bootstrap, algo de material design,… Además tenemos que usar un preprocesador para css Less o Saas y cómo no es necesario que usemos algo de javascript, al menos JQuery, o VueJS, o Angular, o mejor React ¿Cómo unimos todo esto? y encima tenemos que minimizarlo para ganar performance,…

Continúa leyendo «npm vs grunt vs gulp vs webpack vs .. ¡vaya lío de frontend!»

Pequeños hacks para ganar tiempo con el terminal en Mac

Todos tenemos pequeños hacks, trucos o maneras de hacer las cosas para hacernos la vida más sencilla. En este post vamos ha comentar algunos trucos y hacks que utilizo de vez en cuando. También puedes echarle un vistazo a las apps y extensiones que te harán la vida más fácil en Mac. Estoy seguro de que tu también tienes muchos hacks, te animo a que los comentes porque seguro que son TOP.

3676051545_98c9e82a46_o
E.Vill-Jeneous, the mad inventor

 

iTerm2 y Oh my zsh

Hace ya bastante instalé iTerm2 como alternativa a la terminal de Mac y estoy muy contento. Pero hace unos meses cambie bash por zsh y la personalicé con oh-my-zsh Algunos de los hacks de oh-my-zsh son:

  • mas extensible cuando quieres autocompletar con tab.
  • mejor completado del comando ‘killall’.
  • coloreado del comando ‘ls’ – mejor prompt
  • Ir a una ruta/url con CMD
  • cantidad de plugins tanto para autocompletar, para abrir Jira, …

Continúa leyendo «Pequeños hacks para ganar tiempo con el terminal en Mac»

TDD – ¿De adentro hacia afuera o de fuera hacia adentro?

Hace unas semanas estuve en un Merendojo de Madrid Software Craftmanship (desde aquí gracias a los organizadores Luís, Pablo y el resto de personas) y después de la kata estuvimos discutiendo distintos enfoques sobre como afrontar el problema. En un momento de la conversación surgió el tema de como afrontar los tests, por donde empezar, desde dentro hacia afuera, haciendo test desde la parte más externa posible,… la verdad es que la charla fue bastante interesante y me picó la curiosidad sobre como afrontar los tests y como hacer TDD cuando tienes un problema grande. Así que buscando en Internet encontré este interesante post TDD – From the Inside Out or the Outside In? de Georgina Mcfadyen y me he animado a hacer una traducción libre.

A menudo la parte más difícil de programar es saber por donde empezar. Haciendo TDD (Test Driven Development) la mejor lugar de empezar es con un test, pero estar delante de una página en blanco puede ser desalentador.

3389073921_63559084e0_z
Tobias Toft

¿La mejor manera de empezar es por los detalles de lo que está construyendo, y dejar que la arquitectura vaya emergiendo con un enfoque de adentro hacia afuera (Inside Out)? O bien, empezar por algo grande y dejar que los detalles vayan revelando a medida que se van usando desde afuera hacia adentro (Outside In)

Continúa leyendo «TDD – ¿De adentro hacia afuera o de fuera hacia adentro?»