Dra. Adelaide Bianchini VIU
Expertos VIU

Expertas VIU | Informática: la ciencia ‘escondida’ que da forma a nuestro día a día

 

Desde 1983, en diciembre se celebra el Día Mundial de la Informática, una fecha creada para visibilizar la importancia que esta disciplina científica tiene en todos los aspectos de nuestra vida. Aunque prácticamente todos estamos familiarizados con el término informática, es probable que la mayor parte de nosotros no tengamos totalmente claro todo lo que abarca esta disciplina, ni la profunda influencia que tiene en nuestra forma de vida cotidiana.

Por ello, hemos pedido a la experta de VIU, Dra. Adelaide Bianchini que nos aclare algunos conceptos fundamentales de la historia y la importancia de la Informática. La Dra. Bianchini es doctora en Ingeniería, Máster en Ciencias de la Computación, Ingeniera en Computación y DT del Máster Oficial en Ingeniería Informática de VIU. Además de una larga y destacada carrera docente, ha desarrollado una intensa actividad investigadora, especializándose, entre otras líneas de investigación, en Ingeniería de Software e Ingeniería Web.

El Día Mundial de la Informática se celebra el 9 de diciembre en honor a Grace Hopper ¿Nos puedes contar un poco sobre ella y COBOL, el lenguaje de programación que creó?

Grace Murray Hopper obtuvo su Máster en 1930 y el doctorado en 1934 (ambos en matemáticas) en la Universidad de Yale.

Hopper se unió a la Reserva Naval de los EE. UU. (Reserva de Mujeres) en diciembre de 1943 y fue asignada al Proyecto de Computación de la Oficina de Barcos en la Universidad de Harvard.

Para conocer el aporte de Grace Hopper a la informática, habría que remontarse a la historia misma de los ordenadores.

La Dra. Hopper formó parte del equipo de desarrollo del ordenador Mark I (de IBM), en la Universidad de Harvard (1944), y quizás la primera programadora de ese ordenador. Ella fue responsable de programar el Mark I, con instrucciones de la máquina, en cinta perforada.

Finalizada la guerra, se dedicó a la investigación en Harvard, y participó en el diseño y desarrollo de los ordenadores Mark II y Mark III.

Trabajando en el Mark II, surgió un problema que escapaba de la lógica matemática y de los aspectos técnicos de ese ordenador. O al menos así lo pensaron los que trabajaban ese proyecto.

Encontraron un insecto (polilla) que generaba interferencia entre los miles de relés que tenía el Mark II. Fue justamente Grace Hopper que se refirió a ese problema (tal y como lo que conocemos hoy), y acuñó el término bug (insecto en inglés), y en consecuencia el término “debugging” refiriéndose a la manera de encontrar errores en programas.

En 1949, la Dra. Hopper comenzó a trabajar en el desarrollo del computador UNIVAC I (Universal Automatic Computer), creado por la empresa Eckert-Mauhly Computer Corporation.

Fue una visionaria al pretender que no sólo los especialistas en informática podían programar. El ordenador debía ser un instrumento que pudiese resolver distintos tipos de problemas y en varios contextos. Y decidió dedicarse a la creación de un lenguaje de programación con instrucciones basadas en palabras/frases en lenguaje natural (para ellos en idioma inglés).

Sin embargo, la empresa Eckert-Mauhly Computer Corporation decidió que no era necesario hacer esfuerzos en esa dirección.

En 1952, fue la programadora líder del proyecto para la creación del primer enlazador-cargador (cuasi un compilador) totalmente operativo, específicamente para un lenguaje de programación de la UNIVAC I, y lo llamaron A-0.

En 1953, diseñó y desarrolló el lenguaje de programación FLOW-MATIC originalmente conocido como B-0 (Business Language versión 0), fue el primer lenguaje de procesamiento de datos que utilizó instrucciones basadas en el idioma inglés.

Esta “experiencia” dio el impulso necesario para que la Dra. Hooper, en 1959, diseñara el lenguaje de programación COBOL (COmmon Business Oriented Language) que se convertiría en el primer lenguaje de programación estandarizado para negocios, en un esfuerzo mancomunado resultante de la Conferencia en Lenguajes de Sistemas de Datos (CODASYL, por sus siglas en inglés), en la cual participó la Dra. Hooper.

En los años 70s, desarrolló la implementación de estándares para probar sistemas y componentes informáticos, en especial para los lenguajes de programación como FORTRAN y COBOL que eran los más utilizados.

En los 70’ COBOL se había convertido en el lenguaje de programación más utilizado en el mundo.

Yo “conocí” y aprendí COBOL durante mi pregrado (hacia el finales del año 1976) y trabajé con él cuando realicé prácticas externas en una empresa financiera.

Grace Hopper y UNIVAC

Grace Hopper con UNIVAC

¿Por qué se sigue utilizando después de más de 50 años de existencia?

Es un lenguaje de programación simple y fiable. Capaz de gestionar y procesar una cantidad importante de datos y realizar tareas de manera eficiente.

Siendo un lenguaje de programación estandarizado para negocios, el conjunto de instrucciones estaba basado en el uso de un inglés simple y comprensible. Además, proveía una estructura bien definida para la caracterización de los datos y archivos de datos.

COBOL se usaba, y se aún se utiliza, para la gestión de datos en entornos empresariales: su "poder expresivo" estaba pensado para aquellos que venían del mundo de la industria y no de la academia.

Es un lenguaje pragmático, utilizado para escribir 5 mil millones de nuevas líneas de código al año (en ámbito bancario, compañías de seguros, institutos nacionales de estadística, medianas y grandes empresas, y multinacionales) (Dini, 2022).

La programación en COBOL permitía y sigue permitiendo una alta velocidad de entrada/salida y los números (cifras) son tratados de una forma más cercana a la representación aritmética humana: se suele utilizar la coma fija o números decimales en lugar de la coma flotante. Esto tuvo gran aceptación sobre todo en el sector empresarial.

Se estima que el 95% de las operaciones de los cajeros automáticos se realizan mediante software escrito en COBOL y que en total hay 200 mil millones de líneas de código que gestionan 30 mil millones de transacciones cada día. (Dini, 2022).  

Otros números para entender el impacto de este lenguaje son (Omnia Group, 2020):

  • Alrededor del 43% de los sistemas bancarios están escritos en COBOL,
  • Alrededor del 80% de las transacciones personales se realizan utilizando el lenguaje COBOL;
  • Aproximadamente el 95 % de las operaciones de los cajeros automáticos se basan en el código escrito en COBOL.

¿Nos puedes explicar en términos sencillos qué es un lenguaje de programación? ¿Cuál es la importancia de este tipo de tecnología?

Un lenguaje de programación es “casi lo mismo” que una lengua escrita y hablada (el castellano, por ejemplo). No debemos confundir lengua con lenguaje. Por un lado, el lenguaje humano es una expresión de tipo multimedial (más que palabras) y multicanal (usa todos los sentidos).  Por otro lado, la lengua es el lenguaje escrito y hablado, por ejemplo, el castellano.

Un lenguaje de programación es el “objeto” (software) mediador entre lo que desea el programador y lo que debe entender y hacer el ordenador.

El castellano, la lengua es el objeto mediador para comunicar entre los individuos que entienden el idioma o lengua castellana.

Un lenguaje de programación cumple con los siguientes aspectos, al igual que una lengua (establecida y reconocida):

  1. Tiene un alfabeto, que contiene los símbolos necesarios para poder definir un objeto (por ejemplo, el nombre de una variable o de una constante en un programa, puede ser una secuencia de caracteres). Haciendo una comparación en el castellano, podemos pensar en vocales, letras, símbolos de puntuación, símbolo de cada número, símbolos matemáticos, etc.
  2. Tiene definido un léxico, es decir todas y cada una de los símbolos necesarios para escribir una instrucción en ese lenguaje (usualmente cada uno de estos símbolos se les denota como token). Siguiendo con la comparación, en castellano tenemos palabras, secuencia de números, artículos, adjetivos, adverbios, verbos, etc. La DRAE nos indica cuáles son estos símbolos.
  3. Tiene definido una sintaxis (reglas sintácticas), de manera que sepamos escribir correctamente una frase u oración con los tokens pertenecientes al léxico, y la forma y estructura de aparición de ellos en una instrucción. En castellano está muy bien especificada la formación de una frase u oración (algún sujeto y un adjetivo, o una oración con sujeto y predicado, etc.), aunque podemos equivocarnos, e igual nos entendemos. No debemos equivocarnos en la construcción de una instrucción en un lenguaje de programación.
  4. Tiene definido una semántica, de manera que se pueda interpretar de forma unívoca el significado de cada término (variable, constante, nombre de instrucción, cualquier token) dentro de una instrucción.

En castellano, si al hablar o escribir cometemos errores ortográficos, igualmente podemos entender el mensaje de una frase u oración, y logramos comunicarnos.

En un lenguaje de programación, sin embargo, todo es más estricto. En una instrucción no se puede cometer errores “ortográficos” en el uso de los tokens, y se debe respetar la sintaxis definida y su semántica (qué es y para qué sirve esa cadena de caracteres que representa una instrucción).

Todo debe ser preciso.

Volviendo a la Dra. Hooper, cuando ella decide desarrollar un compilador sencillamente logra un instrumento para llevar lo “escrito” por un programador (una secuencia instrucciones) y lo “traduce” a algo que es entendible por un ordenador (secuencia de 1s y 0s).

Dra. Adelaide Bianchini VIU

 

¿Por qué son importante los lenguajes de programación?

Son los instrumentos que permiten a un programador generar un programa (originado por un algoritmo) de manera que el ordenador pueda ejecutarlo y cumplir su objetivo.

De no ser así estaríamos programando haciendo uso de secuencias de 1s y 0s, que es lo que efectivamente “entiende” el ordenador. Hacerlo con 1s y 0s sería sumamente laborioso, extremadamente complejo y seguramente con alta incidencia de errores.

Como anécdota, mi trabajo de fin de título fue una combinación de programas en lenguaje de bajo nivel (para el micro procesador Z-80 de Zilog), y las instrucciones eran grabadas en una EPROM como cadenas de 1s y 0s.

Luego, en paralelo desarrollamos un programa a alto nivel (con el lenguaje C) que servía de interpretador de lo que estaba grabado en esa EPROM. Es decir, se llevaba cada secuencia de 1s y 0s (instrucciones de bajo nivel) a instrucciones en un programa de alto nivel.

Ahora bien, hay unos asuntos importantes a recalcar (Dini,2022):

  1. “Lo primero es entender para qué sirve un determinado lenguaje.

Diferentes lenguajes hacen cosas diferentes, incluso si ha habido varios intentos a lo largo del tiempo para crear un lenguaje "universal" útil para todos los usos: desde el histórico PL/I de IBM, hasta el ambicioso Ada de DARPA. Pero todos fallaron".

“Para qué sirve un lenguaje” significa preguntarse qué poder expresivo tiene, es decir, su comodidad y predisposición para hacer una determinada cosa mejor que otra.”

  1. El segundo aspecto está relacionado con el nivel de abstracción en el que surge el lenguaje: algunos son de bajo nivel y otros son de alto nivel.

Los de bajo nivel son más eficientes, porque se pueden hacer “más cosas” a un nivel de detalle que puede llegar a manipular una cadena de bits. Pero se requiere saber y entender muy bien cómo utilizarlos, son muy extensos en código.

En cambio, a medida que nos acercamos a lenguajes más comprensibles (más cercanos al lenguaje natural), se vuelve más fácil escribir el código, pero más difícil controlarlo.

  1. Otro aspecto se refiere a la tecnología que se utiliza para su “traducción” a lenguaje de máquina: algunos lenguajes son interpretados y otros son compilados. También hay tecnologías mixtas que combinan las dos anteriores. Existen también aquellos que se basan una máquina virtual, por ejemplo, el Java Virtual.

En la misma línea, aunque es un término muy utilizado a nivel popular, rara vez se le utiliza en su sentido completo ¿Nos puedes explicar en qué consiste la informática como disciplina científica?

La naturaleza científica de la Informática se evidencia por el uso de teorías, principios y fundamentos de ciencias básicas (las matemáticas y la lógica), y las ciencias naturales (la biología y la física).

Es una disciplina que para el desarrollo de soluciones y servicios orientados a usuarios, se apoya, investiga y utiliza resultados de ciencias sociales como la antropología (conocer la evolución del ser humano), la psicología (conocer cómo se procesa la información en el ser humano), la cibernética (estudiar el desarrollo artificial de imitación en el funcionamiento de un ser vivo), la lingüística (que estudia el lenguaje humano y las lenguas), la ergonomía (también llamada factores humanos, y es la ciencia que se ocupa de investigar la interacción sana, eficaz y productiva entre los seres humanos y sistemas de toda índole).

Adicionalmente desarrolla soluciones informáticas para distintos ámbitos y contextos de uso: desde al ámbito de sistemas empresariales genéricos como en el diseño y desarrollos de dispositivos y software para diagnóstico de enfermedades.

En fin, desarrolla y utiliza métodos sistemáticos de una o varias ramas científicas, aplica técnicas y procesos para el tratamiento de la información para llegar a una solución factible, desarrolla nuevas tecnologías, y participa en el establecimiento de estándares de calidad en el entorno de tecnologías de información.

Todo esto hace que la informática sea considerada una disciplina científica.

¿Crees que somos conscientes de la profundidad del impacto que la informática, como disciplina científica, ha tenido y sigue teniendo sobre nuestras sociedades y forma de vivir? ¿Nos puedes dar algunos ejemplos de cómo influyen en nuestras vidas y cómo cambiarían éstas sin su existencia?

Yo y los (informáticos) de mi generación somos totalmente conscientes del impacto que ha tenido y tiene la informática en nuestras vidas.

Hemos tenido la suerte de mirar de cerca su evolución en ámbitos muy disímiles, lentamente, poco a poco. Una evolución “frenada” por la falta de tecnología subyacente a pesar de las ideas que muchos habían tenido.

Los cambios se verificaban lentamente. No había mucha oferta de servicios, plataformas y dispositivos. La informática estaba iniciando a ser una disciplina indispensable en ámbitos específico. Por lo tanto, muy pocos “usuarios” tenían acceso a esos servicios. Todo era especializado para resolver problemas específicos. Poco a poco aparecieron productos de uso más general como los sistemas de nóminas y contabilidad, banca y finanzas. Los usuarios debían ser entrenados en cada contexto y dominio. No existía el usuario común.

Hubo un cambio de paradigma: hay que brindar servicios software a usuarios comunes, generales y no necesariamente especializado.

La aparición del usuario común complicó las cosas. El gran reto para los informáticos fue el hecho de desarrollar productos y servicios para personas con capacidades y necesidades desconocidas. ¿Cómo diseñas para todo tipo de usuario? ¿Tienes que estudiar informática para poder usar un software?

No estoy muy segura que las nuevas generaciones de usuarios (numerosamente comunes y no especializados) estén conscientes de los grandes pasos logrados. Y eso se debe a la velocidad en que se llevan a cabo los cambios tecnológicos, Todo ocurre en tiempos de nanosegundos…. No es sencillo digerirlos y madurarlos. Se aceptan y se empieza a usar esas tecnologías, sin cuestionar.

Un ejemplo, para explicar:

Mark D. Weiser, en 1988, había pensado y “descrito” la computación ubicua. Llamémosla tecnología ubicua.

Muchos de nosotros (informáticos) entendíamos el concepto, pero en las discusiones, siempre nos faltaba un eslabón en la cadena de argumentos, hasta que se hizo real Internet más otros dispositivos “especiales”.

No fue un juego de niños, hubo mucha investigación, prototipado, pruebas, “sangre, sudor y lágrimas”.

Desde finales del siglo XX la gran mayoría de usuarios “jóvenes” no han tenido la necesidad de madurar el proceso (aprender), conocer la evolución de la informática y (entender) las tecnologías subyacentes.

No fue necesario, aparecían nuevos “electrodomésticos” con tecnología (informática y más) que era ubicua, disponible en todas partes, a cualquier hora y con el dispositivo que quieras. Ni siquiera debían leer un manual para utilizarlos.

Un ejemplo de la influencia de la tecnología informática actual, en el día a día de muchos usuarios: cuando se “cayó” la plataforma Whatsapp, luego le siguió “Facebook”, y luego Instagram y Google …

Los mercados financieros, la banca, empresas de e-commerce e e-booking, portales de investigación, todos “desconectados”.  Parecía que el planeta había dejado de dar vueltas ….

Ese fue un ejemplo sencillo, si bien singular pero muy dramático para las empresas del sector tecnológico.

El impacto de las tecnologías en nuestras vidas ha hecho que la inmediatez en los servicios no parezca un problema a resolver (pero sí lo es); el alto nivel de  disponibilidad (24/7,  es decir, lo quiero siempre); la portabilidad de los sistemas sin importar la tecnologías de despliegue (no estar atado a una plataforma específica); la aparición de “asistentes” (Siri, Alexa, Google Nest, entre otros); el control automático de electrodomésticos (la domótica); la necesidad de sensores que mantienen un vehículo en la ruta correcta; un guía turístico (con tecnología de realidad aumentada) que nos brinda información útil en un museo, y así mil cosas más…. En todos estos asuntos está la tecnología informática,

Nos hemos acostumbrado a este paradigma, en el cual cualquier cosa lo podemos obtener con un clic, o con el sonido “okey” y habrá siempre alguna aplicación que estará lista para brindarnos el servicio que necesitamos.

Uno de los campos de la informática que más expectación (y temores) despierta actualmente es la Inteligencia Artificial ¿Debemos preocuparnos porque reemplace a los seres humanos en diversos campos en el corto o mediano plazo? ¿Es factible que alcance la singularidad tecnológica?

Cuando me hablan de estos asuntos, recuerdo a HAL 9000 (Heuristically Programmed Algorithmic Computer) del libro 2001 - A Space Odyssey, escrito por Arthur C. Clarke, y llevado al cine por Stanley Kubrick.

Era la computadora que controlaba todas las funciones vitales de la nave Discovery que se dirigía a otra galaxia. HAL estaba programada para no recibir respuestas que generen dudas, pese a ser una computadora heurística, lo cual la hace muy semejante al pensamiento humano; su programación consistía "fundamentalmente" en cumplir sin objeciones los planes trazados, razón por la cual elimina a los que dudan o son escépticos, considerándolos "mecanismos fallidos" (Stella, 2021). Las cosas se complican y HAL no es de ayuda, sino que se convierte un gran estorbo, y no sólo, es muy peligroso.

La IA está presente en muchos aspectos de tecnología y más. ¿Nos va a reemplazar?

Máquinas que podrán ir mejorando, por sí solas, ad infinitum….

Máquinas que pueden crear otras máquinas mejoradas en tiempo exponencial ….

No tengo idea.

Con mi poco conocimiento en el área IA, espero que siempre haya algún humano que tenga la posibilidad de hacer ON/OFF en caso de necesidad…, y evitar la “concepción” de nuevas y mejores máquinas a partir de máquinas madres, sin control de humanos.

 

Referencias
Emilio Vivallo VIU
Emilio Vivallo-Ehijo

Equipo de Comunicación de la Universidad Internacional de Valencia.