Carlos Ble

Carlos Ble

I am a professional software developer, I solve problems.

I also teach and mentor developers to build better software.

Developing software since 2001.

Can I help you?

  • Do you need high quality tailor-made software?
  • Need training on TDD, clean code or refactoring?
  • Is it risky? do you need advise?
  • May I pair with you to write better code?

Events

Upcoming public training courses:

  1. [Online - en Español] 25 y 26 de Junio
    Test Doubles con JavaScript - Online
  2. [in English] July 7, 8 & 9
    TDD (open to the public) - Tenerife, Canary Islands
  3. [en Español] 14 y 15 Julio
    TDD (en abierto) - Gran Canaria, Canary Islands
  4. [in English] October 13, 14 & 15
    TDD (open to the public) - London, UK
  5. [en Español] 29, 30 y 31 de Octubre.
    TDD (en abierto) - Madrid, Spain

Conferences:

  1. I'll be at SocratesUK 2014
  2. I'll be at the London Test Gathering Workshops.

Archive for March, 2010



Los dias 8 y 9 de abril estamos en Barcelona con nuestro famoso curso de TDD. Una edición abierta a la que puede asistir gente de todas partes. Ideal para que las PYMES envíen a sus desarrolladores. El número de matriculados hasta el momento es bastante bajo aunque gracias a DoubleYou celebraremos el curso, pero es poco probable que lo repitamos este año. Así que si estabas dudando no te lo pienses. El viernes de esta semana cerramos el plazo de inscripción.

Toda la información sobre nuestros cursos de TDD se encuentra en www.iExpertos.com/es/formacion

Stub out with lambda

Lambda functions are a great tool to stub out functions. They turn out to be much more clear and easy than using a stub from a isolation/test-double framework. Lambda in Python are used like this in interaction-based tests:

  1.  
  2. class MyTests(unittest.TestCase):
  3. def test_find_users():
  4. stub = MyDAO()
  5. stub.get_users = lambda: ['carlos', 'juan']
  6. sut = UserFinder(stub)
  7. self.assertEquals(
  8. sut.get_users_with_name_like('ca'),
  9. ['carlos'])
  10.  

The method get_users in the class MyDAO is stubbed out as we assign a new function to it. The test gets a much more clear code than using PyMox or other test-doubles framework for stubs.

Moreover Python let us stub out functions from classes that haven't been instantiated yet, which makes it perfect for interception too. The next example is the way I am using the Google App Engine bulkloader to write integration tests:

  1.  
  2. from appengine_django import InstallAppengineHelperForDjango
  3. InstallAppengineHelperForDjango()
  4. from google.appengine.tools import bulkloader
  5.  
  6. def load_data():
  7. args_dict = {'all the values': 'the bulk loader needs',
  8. 'etc': 'etc'}
  9. bulkloader.RequestManager.AuthFunction = lambda x : ('x', 'y')
  10. bulkloader.Run(args_dict)
  11.  

This way the bulkloader runs avoiding the need to manually type in the username and password. RequestManager is a class and AuthFunction is one of its instance members.

Uno de los aspectos menos populares de TDD es el de la productividad. La tendencia es pensar que TDD nos hace ir más lentos en el desarrollo ya que nos detenemos a pensar y a escribir ejemplos para ir diseñando el código de producción. Sin embargo, la experiencia nos dice que a medio y largo plazo la inversión en tiempo es de sobra recuparada gracias a un código más fácil de mantener y con un menor número de defectos.
Lo que es menos evidente es que TDD aumenta nuestra productividad al mantenernos concentrados en todo momento en lo que hacemos. Leyendo a David Allen en "Getting things done, the art of stress-free productivity" podemos observar una cantidad enorme de similitudes entre las técnicas de productividad descritas por el autor y TDD. David lleva décadas ayudando a personal de empresas de diverso tipo a trabajar de una manera más productiva y es considerado un experto en la materia.
Basicamente nos habla de que la productividad pasa por tener la cabeza limpia de preocupaciones y tareas pendientes, algo que en TDD cumplimos con nuestra libreta. La libreta nos permite tener una lista de próximas tareas a implementar a la vez que nos permite tener la cabeza vacía y centrada tan sólo en el ejemplo que estamos abordando. Gracias a que los tests nos proporcionan un feedback rápido, el ritmo de ir abordando tareas de la libreta puede llegar a ser muy productivo, siempre que respetemos las reglas de TDD, tales como escribir tests que se ejecuten en milisegundos.

Cuando nos lanzamos a escribir código de producción sin ejemplos (tests) de uso primero, nuestra cabeza está llena de ruido y aumenta la probabilidad de introducir defectos en el código, además de que se nos vaya el santo al cielo.

Una página del libro de David dice:

¿Por qué le damos vueltas a las cosas en la cabeza?

  • Porque no tenemos claro cual es el resultado que queremos obtener
  • Porque no hemos decidido cual es la siguiente acción que deberíamos afrontar
  • No hemos escrito en ningún sitio el resultado que queremos ni las próximas acciones

Está claro que todo eso nos lo quitamos de encima practicando TDD. Según el autor la cantidad de cosas que tenemos en la cabeza es inversamente proporcional a nuestra productividad. Es decir, cuanto más ruido en la cabeza menos producimos. De hecho, la principal causa de atasco en los proyectos no es la falta de tiempo, sino la ausencia de definición de cosas por hacer o tareas pendientes. "No hay razón para tener un pensamiento dos veces, salvo que te guste ese pensamiento." Extrapolando: ¿Por qué seguir preocupados por aquel caso en que la función lanza aquella excepción?

La sensación de que estamos siendo productivos nos lleva a la sensación de que estamos avanzando en los proyectos que a su vez nos produce la satisfacción del trabajo bien hecho. Esta filosofía de la mente vacía y clara no solo aparece en el libro de David Allen sino que podemos leer el mismo mensaje en otras corrientes como las artes marciales, etc...

Ante la pregunta clásica de ... "¿qué pasa si haciendo TDD se te olvida un ejemplo y se produce un bug?" mi respuesta siempre es... "¿acaso la probabilidad de que eso pase, disminuye cuando NO haces TDD?".

Cuando compagino TDD con la técnica del pomodoro soy todavia más productivo. A día de hoy recomiendo muchísimo la técnica del pomodoro :-)

No conoces todavía www.podgramando.es? Es el podcast técnico que te ayuda a estar al día de forma amena. Descargate el mp3 y escúchalo mientras vas en el coche, en el metro, mientras pasas la fregona...
Se trata de un podcast sobre desarrollo de software.

Patrocinado por iExpertos.com y Agilismo.es

Espero que os guste.

Resumen de mi visita a Donosti

Aupa! Nunca había estado en Euskadi y gracias a Biko he podido visitar Donosti, una de las ciudades más bellas que he estado. He visto pocas cosas más bonitas que la bahía de La Concha iluminada por el sol desde la cima del Urgull. Wonderful. Aparte de la visita turística hemos celebrado una edición de nuestro curso de Test Driven Development, el cual ha transcurrido muy bien.

De nuevo me he encontrado con un equipazo de gente joven con muchísimas ganas de aprender y trabajar, lo cual hace que el curso salga muy bien. Hemos avanzado mucho, hemos visto todo lo que había que ver y nuevamente he aprendido de los demás. La gente ha asimilado muy bien y se han visto ideas muy muy buenas. Si ya tienen un equipo potente ahora, dentro de 5 años no va a haber quien les pare!.

En la tarde de ayer aproveché para entrevistar a algunos compañeros de la sede de Donosti y podeis escuchar el mp3 en podgramando.es

Como anécdota decir que llegué todo contento diciendo a la gente que para Maven era mejor colocar los tests en tal ubicación según me habían dicho en el curso de Madrid y resulta que dijeron.... "de eso nada!... con Maven van mejor en tal otro!" Total, que cada uno los ponga donde más le guste, pero que los ponga :-) Yo de momento estoy mu contento con mi Python :-)

Mañana colgamos las fotos en el Facebook de iExpertos. Esta vez me he acordado de hacer la foto de grupo al final, cosa que por desgracia siempre olvido en los cursos. Así que del curso que hicimos en Madrid no tengo la foto finish por despiste.

Si has asistido al curso y lees esto, porfavor, deja tu blog y/o tu twitter para seguirte vale? :-)

Eskerrik Asko!!!
Agur!!!

Un mes de viajes

En breve regreso a Tenerife después de haber recorrido en tren buena parte de la península, desde Girona hasta Sevilla, pasando por Madrid y viajando a Segovia. Los motivos del viaje han sido 3. Primero la charla y el taller de TDD en Castellón, cuyo vídeo podeis ver en decharlas.com o directamente en vimeo. El mp3 de la charla tambien lo teneis en podgramando.es, el podcast técnico que por fin hemos arrancado.
Como ya he dicho antes, estoy super agradecido a Ricardo Borillo y David Castelló por invitarme a Castellón, a una universidad impresionante y por tratarme de lujo.

Luego tuvo lugar nuestro curso de TDD en Madrid. Creo que siempre digo que el último curso de TDD que hago es el que mejor sale, pero es que me queda siempre esa sensación al terminar. Esta edición ha ido muy bien sobre todo porque el nivel de los asistentes era altísimo. De hecho me han enseñado cosas, como en ediciones anteriores. El feedback de los asistentes es inmejorable, podeis leer sus comentarios aquí. Teneis las fotos en la cuenta de Facebook de iExpertos. Gracias miles a todos por haberos volcado y currado a tope en este curso. Lo habeis hecho realmente bien!

Lo mejor de los cursos de TDD es que estoy teniendo la oportunidad de programar con los mejores desarrolladores de todo el país. Es un lujo decir que me he sentado con los programadores más despiertos de muchas las cuidades y estoy encantado.

Finalmente, el sábado JM Beas me llevó en su coche junto a más amigos a Segovia al Code Retreat, donde pasamos un día agradable discutiendo temas de programación. Eso sí, iba bajo mínimos y no pude hacer nada interesante a nivel técnico. Apenas sin descansar, no se pueden hacer las cosas bien. Pero bueno, lo pasamos bien y me gustó conocer en persona al grupo de Valladolid, al que espero ver pronto. Me dieron ganas de intentar hacer el Code Retreat en Tenerife. A ver si lo organizamos.

Ahora ya ultimando detalles para ir a San Sebastian donde la semana que viene, tenemos una edición privada de nuestro curso de TDD.

Ya podeis descargar el audio de la charla:
http://www.podgramando.es/uncategorized/carlos-ble-habla-de-tdd-en-la-u-jaume-i

Por cierto, es oficialmente el primer podcast de podgramando.es. El primero de una larga serie!

El vídeo que se ha grabado de la charla estará disponible muy pronto. Estad atentos a decharlas.uji.es