Kata: Media inversa
Todo el mundo sabe hacer una media. Es uno de los primeros ejercicios de programación que se hacen. Pero en un caso real he tenido que calcular una media inversa, y me ha parecido muy interesante para plantearlo aquí como kata.
Read more »
Kata: Ordenar un array ¡sin bibliotecas ni internet!
Hoy en día estamos muy acostumbrados a contar con infinidad de bibliotecas que nos ofrecen soluciones a muchos de los problemas de programación más comunes. Esto es algo maravilloso, que permite centrar el desarrollo en los problemas específicos de una aplicación, y no tener que reinventar la rueda. Pero ¿por culpa de estas facilidades hemos olvidado cómo hacer las cosas nosotros mismos?.
Read more »
Kata: Conoce tu lenguaje: Excepciones
Voy a proponeros una Kata, pero antes tengo que poner el contexto.
Una de las cosas más importantes para escribir código eficiente, es conocer bien el lenguaje que estamos utilizando. Esto parece muy obvio, pero no lo es tanto. Hay normativas de codificación que se dan por supuestas, y no necesariamente son iguales en todos los lenguajes.
Un ejemplo de esto es el tema de las excepciones. No voy a hablar de la horrible práctica de los catch vacíos. Voy a hablar de eficiencia.
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.
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
