La programación como un Arte (Parte II)

La programación de computadores como un arte

Por Donald Knuth

(lee la primera parte)

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 menud 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 convieniente 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 heterogeneas necesarias para que tengan efecto
con 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 minerologí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 jugabamos 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 quisieramos, 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 e
sta 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.

Autor

Ingeniero, autor, emprendedor y apasionado programador. Mantengo este blog desde 2005.

comments powered by Disqus
Siguiente
Anterior

Relacionado

¿Te gustó?

Puedes apoyar mi trabajo en Patreon:

O puedes apoyarme con un café.