
\chapter*{LA HISTORIA DEL SOFTWARE}

\setcounter{chapter}{4}
\setcounter{section}{0}


\section{?`QUE ES EL SOFTWARE?}
 
Software, hardware y computaci\'on, t\'erminos que se asocian con
la modernidad son en realidad nombres nuevos de pr\'acticas ancestrales.
\medskip  

Todas las culturas antiguas desarrollaron t\'ecnicas de c\'omputo, con
sus correspondientes instrumentos y notaciones. Se conservan pocos
vestigios de esto.
\medskip
  
A los instrumentos, hoy se les conoce como hardware y a las t\'ecnicas o
procedimientos -la parte inmaterial intangible- como software.
\medskip  

 Haciendo una analog\'{\i}a, en la m\'usica los instrumentos conforman
el hardware, las partituras y la habilidad para crearlas e interpretarlas
constituyen el software. Un buen instrumento es importante, pero m\'as importante es un buen m\'usico, entre \'este y aqu\'el, media una notaci\'on musical que define la calidad del producto.
 
\section{UN PRODUCTO DE HISTORIA}
 
El software como se ha visto, no surge con los equipos electr\'onicos,
-aunque es con ellos que adopta el nombre- est\'a presente desde el empleo de  \'abacos o sumadoras mec\'anicas. Sin embargo, en estos casos, el software no se encuentra incorporado en el equipo. Es aportado por el operario. La m\'aquina anal\'{\i}tica de Charles Babbage, incidentalmente, tuvo su software,
y fue una amiga de \'este, la legendaria lady Lovelace, quien
aport\'o el software que no se lleg\'o a usar, dado que la m\'aquina
nunca se complet\'o.
\medskip
  
En el ENIAC el control de las operaciones estaba parcialmente
integrado en el equipo. Dicho control era realizado por un circuito
que requer\'{\i}a un  alambrado espec\'{\i}fico para cada aplicaci\'on.
Imaginemos lo engorroso que resultaba realambrar el circuito cada
vez que cambiaba el uso del ENIAC.
\medskip 
 
Hasta este momento, no se percib\'{\i}a una diferencia
sustancial entre el equipo y el control de las operaciones. El
concepto de programa de control almacenado en memoria, aportaci\'on
popularmente atribuida a John von Neumann, precipit\'o el
desarrollo de software. En \'este se perfilaron dos tendencias de desarrollo:
los programas de aplicaci\'on y los de servicio. Estos
\'ultimos ten\'{\i}an como prop\'osito facilitar el desarrollo de
programas a partir de programas.
\medskip 
 
Algunos programas de servicio fueron simples cargadores que permitieron  emplear notaciones como el octal o hexadecimal m\'as compactas que el binario.
Otros como los ensambladores simplificaron m\'as el proceso
al reemplazar las notaciones num\'ericas con los s\'{\i}mbolos mnem\'onicos que 
aportaron  para describir a cada instrucci\'on de la m\'aquina.
El siguiente paso significativo fue la traducci\'on de f\'ormulas,
que permiti\'o la descripci\'on de los algoritmos con el empleo de
expresiones algebraicas. Dicha traducci\'on se realiza con programas que se denominan compiladores, generan programas que al ejecutarse producen los resultados.

\begin{figure}[th] 
\centering 
\begin{picture}(270,190)
\put(0,0){\epsfxsize=270pt \epsffile{foto11.eps}}
\end{picture}
\end{figure} 


 
Es importante destacar que en tanto los programas de aplicaci\'on
saturaron los recursos de los equipos, imponiendo sus requerimientos en
cuanto a velocidad, precisi\'on en la aritm\'etica y capacidad en los
almacenamientos; los  programas de servicio repercutieron en la
evoluci\'on de la arquitectura de los equipos (hardware).
Entre las aportaciones m\'as notables, podemos citar el empleo de
pilas y el reemplazo de referencias f\'{\i}sicas por l\'ogicas.

\medskip
Con la pila (Push Down List), se da lugar al manejo recursivo de los
procesos. Por ejemplo, esto ocurre en una oficina administrativa,
cuando se pospone la soluci\'on de un problema para resolver otro
de mayor exigencia. El  problema original se suspende y se aborda
nuevamente cuando el de mayor exigencia ya ha sido resuelto.   
\medskip 
 
Con el reemplazo de referencias f\'{\i}sicas por l\'ogicas, se obtuvo
un incremento m\'as real que virtual de los recursos disponibles.
Almacenamientos secundarios, registros operacionales, memoria
virtual, memoria cache e hizo translapes (overlay), son algunas
de las t\'ecnicas que emplean este concepto. El efecto es similar
al de las operaciones bancarias nominales con que las
instituciones de cr\'edito prestan varias veces su capital.
 \medskip 
     
Los elementos aportados por los programas de servicio, al
interrelacionarse configuran el sistema operativo con el cual se
administran los recursos  disponibles en las computadoras y se
establecen l\'{\i}neas de producci\'on para el proceso de programas con
una m\'{\i}nima participaci\'on del operario: la automatizaci\'on de la
automatizaci\'on. Al principio, los sistemas operativos brotan como
extensiones de los lenguajes. Posteriormente, el fen\'omeno se
invierte de  modo que los sistemas operativos configuren el
ambiente en el que se desempe\~nan las aplicaciones y los
programas de servicio.
 
\section{UNA CLASIFICACI\'ON DEL SOFTWARE}
 
El software paulatinamente adquiri\'o mayor importancia que el
hardware. En un principio, la proporci\'on favorec\'{\i}a al equipo
f\'{\i}sico, pero progresivamente, el componente inmaterial adquiri\'o
una mayor relevancia hasta hacerse el m\'as importante. Para
facilitar su an\'alisis, el software se  clasifica generalmente en
tres grandes rubros: sistemas operativos, lenguajes de
programaci\'on y programas de aplicaci\'on.
 
\begin{figure}[th] 
\centering 
\begin{picture}(270,170)
\put(0,0){\epsfxsize=270pt \epsffile{foto12.eps}}
\end{picture}
\end{figure} 


\section{LOS SISTEMAS OPERATIVOS}
 
Como ya se anot\'o, surgen como extensiones de los
lenguajes de programaci\'on, tal es el sistema FAP elaborado para la
IBM 709 que orbitaba en torno al lenguaje Fortran, con una m\'{\i}nima
participaci\'on del operador, estableci\'o un flujo controlado
autom\'aticamente para el proceso de lotes de aplicaciones (batch).
\medskip 

Con el aumento tanto de los equipos como de los programas
de servicio, las funciones y ca\-racter\'{\i}sticas de los sistemas
operativos se ampliaron y sofisticaron, al grado de adquirir su
propio dialecto o lenguaje, tal es el caso del OS/360 para la
serie 360 de la IBM, con su JCL (Job Control Language) como lenguaje
de control.
 Algunos sistemas aportaron el concepto de la
multiprogramaci\'on como una medida para incrementar la
productividad de la computadora como el OS/360, otros, la interacci\'on con el usuario representa esfuerzos intelectuales de
consideraci\'on, el sistema operativo para la serie 370 de la IBM,
tuvo un costo de 5 millones de horas hombre.
 \medskip 

La interacci\'on con el usuario di\'o una nueva dimensi\'on al
uso de los equipos y con ello, produjo el concepto de tiempo compartido.
 Entre los sistemas que aplicaron esta filosof\'{\i}a de operaci\'on destacan:
 \begin{itemize}
\item CTSS  (Compatible Time Sharing System) desarrollado en el MIT
para una IBM 7090.
 
\item TOPS-10 para la  PDP-10 de la Digital
Equipment Corporation (DEC) 

\item MULTICS, elaborado tambi\'en en el MIT para equipos de General Electric y Ho\-neywell.
 \end{itemize}

En las minicomputadoras destacan el OS para la PDP-8 desarrollado
por la DEC y UNIX, un sistema operativo para la PDP-11 de DEC,
desarrollado por dos investigadores en los laboratorios de la
Bell Telephone.
 
\section{LENGUAJES DE PROGRAMACI\'ON}
 
Dependiendo del criterio que uno admite para calificarlos, existen cientos
o miles de lenguajes de programaci\'on. Las formas de operaci\'on de
los programas que emplean a los lenguajes de programaci\'on  amplian la variedad, pero a la vez ofrecen una clasificaci\'on en
ensambladores, interpretadores y compiladores.
\medskip 
 
Entre los programas que emplean lenguajes de programaci\'on, los m\'as
elementales son los ensambladores, ya que ofrecen al programador un
modelo riguroso de la m\'aquina. En ellos se emplean mnem\'onicos,
abreviaturas simb\'olicas, para cada una de las instrucciones de
la m\'aquina y desde ellos, est\'an disponibles para el programador
todos los recursos del equipo en su nivel m\'as elemental. Los
programas que se encargan de la traducci\'on, se limitan a realizar
una correspondencia uno a uno entre los mnem\'onicos y las
instrucciones de m\'aquina.
 \medskip 

Los interpretadores utilizan lenguajes, tambi\'en simb\'olicos,
pero en este caso, cada s\'{\i}mbolo tiene una funci\'on asociada
por el interprete con esta modalidad, el interpretador puede prever las
consecuencias de la operaci\'on antes de realizarla y emitir, en su caso,
diagn\'osticos para beneficio  del usuario. Las operaciones asociadas a cada s\'{\i}mbolo no est\'an confinadas a las
operaciones disponibles en la m\'aquina, pueden ser instrucciones de  otra
m\'aquina y de cualquier nivel de complejidad y elaboraci\'on.
\medskip 

Los compiladores realizan la traducci\'on de programas desde
un lenguaje hasta otro. Las naturalezas de los lenguajes fuente y
destino son en principio diferentes. Generalmente, el lenguaje
destino es el lenguaje de la m\'aquina o el ensamblador.  Es el
caso de los compiladores de Fortran que traducen los programas que
est\'an descritos por el programador en t\'erminos de un lenguaje
algebraico y con el empleo de matrices. Rigurosamente, Fortran no
fue el primero de los esfuerzos en esta direcci\'on,
hubo antes otros como el MAD (Michigan Algebraic Decoder), fue el esfuerzo unificador de la IBM que condujo al Fortran.
\medskip 
 
Con el empleo de los lenguajes de programaci\'on, los usuarios
no requieren conocer en detalle las caracter\'{\i}sticas de la
computadora para hacer sus computaciones en gran escala. En la
actualidad hay tantos lenguajes de programaci\'on que nos limitaremos
a hacer algunos comentarios sobre los m\'as conocidos.
\medskip 
 
Fortran, Algol, Pascal, Ada y Modula, representan una cadena de
lenguajes con un origen com\'un,  permitir la descripci\'on de
computaciones num\'ericas con  el empleo de notaciones algebraicas y
matriciales, cada eslab\'on de la cadena aporta nuevos elementos,
la mayor de las veces triviales, pero en la cadena se observa una
tendencia muy se\~nalada consistente en que cada vez es m\'as rigurosa
la especificaci\'on de los tipos de datos que se emplean en los
programas.
\medskip 
 
Algol pretendi\'o ser m\'as un lenguaje matem\'atico para describir
algoritmos, que un lenguaje de programaci\'on. Introdujo los principios
de la estructuraci\'on, descomponiendo el programa en procedimientos y
poniendo \'enfasis en las formas de transmisi\'on de argumentos del
programa a los procedimientos secundarios.
Para obtener independencia de las particularidades de la entrada y
salida de cada equipo, no estableciendo especificaciones sobre estos aspectos. 
\medskip 

PASCAL por su parte, acent\'uo la estructuraci\'on de
los programas, para ello prescribi\'o el uso de las transferencias
incondicionales, limitando las formas de control a las
estructuras DO-WHILE e IF-THEN-ELSE, con lo que oblig\'o al 
usuario a organizar sus programas, simplificando su desarrollo,
depuraci\'on y mantenimiento.
\medskip 
 
Fortran, Basic, Pascal, en esta serie de lenguajes. Tambi\'en
con un origen com\'un, el \'enfasis que se observa  consiste en
ofrecer una mayor independencia en las especificaciones de entrada y
salida, en mejores facilidades para el manejo de textos en los
programas, un empleo interactivo del lenguaje, as\'{\i} como una
acusada simplificaci\'on en la presentaci\'on de los resultados.
\medskip 
 
Espec\'{\i}ficamente, Basic elimin\'o las tediosas especificaciones
de formato, indispensables en Fortran, para la presentaci\'on de los
resultados.
\medskip 
 
Tambi\'en hubo lenguajes que enfatizaron tanto la especificaci\'on
de los datos, que llegaron al extremo de no solo ofrecer datos num\'ericos
y textos, sino tambi\'en de integrarles una estructura.
\medskip 
 
Tal es el caso de ``C'', Alpha-Basic (una variante de Basic para los
equipos Alpha-Micro), e inclusive COBOL, que se orient\'o m\'as a 
ambientes administrativos que a los de la ingenier\'{\i}a, por lo que
su aritm\'etica fue muy limitada.
\medskip 
 
Algunos de los lenguajes, introdujeron caracter\'{\i}sticas muy
especializadas, tal es el caso de COBOL, que con su enfoque administrativo,
incorpor\'o una excelente colecci\'on de subrutinas para el manejo y la
organizaci\'on de fuertes vol\'umenes de datos alfanum\'ericos, entre
ellas el ISAM (Indexed Sequential Access Method) que establecieron los
fundamentos para los manejadores de bases de datos.
\medskip 
 
Y tambi\'en el de ``C'', que pretendi\'o utilizar el lenguaje de m\'aquina
de la PDP-11 de DEC, como lenguaje de alto nivel.
\medskip 
 
Al margen de toda esta colecci\'on de lenguajes en los que el
c\'alculo num\'erico juega el papel central, surgen otros lenguajes,
los clasificados como no num\'ericos, que se ca\-racterizaron por su
\'enfasis en el manejo de cadenas de car\'acteres, la edici\'on de
textos, el reconocimientos de patrones y la propiedad de que el
programa fuente es de la misma naturaleza que los datos que
manejan.
\medskip 
 
Por su enfoque diferente, este tipo de lenguajes se
utiliz\'o en aplicaciones menos convencionales, como lo son la
compilaci\'on de lenguajes y para los estudios y desarrollos
realizados en el terreno de la inteligencia artificial. Sobresalen
entre ellos LISP para el manejo de listas; COMIT y SNOBOL en el 
reconocimiento de patrones. M\'as adelante, se agregan IPL V y
PROLOG.
\medskip 
 
Por su naturaleza, los lenguajes no num\'ericos
enfrentaron en sus inicios problemas con la velocidad de los
equipos y las capacidades de sus memorias. Por esto, su
desarrollo registr\'o una pausa aunque en fechas recientes,  con
el apoyo de los nuevos equipos, han recibido un nuevo impulso. 
\medskip 
 
Si bien los primeros resultados en este campo fueron poco
convincentes: programas de juego decepcionantes, sistemas r\'{\i}gidos
de traducci\'on, y demostraciones de teoremas triviales; el nuevo
per\'{\i}odo ha ofrecido resultados sumamente interesantes, entre los
que podemos citar a los sistemas expertos.
\medskip 
 
Estos sistemas expertos, adem\'as de organizar considerables
vol\'umenes de datos y reducirlos a trav\'es de operaciones l\'ogicas,
realizan ya inferencias elementales. Orientados a la geolog\'{\i}a, la
medicina y al diagn\'ostico en general,  se perfilan como consejeros capaces
de emitir juicios.
\medskip 
 
Uno de los \'exitos m\'as sonados y que mayor controversia ha despertado,
es la inferencia que realiz\'o un sistema experto en 1982, el Prospector
que permiti\'o identificar un fil\'on de molibdeno, en un sitio en donde
nadie lo habr\'{\i}a imaginado.
 
\section{LOS PROGRAMAS DE APLICACI\'ON}
 
Los programas de aplicaci\'on justificaron la construcci\'on de los equipos,
inicialmente consistieron de aplicaciones militares y cient\'{\i}ficas
como es el caso del c\'alculo de la trayectoria de proyectiles, de
las simulaciones de efectos termodin\'amicos y del an\'alisis del
espacio a\'ereo. Con la comercializaci\'on de las computadoras, sus
aplicaciones se orientaron tambi\'en al apoyo de la administraci\'on
p\'ublica y de las grandes empresas: sistemas de n\'ominas, sistemas
contables, controles de inventarios, producci\'on de par\'ametros,
estad\'{\i}sticas y aplicaci\'on cient\'{\i}fica.
\medskip 
 
Algunos fueron de uso exclusivo, como los proyectos APOLLO y SAGE.
Este \'ultimo acoplaba un sistema de radar al computador, para controlar
el espacio a\'ereo. Inici\'o sus operaciones en 1958, despu\'es de 5 a\~nos
de trabajos con un esfuerzo equivalente a 3.6 millones de horas
hombre.
Otras aplicaciones tuvieron un empleo tambi\'en limitado,
es el caso del sistema de reservaciones para vuelos de la TWA,
con una IBM 370/168 y un sistema de teleproceso que integra m\'as
de 3000 terminales en Am\'erica y Europa, realiza dos millones de
transacciones por d\'{\i}a. El conjunto de programas que soporta esta
aplicaci\'on contiene m\'as de 1.5 millones de l\'{\i}neas en sus c\'odigos
fuente y representa un esfuerzo equivalente a 100 mil horas
hombre.
\medskip 
 
Otros, de uso m\'as com\'un, experimentaron generalizaciones a
trav\'es de la estructuraci\'on, estandarizaci\'on y parametrizaci\'on
de los datos que procesan. Es el caso de los paquetes estad\'{\i}sticos como
SPSS y BMD, de simulaci\'on como GASP y GPSS, cient\'{\i}ficos como STATPAK,
EISPACK y FUNPAK, y aquellos para la optimizaci\'on y el modelaje econ\'omico.
\medskip 
 
Con la incorporaci\'on de las nuevas computadoras a la producci\'on
industrial, se dio origen a nuevos campos, el CAD/CAM (Computer
Aided Design y Computer Aided Ma\-nufacturing). La Texas
Instruments y la Intel fueron unas de las primeras en incorporar
el apoyo de las computadoras para el dise\~no de sus circuitos
integrados. La tendencia actual se orienta en el sentido de
desarrollar las aplicaciones en forma integral con el apoyo de
un manejador de bases de datos para organizar la informaci\'on.  

\clearpage

\begin{figure}[th] 
\centering 
\begin{picture}(270,200)
\put(0,0){\epsfxsize=270pt \epsffile{foto10.eps}}
\end{picture} \\
Centro de C\'alculo de la Universidad Aut\'onoma de Puebla.
\end{figure} 

