Un enfoque científico se caracteriza comúnmente por las palabras lógico, sistemático, impersonal, calmado, racional; mientras que un enfoque artístico se caracteriza por las palabras estético, creativo, humanitario, inquieto, irracional. Me parece que ambos enfoques, aparentemente contradictorios, tienen un enorme valor en lo que respecta a programación de computadoras.
DONALD E. KNUTH, 1974.
En la actualidad, "programación" es un término utilizado en muchas situaciones. Mientras que un contador programa una hoja de cálculo, un diseñador gráfico programa un editor de imágenes, un químico analiza la estructura tridimensional de una molécula y un físico realiza complicados cálculos numéricos. Aunque la manera en que se realiza la programación varía de un área a otra, los conceptos y fundamentos son los mismos.
Al igual que las matemáticas básicas, la programación se ha convertido en una habilidad necesaria. Sin embargo, a diferencia de las primeras, al programar se construyen objetos dinámicos, máquinas virtuales que realizan cosas para nosotros, con los cuales podemos jugar y experimentar. Diseñar programas es divertido y constituye un medio excelente para desarrollar habilidades básicas en muchos aspectos: pensamiento analítico, síntesis creativa, abstracción y atención al detalle. En resumen, diseñar programas obliga a observar con un enfoque activo.
Para aprender a programar es necesario interactuar directamente con la computadora y, como se verá en este tema, el ambiente de programación propuesto es una gran ayuda para el usuario, ya que indica los errores inmediatamente y permite que se exploren alternativas, se experimente con las construcciones y se evalúen los avances.
Ya se mencionó que los datos son las creaturas que habitan el mundo de la computación y que los algoritmos indican cómo manipularlas. Un algoritmo se puede escribir en español, en inglés o en cualquier idioma. Un programa es la escritura formal y precisa de un algoritmo en un lenguaje de programación, que es el lenguaje que una computadora entiende.
Alan J. Perlis
(1922-1990).Computólogo estadunidense pionero en lenguajes de programación. Fue el primero en recibir el premio ACM Turing por su contribución en el área de compiladores y su participación en la familia de lenguajes de programación Algol.
Es importante resaltar que la programación es divertida y abre las puertas a mundos nuevos, como cuando aprendemos un idioma. Programar implica usar símbolos, reglas y construcciones caprichosas mediante las cuales se pueden expresar ideas, conocimientos y algoritmos. Al igual que cuando se aprende un idioma, se requiere práctica y perseverancia para aprender a programar.
Los programadores y diseñadores de sistemas de cómputo cargan con grandes responsabilidades, y para que esta tarea no sea abrumadora, se crearon estrategias y formas de trabajo para asegurar, con relativa confianza, que un sistema de cómputo funcione como se espera. Por ejemplo, la mayoría de los programas modernos se escriben en capas o módulos cada uno se prueba y se verifica por separado, de modo que su desarrollo, adecuación y mantenimiento se faciliten.
Aunque los programadores y diseñadores de sistemas toman muy en serio su tarea, en la historia se encuentran muchos ejemplos de errores de programación catastróficos. Por ejemplo, el primer viaje interplanetario que intentó realizar la NASA tenía como destino
Venus; la nave se llamó Mariner 1 y tuvo que ser destruida poco después del despegue, debido a dos errores. Primero, su recepción de rumbo por antena tenía demasiado ruido y, segundo, su programa de guía interno tenía un error: ¡le faltaba un guión!
A lo largo de la historia han sucedido grandes catástrofes provocadas por errores de software en diversas áreas. Aquí se mencionan algunas:1
Misiones espaciales
• El Mariner 1 de la NASA se salió de curso durante el despegue por un error en su software, escrito en lenguaje Fortran (22 de julio de 1962).
• El Apollo 11 de la NASA tuvo un problema de aterrizaje (20 de julio de 1969).
• El Voyager 2 de la NASA tuvo un contratiempo (25 de enero de 1986).
• El Phobos 1 se extravió (10 de septiembre de 1988).
• El Ariane 5 de la esa se autodestruyó 40 segundos después del despegue (4 de junio de 1996).
• El Mars Climate Orbiter de la NASA se destruyó porque utilizaba unidades imperiales en lugar de métricas (23 de septiembre de 1999).
• El Mars Polar Lander se extravió (3 de diciembre de 1999).
• El Mars Rover de la NASA se congeló debido a que tenía muchos archivos abiertos en su memoria flash (21 de enero de 2004).
Curiosidades
Con la programación se construyen grandes sistemas de cómputo, enormes y detalladas catedrales virtuales. El símil es en ocasiones literal, como en el caso de la Sagrada Familia, en Barcelona. Esta obra excelsa del arquitecto Antoni Gaudí (1852-1926), todavía inconclusa, que se empezó a construir el 3 de noviembre de 1883, fue digitalizada por Toni Meca, quien trabajó durante siete años en este proyecto. El resultado fue un modelo virtual increíblemente detallado, conformado por más de 35 millones de polígonos, es decir, 10 veces el tamaño del modelo que se creó para el barco de la película Titanic. Gracias al trabajo de Toni Meca podemos ver un modelo tridimensional en una pantalla de la versión terminada de la catedral.
Medicina:
• Los accidentes por radiación de la Therac-25 causaron al menos cinco muertes (1985- 1987).
• La errónea utilización de un software de diagnóstico culminó con la muerte de ocho pacientes por exceso de radiación en Panamá (en 2000).
Computación:
• El problema del año 2000 o Y2K que causó enormes pérdidas financieras y una ola de terror por el inminente colapso económico fue ocasionado por almacenar sólo los últimos dos dígitos del año en los programas.
• Un error en el algoritmo de división usado en el procesador Pentium ocasionó a la empresa Intel pérdidas millonarias.
Milicia:
• El error de software en un misil Patriot mató a 28 estadunidenses en Dhahran, Arabia Saudita (25 de febrero de 1991).
Edsger W. Dijkstra
(1930-2002) Reconocido computólogo holandés, recibió el premio ACM Turing en 1972 por sus contribuciones al área de lenguajes de programación. Poco antes de morir recibió el premio PODC por un artículo que dio inicio al estudio de la autoestabilización.