I.

El software y sus orígenes

El software es un invento extraordinario que utilizamos cada vez que usamos un ordenador, un smartphone, una consola de videojuegos y muchos otros dispositivos electrónicos. Algunos tipos de software son bastante sencillos y están diseñados para hacer un par de cosas concretas, mientras que otros son muy complejos y gestionan inmensas cantidades de datos.

¿Por qué existe el software?

La respuesta resumida es que los ordenadores no entienden nuestro idioma, pero los programadores quieren que podamos usarlos con facilidad. Está claro que las personas no hablan la misma lengua que los ordenadores. Por eso existe el software: es la interfaz entre el hardware y el usuario que nos ayuda a realizar tareas con los ordenadores. Profundicemos un poco más en esto.

¿Qué idioma entienden los ordenadores?

Los ordenadores solo entienden la información binaria, representada principalmente en forma de señales eléctricas que están encendidas (tensión alta) o apagadas (tensión baja), y necesitan ver todo representado como una secuencia de unos y ceros (ON y OFF). Generalmente, el 1 lógico representa un voltaje superior, como 5 voltios, que se suele denominar «valor alto», mientras que el 0 lógico representa un voltaje inferior, como 0 voltios o tierra, y se le suele llamar «valor bajo». Esta secuencia (serie) de unos y ceros se conoce como código binario o formato binario.

Como los ordenadores no entienden nuestra lengua ni las fotos, los vídeos, los textos, los programas o la música de la misma manera que nosotros, todos los datos tienen que convertirse en código binario para que el ordenador los procese.

En los ordenadores modernos, tenemos sistemas de codificación que actúan como capas de traducción y convierten lo que introducimos en lenguaje de máquina, o código máquina. Un ejemplo muy básico: cuando escribes la letra A en un teclado, el sistema de codificación de caracteres UTF-8 la convierte en código máquina como «01000001».

Un ejemplo práctico de traducción de código binario
Un ejemplo práctico de traducción de código binario

Ahora, imagina cuántos unos y ceros necesitaríamos para representar todo un libro en código binario. Imagina cuántos unos y ceros harían falta para representar una foto o una canción en ese formato. Como puedes imaginar, representar cada imagen, texto, programa o canción en código binario, en esa serie de unos y ceros, puede ser un proceso bastante complejo y tedioso. Los ordenadores modernos lo hacen automáticamente y es un procedimiento invisible para la mayoría de los usuarios.

Intenta imaginar cómo era este proceso en el pasado, cuando los primeros programadores tenían que expresar todo en código binario de forma manual.

¿Cómo contribuyen los programadores a la evolución del software?

Sea cual sea el lenguaje o el tipo de lenguaje que utilicemos para escribir nuestros programas, si queremos que pueda ejecutarlos el ordenador, tienen que estar en código máquina.

Cuando se crearon los primeros ordenadores «modernos» con alimentación eléctrica, los programadores se dieron cuenta de que la limitada velocidad y capacidad de memoria de esos aparatos era un límite para su imaginación, y también un límite para la manera en que podían utilizarlos los usuarios que no eran expertos.

Esto los obligó a escribir «traductores de lenguajes» que facilitaran su tarea de escribir en código máquina. Hay tres categorías principales de traductores de lenguajes que se usan en nuestros ordenadores: ensambladores, compiladores e intérpretes. Los estudiaremos en la siguiente sección.

Lo que los programadores utilizan para crear software son los lenguajes de programación; hay muchos y han ido evolucionando a lo largo de los años. Algunas publicaciones identifican cinco generaciones de lenguajes de programación.

Los lenguajes de programación se clasifican en dos niveles: bajo y alto. Las dos primeras generaciones forman parte de los lenguajes de bajo nivel, y las tres siguientes, de los de alto nivel.

Ahora ya conocemos los fundamentos para la siguiente sección, en la que aprenderemos sobre los lenguajes modernos de bajo y alto nivel y la programación.

Next section
II. Los lenguajes de programación y la creación de software