Programar Juegos Arcade
con Python y PygameChapter 2: ¿Qué es un Lenguaje de Programación?
¿Qué hace un lenguaje de programación? ¿Por qué lo tienen los ordenadores? ¿Por qué hay tantos lenguajes de programación distintos?
De la misma forma que para conducir un coche no hay que entender cómo funciona un motor, tampoco es necesario conocer la respuesta a estas preguntas para hacer programación básica. Sin embargo, para progresar a un nivel avanzado, sí que es necesario entender cómo funciona un ordenador. Lo siguiente es una breve introducción.
2.1 Pequeña Historia de la Programación
Los ordenadores son electrónica y son digitales. Para un ordenador todo se basa en tener, o no tener, voltaje a través de un cable. No tener voltaje significa un cero, y algo de voltaje significa un uno. Los ordenadores no pueden contar más alto que eso sin tener que combinar múltiples unos y ceros.
Al principio se usaban interruptores para simular unos o ceros en la memoria del ordenador. La Figura 2.1, cortesía de Wikimedia Commons, muestra un Altair 8800. Los interruptores del panel frontal eran usados para cargar el programa. Las luces mostraban la salida. No existía un monitor.
Cada conjunto de interruptores on/off representa un número. Cada número podía representar datos o una instrucción para que la ejecutase el ordenador. Este sistema de usar unos y ceros para representar números es llamado sistema numérico binario. Este tipo de lenguaje de programación es llamado 1GL o lenguaje de programación de primera generación. 1Gl es lo mismo que decir lenguaje máquina donde los números representan los comandos y los datos para el programa.
Los números binarios son representados normalmente en grupos de cuatro. Por ejemplo:
1010 0010 0011
Tanto los datos, como las instrucciones del ordenador, se guardan en binario. El lenguaje máquina son los números binarios representando instrucciones que interpreta el ordenador. Sin embargo, no todo el código binario es lenguaje máquina. Los datos, como los documentos, bases de datos o cifras financieras, son también guardados en el ordenador en código binario. Por supuesto, estos datos no son para ser ejecutados por el ordenador.
Una mejora en la introducción de programas, a través de interruptores, fue el código hexadecimal. Los números decimales usados por la mayoría de la gente son dígitos del 0 al 9. El sistema hexadecimal usa los números del 0 al 9 y las letras de la A a la F para representar conjuntos de cuatro interruptores, o los números del 0 al 15. Observa en la siguiente tabla como se relacionan los números binarios, decimales y hexadecimales
Binario | Decimal | Hexadecimal |
0 | 0 | 0 |
1 | 1 | 1 |
10 | 2 | 2 |
11 | 3 | 3 |
100 | 4 | 4 |
101 | 5 | 5 |
110 | 6 | 6 |
111 | 7 | 7 |
1000 | 8 | 8 |
1001 | 9 | 9 |
1010 | 10 | A |
1011 | 11 | B |
1100 | 12 | C |
1101 | 13 | D |
1110 | 14 | E |
1111 | 15 | F |
1 0000 | 16 | 10 |
1 0001 | 17 | 11 |
Para facilitar la creación de programas, los ordenadores posteriores permitieron a los usuarios introducir programas usando lenguaje ensamblador. Cada comando usaba un mnemotécnico. Luego, un programa llamado compilador lo sustituía por los números que representaban esos comandos. Este tipo de lenguaje se llama lenguaje 2GL o lenguaje de segunda generación.
La Figura 2.2 muestra parte de un programa en lenguaje ensamblador (cortesía de la Wikimedia Commons.)
A pesar de que esto fue una mejora, todavía no era nada fácil programar. La siguiente generación de lenguajes permitiría abstracciones de alto nivel. Los primeros lenguajes de la tercera generación (COBOL, FORTRAN and LISP) eran un poco más fáciles de entender y programar.
Los lenguajes de segunda y tercera generación usaban un programa llamado compilador. Un compilador toma el programa escrito por el usuario (llamado código fuente) y lo convierte en código máquina. Entonces, el programador ejecuta el código máquina. No se ejecuta el código fuente original.
Si un programa está compuesto por varias piezas de código fuente, éstas pueden unirse en un solo programa utilizando un linker. Para generar el programa final, el linker es ejecutado sobre el código máquina expulsado por el compilador. Este programa final es lo que el usuario ejecuta, por lo que el código fuente original ya no es necesario.
Una desventaja de compilar a lenguaje máquina, es que el programa solo funcionará en ese tipo particular de máquina. Los programas compilados para ordenadores Windows no funcionan en ordenadores Apple Macintosh o Linux.
Debido a que las fases de compilación y unión pueden ser difíciles para los programadores noveles, algunos lenguajes se ejecutan usando intérpretes. Estos programas ven el código fuente y lo interpretan como instrucciones de lenguaje máquina al vuelo. También permiten que los mismos programas se ejecuten en ordenadores Windows, Mac y Unix, con un intérprete disponible para cada plataforma.
La desventaja de usar intérpretes es que es más lento operar a través de ellos, en lugar de hacerlo en el lenguaje máquina nativo.
Python es un ejemplo de lenguaje interpretado. Es más fácil desarrollar en Python que en C, pero Python funciona más lento y debe tener un intérprete de Python para funcionar.
Los lenguajes como Java usan un sistema donde los programas son compilados a lenguaje máquina que posteriormente correrán sobre una Máquina Virtual de Java (JVM), en lugar de hacerlo sobre la máquina real. Otro lenguaje popular que hace esto es C#, un lenguaje del tipo: Infraestructura de Lenguaje Común (CLI) que se ejecuta sobre una máquina del tipo: Sistema de Ejecución Virtual(VES). Un tratamiento completo de todos ellos está más allá del ámbito de este libro. De todas formas, te animo a leer más sobre el asunto.
Hoy en día existen muchos lenguajes distintos. Debido a que los ordenadores realizan diferentes tipos de tareas, se han desarrollado lenguajes especializados en distintos ámbitos. Lenguajes como C están bien para sistemas operativos y pequeños ordenadores embebidos. Otros lenguajes como PHP están especializados en páginas web. Python es un lenguaje de propósito general que esta especializado en ser fácil de usar.
La empresa Tiobe realiza un seguimiento sobre la popularidad de varios lenguajes de programación en un índice que se actualiza mensualmente. Es recomendable echar un vistazo aquí y a los boletines de ofertas laborales como DICE, para estar al día de los lenguajes que demanda la industria.
Por suerte, casi todos los lenguajes comparten los mismos elementos comunes, y una vez que has aprendido uno de ellos, los mismos conceptos se aplican al resto.
Si quieres ver una divertida historia de la informática, te recomiendo: Triumph of the Nerds (El triunfo de los Nerds) de Robert X Cringely, una serie en tres capítulos sobre los inicios de la informática. La película es lo bastante entretenida como para que tu familia al completo la disfrute.(La puedes encontrar subtitulada en español en YouTube) También te recomiendo el libro Accidental Empires por si te gusta más la lectura que la tele.
¿Qué ocurre después de esos vídeos? ¡Ni si quiera tratan del nacimiento de Internet! Para eso puedes mirar la serie de vídeos Nerds 2.0.1 también de Robert X Cringely.
2.2 Repaso
2.2.1 Test
2.2.2 Ejercicios
Haz click para ir a los Ejercicios.
2.2.3 Taller
You are not logged in. Log in here and track your progress.
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai Lin