La notación húngara: la nomenclatura para programadores que Microsoft creó, que hoy rechaza… y que aun así se sigue usando (mal)

La notación húngara: la nomenclatura para programadores que Microsoft creó, que hoy rechaza… y que aun así se sigue usando (mal)
30 comentarios Facebook Twitter Flipboard E-mail

Elegir un nombre para una variable cuando estás programando es fácil. Pero, ¿elegir un buen nombre? Eso quizá ya no lo sea tanto: debe ser descriptivo (esto es, capaz de representar claramente qué función ejerce dicha variable), así como comprensible por otros desarrolladores que puedan tener que revisar el código en algún momento.

Por ello, para facilitar la tarea de nominar variables, los desarrolladores tienen a acogerse a alguna convención, un criterio más o menos fijo para decidir cómo y en qué orden poner 'los nombres y apellidos' de una variable (e incluso cuándo optar por las mayúsculas y las minúsculas). Y entre las múltiples convenciones disponibles, destaca una llamada 'la notación húngara'.

Un vistazo a…
La carrera de programador en 2017 y en el futuro (con Javier Santana)

Esto es lo que se suele entender como 'notación húngara'

Por ejemplo, en el caso de 'codigoProducto', 'CodigoProducto', 'codigo_producto', 'codigo.producto' y 'nCodigoProducto', es esta última la que consideraríamos que se acoge a la citada notación, pues al nombre en sentido estricto se le adjunta un prefijo en minúsculas que indica el tipo de dato representado (en este caso, 'n' de número).

En teoría (luego volveremos sobre eso), el mérito de su creación debemos atribuírselo a Charles Simonyi, el creador de Bravo (el primer procesador de textos WYSIWYG), de Multiplan (el antecesor directo de Microsoft Excel), de MS Word (en su versión para MS-DOS) y, posteriormente de Microsoft Office.

En realidad, Simonyi ya había descrito su idea mucho antes de hacerse un nombre en el mundo del desarrollo de software: en su tesis doctoral de 1976, "MetaProgramming: A Software Production Method".

En cualquier caso, la importancia de Simonyi en el desarrollo de Office provocó que esta convención (nombrada 'notación húngara' por sus compañeros de Microsoft porque Simonyi, bueno… es húngaro —no se estrujaron mucho las meninges, no) se convirtiera en el estándar para la escritura de software desarrollado por Microsoft, así como para todo aquel desarrollado en ciertos lenguajes, como Visual Basic (también de Microsoft).

Caída en desgracia

Y, sin embargo, en las 'Convenciones generales de nomenclatura' oficiales del framework .NET, ahora (y desde hace ya 14 años) aparece de forma explícita la siguiente frase:

"❌ NO utilice la notación húngara".

Aparece justo debajo de "No use guiones bajos, guiones ni ningún carácter no alfanumérico", y justo encima de "Evite el uso de identificadores que entren en conflicto con palabras clave de lenguajes de programación". No hay mucho margen para la interpretación: Microsoft reniega ahora de esta nomenclatura. ¿Por qué?

Se suele considerar que la razón que hizo que Simonyi apostase por esta notación radicaba en que, no existiendo en aquel entonces IDEs con tecnología IntelliSense ni similar, la opción más rápida para consultar qué tipo de variable que teníamos entre manos era echar un vistazo al prefijo del nombre de la misma.

Pero ahora, según se explica en el libro The Programmer's Brain: What every programmer needs to know about cognition,

"Cuando la mayoría de los editores de código pueden mostrar fácilmente el tipo de una variable, la notación húngara no se ve como un valor añadido en un lenguaje con tipos, porque sólo hace los nombres de las variables más largos".

"Por lo tanto, codificar de esta manera los tipos en el nombre de una variable ya no es una práctica común, y hoy en día el uso de la notación húngara está generalmente mal visto".

Simonyi
A ver, que a Simonyi (el de la izquierda de la foto) le da absolutamente igual que nos hayamos liado con su notación: es el único turista espacial que ha subido dos veces al espacio, él está a otras cosas.

Había otra notación húngara (y esa era la buena)

Sin embargo, sólo se puede comprender el auge y caída de la notación húngara comprendiendo que, en realidad, existen dos variantes de esta notación… y que la usada por Simonyi ni siquiera coincide con la más popular entre los programadores.

Simonyi realmente planteaba utilizar lo que hoy conocemos como "notación húngara para aplicaciones" (o Apps Hungarian), en el que el prefijo especificaba el propósito de la variable. Aquí entrarían ejemplo el uso del prefijo "lbl" en una etiqueta ('label') de la interfaz, o el uso de "ix" para señalizar el índice de una matriz…

…mientras que el ejemplo que pusimos más arriba, circunscrito únicamente al tipo de dato de la variable, es lo que se conoce como "notación húngara para sistemas" (Systems Hungarian).

En 'Systems Hungarian', lo único que el prefijo nos dice es el tipo de datos real de la variable

Lo explica Joel Spolsky perfectamente en su web:

"Apps Hungarian era extremadamente valioso, especialmente en los días de la programación en C donde el compilador no proporcionaba un sistema de tipos muy útil. Pero entonces algo malo sucedió: nadie parece saber por qué o cómo, pero parece que los escritores de documentación en el equipo de Windows inventaron inadvertidamente lo que se conoció como Systems Hungarian".

La confusión radica en una mala compresión del lenguaje (pero del lenguaje inglés, no de uno de programación). Y es que Simonyi, allí donde podría haber usado 'kind' (tipo, clase, categoría, especie…), usó el mucho más restrictivo (en el ámbito informático anglosajón) 'type'.

"Systems Hungarian fue difundido ampliamente por libros como 'Programming Windows' de Charles Petzold, la biblia para aprender programación de Windows, y rápidamente se convirtió en la forma dominante de notación húngara, incluso dentro de Microsoft, donde muy pocos programadores fuera de los equipos de Word y Excel entendieron el error que habían cometido".

Nombres y apellidos

Aunque la explicación 'oficial' del nombre de esta notación es la referencia a la nacionalidad de origen de su autor, circula por las redes otra versión que no es mutuamente excluyente con respecto a aquella y que, de hecho, tiene mucho sentido.

La notación húngara crea una variable con un determinado nombre adscrita a una categoría más amplia (el tipo de dato), y coloca esta última al comienzo del nombre (strTexto1, strTexto2, etc.), lo cual equivale a poner el apellido de una persona al comienzo de su nombre completo.

Esta costumbre, habitual en Extremo Oriente (piensa en la dinastía de los 'Kim' en Corea del Norte: Kim Jong-il, Kim Il-sung, etc.) resulta profundamente extraña en Europa… a excepción de un pequeño y lingüísticamente particular país: Hungría. De hecho, el nombre de nacimiento de Charles Simonyi es, realmente, 'Simonyi Károly'.

Así, lo que hace la notación es trasladar el patrón de nombres humanos de Hungría a la nomenclatura de programación. Tiene todo el sentido.

Imagen | Basada en contenido original de Marc-Antoine Lortie

Comentarios cerrados
Inicio