Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=af94b16d-5f7c-4281-ac03-21caf22e3fe6

Tipos de datos en programación o por qué Gagnam Style rompió el contador de YouTube

Como-GagnamStyle-Rompio-YouTube

Por si has vivido en una cueva durante los últimos dos años, el fenómeno musical de YouTube (y el mundo en general) se llama Psy, y su gran éxito es el Gagnam Style.

Este vídeo fue el primero de la historia en superar los mil millones de visualizaciones en YouTube, reportándole millones en publicidad a su autor, y de paso convirtiéndolo en un fenómeno mundial. Lo que no sospechaban los creadores de YouTube cuando lo programaron hace 9 años es que el límite de su contador de visualizaciones se iba a ver superado. Y nuevamente ha sido Psy el que ha batido todos los records. Hace unos días el número de visualizaciones alcanzó las 2.147.483.647 y entonces los ingenieros de Google empezaron a sudar.

En realidad empezaron a sudar unos días antes, y actualizaron el contador para que realmente no llegara a reventar, tal y como comentan en su página oficial de Google+.

Ahora, como homenaje, cuando pasas el cursor por encima del vídeo de Psy, se muestra un contador animado con números negativos (que incluso llega a marear):

Enigma: ¿Eres capaz de decirnos qué representa ese número negativo que aparece cuando termina de girar el contador? Te lo digo al final, pero no hagas trampa :-)

Pero ¿por qué ha roto el contador de YouTube? ¿Por qué precisamente ese número tan extraño y no otro? ¿Están bien las explicaciones que se dan por ahí al respecto?

Cómo cuentan los ordenadores

Los ordenadores, como todo el mundo sabe, trabajan internamente con ceros y unos, es decir, con números binarios.

La notación binaria permite expresar cualquier número en función del uso de ceros y unos. A cada cero y uno se le denomina bit. El bit es la unidad mínima de información que puede manejar un ordenador.

Con 1 bit lo único que podemos representar son los números 0 y 1.

Con 2 bits podemos llegar hasta el número 4, gracias a todas las representaciones posibles que se pueden hacer con el 0 y el 1 por parejas, es decir, cada combinación posible de un 0 y un 1 se corresponde con un número decimal, en concreto:

00 --> 0
01 --> 1
10 --> 2
11 --> 3

Gracias a esta técnica de representación de números, podemos ir subiendo el número de bits utilizado y generar cada vez números más grandes. La fórmula que nos permite calcular el número más alto que podemos conseguir con "n" bits es simplemente 2n (se lee, "2 elevado a n"). Así, por ejemplo, con 8 bits el máximo número que podemos conseguir es 28 = 256, con 16 bits se consigue llegar al 65.5636, y así sucesivamente.

Por cuestiones históricas y de la actual arquitectura de los procesadores, los datos binarios se almacenan como fragmentos que son múltiplo de 8 bits. Es decir, se suelen almacenar números de 8, 16, 32 y 64 bits (antiguamente se almacenaban en bloques de 4 bits e incluso de 6, pero a partir de los años '60 del siglo pasado ya se empezaron a usar 8 bits).

Así, cuando vas a crear una aplicación y necesitas almacenar información relacionada en una base de datos (por ejemplo un contador), en una variable en memoria o en cualquier otro lugar, un programador debe decidir siempre el tamaño que va a tener el tipo de datos que va a utilizar para almacenar la información. Si escoges mal y llegas a superar la capacidad máxima, pasa lo que pasó en YouTube, o se generan situaciones tan malas como el efecto 2000 o el menos conocido, de momento, efecto 2038: si tienes un Android espero que no te dure activo hasta ese año ;-).

Los programadores de YouTube utilizaron para el contador de visualizaciones de vídeo un tipo de datos de 32 bits. Es decir, en teoría el número más alto que puede representar es 232 = 4.294.967.296. Es decir, en realidad el doble del número que se está hablando por ahí. Entonces ¿qué ha pasado para llegar al límite antes?.

En realidad lo que ocurre es que no llega con decidir usar un número determinado de bits para representar un número. Hay una decisión adicional que debes tomar y es  si quieres almacenar solamente números positivos (conocidos como "sin signo" o "unsigned") o números positivos y negativos. En el caso de decidir guardar números negativos, uno de los bits se debe utilizar para el signo. Es decir, que tenemos realmente un bit menos para representar nuestros números.

Los programadores de YouTube en lugar de decidir que los 32 bits serían para almacenar números positivos (sin signo), lo cual les hubiera dado el doble de margen para contar, usaron un número con signo, algo absurdo porque un contador de visualizaciones no puede ser nunca negativo. Probablemente fuese una limitación del sistema de almacenamiento o del lenguaje utilizado (YouTube está escrito en C++, Phyton, Java, y Go como lenguajes de programación, y MySQL y BigTable para almacenamiento).

Por eso, en realidad, la operación que nos da el máximo es 231 = 2.147.483.648. ¡Tachán! Ahí tenemos el número mágico que superó Gagnam Style.

A partir de ahora seguro que ves con otros ojos esos humildes contadores que están por todas partes en Internet.

Solución al enigma: El número negativo que aparece es un contador descendente desde -231, es decir, empieza en -2.147.483.647 y le resta uno por cada nueva visualización a partir de este límite inicial. De este modo esperan que algún día el contador llegue a cero. Y seguro que habrá una celebración. Ya te acordarás de nosotros cuando pase :-)

Fecha de publicación:
José Manuel Alarcón Fundador de campusMVP, es ingeniero industrial y especialista en consultoría de empresa. Ha escrito diversos libros, habiendo publicado hasta la fecha cientos de artículos sobre informática e ingeniería en publicaciones especializadas. Microsoft lo ha reconocido como MVP (Most Valuable Professional) en desarrollo web desde el año 2004 hasta la actualidad. Puedes seguirlo en Twitter en @jm_alarcon o leer sus blog técnico o personal. Ver todos los posts de José Manuel Alarcón

¿Te ha gustado este post?
Pues espera a ver nuestro boletín mensual...

Suscríbete a la newsletter

La mejor formación online para desarrolladores como tú

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.