Bienvenido a mi blog personal dedicado al mundo de la tecnología y la informática, con este blog quiero mostrar novedades, noticias, información, opiniones y/o comentarios, ejemplos, ejercicios, apuntes, herramientas, etc, de todo lo relacionado con la tecnología, el mundo de la informática, el software... y que espero que sea de utilidad.

martes, 2 de marzo de 2010

El Arte de Programar Computadoras

Por Donald Knuth

CACM, Diciembre de 1974

Cuando Communications of the ACM comenzó su publicación en 1959, los miembros del Comité Editorial de la ACM hicieron la siguiente observación al describir el propósito de las publicaciones periódicas de la ACM:

“Si la programación de computadores será una importante parte de la investigación y desarrollo de los computadores, se debe efectuar una transición de la programación de un arte a una ciencia disciplinada”.

Esta meta ha sido un tema recurrente durante los años siguientes; por ejemplo, leemos en 1970 sobre “los primeros pasos en la transformación del arte de la programación en una ciencia”. Mientras tanto hemos realmente tenido éxito en hacer de nuestra disciplina una ciencia, y de una forma muy simple: simplemente al decidir llamarla “ciencia de la computación.”
Implícita en estas observaciones está la noción de que es algo no deseable sobre un área de la actividad humana que esta sea clasificada como un “arte”; tiene que ser una Ciencia antes de que tenga una estatura real. Por otro lado, yo he estado trabajando por más de 12 años en una serie de libros llamados “El Arte de Programar Computadores”. La gente frecuentemente me pregunta por qué elegí tal título; y de hecho algunas personas aparentemente no creen que yo lo haya hecho, dado que he visto al menos una referencia bibliográfica a los libros como “El Acto de Programar Computadores.”

En esta charla trataré de explicar porque pienso que “Arte” es la palabra apropiada. Discutiré que significa que algo sea un arte, en contraste con ser una ciencia; trataré de examinar si las artes son cosas buenas o cosas malas; y trataré de mostrarles que un punto de vista propio del asunto nos ayudará a mejorar la calidad de lo que ahora estamos haciendo.

Una de las primeras veces que fui interrogado sobre el título de mis libros fue en 1966, durante la previa al encuentro anual de la ACM en el Sur de California. Esto fue antes de que ninguno de los libros fuera publicado, y recuerdo haber estado comiendo con un amigo en el hotel de convenciones. El sabía cuan pretencioso era yo, ya en ese tiempo, así que me preguntó si iba a llamar a mis libros “Una Introducción a Don Knuth.” Le repliqué que, al contrario, estaba nombrando a los libros como a él. Su nombre: Art Evans. (El Arte de la Programación de Computadores, en persona.)

De esta historia concluimos que la palabra “arte” tiene más de un significado. De hecho, una de las cosas más agradables de la palabra es que es usada en muchos sentidos diferentes, cada uno de los cuales es bastante apropiado en conexión con la programación de computadoras. Mientras preparaba esta charla, fui a la biblioteca para buscar lo que la gente ha escrito sobre la palabra “arte” a lo largo de los años; y después de gastar varios días fascinantes entre los libros, llegué a la conclusión de que “arte” debe ser una de las palabras más interesantes de la lengua inglesa.

El Arte de los Antiguos

Si vamos a las raíces latinas, encontramos ars, artis que significan “habilidad”. Quizás es significativo que la palabra griega correspondiente era τεχνη, la raíz de “tecnología” y “técnica”.
En nuestros días cuando alguien habla de “arte” probablemente piense primero en las “finas artes” tales como la pintura y la escultura, pero antes del siglo veinte la palabra era usada generalmente en un sentido bastante diferente. Incluso este viejo significado de “arte” aún sobrevive en muchos modismos, especialmente cuando se contrastas arte con ciencia, y quisiera tomarme los próximos minutos para hablar de arte en su sentido clásico.
En los tiempos medievales, las primeras universidades fueron establecidas para enseñar las, así llamadas, “siete artes liberales” a saber, gramática, retórica, lógica, aritmética, geometría, música y astronomía. Noten que esto es bastante diferente de los currículos de los colegios de artes liberales, y que al menos tres de las siete artes liberales son componentes importantes de la ciencia de la computación. En aquel tiempo, un “arte” denotaba a algo ideado por el intelecto humano, en oposición a las actividades derivadas de la naturaleza o el instinto; las artes “liberales” eran liberadas o libres, en contraste a las artes manuales tales como arrar. Durante la edad media la palabra “arte” por si misma usualmente significaba lógica, la que usualmente denotaba el estudio de los silogismos.

Ciencia versus Arte

La palabra “ciencia” parece haber sido usada por muchos años en el mismo sentido que “arte”; por ejemplo, la gente hablaba también de las siete ciencias liberales, que eran las mismas siete artes liberales. Duns Scotus en el siglo trece llamaba a la lógica “la ciencia de las ciencias, y el arte de los artes”. Como la civilización y la enseñanza se desarrollaron, las palabras tomaron más y más sentidos independientes, “ciencia” se empezó a usar para el conocimiento, y “arte” para la aplicación del conocimiento. Luego, la ciencia de la astronomía era la base para el arte de la navegación. La situación era casi exactamente como la manera en que nosotros ahora distinguimos entre “ciencia” e “ingeniería”.

Muchos autores escribieron sobre las relaciones entre arte y ciencia en el siglo diecinueve, y creo que la mejor discusión fue dada por John Stuart Mill. El dijo lo siguiente, entre otras cosas, en 1844: “Muchas ciencias son necesarias a menudo para el trabajo básico de un único arte. Tal es la complicación de los asuntos humanos, que para permitir que una cosa sea hecha, es un requisito a menudo necesario saber la naturaleza y las propiedades de muchas cosas… El arte en general consiste de las verdades de la ciencia, dispuestas en el orden más conveniente para la práctica, en lugar de el orden que sea más conveniente para el pensamiento. La Ciencia agrupa y ordena sus verdades de modo que nos permite tomar en una vista tanto como sea posible del orden general del universo. El arte… junta partes de el campo de la ciencia las más remotas unas de otras, las verdades relacionadas a la producción de las condiciones diferentes y heterogéneas necesarias para que tengan efectocon las exigencias que la vida práctica requiere.”
Mientras buscaba estas cosas sobre el significado de “arte”, encontré que los autores han estado pidiendo la transición de arte a ciencie por al menos dos siglos. Por ejemplo, el prefacio de un libro de texto sobre mineralogía, escrito en 1784, dice lo siguiente: “Antes del año 1780, la mineralogía, aunque tolerablemente entendida por muchos como un Arte, apenas puede ser llamada una Ciencia.”

De acuerdo a muchos diccionarios “ciencia” significa conocimiento que ha sido lógicamente dispuesto y sistematizado en la forma general de “leyes”. La ventaja de la ciencia es que nos alivia de la necesidad de pensar sobre cada caso individual; podemos llevar nuestros pensamientos a conceptos de más alto nivel. Como John Ruskin escribió en 1853: “El trabajo de la ciencia es sustituir hechos por apariencias, y demostraciones por impresiones.”
Me parece que si los autores que estudié estuvieran escribiendo hoy, estarían de acuerdo con la siguiente caracterización: La Ciencia es conocimiento que entendemos tan bien que se lo podemos enseñar a un computador, y si no podemos entender algo completamente, es un arte tratar con él. Dado que la noción de un algoritmo o programa de computador nos provee de una prueba extremadamente útil de la profundidad de nuestro conocimiento sobre un asunto dado, el proceso de ir desde un arte a una ciencia significa que aprendemos cómo automatizar algo.
La inteligencia artificial ha hecho progresos significativos, pero aún hay una brecha enorme entre lo que los computadores pueden hacer en el futuro previsible y lo que las personas comunes pueden hacer. Las misteriosas ideas que la gente tiene al hablar, escuchar, crear, e incluso cuando están programando, siguen estando fuera del alcance de la ciencia y casi todo lo que hacemos es todavía un arte.

Desde este punto de vista ciertamente es deseable hacer una ciencia de la programación de computadores, y de hecho hemos recorrido un largo camino en los 15 años transcurridos desde la publicación de las observaciones que he citado al comienzo de esta charla. Hace quince años la programación de computadores estaba tan mal entendida que difícilmente alguien aún pensaba sobre probar que los programas fueran correctos, nosotros sólo jugábamos con nuestro programa hasta que “sabíamos” que funcionaba. En esa época no sabíamos siquiera cómo expresar el concepto de que un programa fuera correcto, de una manera rigurosa. Sólo en los últimos años hemos estado aprendiendo acerca de los procesos de abstracción mediante los cuales los programas se escriben y entienden,y este nuevo conocimiento acerca de la programación está produciendo grandes ganancias en la práctica, aunque pocos programa son realmente probados cómo correctos con completo rigor, dado que estamos recién empezando a comprender los principios de la estructura de los programas. El punto es que cuando es que cuando escribimos programas hoy en día, sabemos que podríamos, en principio, construir pruebas formales de su corrección si quisiéramos, ahora que sabemos cómo se formulan tales pruebas.Esta base científica se traduce en programas que son mucho más fiables que los que se escribieron en tiempos pasados, cuando la intuición era la única base de la corrección.
El campo de la “programación automática” es una de las mayores áreas de la investigación en inteligencia artificial hoy. A sus defensores les gustaría dar una charla titulada “La Programación de Computadores como un Artefacto” (lo que significa que la programación se ha convertido en una reliquia del pasado), porque su objetivo es crear máquinas que escriben programas mejor de lo que podemos, dándoles sólo la especificación del problema.Personalmente no creo que tal meta sea alguna vez alcanzada completamente,pero pienso que esta investigación es extremadamente importante, porque todo lo que aprendamos sobre programación nos ayuda a mejorar nuestro propio arte. En este sentido, deberíamos esforzarnos continuamente para transformar todo arte en una ciencia: en el proceso, avanzamos el arte.

0 comentarios:

Publicar un comentario

poemas de amor