Siguiente Anterior Indice 

8. Algunas lecciones más a partir de 'fetchmail'.

Antes de que volvamos a asuntos generales de diseño de software, no estaría de más valorar un par de lecciones puntuales.

La sintaxis de los ficheros 'rc' incluye una serie de órdenes opcionales que pueden ser consideradas como 'ruido' y son ignoradas por el intérprete. Permiten el empleo de una sintaxis más próxima al inglés que resulta mucho más legible que la tradicional, formada por pares órden-dato, que es a lo que se reduce si se eliminan.

Empezaron como un experimento a altas horas de la noche cuando caí en la cuenta de que las declaraciones de ficheros en los archivos 'rc' comenzaban  a parecer un pequeño lenguaje en tono imperativo. (Es también la razón por la que cambié la órden 'server' original de 'popclient' a 'poll') (Nota del traductor: No se han traducido por cuanto las órdenes de 'fetchmail' siguen en inglés).

Me pareció que aproximar ese minilenguaje imperativo al inglés lo haría de uso más sencillo. Ahora, aunque soy un francotirador convencido de la corrección de la escuela que predica el "crea un lenguaje" al modo de Emacs, HTML y muchos de los motores de las bases de datos, no soy tan entusiasta de las sintaxis que se aproximan al inglés.

Los programadores han tendido tradicionalmente a favorecer sintaxis de control que eran muy precisas y compactas y carecían de redundancias. Es una herencia cultural de los tiempos en que los recursos de computación eran caros, lo que aconsejaba que las etapas de interpretación de órdenes fueran lo más eficaces y simples que se pudiera lograr. El inglés, con un 50% aproximadamente de redundancia, parecía un modelo poco apropiado para estos lenguajes.

No es esta la razón de mi modesta oposición a las sintaxis que tratan de asemejarse al inglés; la cito sólo para negarla. Con los costes de computación de hoy en día, la simplicidad no debe ser un fin en sí mismo. En este momento es más importante que un lenguaje resulte fácil de usar para los humanos que eficaz para el ordenador.

Sin embargo, hay razones para ser prudente. Una es el coste en términos de complejidad de la etapa de interpretación -- no es deseable llevarlo a un punto en que sean una causa importante de errores y confusión del usuario. Otra consiste en que intentar aproximar un lenguaje al inglés suele requerir que el inglés que se termine utilizando se vea seriamente deformado, de modo que esa semejanza superficial al lenguaje natural acaba por resultar tan confusa como lo hubiera sido la sintaxis original. (Es algo que puede verse en muchos '4GL' y lenguajes comerciales para acceder a bases de datos).

La sintaxis de control de 'fetchmail' parece evitar estos problemas debido a que el dominio en que se aplica es extremadamente restringido. No se parece en nada a un lenguaje de propósito general; como las cosas que dice no son nada complicadas hay poco lugar para la confusión al pasar mentalmente de un pequeño subconjunto del inglés al lenguaje de control real. Me parece que puede haber una lección general a extraer de eso.

16. Si el lenguaje de tu programa no es Turing-completo ni por asomo, puede venir bien endulzar su sintaxis.

Otra lección trata sobre el intento de llegar a la seguridad mediante la oscuridad. Algunos usuarios de 'fetchmail' me pidieron que cambiara el programa para que las contraseñas se guardaran encriptadas en el fichero 'rc', de modo que los mirones no fueran capaces de leerlas.

No lo hice, por cuanto no añade protección alguna. Cualquiera que consiga los permisos necesarios para leer tu fichero 'rc' podrá ejecutar 'fetchmail' en tu lugar -- y si lo que busca es tu contraseña, será capaz de extraer el decodificador del código de 'fetchmail' para lograrla.

Todo lo que se hubiera logrado al codificar las contraseñas en '.fethcmailrc' hubiera sido proporcionar una falsa sensación de seguridad a aquellos que no piensan demasiado. La regla general es:

17. Un sistema es sólo tan seguro como su secreto. Cuidado con los falsos secretos.


Siguiente Anterior Indice