¿Qué es un programa de computadora?

La primera pregunta que generalmente nos hacemos es ¿Qué es realmente un programa?, la definición estricta es “Conjunto de instrucciones que le dicen a una computadora que hacer”, para comprenderlo mejor podemos imaginarnos a un programa como una receta, la cual es una serie de pasos a seguir para cocinar algo y el programa le da una serie de pasos a la computadora para que realice una tarea.

La función principal de un programa es la de tomar información, trabajar con ella y producir un resultado útil. Imaginémonos que creamos un programa que nos calcula cuanto vamos gastando en el supermercado, para resolver este problema, necesitamos agregarle los datos de los precios de cada producto, luego las cantidades, el programa debe calcular y multiplicar el precio de los productos por la cantidad y luego sumarlos en un total.

También puedes automatizar tareas, en un programa que te recuerda las citas. Este debería tomar la información de los eventos (fecha, hora y la descripción) y luego a la hora acordada enviarte una notificación.

La manipulación de datos es la forma en que los programas hacen su magia para lograr sus objetivos.

Lenguajes de programación

Imagina que quieres darle instrucciones muy específicas a un robot para que prepare tu desayuno. No puedes simplemente decirle “Robot, hazme el desayuno”. Necesitas decirle exactamente qué hacer: “Primero, ve a la nevera. Luego, saca dos huevos. Después, pon la sartén en la estufa…”.

Los lenguajes de programación son como ese conjunto de instrucciones detalladas que le damos a la computadora para que haga lo que queremos. Las computadoras son muy inteligentes, pero solo entienden un lenguaje muy básico, lleno de ceros y unos. Para que nosotros, los humanos, podamos comunicarnos con ellas de una manera más sencilla, usamos los lenguajes de programación.

Piensa en los lenguajes de programación como un puente entre nuestro idioma humano y el lenguaje de la computadora . Nos permiten escribir instrucciones en un formato que podemos entender (con palabras y símbolos más cercanos a nuestro lenguaje), y luego un “traductor” especial (llamado compilador o intérprete) convierte esas instrucciones al lenguaje que la computadora puede entender y ejecutar.

¿Por qué necesitamos diferentes lenguajes de programación?

Así como hay diferentes idiomas que hablan las personas (español, inglés, francés), también existen diferentes lenguajes de programación. Cada uno tiene sus propias reglas, su propia “gramática” y sus propias fortalezas y debilidades. Algunos lenguajes son mejores para crear aplicaciones para el teléfono, otros para construir páginas web, y otros para analizar grandes cantidades de datos.

Podemos agruparlos en grandes categorías según cómo le dicen a la computadora qué hacer. Dos de los grupos más importantes son los lenguajes imperativos y los lenguajes declarativos .

Lenguajes Imperativos: Dar órdenes paso a paso

Imagina que estás dando instrucciones a alguien para encontrar un tesoro escondido. Si usas un lenguaje imperativo , le dirías exactamente qué pasos seguir: “Camina diez metros hacia el norte. Luego, gira a la derecha y camina cinco metros. Después, cava tres metros hacia abajo”. Estás dando órdenes precisas, paso a paso, sobre cómo lograr el objetivo.

Los lenguajes de programación imperativos funcionan de manera similar. Le dices a la computadora exactamente qué hacer y en qué orden. Piensa en Python como un ejemplo de lenguaje imperativo. Cuando escribes código en Python, estás dando una secuencia de instrucciones que la computadora debe seguir.

Ejemplos de lenguajes imperativos: Python, C, Java.

Lenguajes Declarativos: Describir el resultado deseado

Ahora, imagina que en lugar de darle instrucciones paso a paso a alguien para encontrar el tesoro, simplemente le das un mapa con una “X” marcando el lugar donde está el tesoro. No le dices cómo llegar allí, solo le dices qué quieres lograr.

Los lenguajes declarativos funcionan de esta manera. En lugar de decirle a la computadora cómo hacer algo, le describes el resultado que quieres obtener. La computadora se encarga de encontrar la mejor manera de lograrlo.

Un buen ejemplo de lenguaje declarativo es SQL (Structured Query Language) , que se usa para trabajar con bases de datos. Con SQL, tú le dices a la base de datos qué información quieres (“Selecciona todos los clientes de la ciudad de Buenos Aires”), pero no le dices exactamente cómo buscar esa información dentro de la base de datos. La base de datos se encarga de encontrar la manera más eficiente de hacerlo.

Además de los lenguajes imperativos y declarativos, existen otros grandes grupos de lenguajes de programación, como por ejemplo:

¿Cómo los programas “recuerdan” los datos?

Imagina que estás construyendo un programa y necesitas que éste utilice datos en diferentes momentos durante su ejecución. ¿Cómo logras que la computadora mantenga estos datos disponibles?, esta pregunta introduce uno de los conceptos mas importantes que es entender como la computadora “recuerda” la información.

Ahora pensemos en una calculadora simple que suma dos números. Cuando introduces el primer número, la calculadora debe guardarlo en algún lugar mientras esperas a introducir el segundo número. Sin esta capacidad de recordar, el primer número simplemente se perdería y la suma sería imposible.

Este mismo principio aplica a todos los programas, desde los más simples hasta los más complejos:

La memoria como solución

La computadora soluciona este problema mediante un recurso físico llamado “memoria”. La memoria es, en esencia, un espacio donde la computadora puede almacenar datos temporalmente mientras un programa se está ejecutando.

Podemos pensar a la memoria como si fuera un armario lleno de cajas y en cada caja podemos almacenar un pedazo de información.

Cuando programamos, utilizamos estas cajas a través de lo que llamamos “variables” - espacios con nombre o etiqueta donde podemos guardar valores. Veamos un ejemplo sencillo:

# Guardamos el primer número en una variable llamada "numero1"
numero1 = 5
 
# Guardamos el segundo número en otra variable llamada "numero2"
numero2 = 7
 
# Ahora podemos usar ambos valores para calcular la suma
resultado = numero1 + numero2
 
# Y finalmente mostrar el resultado
print("La suma es:", resultado)

En este ejemplo, numero1, numero2 y resultado son espacios en la memoria de la computadora. Cada uno tiene:

  1. Un nombre que nosotros elegimos (para poder referirnos a ellos en el código)
  2. Un valor que está almacenado en la memoria física
  3. Una ubicación específica en la memoria (aunque esto generalmente es manejado automáticamente)

Para poder identificar y acceder a la información almacenada en la memoria es indispensable el uso de nombres o etiquetas, ya que sin un identificador sería muy difícil trabajar con los datos.

📝 Importancia de los nombres o etiquetas

La elección de nombres o etiquetas para las variables es extremadamente importante en programación, y a menudo se subestima su impacto. Un buen nombre de variable puede marcar una gran diferencia en la legibilidad, mantenibilidad y la probabilidad de errores en tu código.

# Código poco legible
a = 10
b = 20
c = a * b
print(c)
 
# Código más legible
precio_unitario = 10
cantidad_vendida = 20
total_venta = precio_unitario * cantidad_vendida
print(total_venta)

Declarar no es igual a asignar

La declaración de una variable consiste en informar al programa (o al compilador/intérprete) que vas a utilizar un espacio en la memoria para almacenar un valor.

📝 Traductores: Compiladores e Interpretes

Aunque es un concepto que abordaremos con más profundidad, es importante entender. La computadora entiende en un idioma de 0s y 1s, aunque podríamos, nosotros no escribimos en ese lenguaje, ya que tardaríamos muchísimo tiempo en escribir un simple programa, por eso escribimos en lenguajes como “Python”, “JavaScript”, etc. Por lo cual debe haber un traductor que le diga a la máquina lo que nosotros escribimos.

En muchos lenguajes (especialmente los de tipado estático como Java, C++, C# y Go), al declarar una variable, también se especifica el tipo de dato (en el siguiente capitulo se introducirá a los tipos de datos mas comunes) que podrá almacenar (por ejemplo, entero, texto, booleano). Esto ayuda al compilador a optimizar el uso de la memoria y a prevenir errores de tipo.

En algunos lenguajes de programación, como Python, JavaScript y Ruby, no necesitas decirle al programa qué tipo de información (por ejemplo, un número, un texto, una fecha) va a guardar una variable antes de usarla. Simplemente le das un nombre a la variable y le asignas un valor. El lenguaje se encarga de entender qué tipo de información es basándose en el valor que le diste. Esto significa que la primera vez que le das un valor a una variable, es como si la estuvieras creando y diciéndole qué guardar al mismo tiempo.

En cambio, la asignacion de una variable consiste en darle un valor específico a esa variable que ya ha sido declarada (o que se declara implícitamente en el momento de la asignación).

Se utiliza el operador de asignación (generalmente el signo igual =) para asignar el valor a la variable. El valor se almacena en la ubicación de memoria reservada para esa variable.

Veamos estos conceptos con un ejemplo en distintos lenguajes:

En Python, la declaración y la asignación suelen ocurrir al mismo tiempo. La primera vez que se usa un nombre de variable y se le asigna un valor, se considera tanto la declaración como la asignación.

# Asignación (implícita declaración):
edad = 30
nombre = "Juan"
es_mayor_de_edad = True
 
print(edad)
print(nombre)
print(es_mayor_de_edad)

Reglas para nombrar variables

Cada lenguaje de programación tiene reglas específicas que dictan cómo se pueden nombrar las variables. Estas reglas aseguran que el intérprete o compilador pueda distinguir las variables de otras partes del código del lenguaje.

  • Caracteres permitidos: Letras (a-z, A-Z), dígitos (0-9), y guion bajo (_).
  • Primer carácter: Debe ser una letra o un guion bajo (_). No puede ser un dígito.
  • Sensibilidad a mayúsculas: Sí, Python es case-sensitive.
  • Palabras reservadas: No se pueden usar las palabras clave de Python (ej: if, else, for, while, def, class, etc.).
  • Convenciones: Por convención, se suelen usar nombres en minúsculas con palabras separadas por guiones bajos (snake_case), por ejemplo: nombre_usuario, cantidad_total.
📝 Palabras reservadas

Las palabras reservadas (también conocidas como palabras clave) en un lenguaje de programación son términos que tienen un significado especial y predefinido dentro de la sintaxis de ese lenguaje. Son parte fundamental de la estructura del lenguaje y se utilizan para construir las instrucciones y la lógica de los programas.

Piensa en ellas como las “piezas” fundamentales con las que se construye el lenguaje. Cada palabra reservada tiene una función específica, como definir una estructura de control (por ejemplo, if, else, for, while), declarar un tipo de dato (por ejemplo, int, float, string, bool), definir una función (def, function), controlar el flujo de ejecución (return, break, continue), o indicar la visibilidad de un elemento (public, private).

La razón por la que se llaman “ reservadas ” es que no pueden ser utilizadas por los programadores como nombres para sus propias variables, funciones, clases u otros identificadores.