Fundamentos de Programación

¿Estás dando tus primeros pasos en el mundo de la programación y no sabés por dónde empezar? En este artículo vas a descubrir los conceptos esenciales que forman la base de todo lenguaje de programación: pensamiento lógico, variables, estructuras de control, funciones y más. Todo explicado de forma clara y sencilla para que puedas entender cómo funciona el código y desarrollarte como programador con bases sólidas desde el principio.

Fecha de publicación: Mayo 15, 2025

Última actualización: Mayo 15, 2025

Fundamentos de Programación

🖥️ Introducción a la Programación

La programación consiste en escribir instrucciones que una computadora puede entender y ejecutar. A través de un conjunto de órdenes precisas, conocido como código, le indicamos a las computadoras cómo deben comportarse, qué tareas realizar y en qué secuencia hacerlo. Este lenguaje entre humanos y computadoras es lo que permite poder construir desde simples calculadoras hasta complejos sistemas web, videojuegos o inteligencia artificial.

Importancia de tener conocimientos sólidos

Los fundamentos nos enseñan cómo funciona realmente el código por debajo de frameworks y herramientas modernas: estructuras de control, tipos de datos, funciones, algoritmos, estructuras de datos, entre otros conceptos clave.

Con estos conocimientos, uno no solo puede escribir programas que funcionan, sino también entender por qué funcionan, cómo mejorarlos y cómo adaptarlos a nuevas situaciones. Aprender desde la base también permite moverse con más seguridad entre distintos lenguajes y tecnologías, porque los principios centrales son los mismos.

Un programador con bases sólidas sabe cómo elegir la estructura de datos adecuada, cómo optimizar su código, y entiende los límites y el comportamiento del sistema en el que trabaja. Tiene una mentalidad analítica, fundamentada, y puede adaptarse rápidamente a distintos entornos de desarrollo.



🧠 Pensamiento lógico

El pensamiento lógico es la habilidad de descomponer un problema en partes más pequeñas, identificar patrones, establecer relaciones y encontrar soluciones efectivas paso a paso. Se trata de entender qué se necesita resolver y cómo hacerlo de la manera más eficiente posible.

Por ejemplo, si una aplicación debe mostrar un mensaje solo cuando un usuario inicia sesión, eso implica un razonamiento lógico: “si el usuario está autenticado, mostrar el mensaje; si no, no hacer nada”.



🛠️ Lenguajes de programación

Un lenguaje de programación es un conjunto de reglas sintácticas y semánticas que permiten a los humanos comunicarse con las computadoras. Así como usamos el lenguaje natural para interactuar entre personas, los lenguajes de programación sirven para dar instrucciones precisas a una máquina sobre qué debe hacer y cómo debe hacerlo.

Tipos de lenguajes

Según la forma en que se ejecuta el código:

También se pueden clasificar según el paradigma que adoptan:

  // Paso 1: Declarar una variable para almacenar un número
  int numero;

  // Paso 2: Pedir al usuario que ingrese un número
  printf("Ingresa un número: ");
  scanf("%d", &numero);

  // Paso 3: Verificar si el número es par o impar
  if (numero % 2 == 0) {
    printf("El número %d es par.\n", numero);
  } else {
    printf("El número %d es impar.\n", numero);
  }

  // Paso 4: Finalizar el programa
  return 0;
  -- Seleccionar todos los usuarios mayores de 18 años
  SELECT * FROM usuarios WHERE edad > 18;
  // Definición de una clase "Messi"
  class Messi {
    String nombre = "Lionel Messi";
    String frase = "Andá pa allá, bobo!";

    // Método para mostrar la frase
    void decirFrase() {
      System.out.println(this.frase);
    }
  }

  // Uso de la clase
  Messi miMessi = new Messi();
  miMessi.decirFrase(); // Salida: Andá pa allá, bobo!

Muchos lenguajes, un mismo concepto

A pesar de que existen muchos lenguajes de programación, todos comparten conceptos fundamentales. Cada lenguaje es diseñado con un propósito específico, adaptado a distintos tipos de problemas, contextos o preferencias de diseño.

Por eso, es común que un buen programador no se limite a un solo lenguaje, sino que entienda las fortalezas y limitaciones de varios, y elija el más adecuado según el contexto.



🔢 Variables y tipos de datos

Una variable es un espacio en la memoria (RAM) de la computadora donde se almacena temporalmente un dato. Podés imaginarla como una “caja” con un nombre que contiene un valor, el cual puede cambiar a lo largo del tiempo. Su función principal es permitir que el programa manipule datos de forma dinámica. Por ejemplo, en pseudocódigo:

  variable nombre = "Juan"
  variable edad = 25

En este caso, nombre es una variable que almacena el valor "Juan" y edad es otra variable que almacena el valor 25. A lo largo del programa, podrías cambiar el valor de nombre a "Pedro" o de edad a 30.

Tipos de datos

Un tipo de dato es una clasificación que define qué tipo de valor puede almacenar una variable y qué operaciones se pueden realizar con él.

Los principales tipo de datos, también llamados tipos primitivos, son:



⚙️ Operadores

Los operadores son símbolos o palabras clave que permiten realizar operaciones sobre variables y valores. Son fundamentales para construir lógica dentro de los programas y permiten desde realizar cálculos matemáticos hasta tomar decisiones lógicas.

Operadores aritméticos

Se usan para realizar operaciones matemáticas básicas:

OperadorDescripciónEjemplo
+Suma5 + 3 = 8
-Resta10 - 4 = 6
*Multiplicación2 * 3 = 6
/División10 / 2 = 5
%Módulo (resto)10 % 3 = 1
**Potencia (algunos lenguajes)2 ** 3 = 8

Operadores de comparación

Se usan para comparar dos valores. El resultado siempre es un valor booleano (true o false):

OperadorDescripciónEjemplo
==Igual a5 == 5 → true
!=Distinto de5 != 3 → true
>Mayor que7 > 4 → true
<Menor que2 < 5 → true
>=Mayor o igual que5 >= 5 → true
<=Menor o igual que3 <= 6 → true

Operadores lógicos

Permiten combinar múltiples condiciones lógicas:

OperadorDescripciónEjemplo
ANDVerdadero si ambas condiciones son verdaderastrue AND false → false
ORVerdadero si al menos una condición es verdaderatrue OR false → true
NOTInvierte el valor lógico de una condiciónNOT true → false

Nota: En algunos lenguajes, como JavaScript, los operadores lógicos son &&, || y ! respectivamente.



🔄 Estructuras de control

Las estructuras de control permiten modificar el flujo de ejecución de un programa. Gracias a ellas, un programa puede tomar decisiones o repetir acciones dependiendo de ciertas condiciones.

Se dividen principalmente en dos tipos:

Sin estas estructuras, un programa solo ejecutaría líneas de código de forma secuencial, sin lógica ni adaptación a distintas situaciones.

Condicionales

Las estructuras condicionales permiten que un programa responda a diferentes situaciones. Las más comunes son:

  edad = 20

  if edad >= 18:
      print("Eres mayor de edad")
  else:
      print("Eres menor de edad")

El bloque if se ejecuta si la condición es verdadera, y el bloque else se ejecuta si la condición es falsa.

  nota = 7

  if nota >= 9:
      print("Excelente")
  elif nota >= 7:
      print("Aprobado")
  else:
      print("Desaprobado")

El bloque elif se evalúa solo si la condición del if es falsa. Si la condición del elif es verdadera, se ejecuta su bloque de código y se ignoran los bloques restantes.

let dia = 3

switch (dia) {
	case 1:
		console.log('Lunes')
		break
	case 2:
		console.log('Martes')
		break
	case 3:
		console.log('Miércoles')
		break
	default:
		console.log('Día no válido')
}

El bloque default se ejecuta si ninguna de las condiciones anteriores se cumple.

Bucles o ciclos

Permiten ejecutar repetidamente un bloque de código. Los más comunes son:

for i in range(5):
    print(i)

El bloque de código dentro del for se ejecuta 5 veces, imprimiendo los números del 0 al 4.

contador = 0
while contador < 5:
    print(contador)
    contador += 1

El bloque de código dentro del while se ejecuta mientras contador sea menor que 5, imprimiendo los números del 0 al 4.



🔧 Funciones y procedimientos

Las funciones y procedimientos son bloques de código reutilizables que permiten organizar y estructurar un programa. Ayudan a dividir el código en partes más pequeñas y manejables, facilitando su comprensión y mantenimiento.

Son herramientas esenciales para escribir código limpio y profesional. Aprender a usarlos correctamente marca una gran diferencia en la calidad de tus programas.

Funciones

Una función es un conjunto de instrucciones que recibe entradas (parámetros), realiza una operación y devuelve un resultado (valor de retorno).

def suma(a, b):
    return a + b

resultado = suma(3, 5)
print(resultado)  # Salida: 8

En este ejemplo, la función suma toma dos parámetros (a y b), los suma y devuelve el resultado. Luego, se llama a la función con los valores 3 y 5, y se imprime el resultado.

Procedimientos

Un procedimiento también es un bloque de código reutilizable, pero no devuelve un valor (o devuelve implícitamente None en algunos lenguajes como Python). Se usa para ejecutar acciones, no para calcular un resultado.

def imprimir_mensaje():
    print("Este es un procedimiento que no devuelve un valor.")

imprimir_mensaje()  # Salida: Este es un procedimiento que no devuelve un valor.

En este ejemplo, el procedimiento imprimir_mensaje simplemente imprime un mensaje en la consola. No devuelve ningún valor, solo realiza una acción.

Parámetros, argumentos y valores de retorno



📚 Estructuras de datos

Las estructuras de datos son formas de organizar, almacenar y gestionar datos en la memoria de una computadora. Son esenciales para escribir programas eficientes y resolver problemas de forma óptima.

Permiten agrupar datos relacionados y realizar operaciones sobre ellos de manera efectiva. Existen diferentes tipos de estructuras de datos, cada una con sus propias características y usos.

Las estructuras mas básicas son: registros, arreglos y listas enlazadas. Existen otras más complejas como pilas, colas, árboles y grafos, pero estas son más avanzadas y se verán en otro momento.

Nota: algunos lenguajes implementan sus propias estructuras de datos como tuplas, diccionarios o sets, que son variaciones de las estructuras mencionadas.

Arreglos (Arrays)

Un arreglo es una colección de elementos que se acceden por índice. Tienen un tamaño fijo y almacenan elementos del mismo tipo. Son útiles para almacenar listas de datos.

numeros = [1, 2, 3, 4, 5]
print(numeros[0])  # Salida: 1

En este ejemplo, numeros es un arreglo que contiene cinco elementos. Se accede al primer elemento (índice 0) imprimiendo su valor.

Listas enlazadas (Linked Lists)

Una lista enlazada es una colección de nodos, donde cada nodo contiene un valor y una referencia al siguiente nodo. A diferencia de los arreglos, las listas enlazadas no tienen un tamaño fijo y permiten insertar y eliminar elementos de manera eficiente.

Algunos lenguajes de alto nivel implementan los “arreglos” como listas enlazadas, permitiendo que sean dinámicos y crezcan o decrezcan según sea necesario.

Registros (Structs)

Un registro es una estructura que agrupa diferentes tipos de datos bajo un mismo nombre. Permite almacenar información relacionada en un solo objeto.

struct Persona {
  char nombre[50];
  int edad;
};



✅ Buenas prácticas

Aprender a programar no es solo entender cómo funciona el código, sino también cómo escribirlo bien. Las buenas prácticas te ayudan a mantener tu código limpio, comprensible y fácil de mantener — tanto para vos como para otras personas que trabajen en el mismo proyecto.