Objetivos 2019

Imagen de https://frinkiac.com

El 2018 ha sido un año diferente a los anteriores y con muchos cambios. Por ejemplo, cambié de empresa y cambié de tipo de trabajo.

Estos cambios han hecho que no sea nada constante. Solo hay que ver que el último y único artículo que escribí del 2018 es de los objetivos de ese año para darse cuenta.

Diría que ha sido un año malo porque empezó mal y me ha tocado lidiar con situaciones difíciles que nunca había pensado que tendría que pasar. Pero si lo pienso con calma el 2018 ha sido un buen año ya que he comenzado nuevos retos.

El mayor reto que tengo actualmente es mi puesto como responsable de un equipo de 7 personas, en una compañía que está creciendo y crecerá mucho. Ademas, y como bien se dice en muchos sitios, ser manager después de haber sido programador no es un ascenso sino un cambio de carrera y eso significa aprender mucho.

Voy a comenzar con los retos que me propuse en el 2018 para ver si se han cumplido alguno:

  • Escribir 24 artículos en el blog: Si, otra vez con los 24 artículos. Creo que va ser uno de los grandes objetivos de este 2019.Con diferencia el objetivo que más ganas le tengo. A ver si este nuevo año soy más constante. Como comentaba al principio he escrito un artículo el año pasado. Aquí he fallado estrepitosamente.
  • Aprender Python o/y Ruby: Los dos son grandes lenguajes pero alguno debo de escoger. Creo que voy a elegir Python porque es el único de los dos que tengo ya unas bases. Algún script he escrito en python pero poco más. En cuanto a Ruby, estoy aprendiendolo ya que a nivel laboral voy a tener que utilizarlo.
  • Sentirme bien: Este debería ser el objetivo más fácil porque me gusta hacer deporte y me gusta meditar. Seguro que el próximo año lo cumplo… o no . Este objetivo va por buen camino debido a que estoy corriendo unas dos veces por semana y cada vez estoy haciendo más meditación aunque sean de pocos minutos (5-10 minutos) pero no puedo decir que lo he cumplido.
  • Usar siempre TDD: Desde que empecé a trabajar como technical lead he dejado de programar todos los días. Todavía lo hago pero es menos de la mitad de mi tiempo. Tengo que volver a programar más y utilizar TDD siempre que pueda. Aunque estoy programando menos, de las cosas que he programo si que utilicé TDD.

No ha sido un año especialmente bueno en cuanto a objetivos pero estoy contento de como ha salido 🙂

Aquí la nueva lista:

  • Escribir 24 artículos en el blog: Si, otra vez con los 24 artículos. Me gusta escribir y además me ayudar a organizar mis ideas sobre conceptos. Creo que este va ser uno de los grandes objetivos de este 2019.
  • Aprender Ruby: No sé si tiene mucho sentido el ponerlo porque voy a tener que aprender Ruby si o si en el trabajo pero así cumplo con uno de mis objetivos. 😉
  • Correr 3 días a la semana: Actualmente corro 1-2 días a la semana, el problema es que no soy constante y suelo cambiar de días que voy a correr. Creo que me falta un empujón para dar el salto a más y ponerlo como objetivo creo que será ese salto que necesito.
  • Meditar todos los días: Meditar es muy importante, al menos para mí y me ayuda en mi día a día a todos los niveles. Recuerdo con nostalgia cuando meditaba todos los días porque sentía que tenía como súper poderes. Por ejemplo, me daba cuenta de muchos detalles en las conversaciones.
  • Ir a más conferencias y a los meetups: El año pasado creo que solo fui a una conferencia y ya no voy de forma tan constantes a la Groovy User Group (GUG). Me aporta mucho el ir en cuanto a ideas y energía y es algo que no quiero perder. También me gustaría dar otra charla pero prefiero no ponerlo como objetivo del año.

Como no voy a felicitar el nuevo año en estas fechas y como estamos en Marzo con temperatura de más de 20 grados en Madrid, aprovecho para poner un vídeo (en inglés) sobre el cambio climático de Henry Kniberg y que podemos hacer a nivel personal:

Objetivos 2018

Imaden de https://frinkiac.com
Imagen de https://frinkiac.com

 

Pues otro año ha pasado. Un año que lo podría resumir como normal, aunque el final ha sido ajetreado. Normal porque nos hemos establecido definitivamente en Madrid. Se podría decir que ya somos Madrileños. Y Ajetreado porque he tenido cambios a nivel laboral que me han mantenido en vilo durante los últimos meses. Esa es una de las razones por las que no he escrito este artículo.

 

Lo primero es el ver mis objetivos del 2017 y ver cuales he cumplido.

  • Escribir 24 artículos en el blog: Este es el objetivo más antiguo que tengo y que espero cumplir. Lo que voy a hacer es combinar artículos complejos técnicos y no técnicos con artículos más pequeños sobre mi opinión sobre un tema.  icon-minus-circle He escrito 9 artículos en el 2017. Ni siquiera he hecho la mitad de los artículos que me había propuesto. Tengo alguna excusa, como por ejemplo, que este año he trabajado mucho (incluso en verano) pero no hay excusas que valgan. 
  • Aprender Python o Ruby: Cuando buscaba trabajo en Madrid estuve buscando por startups porque me gusta este tipo de empresas y en la mayoría necesitaban para el backend a alguien con experiencia en Python o Ruby. Voy a probar con ambos a ver cual es el que más me gusta y luego aprender más en profundidad sobre ese lenguaje.  icon-minus-circle He mejorado con Python pero no he mirado nada con Ruby. 
  • Crear un Pet project: Este objetivo va relacionado con el anterior. Creo que trabajar en un pet project es una buena forma de aprender un nuevo lenguaje. Además, tengo alguna idea que me gustaría intentar. icon-minus-circle Ni siquiera me lo he planteado. Quería empezar en verano pero me ha sido imposible.
  • Sentirme bien: Este objetivo resume dos de los del año anterior. Hacer ejercicio y meditar. Hace tiempo que me siento cansado después de trabajar y eso es por la poca energía que tengo. Primero quiero practicar deporte de forma habitual dos veces por semana y luego el meditar. La meditación me hace sentir muy bien cada vez que la practico. Lo que haré es hacerlo todo los días al levantarme durante 5 minutos, pero después de empezar a correr.  icon-minus-circle He mejorado en cuanto al hacer deporte y meditar pero no soy nada constante. Además se me ha juntado que comía todos los días de Lunes a Viernes en restaurantes y ha empeorado mi estado físico.

Como no he cumplido ninguno de mis objetivos del 2017 y soy una persona positiva, voy a listar algunas de las cosas que si he hecho en 2017 a nivel profesional y personal:

  • Llevo escribiendo durante más de 4 años en este blog.
  • He migrado el blog de openshift a un host privado como es BlueHost.
  • He trabajado casi dos años como technical lead.
  • Practicaba padel con los compañeros de trabajo cada dos semanas. Incluso jugué al fútbol.

La nueva lista de objetivos va a ser muy parecida de la del año pasado. Voy a mantener todos excepto el de crear el pet project y añadiré uno nuevo:

  • Escribir 24 artículos en el blog: Con diferencia el objetivo que más ganas le tengo. A ver si este nuevo año soy más constante.
  • Aprender Python o/y Ruby: Los dos son grandes lenguajes pero alguno debo de escoger. Creo que voy a elegir Python porque es el único de los dos que tengo ya unas bases.
  • Sentirme bien: Este debería ser el objetivo más fácil porque me gusta hacer deporte y me gusta meditar. Seguro que el próximo año lo cumplo… o no 🙂
  • Usar siempre TDD: Desde que empecé a trabajar como technical lead he dejado de programar todos los días. Todavía lo hago pero es menos de la mitad de mi tiempo. Tengo que volver a programar más y utilizar TDD siempre que pueda.

Espero que vuestro 2018 esté tan lleno de ilusión como espero que esté el mío.

 

 

Como testear código legado: primer paso

Estoy empezando a leer “Working effectively with Legacy code” de Michael Feather:

Este libro explica muchas técnicas de cómo trabajar con código legado. Si estas teniendo problemas al respecto te recomiendo que lo compres.

Uno de los primeros pasos para poder testear tu código legado sería el romper la dependencia de nuestra código para que podemos añadir test. Porque uno de los mayores problemas con el código legado es que no podemos añadir test.

Ten en cuenta que la definición que tiene el autor de código legado es código sin test.

Uno de los métodos principales para romper la dependencia que tiene el código se llama crear una subclase y sobrescribir  (subclass and override method)

Este método hace que podamos añadir test en código que no es posible. Convierte código en testable.

 

Vamos a verlo con un ejemplo. Tenemos el siguiente código:

Queremos testear el método getUser de la clase UserService pero si creamos un test unitario como el siguiente:

va a fallar porque lanzará una excepción de tipo RuntimeException.

Ten en cuanto que he añadido esta excepción para simplificar el código. Imaginad que en vez de ser esta excepción accede a una base datos que no podemos acceder desde nuestro ordenador o a internet o al sistema de fichero.

 

Si vemos atentamente el código el origen del problema es que tenemos una dependencia con UserConfigurationService que en vez de estar inyectada (ser parte de los atributos de UserService) se crea por una clase que se llama Factory.

Lo que vamos a hacer es crear un método que contenga la instanciación de UserConfigurationService que tendrá el “scope” protected para que las subclases puedan sobreescribirla.

y en el test vamos a crear una instancia hija de UserService que sobreescriba ese método y que devuelva un mock:

Al poder inyectar el mock podemos hacer que el código cambie su comportamiento sin que toquemos su código. Es lo que Michael Feather llama seam. Lo que estamos haciendo con este método es añadir un seam a nuestro código.

Como has podido ver este método es simple pero muy potente porque en muchas casos vamos a poder utilizarlo para poder añadir dobles de test.

No siempre es bueno o posible el poder utilizar este método de romper las dependencias de tu código pero mi experiencia me dice que en la mayoría de los casos es la mejor opción.