Ver/Descargar el artículo

Anuncio
Primeros tiempos software.qxp
24/07/2009
14:23
PÆgina 85
AUTORES CIENTÍFICO-TÉCNICOS Y ACADÉMICOS
Los primeros tiempos
del software (parte II)
Prof. Dr. Félix García Merayo
Vicepresidente de ACTA
El éxito tiene muchos padres, el fracaso es huérfano.
John F. Kennedy
à
Resumen
E
n la primera parte de este título nos hemos referido a los tiempos
más remotos del diseño y aparición del software, tanto de sistemas como de aplicaciones. Hemos recorrido una época que abarca
desde el verano de 1944, en el que se hace pública la construcción y
puesta a punto de la máquina electromecánica Mark I, hasta finales de
la década de los cincuenta con la aparición de dos lenguajes de programación de alto nivel que se situaron a las puertas del mercado de
la tercera generación de ordenadores. Nos referimos a FORTRAN y
COBOL. Hemos establecido también las necesarias definiciones
correspondientes al entorno del software.
Nos proponemos en esta segunda parte continuar la historia del
software retomándola donde la dejamos, dando entrada a la década
de los sesenta y a temas nuevos relacionados siempre con el software
como son la ciencia de los computadores y la ingeniería del software.
Finalizaremos la historia de su evolución con el anuncio y puesta en el
mercado de la tercera generación, a la que hemos aludido más arriba,
causa de un nuevo impulso en el desarrollo del software. Hablaremos
también de las dificultades y desacuerdos (generadores de una auténtica “crisis”) que siempre han perseguido a la programación y también
de su carrera por alcanzar a los desarrollos del hardware. Esas dificultades se hicieron aún más patentes ante la aparición de los circuitos
integrados y el almacenamiento en disco magnético en 1968.
85
Primeros tiempos software.qxp
24/07/2009
14:23
PÆgina 86
ACTA
à
Los primeros tiempos del software (parte II)
Nuevo panorama de los
lenguajes y del software
Vamos a contemplar ahora el campo del software de la década de los sesenta desde la atalaya constituida por FORTRAN y COBOL. Entre los años
1958 y 1960 se desarrolló en Europa un nuevo lenguaje algebraico de alto nivel conocido con el nombre de ALGOL, Algorithmic Language, como alternativa a FORTRAN que se consideraba pobre en
cuanto a formalización, estructuración y sintaxis,
pero que sin embargo fue muy rico en versiones
habidas e impacto y penetración en las organizaciones dedicadas al desarrollo de aplicaciones que no
fueran de pura gestión e incluso también en éstas.
Esto nunca lo logró ALGOL que, a pesar de sus
diversas versiones y de su formalismo muy bien definido, nunca pasó de tener un empleo más allá del
formativo y académico. Su nacimiento tuvo lugar en
Zürich en una conferencia celebrada entre la American Association for Computing Machinery, ACM, y la
European Association for Applied Mathematics and
Mechanics, EAMM. Es importante señalar que
Niklaus Wirth formaba parte del comité reunido. El
objetivo principal de este nuevo lenguaje era el de
poder ejecutarse en cualquier máquina y, por tanto,
ser independiente de la configuración de hardware
donde se aplicase. Eso nunca fue posible. Es cierto,
sin embargo, que ALGOL inspiró el diseño e implementación de varios lenguajes posteriores a él que
aparecieron en las décadas de los sesenta y setenta,
como Pascal. El informe preliminar emitido por la
citada conferencia llevaba el título International Algebraic Language o IAL, pretendiendo así sentar las
bases del nuevo lenguaje.
Noam Chomsky
Abraham Noam Chomsky nació en Filadelfia, Pensilvania, el 7 de diciembre de 1928, de
padres inmigrantes judíos. Ha sido un lingüista,
filósofo, autor, activista y también político estadounidense. Fue profesor en el MIT desde
1955, ocupando la cátedra de Lenguaje
Moderno y Lingüística de 1966 a 1976. Es profesor emérito en la misma institución y una de
las figuras más prominentes en lingüística del
mundo del siglo XX.
Propuso la gramática generativa, que situó
la sintaxis en el centro de la investigación lingüística. También debe destacarse su contribución al establecimiento de las ciencias cognitivas a partir de su crítica del conductismo de
Skinner y de las gramáticas de estados finitos.
Fuera del ámbito académico, Chomsky es
bien conocido por su activismo político y se
define a sí mismo como un socialista libertario
y simpatizante con el anarcosindicalismo.
Cuando hablamos del formalismo de ALGOL nos
estamos refiriendo a una característica esencial que
deben poseer los lenguajes de programación, como
es la ausencia de ambigüedad en sus expresiones
escritas (el programa) y lo que éstas significan y hacen
(el proceso). Esa característica, esa definición de la
sintaxis del nuevo lenguaje, se especificó mediante el
empleo, a su vez, de otro lenguaje conocido con las
siglas BNF de Backus-Normal-Form o también Backus-Naur-Form. Se trata de un metalenguaje con el
que es posible expresar el formalismo de los lenguajes de programación con el fin de definir la sintaxis de
los mismos, metalenguaje que ya había sido utilizado
en gramática por Noam Chomsky en 1950 para definir la estructura sintáctica del inglés. Esta gramática,
conocida como gramática libre de contexto, grammar
context-free, fue adaptada posteriormente por Backus y por Naur y utilizada, como hemos dicho, en la
descripción sintáctica del naciente ALGOL en 1962.
FORMA BACKUS-NAUR
Noam Chomsky.
86
La forma BNF constituye una sintaxis para
definir los lenguajes formales. Los métodos formales proporcionan una técnica de análisis que
es de suma importancia en los lenguajes de
programación. Los métodos sintácticos consti-
Primeros tiempos software.qxp
24/07/2009
14:23
PÆgina 87
Los primeros tiempos
del software (parte II)
tuyen una herramienta básica para formular y
estructurar un lenguaje. La noción de sintaxis
se deriva del estudio de los lenguajes normalizados y por ello se asocia con frecuencia, aunque sea incorrecto, con el significado de las
palabras. La sintaxis estudia más bien la estructura de un lenguaje ligando las palabras o elementos básicos del mismo para formar así oraciones que tengan sentido. La teoría y la
semántica de un lenguaje de programación
viene documentada en el metalenguaje BNF.
El creador de esta notación fue John Backus para poder describir la gramática del lenguaje ALGOL. Peter Naur denominó la notación de Backus como la Backus Normal
Form, Forma Normal de Backus, simplificándola más tarde con el fin de emplear menos
símbolos en las descripciones. Como consecuencia de esta contribución, y a sugerencias
de Donald Knuth, el apellido de Peter reemplazó a la palabra Normal del nombre existente,
quedando como Backus Naur Form.
Un ejemplo de gramática que utiliza la notación BNF para definirla, podría ser el siguiente.
Sea la frase EL HOMBRE AMA EL BIENESTAR. Su gramática correspondiente es:
<oración> :: = <sujeto>|<predicado>
<sujeto> :: = <frase sustantiva>
<frase sustantiva> ::= <artículo> <nombre>
<predicado> ::= <verbo> <complemento>
<complemento> ::= <frase sustantiva>
<verbo> ::= AMA
<artículo> ::= EL
<nombre> ::= HOMBRE | BIENESTAR
El símbolo ::= separa una componente sintáctica de su definición; viene a ser como “la
componente <x> está formada por”. Las componentes alternativas de una definición están
separadas por el símbolo |. Equivale al O lógico. Cuando en una definición se dan dos o más
componentes, éstas deben tomarse en el
mismo orden en que figuran en la definición.
Cada componente sintáctica junto con su
definición (cada línea del ejemplo) constituye
una regla de la gramática en cuestión también
conocida con el nombre de ecuación sintáctica.
Las palabras escritas con mayúsculas son las
fundamentales o primitivas de la gramática que
se define.
Peter Naur.
Peter Naur
El danés Peter Naur nació en Frederiksberg,
Dinamarca, el 25 de octubre de 1928 y ha sido
un pionero de la informática mereciendo el
premio Turing de ACM en 2005. Contribuyó al
diseño del lenguaje ALGOL en su versión 60.
Su apellido forma parte de la BNF.
Estudió en la Universidad de Copenhague
comenzando su carrera profesional como astrónomo, especialidad en la que recibió su grado
de doctor en 1957, aunque más tarde su
encuentro con los computadores le hizo cambiar de camino y encontrarse con la computación. Permaneció en el Instituto de Computación Danés desde 1959 hasta 1969, al mismo
tiempo que impartía conferencias en el Instituto Niels Böhr y en la Universidad Técnica de
Dinamarca. Desde 1969 hasta 1998 fue profesor de ciencia de los computadores en la Universidad de Copenhague.
Sus principales líneas de trabajo, diseño e
investigación han sido: estructura y rendimiento de los programas y algoritmos, ingeniería y
arquitectura del software.
Las distintas versiones de ALGOL se sucedieron
muy rápidamente. La originada por el comité de
Zürich pasó a llamarse ALGOL 58, lenguaje que fue
implementado en diversos computadores. En una
reunión posterior celebrada en 1960 en París se dio
nacimiento al ALGOL 60. En 1962 de nuevo se reunió el comité en Roma, revisando y mejorando la versión del sesenta, versión utilizada durante esa década
principalmente por los científicos de Europa. Los
fabricantes americanos, como IBM, no dieron dema-
87
Primeros tiempos software.qxp
24/07/2009
14:23
PÆgina 88
ACTA
Los primeros tiempos del software (parte II)
siada importancia a este lenguaje. Sin embargo sí fue
muy utilizado para describir con él los algoritmos de
todo tipo en casi todas las revistas científicas, tanto
europeas como americanas. Siguieron más tarde las
versiones ALGOL W, impulsada por Niklaus Wirth
(de ahí la W en el nombre de su versión) y más tarde
ALGOL 68 que ya fue un verdadero lenguaje de propósito general y no sólo de orientación científica
como lo habían sido las versiones precedentes. Pero
esta versión causó la muerte del lenguaje al convertirse en demasiado ambicioso y poco práctico. Wirth,
que había sido uno de sus impulsores y que se percató de sus inconvenientes, presentó, basándose en
ALGOL 60, un nuevo lenguaje que llamó Pascal cuyo
primer compilador se implementó en 1970.
Por último añadir que el nombre de ALGOL
corresponde también al de una estrella (estrella ? de
la constelación de Perseo) que en inglés se conoce
con el nombre the Ghoul, el Espíritu (maligno). Cualquiera que sea la razón de su poca fortuna, bien la
posible etimología de su nombre, bien su mejorable
gestión, lo cierto es que ALGOL, como se ha advertido, influyó enormemente en el diseño de lenguajes
de programación posteriores.
Niklaus Wirth en una conferencia respondiendo
a preguntas de Knuth.
En la misma época que ALGOL se desarrollaron
otros muchos lenguajes pero sólo algunos llegaron a
ser conocidos, aunque ninguno de éstos tuvo la
importancia de FORTRAN o COBOL. Citaremos
JOVIAL, LISP y SNOBOL.
El nombre JOVIAL procede de Jules Own Version of the International Algebraic Language, es decir,
se trataba de una versión particular del ALGOL idea-
88
da por Jules Schwartz y desarrollada por el Departamento de Defensa de los Estados Unidos junto con el
sistema de defensa de las fuerzas aéreas SAGE. Hoy
día aún se emplea en aplicaciones de control de tráfico aéreo y en sistemas de defensa aérea.
Jules Schwartz.
LISP, List Processing, fue un lenguaje de programación orientado sobre todo al proceso de símbolos
y no a la evaluación de expresiones algebraicas. Ha
sido hasta nuestros días el lenguaje elegido por los
investigadores en inteligencia artificial para sus trabajos y desarrollos. En inteligencia artificial, las aplicaciones tratan con datos en forma de símbolos y con
estructuras formadas por expresiones simbólicas. Fue
ideado por John McCarthy entre 1956 y 1958 e
implementado por primera vez entre 1959 y 1962.
SNOBOL, de String-Oriented symbolic Language, apareció como un lenguaje orientado al manejo
de cadenas o secuencia de caracteres (character
strings), cadenas con las que se forman frases y oraciones. Por lo tanto es muy apropiado para el tratamiento de textos, basándose en la identificación de
palabras que son cadenas de longitud variable. También es posible la identificación de expresiones algebraicas considerándolas como palabras. Fue diseñado en 1962 por un grupo de investigación de los
laboratorios Bell. Tuvo versiones mejoradas sobre la
primera como SNOBOL3 y SNOBOL4, introducida
en diciembre de 1969.
Entre los ensambladores y el COBOL se situó en
la década de los sesenta un nuevo lenguaje de IBM
cuyo uso permaneció incluso en los setenta y, en
algunas instalaciones, ha llegado hasta tiempos muy
recientes. Fue conocido con las siglas RPG, Report
Program Generator, es decir, se trataba de un generador de programas con los que producir informes.
Otras marcas también facilitaron sistemas similares
aunque con distintos nombres. El sistema se utilizó
Primeros tiempos software.qxp
24/07/2009
14:23
PÆgina 89
Los primeros tiempos
del software (parte II)
con frecuencia en muchas instalaciones comerciales.
La literatura técnica de aquel entonces no se atrevió
a clasificar el sistema entre los lenguajes de programación a pesar de que, en cierto modo, podía operar a
nivel incluso más alto que COBOL. Con este sistema
era posible seleccionar los datos de entrada, interpretar las fichas perforadas (soporte de la información de
aquellos años), mantenimiento, fusión y comparación
de ficheros, ejecución de cálculos simples, presentación posterior de formularios impresos, etc. El programa fuente escrito en RPG contenía ciertos tipos de
instrucciones que indicaban al generador los datos a
procesar, las operaciones de cálculo a ejecutar con
ellos y las unidades periféricas a utilizar. Todo ello lo
indicaba el programador rellenando el correspondiente patrón preimpreso.
à
El software de sistemas
Junto con los programas encargados de resolver
los problemas del usuario (software de aplicaciones)
ya dijimos que existía otra categoría cuyo objeto es el
de manejar automáticamente los recursos del ordenador durante el proceso de las distintas tareas (jobs).
Sabemos, por ejemplo, que la mayor parte de los trabajos rutinarios, como podría ser la preparación de
una nómina en un centro de proceso de la información, presentaban muchas variaciones según el usuario del que se tratara, de tal forma que ese programa
se intermezclaba e interaccionaba con otros más cortos y sencillos que empleaban ficheros de diferentes
maneras. Uno de esos programas podría constar de
unas pocas líneas de código y unos pocos datos; otro
es posible que utilizara pocos registros pero que ejecutara muchas operaciones con ellos; un tercero usaría
muchos registros y muy pocas operaciones sobre los
mismos. El panorama que se presenta al ordenador es
por tanto extremadamente variado y nunca estará
sujeto a reglas fijas en el tiempo. Por otra parte, era el
hombre el que llevaba a cabo esa preparación de ligar
unos programas con otros para conseguir el resultado
perseguido con el computador. Por eso, las primeras
instalaciones relegaban al juicio del operador la organización y planificación de este tipo de tareas. Cuando los problemas fueron aumentando en número y
complejidad, se comenzaron a desarrollar ciertos programas que ya en los sesenta dominaron la industria.
Se conocieron como sistemas operativos. Uno de los
más primitivos se diseñó y desarrolló en casa de un
usuario, en los laboratorios de la General Motors, a
comienzos de 1956, teniendo una gran influencia
sobre otros usuarios y sobre todo sobre las marcas de
aquel entonces. Su éxito constituyó el principio de lo
que acabó llamándose batch processing, proceso por
lotes, consistente en agrupar los distintos trabajos en
un solo bloque de fichas perforadas, separados unos
de otros por ciertas tarjetas de control de forma que la
máquina distinguía perfectamente el principio y final
de cada uno de ellos, ejecutándolos secuencialmente
y sin interrupción. El trabajo humano era simple y se
limitaba a preparar el bloque total. Las tarjetas de control llevaban perforados en unas determinadas columnas (normalmente en las primeras) los códigos apropiados según fueran las acciones que se requerían del
computador. Esos códigos indicaban si se trataba de
una compilación, de la ejecución de un nuevo programa o simplemente de unos datos. En IBM, esto dio
lugar a la aparición de un nuevo lenguaje denominado Job Control Language, JCL, es decir, un lenguaje
con el que se controlaba la secuencia de los trabajos.
Ejemplos típicos de este tipo de claves de control eran
los códigos // o bien /* perforados en las dos primeras
columnas de las tarjetas.
Diagrama de flujo de un proceso por lotes.
En el entorno universitario se dieron las mismas
necesidades al tener que gestionar el flujo de los trabajos de manera eficiente. Los programas de los
alumnos cambiaban de una semana a otra o de un
estudiante a otro, por lo que se hizo necesario que
todos ellos recibieran mensajes claros acerca de la
clase de errores que cometían y cómo solucionarlos.
En 1959 apareció el sistema MAD, Michigan Algoritmic Decoder, desarrollado en la Universidad de
Michigan por Bernie Galler, Bob Graham y Bruce
Arden. Estaba basado en ALGOL pero se ocupaba
89
Primeros tiempos software.qxp
24/07/2009
14:23
PÆgina 90
ACTA
Los primeros tiempos del software (parte II)
de los detalles del proceso sucesivo y secuencial de
los trabajos. Las ventajas que ofrecía este sistema,
entre otras, eran una rápida compilación y buenos
diagnósticos para ayudar al estudiante a encontrar los
errores y corregirlos, todo lo cual es primordial en un
centro de formación académico.
Tanto las instalaciones comerciales como las académicas tenían los mismos objetivos: acomodar programas de diferentes longitudes y complejidad. También, y ahora por razones económicas, se hacía
necesario conseguir que el computador estuviera
ocupado la mayor parte del tiempo. Pocas marcas
conseguían esto con sus máquinas; los creadores del
MAD sí lo lograron.
Pero volvamos a la actuación de los programas del
sistema en un proceso por lotes. Cuando un programa
fuente contenía un simple error sintáctico, el sistema
operativo era capaz de decidir si el computador debía
continuar tratando de resolver el problema o no. Si
decidía que no, simplemente transfería el contenido de
la parte de memoria donde se encontraba el problema
a una impresora, impresión que contenía filas de
números (no siempre en el sistema decimal, más bien
en hexadecimal), suspendía el trabajo en curso y
comenzaba a ejecutar el trabajo siguiente de la cola.
La palabra que los técnicos de la informática empleaban, y aún se emplea, para este proceso era dump; se
hacía un dump de memoria, lo que significa una descarga, un vaciado de una parte de la memoria sobre
un periférico que en este caso era una impresora.
A medida que los sistemas operativos evolucionaron, el empleo de la memoria aumentó hasta que
llegó un momento en que ya no quedaba memoria
suficiente para procesar el propio programa del que
se acababa de hacer la diagnosis. Por ello esos sistemas cada vez eran más complejos como lo indica
también la evolución de su nombre. Comenzaron llamándose monitors (monitores), luego supervisor
systems (sistemas supervisores) y finalmente operating systems (sistemas operativos). En los primeros
tiempos los sistemas más simples los desarrollaron los
propios usuarios, como ocurrió con el Sistema Monitor para Fortran para la serie de máquinas IBM 7090.
SOS, de Share Operating System, fue otro sistema
operativo aún más complejo y también muy eficiente
desarrollado por SHARE para los mainframes de
IBM. Cuando IBM decidió tener una sola línea de
negocio fusionando la científica y la comercial con la
aparición de la arquitectura System/360, que fue un
éxito para IBM y revolucionó la industria de los computadores, desarrolló el sistema operativo OS/360
que estuvo disponible en 1966, sistema con múltiples
fallos en sus primeros años de existencia.
90
La historia de las dificultades de los primeros sistemas operativos se repitió con la aparición del minicomputador, el mini, a mitad de los sesenta: el primero de ellos sólo tuvo capacidad de memoria para
soportar un monitor muy simple. Cuando estas
máquinas evolucionaron en potencia también sus sistemas operativos fueron más potentes y eficientes. Eso
fue lo que ocurrió con los VAX y su sistema VMS de
la compañía DEC, Digital Equipment Corporation, en
el año 1978. Y aún más: el fenómeno se volvió a repetir con la aparición de los primeros ordenadores personales que poseían unos monitores rudimentarios
que cargaban los datos almacenados en una cinta
casete; pasaron más tarde a disponer de auténticos
sistemas operativos en disco magnético (disco duro).
à
Ciencia de la
Computación – Informática
Al final, todos los casos anteriores lo que nos muestran es que se hizo más esfuerzo en el desarrollo de los
sistemas operativos que en el diseño y evolución de los
lenguajes de programación. Ahora bien; mientras que
los sistemas operativos eran misión de las marcas, los
lenguajes se convirtieron en una disciplina académica
y ello condujo a la aparición de una especialidad dentro de la universidad: Ciencia de la Computación
(Computer Science) para los países anglosajones,
Informática para los más latinos. Esta disciplina aparece a finales de los cincuenta en instituciones como
Stanford y Purdue bajo nombres diferentes y en los
departamentos de Matemáticas e Ingeniería Eléctrica.
Se estableció un punto de arranque basado en computadores baratos con tambor magnético, como el Librascope LGP-30 y la máquina IBM-650. La disciplina
comenzó a tomar cuerpo y a legitimarse en cursos de
verano universitarios impartidos en 1955. A principios
de los sesenta la ciencia de los computadores pugnó
por definirse a sí misma y establecer sus objetivos en
relación no sólo en cuanto a materias de ingeniería
eléctrica y matemática aplicada sino también sobre la
utilización del computador en contabilidad, archivos y
trabajo administrativo en general. Una de las personas
que más influyó en este arranque fue el profesor George Forsysthe, de la Facultad de Matemáticas de la Universidad de Stanford. Bajo su liderazgo se creó la
División de Ciencia de la Computación dentro del
Departamento de Matemáticas en 1961. La propia
universidad creó cuatro años más tarde un departamento separado que fue el primero de esta disciplina
establecido en los Estados Unidos. Su prestigio nacional e internacional ha llegado hasta nuestros días.
Primeros tiempos software.qxp
24/07/2009
14:23
PÆgina 91
Los primeros tiempos
del software (parte II)
Herbert Alexandre Simon
Alan Perlis
Herbert Simon nació en Milwaukee, Wisconsin, el 15 de junio de 1916 y falleció el 9 de
febrero de 2001. Cursó estudios en la Universidad de Chicago, en la que se graduó en 1936.
El grado de doctor lo obtuvo en 1943. Trabajó
como profesor asistente en esa universidad
entre los años 1936 y 1938 así como también
en organizaciones ligadas a la gestión de organismos públicos. Fue profesor auxiliar entre
1942 y 1947 y profesor titular de ciencias políticas entre 1947 y 1949. En 1949 comenzó a
trabajar en el Instituto de Tecnología Carnegie,
enseñando administración y psicología. A partir de 1966 su docencia pasó a ejercerla en la
materia de ciencias de la computación. Fue un
pionero y fundamental en el campo de la inteligencia artificial.
Perlis nació en Pittsburg el 1 de abril de
1922 y falleció el 7 de febrero de 1990 en New
Haven, Connecticut. Cursó la licenciatura de
química en el Instituto de Tecnología Carnegie,
ingresando luego en la fuerza aérea, en la que
combatió durante la Segunda Guerra Mundial.
A su regreso a Estados Unidos se doctoró en
matemáticas en el MIT.
Recibió la medalla Turing de ACM en 1975
junto con Allen Newell por su contribución a la
inteligencia artificial, a la psicología cognitiva
humana y al proceso de listas. Fue designado
también Distinguished Fellow de la Asociación
Norteamericana de Economía. Recibió el Premio Nobel de Economía en 1978.
En 1952 comenzó a trabajar en el laboratorio de la Universidad Purdue, obteniendo poco
después la cátedra de matemáticas. En la Universidad Carnegie fue el director de los Departamentos de Matemáticas y de Ciencias de la
Computación.
Su especialidad fueron los lenguajes de programación. En 1957 dirigió un comité de la
ACM con el fin de diseñar un lenguaje de programación universal que culminó con el
ALGOL-60.
Recibió en 1966 el primer premio Turing,
otorgado por sus aportaciones al campo de la
computación.
Allen Newell
Allen Newell nació el 19 de marzo de 1927
en San Francisco y fallece el 19 de julio de
1992 en Pittsburg. Sus investigaciones se dirigieron al campo de la computación y de la psicología cognitiva. Fue también uno de los pioneros de la inteligencia artificial, junto con
Minsky, Simon y McCarty, contribuyendo a la
creación del lenguaje IPL, Information Processing Language, en 1956.
De izquierda a derecha, Simon y Newell.
En el otoño de 1967 tres profesores del Instituto
de Tecnología Carnegie, en Pittsburg, Herbert Simon,
Alan Perlis y Allen Newell, escribieron una cartaartículo al editor de la prestigiosa revista Science
donde definían la ciencia de la computación como el
estudio de los computadores, definición que conllevaba no sólo la noción de computador como una
máquina estática sino más bien como un sistema
capaz de ejecutar procesos dinámicos de acuerdo con
una serie de reglas. Defendieron siempre esta noción
Se graduó en física en Stanford en 1949,
ampliando después estudios de matemáticas
en Princeton. Obtuvo el grado de doctor en
1957. Trabajó para RAND Corporation desde
1950 hasta 1961, donde conoció a Herbert
Simon que era profesor de administración
industrial en el Instituto de Tecnología Carnegie. Comenzó su carrera docente en 1961 y
jugó un papel fundamental en la creación del
Departamento de Ciencia de la Computación
en Carnegie Mellon.
Recibió el premio Turing de ACM en 1975
junto con Herbert Simon y la Medalla Nacional
de las Ciencias en 1992. Escribió más de 250
publicaciones de las cuales 10 fueron libros.
91
Primeros tiempos software.qxp
24/07/2009
14:23
PÆgina 92
ACTA
Los primeros tiempos del software (parte II)
contra quienes consideraban que el computador era
un desarrollo, un fenómeno del hombre y por lo tanto
no una ciencia natural. El primero de ellos, Herbert
Simon, obtuvo el Premio Nobel por su trabajo encuadrado en lo que podríamos denominar ciencia de la
gestión. Con el título The Sciences of the Artificial, se
publicaron las lecciones impartidas por Simon en
defensa de la tesis de que los fenómenos de las ciencias naturales no están reñidos con los debidos a la
creación humana y por tanto no resulta equivocado
crear una ciencia que estudie lo artificial.
à
ACM – Association for
Computing Machinery
Seis meses más tarde de publicarse la carta aludida
en la revista Science, ACM, Association for Computing
Machinery, dio a la luz Curriculum ’68. Era un informe
en el que se relacionaba el conjunto de asignaturas que
la asociación consideraba debían cursar aquellas personas que deseaban graduarse en informática. ACM
hacía énfasis en las bases teóricas y matemáticas que
los estudiantes deberían poseer para alcanzar la graduación. También se refería a procedimientos algorítmicos, lenguajes de programación y estructuras de
datos. Pero no se hablaba en aquel manual del hardware. Sin embargo, en una versión del año 1965, anterior a la que nos estamos refiriendo, sí se consideraban,
aunque fuera como optativas, asignaturas relacionadas
con la electrónica y los computadores analógicos. Por
ello, y fijándose en el informe del 68, Simon, Perlis y
Newell aconsejaban a los futuros informáticos cursar
también estudios de ingeniería eléctrica. El resumen
sería que por el año sesenta y ocho la ciencia de los
computadores era ya una ciencia respetable en Estados Unidos; su importancia también llegó a Europa de
la mano de Francia. Y en España debemos citar la creación del Instituto de Informática de Madrid en 1969,
del que fuimos su primer Jefe de Estudios, institución
piloto dependiente directamente del Ministerio de Educación que fue el precursor de las primeras facultades,
como la Facultad de Informática de la Universidad Politécnica de Madrid, pionera de las creadas en España.
Además patrocina conferencias internacionales y
facilita diversos servicios a sus miembros asociados.
à
Aparición de la programación
estructurada
Se hizo famosa en el mundo informático la frase
de Dijkstra, “La sentencia GO TO considerada como
92
ACM
ACM, Association for Computing Machinery, fue creada en el año 1947 en Estados
Unidos como una sociedad pionera científica y
formativa en el campo de la Ciencia de la
Computación. Publica diversas revistas especializadas siempre relacionadas con algún
campo de la informática. Su revista mensual
oficial lleva el título Communications of the
ACM, manteniendo desde su aparición contenidos del más alto nivel en todos sus artículos.
Tiene miles de socios en todo el mundo.
Portada de un número de la publicación
oficial de ACM
Las revistas abarcan los más variados temas,
como gráficos por ordenador, algoritmos, sistemas distribuidos, sistemas multimedia, etc.
También tiene publicaciones especializadas por
grupos de interés (Special Interest Group, SIG),
como las dedicadas a los lenguajes de programación, aplicaciones de la computación, arquitectura de computadores, recuperación de
información, ingeniería del software, sistemas
operativos y un largo etcétera.
perniciosa”. Edsger Dijkstra ha sido profesor de la
Universidad Técnica de Eindhoven, Holanda. Envió
una carta en marzo de 1968 a la misma publicación
de ACM donde apareció el Curriculum al que se ha
hecho mención y la frase aludida era precisamente el
título del escrito que envió. La carta comenzaba así:
Durante muchos años he observado que la calidad
de los programadores disminuye cuanto más utilizan
la sentencia go to en los programas que producen.
Primeros tiempos software.qxp
24/07/2009
14:23
PÆgina 93
Los primeros tiempos
del software (parte II)
las siguientes estructuras de control: secuencias, bifurcaciones condicionales o estructuras
de selección y repeticiones”.
Según este teorema, las estructuras básicas
de todo programa bien estructurado, son tres:
La secuencia: conjunto de instrucciones ejecutadas una a continuación de la otra, una
sola vez.
Edsger Dijkstra
La sentencia go to era una sentencia de bifurcación disponible en todos los lenguajes de programación de hace años. Se trataba de una orden escrita
por el programador en el programa fuente para saltar
a otra sentencia del programa que no fuera la siguiente en el orden secuencial lógico. Ejecutaba una bifurcación incondicional.
La carta de Dijkstra puso de relieve un planteamiento que se ha hecho duradero y permanente en
la informática hasta nuestros días, planteamiento con el
que pretendía cambiar los fundamentos de la creación
de programas. Sus esfuerzos se encaminaron a transformar la ciencia de la computación en otra con bases teóricas más formales, lo que suponía mover los sistemas
de software de aquellos años desde unos cimientos de
arena a otros teóricos asentados sobre roca.
LA PROGRAMACIÓN ESTRUCTURADA
La programación estructurada es un estilo,
a la vez que una herramienta, de diseño de
programas encaminado a que éstos reflejen
fielmente la estructura algorítmica de la solución. Esta técnica tiene en cuenta la codificación de los programas utilizando un número
limitado de estructuras de control para así formar unidades altamente estructuradas de código legible, más fácil de comprobar, mantener y
modificar. En la programación estructurada
está expresamente prohibido el uso de la sentencia GO TO.
Este estilo de programación está basado en
el teorema de la estructura, probado matemáticamente, que establece que “cualquier programa con una entrada y una salida, es equivalente a otro programa que contenga únicamente
La selección: elección entre una o más
secuencias, de tal forma que se ejecuta una
sola vez una de las secuencias, mientras que
las restantes no se ejecutan nunca.
La repetición: ejecución repetida de una
secuencia un número determinado de
veces. Se trata de la iteración.
Cualquier algoritmo, y su correspondiente
programa, puede construirse mediante el
empleo de estas tres estructuras. No obstante,
la estructura secuencia no es lo suficientemente
potente para, sólo con ella, tratar de resolver
todos los problemas. Con frecuencia, se hace
necesario la toma de decisiones, y ello supone
la utilización de la estructura de selección para
tomar una alternativa entre varias posibilidades. El hecho de utilizar esta praxis, por cada
conjunto de sentencias dentro del programa, y
por cada una de las estructuras que lo conformen, existirá exactamente un punto de entrada
y un punto de salida y, en consecuencia, el
seguimiento del programa a efectos de diagnosis podrá hacerse de manera más sencilla.
Todo lenguaje de programación de tipo
imperativo, como son Fortran, Pascal, C, etc.,
dispone de distintas variantes en cada una de
las tres estructuras, representadas por esquemas sintácticos adecuados.
Los métodos de la programación estructurada se deben a E. Dijsktra.
En los círculos técnicos se organizó un gran debate sobre el uso o no de la denostada sentencia go to.
Pero realmente Dijsktra estaba preocupado por algo
más profundo que por ese comando particular causante de la chispa. En esta corriente tan diversa, algunos incluso llegaron a dudar de la relevancia de la
enseñanza de la computación en las aulas universitarias. Lo positivo de este debate fue que con él se dio
nacimiento a la programación estructurada, un méto-
93
Primeros tiempos software.qxp
24/07/2009
14:23
PÆgina 94
ACTA
Los primeros tiempos del software (parte II)
do que sus defensores lo consideraban como la
manera de convertir el arte de la programación,
como la llamaba Knuth en sus libros, en una verdadera ciencia. Si la carta de Dijkstra fue o no el detonante lo cierto es que la programación a partir de ese
momento se movió en esa dirección en los años que
siguieron.
à
Ingeniería del software
En octubre de 1968 se convocó una conferencia
en Garmisch, sur de Alemania, con el “llamativo” título de Ingeniería del Software, que quería marcar el
final de la edad de la inocencia, una constatación de
que la crisis por la que atravesaba la producción del
software no finalizaría pronto pero sí que podía y que
tenía que reconducirse. Decíamos que el título todo él
y sobre todo su primera palabra, ingeniería, era llamativo y provocativo; pero se hizo deliberadamente y
sugería que lo que estaba detrás de la crisis del software era el hecho de que los programadores ignoraban los fundamentos teóricos y las disciplinas de la
práctica diaria en la que se fundamentaban otros
campos tradicionales de la ingeniería.
La conferencia, que fue patrocinada por la NATO,
también reveló la notable distancia existente entre la
ingeniería del software y la propia informática, cuyo
centro era la universidad. Los organizadores eran
conscientes de que los computadores eran responsables en muchos casos de poner en riesgo vidas humanas, incluyendo en esa responsabilidad a los sistemas
militares empleados por la NATO. Estos sistemas no
deberían tolerar ninguno de los errores que de hecho
se podían producir en un entorno de proceso de
datos por lotes (descrito anteriormente). Por ello se
pensó que debería existir una semejanza con otras
formas de ingeniería como la ingeniería civil en la
que, por ejemplo, cuando cruzamos un puente todos
confiamos en los expertos que lo han diseñado. En
otros aspectos sin embargo, esa analogía no se da. En
ingeniería civil han funcionado siempre las certificaciones de obra y existe una cadena de responsabilidades legales caso de siniestro. Eso no se daba en la
computación en general y tampoco en la producción
del software en particular.
En 1996 se celebró una nueva conferencia, también en Alemania, sobre el tema del software, concretamente sobre la historia de la ingeniería del software, llegándose a la inesperada conclusión de que los
intentos habidos para establecer una auténtica ingeniería en la producción conjunta de los sistemas software habían fallado.
94
à
Nuevas estrategias en
la venta del software
En diciembre de 1968, y bajo la presión del
gobierno estadounidense, IBM anunciaba en todo el
mundo que el siguiente año desempaquetaría su software, es decir, lo vendería separadamente en lugar de
cargarlo juntamente con sus sistemas de hardware.
Uno de los primeros productos con los que IBM se
inauguró en esta estrategia fue el CICS, Customer
Information Control System, un sistema para el control de las comunicaciones, producto que alcanzó
rápidamente un gran éxito y que IBM aún sigue manteniendo en catálogo y mejorándolo día a día con las
innumerables versiones que de él han ido apareciendo. Comenzó a ofrecerlo en julio de 1969 por 600 $
al mes en soporte de cinta magnética. El software,
que hasta entonces había sido como algo etéreo,
podía a partir de ahora comprarse y venderse libremente. Como consecuencia de todo esto, aparecieron
en el mercado otros vendedores de software no ligados a ninguna marca: comenzaba el mercado libre del
software. Además, los efectos de lo que estaba ocurriendo en los campus universitarios marcaron la
trayectoria de lo que había que recomendar a las
fábricas productoras de software, es decir, la programación se hizo más profesional, más estructurada y
con bases teóricas más firmes. Al mismo tiempo, la
industria de los computadores pasó por su época más
innovadora. Y así, a finales de la década de los sesenta apareció en el mercado el circuito integrado, lo que
incrementó la venta de los sistemas comerciales que,
a su vez, potenciaba una nueva clase de computadores baratos, eso sí, de limitadas posibilidades en cuanto a su memoria interna, por lo que no era posible, en
la mayoría de los casos, implementar en ellos lenguajes altamente estructurados, como Pascal. Los programadores recurrieron de nuevo a los lenguajes no
estructurados, a los ensambladores e incluso, de
nuevo, al go to.
En 1969 aparece un nuevo sistema, el UNIX.
Estos fueron sus inicios. Ken Thompson y Denis Ritchie eran dos profesionales que trabajaban en los
laboratorios de la Bell Telephone en Murray Hill, New
Yersey. Ellos crearon el sistema operativo UNIX sobre
el minicomputador PDP-11 de DEC, máquina con
unos recursos de memoria extremadamente limitados. Thompson escribió la primera versión del sistema en lenguaje ensamblador y después sus colegas
desarrollaron un lenguaje de programación de sistemas que llamaron lenguaje B, que se convirtió en el
lenguaje C en 1973 y más tarde en 1978 en un len-
Primeros tiempos software.qxp
24/07/2009
14:23
PÆgina 95
Los primeros tiempos
del software (parte II)
guaje de propósito general, como lo definen sus
creadores en The C Programming Language. Conviene recordar las palabras de Ritchie para definir este
nuevo lenguaje: se trata de un lenguaje próximo a la
máquina. Eso significaba que, para sus creadores, C
conservaba la potencia del lenguaje ensamblador, era
un lenguaje para la creación de programas de sistemas y, por lo tanto, no era un lenguaje de alto nivel
como Pascal o FORTRAN. Tampoco tenía en cuenta,
en sus inicios, las normas de la programación estructurada. No obstante, se convirtió en uno de los lenguajes más populares cuando apareció en el mercado
el ordenador personal y, más tarde, el gigante del
software Microsoft.
Estas son las frases que Kernigham y Ritchie escriben en el prólogo de su libro en el que definen el lenguaje: C ha sido diseñado originalmente e implementado sobre un sistema operativo UNIX en una
máquina DEC PDP-11 por Dennis Ritchie. El sistema
operativo, el compilador C y todos los programas de
aplicación UNIX (incluidos los necesarios para preparar este libro) están escritos en C. También han aparecido compiladores para otras máquinas como el
Sistema 370 de IBM, Honeywell 6000 e Interdata
8/32. C no está vinculado a ningún hardware o sistema particular; sin embargo, es sencillo escribir programas que podrán procesarse sin cambios sobre cualquier máquina que soporte C.
El éxito de UNIX y C compensaron las debilidades
de ALGOL-68 y PL/1, los dos lenguajes aparecidos a
finales de los sesenta. Ya nos hemos referido a
ALGOL-68, que significó un intento por mejorar
ALGOL-60. Pero lo cierto es que, fuera del entorno
académico, la versión 68 únicamente fue implementada y soportada por máquinas de Burroughs Coorporation. Muchos pensaron que el escaso soporte de
FORTRAN por parte de IBM condenaba a este lenguaje a su postración, sobre todo cuando la compañía anunció PL/1. Pues bien; por una parte, el legado
de ALGOL-68 fue un nuevo lenguaje, Pascal, lenguaje muy bien estructurado que Nicholas Wirth, del Ins-
tituto Técnico Federal de Suiza, desarrolló como reacción a la complejidad contenida en la última versión
de ALGOL. Por otra parte, el esfuerzo de IBM por
desarrollar un lenguaje para reemplazar FORTRAN y
COBOL y alimentar así a sus nuevas arquitecturas
orientadas al proceso de aplicaciones tanto comerciales como científicas, no tuvo demasiado éxito como
vamos a ver. La compañía consideró que el diseño y
producción de un nuevo lenguaje podría resolver la
problemática de los dos mercados. Un comité conjunto de IBM y (de nuevo) SHARE llegó a la conclusión
de que el nuevo lenguaje no debía ser una ampliación del FORTRAN, aún a sabiendas de que la versión de aquel entonces, FORTRAN IV, era muy popular y muy utilizada. El nuevo lenguaje se llamó PL/1,
Programming Language 1, y era una derivación de
FORTRAN, COBOL y ALGOL. Las primeras versiones aparecieron en 1964, y cuando el nuevo lenguaje estuvo realmente operativo, tanto FORTRAN IV
como COBOL estaban ambos muy introducidos ya
en el sistema IBM 360. Considerando sus raíces, PL/1
era además un lenguaje extremadamente complejo,
lo que unido a la penetración que ya tenían sus dos
competidores hizo que PL/1 nunca llegara a ser
demasiado popular.
à
Bibliografía
Ceruzzi, P. E., A History of Modern Computing,
The MIT Press, 2003.
Chenique, François, Software, Dunod, París,
1971.
Chomsky, N. y Miller, G. A., El Análisis Formal de
los Lenguajes Naturales, Comunicación-Serie B,
Madrid, 1972.
Kernighan, B. W., Ritchie, D. M., The C Programming Language, Prentice-Hall, 1978.
Tucker, Allen B., Jr., Lenguajes de Programación,
McGraw-Hill, Madrid, 1987.
95
Primeros tiempos software.qxp
24/07/2009
14:23
PÆgina 96
Descargar