Alba on Tech

Talking about technology

Kata: add arrays

Now in english, thanks to Pablo Ruiz 🙂

Let’s start with something simple to loosen up the muscles.

Many times, when we code with a deadline and we need to solve problems with urge we don’t pay attention to performance. At most, we promise to refactorize later on if needed. It would be great to have some coding ruotines embedded in ourselves that will allow us to code in a more efficient way, without even thinking of it.

So the kata I’m proposing is the following:

We have ten large arrays, with 500 integers each. We want to obtain the number that results from adding each of those 10*500=5000 integers. Easy, right?

Choose your favourite programming language and think about two distinct ways of reaching that sum. For instance, you can sum each array separately and then add up the results. Or you can do partial sums between each array’s position. Or blend all arrays in one and then add up all the numbers. Or whichever way that comes to your mind (a recursive function would make sense?). Implement them.

Now, using a loop, measure the time it takes to execute 1000 iterations of each of them.

What are the results? The way you thought was the fastest, was it? Really?

Bonus I: Upon results, do you conceive a third way that could outmatch the performance?

Bonus II: Repeat the exercise in a language you’ve never coded in.

And remember, this isn’t about a competition. It’s a Kata. Practice and improve. Always.

30 October, 2011 Posted by | Kata | | Leave a comment

Kata: Sumar arrays

Empecemos con algo sencillo, para desentumecer los músculos.

Muchas veces, cuando programamos con una fecha límite, y tenemos que resolver los problemas con prisa, no nos preocupamos por el rendimiento. Como mucho, pensamos en refactorizar más adelante si hace falta. Sería muy bueno tener integradas ciertas rutinas de programación que nos permitan programar de forma más eficiente sin pensarlo.

A si que la kata que propongo es la siguiente:

Tenemos diez arrays largos, de 500 enteros cada uno.  Queremos obtener el número que obtenemos al sumar cada uno de esos 10*500=5000 enteros. Sencillo, ¿verdad?

Elige tu lenguaje de programación preferido. Y piensa dos formas distintas de obtener la suma. Por ejemplo, puedes sumar cada uno de los arrays por separado, y luego sumar los resultados. O puedes hacer sumas parciales de cada una de las posiciones de los arrays. O fundir los arrays en uno, y luego sumar todos los números. O cualquier otra forma que se te ocurra (¿una funcion recursiva tendría sentido?). Implementalas.

Ahora, mediante un bucle,  mide el tiempo que tarda en ejecutarse 1000 veces cada una de ellas.

¿Cuales son los resultados? ¿La forma que pensabas que sería más rápida, lo era de verdad?

Bonus I: A la vista de los resultados, ¿se te ocurre una tercera forma capaz de conseguir un mejor rendimiento?

Bonus II: Repite el ejercicio en un lenguaje en el que nunca hayas programado

Y recuerda,  no se trata de un concurso. Se trata de una kata. Practica y mejora. Siempre

27 October, 2011 Posted by | Kata | 6 Comments

Katas de programación

Siempre me han fascinado las artes marciales. Durante muchos años, practiqué Karate con asiduidad. La filosofía de superación, de desarrollo constante, de práctica para alcanzar la perfección… Son ideas increiblemente poderosas, y con todo el sentido del mundo. No se puede ser bueno en nada sin practicar. Por supuesto, la habilidad natural cuenta. Pero sin práctica, al final no vale de nada. En las artes marciales japonesas, una de las formas de practicar son las Katas. Una kata es una secuencia de movimientos preestablecidos, que simulan un combate contra múltiples adversarios. Consiste en una sucesión hermosamente enlazada de ataques y contraataques, que se debe ejecutar con gran fluidez. Es uno de esos casos en que el todo es mayor que las partes. Lo importante no es la ejecución de cada uno de los movimientos (eso es una necesidad, no un objetivo). Lo realmente importante es la sucesión, la fluidez del artista marcial a través de toda la secuencia. Y, cada vez que practicas una Kata, das un paso más hacia la perfección.

En 1999 se publicó el libro The pragmatic programmer. Es un libro muy recomendable, que ofrece muchas ideas para mejorar como programador. Uno de los autores, Dave Thomas, acuñó el término “Kata de programación”. Una Kata es un ejercicio relativamente simple, que te enfrenta con un problema imaginario, y te obliga a afrontarlo desde puntos de vista diferentes. El objetivo es, por supuesto, practicar tus habilidades de programación. Además, mediante ciertos condicionantes, pueden obligarte a utilizar pensamiento lateral, imaginar nuevas formas de resolver problemas conocidos. Lo importante no es la programación de cada uno de los algoritmos (eso es una necesidad, no un objetivo). Lo realmente importante es la sucesión, la fluidez del programador a través de toda la secuencia. Y, cada vez que practicas una Kata, das un paso más hacia la perfección.

Creo que es muy importante practicar nuestras habilidades de programación. Debemos mantenernos “on the edge”. Por lo tanto, me gustaría de vez en cuando proponeros algún ejercicio, alguna Kata, que pueda ayudarnos a todos a dar pequeños pasos en la dirección correcta.

27 October, 2011 Posted by | Programación | Leave a comment

Joel on Software

Por si te lo estás preguntando, sí, el nombre de la página, y la inspiración para crearla vienen de Joel on Software. Joel dejó de escribir hace unos años, pero me encantaba su blog, y aún hoy es una fuente de ideas, y de mejoras a la hora de desarrollar software, y de llevar una empresa.

Hace unos pocos meses, junto con mis socios, fundé Kaleidos. Se trata de una empresa dedicada al desarrollo de software, donde usamos y generamos exclusivamente software libre. Es el tipo de empresa donde me hubiese encantado trabajar, donde las estrellas son los desarrolladores y programadores, y todo lo demás está al servicio de hacerles productivos y felices.

Y no pude sino acordarme de Joel, que creó una empresa con esa misma filosofía… Y eso me ha llevado a comenzar Alba on Tech. Espero conseguir hacerlo la mitad de bien que él.

Así que, ¡a tu salud, Joel!.

24 October, 2011 Posted by | Uncategorized | Leave a comment

Hello world!

The adventure begins on Octuber 2011

//Java
class HelloWorld {
  static public void main( String args[] ) {
    System.out.println( "Hello World!" );
  }
}
//Groovy
println "Hello World!"
#Python
print "Hello World!"

24 October, 2011 Posted by | Uncategorized | 3 Comments