1. Historia del software en computación aplicado a la informática educativa. 95
3.6.3. Tercera Era (1965-1970).[37][35][7][32][45][46]
A principios de la década de los sesenta casi todos los fabricantes de
computadoras disponían de dos líneas de producto distintas e incompatibles. Cada
fabricante tenía computadoras comerciales orientadas hacia los caracteres como la
1401, esta computadora era utilizada por bancos y compañías de seguros con la que
ordenaban sus datos e imprimían desde una cinta. En el otro extremo, los fabricantes
desarrollaban computadoras científicas a gran escala, orientadas hacia las palabras,
como la computadora 7094, que era utilizada para cálculos numéricos en ciencias e
ingeniería. Todo esto se realizaba entre una terrible competencia de los fabricantes.
Los fabricantes debían mantener las dos líneas para poder competir con los demás, lo
que les costaba grandes sumas de dinero aparte de que muchos clientes pedían una
máquina pequeña para empezar, lo que con la evolución del software rápidamente se
le quedaba pequeño, pues las prestaciones eran insuficientes. Estos usuarios requerían
una máquina más grande que ejecutara todos los programas que habían utilizado
hasta ahora, pero más rápido.
Sistemas operativos.
La compañía IBM introdujo al mercado una serie de máquinas de software
compatible para resolver a la vez los problemas de las computadoras comerciales y las
computadoras científicas. Esta serie de máquinas se llamaban System/360 utilizadas
tanto en la computadora 1401 como en la computadora 7094. La arquitectura y el
conjunto de instrucciones de ambas computadoras era la misma por lo que todos los
programas escritos para una se podían ejecutar en las demás. La diferencia residía en
el rendimiento, pues tenían diferente memoria máxima, velocidad de procesador,
número de dispositivos de E/S permitidos y principalmente en el precio. Con esta serie
de máquinas la compañía IBM pretendía satisfacer las necesidades de todos los
clientes. En años posteriores IBM sacó al mercado máquinas sucesoras comparables a
la 360 como las series 370, 4300, 3080 y 3090 con tecnología más moderna.
La System/360 fue la primera línea de computadoras que usaban circuitos integrados,
por lo que aventajaban tanto en el precio como en el rendimiento a las máquinas de la
segunda generación que se construían con transistores individuales. El software debía
funcionar en todos los modelos independientemente de su tamaño. Por un lado se
encontraba con sistemas pequeños en los que lo único que hacían era sustituir a la
computadora 1401 para copiar las tarjetas en cinta y, por otro, se encontraban los
sistemas grandes como el computador 7094 que fue sustituido para realizar
pronósticos de tiempo y otros trabajos de computación pesada. Este software tenía
que ser eficiente independientemente de que el computador tuviese muchos o pocos
periféricos. Este intento de abarcar todos los tipos de computadores fue su error. IBM
desarrolló un sistema operativo enorme muy complejo y con dos o tres órdenes de
Daniel Merchán López. 2013
2. 96 Historia del software en computación aplicado a la informática educativa.
magnitud mayor que el FMS. El sistema estaba compuesto por millones de líneas de
lenguaje ensamblador escrito por miles de programadores con miles de errores. Para
solucionar estos errores se creaban nuevas versiones, pero estas versiones corregían
algunos o traían mas, de modo que los errores se mantenían constantes en el tiempo.
A pesar de todos estos errores, este sistema operativo logró satisfacer a los usuarios
de la época incluyendo varias técnicas que no se utilizaban en la segunda Era del
software.
La técnica que mayor influencia tuvo en esta Era del software fue la
multiprogramación. Se impuso a otras técnicas por ser una forma de aprovechar el
tiempo en las operaciones con los periféricos. La multiprogramación (Fig.55) consiste
en mantener varios trabajos simultáneamente en memoria principal y realizar las
operaciones de E/S por acceso directo a memoria, a fin de que se pueda aprovechar el
tiempo perdido con otras técnicas.
A la hora de realizar un trabajo, si este necesita una operación de E/S, el sistema
operativo se debe encargar de
congelar el trabajo solicitante,
después iniciar la operación por
DMA (Acceso directo a memoria) y
por último pasar a realizar otro
trabajo residente en memoria. Todas
estas tareas se realizan de forma
transparente al usuario.
Fig. 55. Multiprogramación.
Con la multiprogramación se dividía la memoria en varias secciones, y en cada una de
ellas había un trabajo distinto. De este modo, mientras un trabajo esperaba que
terminara su E/S, otro trabajo distinto podía utilizar la CPU cargando la memoria
principal y así la CPU estaba constantemente ocupada. Para proteger cada trabajo, la
computadora 360 disponía de hardware especial porque al haber múltiples trabajos en
memoria siempre había perjuicios en la empresa por parte de otros empleados.
El tiempo compartido o timesharing (Fig.56) permiten que varios usuarios trabajen de
forma interactiva o conversacional con la computadora desde diferentes terminales.
En estos años los terminales eran teletipos electromecánicos. El sistema operativo
repartía el tiempo de la CPU entre los usuarios, este tiempo lo asignaba en intervalos
pequeños de forma rotativa también llamados time slice. Este tipo de sistemas hace
que cada usuario piense que la computadora solo le atiende a él. De este modo
aparecen los planificadores.
Daniel Merchán López. 2013
3. Historia del software en computación aplicado a la informática educativa. 97
Fig. 56. Ejemplo de tiempo compartido o timesharing.
Otros modos de funcionamiento son los multiprocesadores, el concepto de
independencia de dispositivo y, por primera vez, aparecen los sistemas en tiempo real.
Un multiprocesador está compuesto por varios procesadores que forman una sola
computadora de mayores prestaciones.
Como se ha señalado anteriormente hay una independencia de dispositivo, pues el
usuario ya no tiene que referenciar, en los programas que realice, la cinta magnética o
la impresora donde van a ir. Solo tiene que especificar que quiere grabar un archivo
concreto o imprimir unos resultados. El sistema operativo es el encargado de asignar el
dispositivo de E/S que esté disponible e indicar al operador que monte la cinta o el
papel correspondiente en la unidad seleccionada. En cuanto a la aparición de los
sistemas en tiempo real, son sistemas utilizados en aplicaciones militares y más
concretamente para la detención de ataques aéreos. La computadora se conecta a un
sistema externo que debe responder rápidamente las necesidades de ese sistema. Los
primeros sistemas de ese tipo estaban escritos en ensamblador y se ejecutaban sobre
la máquina desnuda, lo que hacía de estas aplicaciones sistemas muy complejos,
debemos señalar que una máquina desnuda carece de sistema operativo y en sí misma
no hace nada.
En esta Era se desarrollaron varios sistemas operativos, uno de ellos es CTSS
(Compatible Time-Sharing System) que fue desarrollado en el MIT y se considera como
el primer sistema operativo de tiempo compartido. El grupo que lo desarrolló se
llamaba Proyecto MAC ( Machine-Aided Cognition o Multiple-Access Computers) y este
sistema operativo fue utilizado primero para una IBM 709 en 1961 y después en una
IBM 7094. Comparado con otros sistemas que se desarrollaron posteriormente se
puede considerar primitivo, pero funcionaba. Era muy simple, lo que minimizaba el
tamaño del monitor. Una ventaja era que los trabajos siempre se cargaban en las
Daniel Merchán López. 2013
4. 98 Historia del software en computación aplicado a la informática educativa.
mismas posiciones de memoria, no era necesario utilizar técnicas para reubicarlas
durante la carga. Al ejecutar en una 7094, daba soporte como mucho a 32 usuarios. El
sistema se ejecutaba con una memoria de 32.000 palabras de 36 bit con un monitor
residente que consumía 5.000 de las mismas. Cuando se le asignaba el control a un
usuario interactivo, el programa del usuario y los datos eran cargados en las restantes
27.000 palabras de la memoria principal. El sistema también disponía de un reloj de
sistema, que generaba interrupciones cada 0,2 segundos y en cada una de ellas el
sistema se adueñaba del control y asignaba el procesador a otro usuario.
Otro sistema también desarrollado en el MIT es el MULTICS (Multiplexed Information
and Computing Service) por Bell Labs y General Electric. Con este sistema intentaban
proporcionar potencia de cómputo a todos los usuarios de Boston. No pensaban que
años después, computadores más potentes que su GE-645 se fueran a vender por poco
dinero. Por ello, tanto Bell Labs como General Electric abandonaron este proyecto. Sin
embargo MULTICS tuvo una gran influencia sobre los sistemas siguientes.
Un gran avance en esta Generación es la aparición y crecimiento de las
minicomputadoras como la PDP-1 en 1961. PDP-1 fue también el hardware original
donde se jugó el primer videojuego computarizado de la historia, el Spacewar de Steve
Russell. Un operario de Bell Labs que había trabajado en el proyecto de MULTICS, Ken
Thompson se propuso escribir una versión de MULTICS reducida a un usuario para la
minicomputadora PDP-1.
Este trabajo evolucionó para convertirse en el sistema operativo UNIX,
popularizándose en las dependencias del gobierno, el mundo académico y muchas
otras compañías.
Fig. 57. Slogan que nos muestra la filosofía de UNIX.
Daniel Merchán López. 2013
5. Historia del software en computación aplicado a la informática educativa. 99
La filosofía de UNIX (Fig. 57) se basa en la idea de que un sistema informático potente
y complejo debe ser simple, general y extensible, y que esto proporciona importantes
beneficios tanto para los usuarios como para los que desarrollan programas. Otra
manera de expresar los objetivos de la filosofía UNIX es resaltar que, en toda su
complejidad y tamaño, el Sistema UNIX aún refleja la idea de que "lo pequeño es
bello". Este planteamiento queda reflejado en la forma que el sistema UNIX trata a los
archivos pues ve de la misma manera los directorios, los archivos ordinarios, los
dispositivos, y los teclados y terminales de pantalla. El sistema de archivos oculta al
usuario detalles del hardware sobre el que se ejecuta. Esta simplicidad le permite
concentrarse en lo realmente necesario: los datos y la información de cada archivo.
El hecho de que la pantalla y el teclado se traten como archivos permite utilizar con
ellos los mismos programas u órdenes que con archivos almacenados de manera
ordinaria, tomando la entrada desde el terminal o visualizando la información sobre él.
Lenguajes de programación.[12][47][11]
En esta Era nace en programación lo que se denomina programación
estructurada. Edsger W. Dijskstra expone en un trabajo suyo donde señala que el ser
humano es un ser incapaz de razonar en presencia de un número excesivo de detalles
y que la claridad de un razonamiento es inversamente proporcional a la cantidad de
elementos que intervienen en él. Eso explica el gran problema que había en la época:
programas voluminosos, lenguajes con construcciones inseguras y para probar que no
había errores sólo disponían de pocos casos de prueba. La prueba de programas
consistía en seleccionar un conjunto de casos de prueba y comprobar si después de
ejecutarlos el programa funcionaba. La programación estructurada utilizaba
construcciones simples para facilitar la tarea de razonamiento. Una de ellas es go to,
que la mayoría de los lenguajes de la época incluían. Esta construcción representa un
salto incondicional a un punto arbitrario del programa, con ella se puede salir de un
bucle o saltar a un punto arbitrario de un procedimiento.
El lenguaje desarrollado para representar las ideas de la programación estructurada
es el Pascal, llamado así en honor a Blaise Pascal, autor de las primeras calculadoras
mecánicas (explicado en el apartado 2.4). El creador de este lenguaje de programación
fue Niklaus Wirth, profesor del Instituto Federal de Tecnología de Zurich. Este lenguaje
fue utilizado para iniciarse en la ciencia de la computación hasta los últimos años
ochenta. Hoy día el lenguaje dominante es el C. Fue creado para intentar solucionar
muchas deficiencias del lenguaje de la generación anterior Algol, aunque tenía su
misma simplicidad. Entre las construcciones nuevas que tenía respecto a éste se
encuentran los registros, punteros, separación entre for y while, instrucción case, etc.
Daniel Merchán López. 2013
6. 100 Historia del software en computación aplicado a la informática educativa.
El programa "Hola mundo" escrito en Pascal sería así:
Program HolaMundo;
Begin
Write('¡Hola, Mundo!');
ReadLn;
End.
Pascal era fácil de transportar debido a la estructura que tenía, además su compilador
estaba escrito en el mismo lenguaje. Solo necesitaba reescribir el intérprete de código-
P para ejecutarlo en el nuevo sistema. Era de un sólo paso, es decir recorría una sola
vez el texto del programa de izquierda a derecha.
Otra clave del éxito de Pascal es el desarrollo y difusión del P-kit, con el que se podía
tener disponible Pascal en cualquier máquina sin casi ningún tipo de esfuerzo. Esta
idea ha sido imitada por numerosos lenguajes posteriormente. El P-kit estaba
compuesto por tres elementos: el código fuente del compilador, escrito en Pascal, el
código P resultante de compilar el compilador y el intérprete de código-P, escrito en
Pascal. La tarea que debía realizar el operador de la máquina X consistía en traducir
manualmente el intérprete de código-P al lenguaje que utilizase en la máquina X.
Otro lenguaje importante de esta época es el Simula 67. Incorpora por primera vez las
ideas de lo que se conoce actualmente como la programación orientada a objetos
(POO). Este lenguaje fue desarrollado por Kristen Nyaard y Olejohan Dahl, noruegos,
en el Centro Noruego de Computación en Oslo entre 1962 y 1967. El objetivo de este
lenguaje era definir un lenguaje de propósito específico para aplicaciones de
simulación. La primera versión salió en 1964 e incluía pocos aspectos innovadores tales
como la gestión dinámica de memoria y la introducción de la idea de procesos
concurrentes aparte de proporcionar operaciones primitivas para su sincronización e
interacción. Al mejorar lenguajes específicos de simulación como SIMSCRIPR y GPSS
tuvo un gran éxito entre los usuarios americanos.
"Hola mundo" escrito en Simula 67:
Begin comment aquí comienza el programa ;
OutText("¡Hola Mundo!");
OutImage;
End of program;
Al ser un lenguaje orientado a objetos también se puede escribir utilizando una clase
que se encarga de escribir el saludo:
Daniel Merchán López. 2013
7. Historia del software en computación aplicado a la informática educativa. 101
Begin
Class Saludos;
Begin
OutText("¡Hola Mundo!");
OutImage;
End of class saludos;
REF(Saludos) objeto;
objeto :- New Saludos;
End of module program;
La primera innovación que se introducida fue la distinción entre una clase (texto
suministrado por el programador) de entidades y los objetos (ejemplares de la misma
creados y destruidos dinámicamente a lo largo de una ejecución completa) que se
derivan de ella. Esta innovación escapaba de la estructura de bloques de ALGOL 60,
pues a diferencia de las reglas que rigen la estructura de bloques, un objeto ha de
sobrevivir al procedimiento que lo crea y necesitaba un tipo de datos "referencia a un
objeto" que permitiera que una misma variable designara objetos en distintos
momentos. Este tipo, llamado ref, era un puntero.
La otra gran innovación es el concepto de subclase. El objetivo era ahorrar
declaraciones cuando el comportamiento de una entidad era muy parecido al de la
otra. La idea esencial, en realidad es muy simple. Si una clase B ha de repetir
declaraciones de variables y de procedimientos que ya están en otra clase A, se indica
que la clase B es una subclase de la clase A y se definen en B tan sólo las variables y los
procedimientos que son específicos de B. Posteriormente esto es denominado por los
propios autores concatenación de clases, aunque el término original es el de prefijo.
Actualmente se le denomina herencia y decimos que la clase B hereda de la clase A.
Bases de datos.[44][48]
El empleo generalizado de los discos duros a finales de los años 60 modificó el
procesamiento de los datos. Los discos duros permitían el acceso directo a los datos.
La ubicación de los datos en el disco no era importante, ya que se podía tener acceso a
cualquier posición del disco en sólo unas decenas de milisegundos. El acceso directo a
los datos era mucho más rápido que el acceso secuencial utilizado hasta la fecha, pues
no tenían que recorrer todo el disco para acceder a un dato. Gracias a la utilización de
los discos se pudieron crear las bases de datos en red y las bases de datos jerárquicas,
permitiendo que las estructuras de datos como las listas y los árboles pudieran
almacenarse en disco. Los programadores podían crear y manipular estas estructuras
de datos.
Daniel Merchán López. 2013
8. 102 Historia del software en computación aplicado a la informática educativa.
El sistema de bases de datos en red fue desarrollado por Charles Bachman que
formaba parte de la CODASYL. La CODASYL (Conference on Data Systems Languages)
era un consorcio de industrias informáticas que tenían como objetivo la regularización
de un lenguaje de programación estándar que pudiera ser utilizado en multitud de
ordenadores. El modelo en red de los datos permitió la creación de un estándar en los
sistemas de bases de datos, gracias a la creación de nuevos lenguajes de sistemas de
información.
Los miembros de la CODASYL pertenecían a industrias e instituciones
gubernamentales relacionadas con el proceso de datos, cuya principal meta era
promover un análisis, diseño e implementación de los sistemas de datos más efectivos;
y aunque trabajaron en varios lenguajes de programación como COBOL, nunca
llegaron a establecer un estándar fijo, proceso que posteriormente llevó a cabo ANSI.
La crisis del Software.[12][26]
La crisis del software es un término informático acuñado en 1968, en la primera
conferencia organizada por la OTAN sobre desarrollo de software, de la cual nació
formalmente la rama de la ingeniería de software. El término se adjudica a F. L. Bauer,
aunque previamente había sido utilizado por Edsger Dijkstra en su obra The Humble
Programmer.
La crisis se fundamentó básicamente en el tiempo de realización del software, pues
no se obtenían los resultados deseados, costaba mucho hacerlo y no ofrecía mucha
flexibilidad. Se puede decir que se produce un establecimiento del software. El
software se desarrollaba para tener una amplia distribución en un mercado
multidisciplinario. Los programas se distribuían para computadoras grandes y para
minicomputadoras, a cientos e incluso a miles de usuarios. Los patronos de la
industria, del gobierno y de la universidad tenían una gran rivalidad para desarrollar el
mejor paquete de software y ganar así mucho dinero. Pretendían encontrar un
lenguaje de programación que sirviera para todo. Éste debería disponer de una buena
notación matemática para la expresión de cálculos numéricos, de suficientes
facilidades para la descripción de datos, una entrada/salida versátil y eficiente, y
mecanismos para la creación de estructuras dinámicas semejantes a las de LISP.
También debería tener algunas características de los lenguajes especializados, tales
como el tratamiento de cadenas de caracteres o facilidades para la multiprogramación.
Conforme crecía el número de sistemas informáticos, comenzaron a extenderse las
bibliotecas de software de computadora. Las casas desarrollaban proyectos en los que
se producían programas de decenas de miles de sentencias fuente. Los productos de
software comprados al exterior incorporaban cientos de miles de nuevas sentencias.
Una nube negra apareció en el horizonte. Todos esos programas, todas esas sentencias
fuente tenían que ser corregidos cuando se detectaban fallos, modificados cuando
Daniel Merchán López. 2013
9. Historia del software en computación aplicado a la informática educativa. 103
cambiaban los requisitos de los usuarios o adaptados a nuevos dispositivos hardware
que se hubieran adquirido. Estas actividades se llamaron colectivamente
mantenimiento del software. El esfuerzo gastado en el mantenimiento del software
comenzó a absorber recursos en una medida alarmante.
Para salir de la crisis algunos investigadores como C. A. R. Hoare y N. Wirth, se
apartaron del WG 2.1 ocupado en la definición de ALGOL 68 y crearon un nuevo grupo,
el WG 2.3, sobre metodología de la programación. Para obtener una metodología
adecuada para la concepción de programas se impuso un periodo de reflexión antes de
hacerlos. El problema era que las metodologías estaban aún por hacer. Para salir de la
crisis necesitaban lenguajes más simples cuyas construcciones fueran completamente
comprendidas, y sistemas de tipos más exigentes que eliminaran la mayor cantidad de
errores posibles durante la compilación.
Daniel Merchán López. 2013