Querido Ndugu,
El otro día un italiano me preguntaba por qué los españoles traducimos todo. ¿Por qué “El equipo A” en vez de “A-team”? ¿Por qué “Parque jurásico” en vez de “Jurassic Park“? ¿Por qué “El coche fantástico” en vez de “Knight Rider“? ¿Por qué “El hombre araña” en vez de “Spiderman”? Y así la lista sigue interminable…
(Otro término por el que podíamos preguntar en esto de las traducciones es “ordenador” en vez de “computadora”, pero es bastante más conflictivo. En realidad también es una traducción, pero esta vez del francés. Y como muchos puristas opinan, hicimos mal en adoptar la palabrita del francés, porque estas máquinas no ordenan, sino que computan (del latin, computāre).)
Mi respuesta fue simple y concisa: porque nosotros respetamos nuestro idioma. Me salió de dentro.
En realidad, esto está empezando a cambiar un poco. Ya podemos ver en nuestros cines y videoclubs películas como “Minority Report“, “Saw” o “Daredevil”. Pero no voy a discutir sobre esto, defendiendo ninguna de las dos posturas, pues se me antoja una discusión interminable, como si emacs es mejor que vi o no (vamos, que todos sabemos que es claramente superior
).
Lo que quería comentar hoy es justo la perspectiva contraria: los angloparlantes nunca traducen nada. Eso tiene una implicación inmediata en las películas extranjeras (o no): siempre las ven en versión original.
Pero como la cabra tira siempre para el monte, vamos a ir hacia nuestro terreno. Como no traducen nada, los propios lenguajes de programación “hablan inglés”.
El caso más claro es el antiguo COBOL. Como fue uno de los primeros lenguajes de alto nivel, ni cortos ni perezosos, casi le hablaban en inglés al compilador:
ADD UNO TRES 5 TO RESULTADO. ADD UNO TRES 5 GIVING RESULTADO.
La primera línea suma los valores de las variables UNO, TRES y el 5 a la variable RESULTADO, mientras que la segunda suma los tres valores y los asigna a RESULTADO, que no es lo mismo. El “TO RESULTADO” en C++ es el cómodo “resultado +=“, mientras que el “GIVING RESULTADO” es la asignación típica.
Hoy por hoy las cosas no son tan exageradas, claro, pero la mayoría de los lenguajes conservan dentro de sus palabras reservadas una batería de palabras inglesas. De alguna forma los gringos se dieron cuenta de que no tenía sentido hablarle un inglés tan “perfecto” a la máquina para que hiciera su tarea.
A nosotros, los no angloparlantes desde la cuna, no nos preocupa demasiado tener que escribir palabras inglesas mientras programamos. Al fin y al cabo el inglés siempre ha estado ahí con nosotros, y esas palabrejas nos salen de forma más o menos fácil. Otro gallo cantaría si a Strouptrup le hubiera dado por poner las palabras clave de C++ en Danés, o a Guido van Rossum las de Python en Holandés o a Yukihiro Matsumoto las de Ruby en Japonés, obviamente.
Lo curioso en este caso es que, bajo mi punto de vista, los no nativos llegamos a tener cierta ventaja sobre los nativos cuando programamos. Porque si le pasáramos un traductor automático a uno de nuestros programas saldrían cosas como las siguientes (espero otros ejemplos vuestros, si es posible graciosos, en los comentarios…):
C, C++ y amigos
#incluye "esestandard.cab"
real dios, demonio;
entero resultadoParcial;
clase CJugador {
público:
entero aplaude();
privado:
clase amiga CEnemigo;
};
estandard::Conjunto *dameCaracteres() {
vuelve NULO;
}
vacío principal(entero contadorArgs, caracter **args) {
Cadena *c = nuevo Cadena();
escribef("%c", c->cadena_c());
vuelve;
}
Java (que se llamaría Lanzarote, o Fuerteventura…)
importa paquete.grande;
clase pública MiClase {
vacío estático público principal(Cadena []args) {
Sistema.salida.EscribeLin("bu?");
}
};
SQL y amigos
CREA BASEDEDATOS [MisDatos] EN PRIMARIO (...)
CAMBIA BASEDEDATOS [MisDatos] PON
CREA_ESTADISTICAS_AUTOMATICAS SI
USA [MisDatos]
CREA TABLA [MiTabla] (
[Clave] [Entero] IDENTIDAD(1, 1) NO VACIO,
[Nombre] [caracterVariable](50) NO VACIO,
RESTRICCION [CP_MiTabla] CLAVE PRIMARIA (
Clave ASCENDENTE
) CON ( IGNORA_CLAVES_DUPLCADAS = NO ) EN PRIMARIO
VAMOS
Me encanta. “vacío principal“, “público: entero aplaude();“.
No sé a vosotros, pero a mí esas cosas en el código me despistarían. A priori, tener que utilizar unas palabras de otro idioma puede hacer que aumente la distancia que el desarrollador percibe entre él y la máquina. Sin embargo, en realidad esas palabras en tu cabeza no significan otra cosa que instrucciones dadas al compilador. Al fin y al cabo, cuando yo tecleo “void“, no me viene a la cabeza el vacío interestelar, qué queréis que os diga. Sin embargo, ver en un fichero de código fuente “vacío llenaVaso()“, pues oye, despista.
Y no sólo eso. En realidad, si le hablas a la máquina en tu lenguaje simplificado, la sensación que percibes es que la máquina es idiota. Simple y llanamente. Porque me obliga a decirle “nuevo Cadena();”, en vez de “nueva Cadena();”. El resultado, supongo, es un distanciamiento aún mayor entre hombre y máquina, porque, al fin y al cabo, la máquina me está obligando a que cambie la forma en la que hablo con la gente sólo para que ella me pueda entender. Distancia, distancia y más distancia.
Que se jodan los nativos (con cariño).
La duda que me surge es si los angloparlantes perciben como una ventaja escribir comandos en su lenguaje nativo o no. Mogur, pregúntaselo a tus colegas yankees. Entiendo que sí porque ellos no tienen problemas con la concordancia de género o número. Pero si los comandos fuesen en español para nosotros sería muy muy raro.
Eso me recuerda una anécdota de un erasmus israelí que preguntó ante un pseudocódigo español de programación evolutiva que tenía que implementar en java, si le podíamos pasar el java en español.
Diré en su descarga que era ingeniero industrial (angelito).