12 octubre, 2009

CSI XVIII: Los húngaros nombran con prefijos

El reciente post acerca del nombre de nuestras futuras (o muy presentes) cerveceras dio paso, de forma natural, a pensar de qué modo llamaríamos a nuestros productos. Ya lo comenté en el blog de Chela: me gustan los nombres relacionados con la música y hay muchos donde elegir en las anotaciones de las partituras, en latín, italiano o nuestra lengua: Ad Libitum, para la cerveza tomada a la velocidad que uno quiera. Tornada (estribillo), si la cerveza es para ser tomada una y otra vez, Ritardando, para tomar despacio...

El nombre de las cosas es importante. Y, como la mayor parte de cosas importantes, suelen dar problemas. Y en informática, el nombrado de variables puede suponer todo un reto, especialmente porque cuando se hace sin cuidado puede llevar a errores de programación, cuando no a imposibilitar que cualquier otra persona entienda el código (código inmantenible).

Por cierto, una variable no es más que un espacio en memoria destinado a albergar, en algún momento durante la ejecución del programa, algún valor. Necesitamos darle nombres para hacer referencia a ese valor. Así que, ¿qué nombre les ponemos?


El caso es que no vale el primero que se nos ocurra. MaryPoppins, por ejemplo, no vale. Porque luego tienes que operar con estas variables y en el código te pueden aparecer cosas como:

PedidoOctubre = MaryPoppins[3] * OdioAMiJefe;

Eso es código inmantenible. Una risa, si no te fuera el trabajo en descifrarlo y entenderlo.

Por ello todos debemos estar de acuerdo en que el nombre de las variables debe dar pistas acerca de qué tipo de almacén estás gastando para esa variable, qué es lo que deseas guardar en ellas o qué intención tienes al emplearla. Como llamar AldolfoHitler a tu hijo: el nombre da pistas.

Las empresas serias definen una serie de reglas a la hora de escribir programas: son los coding standards (o guía de estilo). Son simples convenciones para que -entre otras cosas-, con independencia de las personas que hayan pasado por la empresa, el mismo estilo perdure. Las convenciones pueden ayudar en el problema de nombrer variables, imponiendo una serie de reglas. Algunas de ellas están muy extendidas y las emplean la mayor parte de programadores en diversos lenguajes. por ejemplo, llamar i, j, k a las variables dentro de un bucle.

Una de las Cosas que Sí se estudió en Informática es la notación húngara. La notación húngara fue creada por Charles Simonyi, uno de los grandes programadores y reciente turista espacial1. La notación húngara se caracteriza por anteponer al nombre de la variable un prefijo que nos da pistas acerca del tipo de variable que estamos empleando. El tipo de variable es la forma del almacén que estamos gastando para guardar su valor.

No voy a a explicar demasiado, porque esto da para otro post: me contentaré con poner algunos ejemplos sencillos. Una variable de tipo carácter está pensada y tiene el espacio asignado para guardar un carácter. Una variable que fuera de tipo cadena tendría un almacén asignado para almacenar una cadena de caracteres.

Entonces, si queremos almacenar un carácter en nuestro programa para guardar la preferencia de un usuario (que lo introduce mediante el teclado), declaramos una variable llamada UserOption y si empleamos la notación húngara, lo hacemos así:

caracter cUserOption;

Mediante esta linea le decimos al compilador (que es típicamente quien traduce nuestro programa a la máquina) que en algún momento tendrá que reservar un hueco en memoria para almacenar una variable de tipo caracter y que se llamará cUserOption. La 'c' usada como prefijo nos recuerda, cuando realizamos operaciones con esta variable, que se encuentra almacenada como un carácter.

La notación húngara tiene cierto sentido cuando, al operar entre variables de distinto tipo, podemos obtener problemas o resultados indeseados. Y justamente, el hecho de que se produjeran tantos errores al operar entre variables de distintos tipos dio lugar a la creación de los lenguajes fuertemente tipados, en los cuales el compilador impide realizar esta clase de operaciones. Así que la notación húngara dejó de tener sentido para muchos programadores.

Otra versión de la notación húngara sugiere que el prefijo debe estar más relacionado con la función que la variable va a cumplir que con el tipo de almacenamiento. Esta versión del invento cuenta con más adeptos, ya que no ha perdido el sentido al reforzar los compiladores el análisis de tipos. Algunos ejemplos de este uso son:

numeroentero nSandias;

Que informa al compilador de que debe guardar un espacio para almacenar un número entero. En ese espacio guardaremos el número de sandías de nuestra aplicación. De ahí el prefijo 'n'. Pero como si no hay guía de estilo, nadie tiene por qué saber que 'n' es de 'número' en vez de 'nuevas', pues resulta que la notación húngara sigue sin ser ninguna panacea.

Esta notación, sin embargo, se sigue empleando... y mucho. Porque Charles Simonyi fue fichado por Bill Gates y la notación húngara pasó a formar parte intrínseca de las aplicaciones de Microsoft, incluyendo su Sistema Operativo más popular. En los últimos tiempos, sin embargo, hasta los de Redmond se desdicen y recomiendan no emplear este sistema de nombrado en el código.

Recordar la notación húngara de prefijos me ha recordado otras notaciones algebraicas, que también tienen que ver mucho con la informática. Me refiero a la notación polaca (o infija) y a la polaca inversa (o postfija). Rápidamente:

(3 + 2) * 5 - Ésta es una operación como a usted a y mi nos enseñaron en el cole.
* + 3 2 5 --- Es lo mismo que antes en notación polaca. Lo inventó un polaco.
3 2 + 5 * --- Es lo mismo, pero en polaca inversa.


De los tres, el más útil y divertido es el de polaca inversa. Útil para algunas calculadoras, claro. Polaca y polaca inversa no precisan de paréntesis, ni de conocer las reglas de precedencia (no hay expresiones ambiguas). Eso le viene muy bien al informático para realizar cálculos. En polaca inversa, cada vez que se encuentra un operador, se realiza el cálculo indicado: los operados habrán sido leídos anteriormente (o hay un error en la expresión).

La polaca inversa tiene desventajas. Los espacios en las expresiones son de vital importancia para no confundir la expresión. Y como no se enseña en las escuelas ni se aplica sobre el papel, su uso está muy limitado.

Pero sirve para entender el chiste de arriba (cortesía de xkcd, como no). Ante ustedes, ¡un sandwitch de salchicha polaca inversa!

1 El más famoso turista espacial relacionado con la informática es Mark Shuttleworth, empresario instigador de Ubuntu.

Notación Húngara: por Charles Simoyi.
Notación Polaca (wikipedia inglesa)

Posts relacionados

04 octubre, 2009

Independencia es hacerse la comida

Y comprarla, y fregar platos, poner lavadoras y planchar ropa y limpiar la casa... todo junto y no sólo de vez en cuando. Independencia es escoger los colores de casa y las sábanas de la cama.

En España, la edad a la que los 'jóvenes' se emancipan (se independizan) es en torno los 30 años: una de las edades más altas de la Unión Europea, y probablemente de todo el mundo. De los que lo están, más de un 60% dependen de sus padres.

Las razones de que algo tan vergonzoso suceda en un país que presume de ser la octava economía del mundo son muchas. Fundamentalmente, una economía precaria que mantiene en paro o con contratos temporales -y precarios- a un gran porcentaje de jóvenes. En épocas de bonanza económica, la tasa de paro entre jóvenes españoles podía acercarse a la de la UE15 (datos 2006). Pero a las primeras de cambio, cuando la crisis asoma la cabeza, la tasa se dispara. De hecho, de 2007 a 2008, la tasa de paro entre jóvenes de 20 a 24 años subió del 15.13 al 20.4% y del 9.15 a 13.6% en jóvenes de 25 a 29 años1. Casi la mitad de jóvenes en la Comunidad Valenciana (donde vivo) tiene trabajo temporal. Como yo.


Por otro lado, es vox populi que gran parte del crecimiento español de la segunda mitad de los noventa y principios de siglo se ha basado en el incremento de la construcción, que ha llegado a superar a la de Reino Unido, Alemania y Francia juntos. Los precios de los pisos fueron creciendo y muchos empezaron a ver la vivienda como una inversión, o como un bien especulativo. Mientras que los precios de la vivienda subieron un 80% desde el año 2000, el salario medio apenas ha subido estos años (¡y el valor real de este salario ha descendido! -fuente-).

Otro dato: en Valencia en el año 1995 (un año después de comprarse el piso en el que vivo ahora) el precio de suelo estaba en torno 466€/m2. En 2008, cuando la burbuja inmobiliaria tocó techo, estaba casi 4 veces más caro, a 1634€. De hecho, el piso de mis padres costó 8 millones de pesetas. Hace un par de años pedían casi 40 millones por uno de la misma finca. En 15 años no se ha multiplicado por cuatro el salario (ni por 2), excepto el de algunos listos.

Si hablamos de jóvenes, la cosa empeora. El salario medio de un mileurista es de 14000 euros. Entre 15000 y 16000 euros han cobrado la mayor parte de mis compañeros de carrera en sus primeros trabajos. Y estamos hablando de ingenieros, con una formación de 5 años. La ganancia media de un joven entre 25 y 29 años es de 16,320€3. Con estos datos, no es de extrañar que el Consejo de la Juventud de España cifre en un 83% el porcentaje del sueldo que un joven debería dedicar si quisiera adquirir una vivienda de precio medio (210000 euros).

Me da la impresión de que el poder adquisitivo de los jóvenes no ha mejorado nada en los últimos... ¿15 años?. Por supuesto, no se puede argumentar que la subida monumental de los precios de compra de vivienda libre impide la emancipación de los jóvenes. El alquiler es una (¿la única?) opción muy respetable, pero lo cierto es que en España el alquiler todavía se ve con malos ojos (es tirar el dinero, una vez dejas de pagar no tienes nada...) y que la propiedad de un piso todavía otorga cierto status.

Hay más factores que juegan en contra del alquiler: lo que llaman picaresca española y no es más que hijoputez. Aprovechar las cada vez más difíciles de conseguir ayudas al alquiler para jóvenes para tratar de aumentar el precio del inmueble. Y voy un poco más lejos, los jóvenes, que tontos no son, ven como la casa de cuatro habitaciones y 110 metros cuadrados que costó pagar a sus padres 10, 15 años, sólo la van a obtener pagando durante más de 40 años... y siempre que se abstengan de viajar cada año al extranjero, realizar cursos de idiomas, salir todos los fines de semana... vamos, como tuvieron que hacer sus padres.

Eso, y cocinar, hacer la compra, fregar, planchar, pagar facturas... lo dicho, que los jóvenes de hoy tontos no son.

Y yo, que tengo 26, y supero el nivel de ingresos de los jóvenes de mi edad, que vivo con comodidades cerca del mismo lugar donde trabajo y estudio, que puedo viajar cada año, salir cada fin de semana, probar nuevas cervezas con regularidad... y que de tonto tengo lo justo y necesario para no ser uno de esos listos que se aprovechan de las necesidades ajenas... ¿por qué me marcho a vivir a un piso de alquiler, apartado, pequeño, antiquísimo y sin ascensor?. (Un piso precioso, por otro lado, que buen gusto tenemos todos).

¿Por qué?.

Porque creo que es importante. Cocinar, hacer la compra, fregar, planchar... y un montón de cosas que surgirán sin que me las espere. Valerse uno mismo, pagarse las facturas, escoger edredón. Aún 'perdiendo' dinero con ello.

En mi loca, loca huida arrastro conmigo a una bella joven de 22 años. Lo cual es también una buena razón: se trata de una aventura compartida. Es posible que sea una aventura modesta, pero al menos es nuestra aventura, escogida como tal de principio a fin.

¿Y cómo acaba? Eso no lo sabemos. Sabemos, exactamente, cómo empieza. Con una cena en una pequeña casa que mira al mar4. Hay una botella de cerveza para celebrarlo, una Nogne Dark Horizon (segunda edición). Lo que sigue, se improvisa.

1 Fuente: Instituto Nacional de Estadística. Tasas de paro por sexo y grupos de edad (2008).
2 datos del Ministerio de Vivienda.
3 INE, Encuesta de estructura salarial 2007.
4 El Cabanyal es el primer barrio donde viví. Es un pueblo histórico, hoy tristemente degradado, que podría ser precioso si los listos del ayuntamiento no pretendieran dar el pelotazo a su costa.

En Silicio es un maravilloso de un ex-alumno de la UPV, donde estudié y trabajo.
Publicaciones del Consejo de la Juventud de España.
Instituto Nacional de Estadística