Clases particulares de Fundamentos de Programación

¿Estás con Programación I, Fundamentos de Programación o Introducción a la Programación, en Python, Java o C++? Dime qué asignaturas cursas y te diré si puedo ayudarte. Sin permanencia, y con una clase de prueba gratuita.

Si tu asignatura de programación es en R, como pasa a menudo en ADE, Economía o Estadística, mira R y RStudio.

Qué asignaturas son

Esta página es para las asignaturas que se llaman así, o parecido:

  • Programación
  • Programación I
  • Programación II
  • Fundamentos de Programación
  • Fundamentos de Programación y Algoritmia
  • Introducción a la Programación
  • Iniciación a la Programación
  • Programación Orientada a Objetos

La tienen en primero de Ingeniería Informática y del Software, Ciencia de Datos, Estadística, Matemáticas, Ingeniería Matemática, Telecomunicación, Geomática y Ciberseguridad, entre otros.

Cómo trabajamos

Trabajamos sobre tu material: los ejercicios, los apuntes y los exámenes de otros años de tu asignatura. El material puede estar en cualquier idioma; la clase es en castellano.

Escribimos el código juntos y lo ejecutamos en el entorno que use tu asignatura: muchas veces Jupyter, y en Java, IntelliJ o NetBeans. Cuando algo no se entiende en la pantalla, como una recursión o el recorrido de una matriz, lo dibujo en la pizarra.

Puedes venir a clases sueltas para un tema concreto o seguir todo el curso, y llevar varias asignaturas a la vez. Si no has programado nunca, partimos de cero. Y si se acerca el examen y me lo pides, hacemos una preparación intensiva con exámenes anteriores.

En qué trabajamos más

  • Primeros pasos: variables y tipos, entrada y salida, condicionales (if, elif, else) y bucles for y while.
  • Funciones: parámetros y return, y la diferencia entre una función que devuelve una lista nueva y un procedimiento que modifica la que recibe.
  • Listas, cadenas y matrices como listas de listas: traspuesta, suma, producto y posiciones vecinas.
  • Recursividad: factorial, potencias, suma y máximo de una lista, y el determinante por adjuntos.
  • Búsqueda y ordenación, y lectura y escritura de ficheros.
  • Programación II y orientación a objetos: clases, objetos y constructores, herencia (extends, super, @Override), excepciones, y pilas, colas y listas enlazadas.
  • Lenguajes: Python, en scripts y en Jupyter, y Java. También C++ en primero.

Si tu asignatura de informática es de una ingeniería o de un grado de ciencias, con MATLAB o C, mira Informática para ingenierías y ciencias.

Errores típicos

  • Olvidar el `return` en una función recursiva. En Python la función devuelve None, y el error salta una llamada más arriba, lejos de donde está.
  • Un caso base que no cubre todos los casos: la lista vacía, o un exponente negativo en una potencia que solo para en n = 1. El resultado es una recursión infinita o un IndexError.
  • Modificar la lista que se recibe cuando había que devolver una nueva, o al revés: dos nombres para la misma lista, y un cambio que aparece donde no se esperaba.
  • Confundir filas y columnas (M[i][j] frente a M[j][i]) o salirse de rango con range(len(...)).
  • En Jupyter, ejecutar las celdas en desorden. Una variable de una celda borrada sigue existiendo hasta que se reinicia el núcleo, y el cuaderno funciona en tu ordenador pero no al ejecutarlo de arriba abajo.
  • En Java, comparar cadenas con `==` en vez de con equals, o redefinir un método en la subclase con otra firma y sin @Override, de modo que en realidad no se redefine nada.

Un ejemplo: recursividad en Python

Sumar los elementos de una lista sin bucles: la función se llama a sí misma con una lista cada vez más corta. Es un ejemplo en Python.

def suma(lista):
    """Suma los elementos de una lista sin usar bucles.

    suma([4, 1, 7]) = 4 + suma([1, 7])
                    = 4 + 1 + suma([7])
                    = 4 + 1 + 7 + suma([])
                    = 4 + 1 + 7 + 0
    """
    if not lista:                       # caso base: la lista vacía suma 0
        return 0
    return lista[0] + suma(lista[1:])   # el primero más la suma del resto


print(suma([4, 1, 7]))   # 12
print(suma([]))          # 0

El caso base es la lista vacía, que suma 0. En cualquier otro caso, la suma es el primer elemento más la suma del resto, lista[1:]. El comentario de la función muestra cómo se encadenan las llamadas hasta llegar al caso base.

Otro ejemplo: herencia en Java

Una cuenta con descubierto es una cuenta que puede quedar en negativo hasta un límite: hereda de la cuenta y redefine cómo se retira el dinero. Es un ejemplo en Java, con cada clase en su fichero.

public class Cuenta {
    protected double saldo;

    public Cuenta(double saldoInicial) {
        saldo = saldoInicial;
    }

    public boolean retirar(double cantidad) {
        if (cantidad > saldo) {
            return false;               // no hay dinero suficiente
        }
        saldo -= cantidad;
        return true;
    }
}

public class CuentaConDescubierto extends Cuenta {
    private double limite;              // cuánto puede quedar en negativo

    public CuentaConDescubierto(double saldoInicial, double limite) {
        super(saldoInicial);            // la parte de Cuenta la construye Cuenta
        this.limite = limite;
    }

    @Override
    public boolean retirar(double cantidad) {
        if (cantidad > saldo + limite) {
            return false;
        }
        saldo -= cantidad;
        return true;
    }
}

CuentaConDescubierto hereda saldo y el resto de Cuenta, y solo cambia lo que es distinto: la condición para retirar. El constructor llama primero a super(...) para que Cuenta inicialice su parte, y @Override hace que el compilador compruebe que de verdad se está redefiniendo retirar. Con 100 € de saldo y 50 € de límite, retirar 120 € deja la cuenta en −20 €.

Opiniones de alumnos de programación

Son reseñas de mi perfil de ClassGap, una plataforma de clases particulares: las ponen allí, sin que yo las controle, y las he clasificado por área según la asignatura de cada una.

Cargando opiniones…

Preguntas frecuentes

¿En qué lenguaje son las clases de programación?
En el de tu asignatura: sobre todo Python y Java, y también C++. Si tu asignatura es en R, mira R y RStudio.
¿Qué programas necesito para las clases?
Los que use tu asignatura. Con Python suele ser Jupyter o un editor como VS Code; con Java, IntelliJ o NetBeans. Si aún no los tienes instalados, lo hacemos juntos en la primera clase.
No he programado nunca. ¿Puedo empezar contigo?
Sí. Mucha gente llega a Programación I sin haber escrito una línea de código. Empezamos por lo básico, con ejemplos pequeños, y vamos subiendo hasta los ejercicios de tu asignatura.
Tengo Programación II, con clases, herencia y listas enlazadas. ¿También?
Sí: clases y objetos, herencia y redefinición de métodos, excepciones, y pilas, colas y listas enlazadas, en Java o en Python.
¿Me ayudas con mis prácticas y entregas?
Sí. Vemos juntos qué te piden, cómo plantearlo y dónde te atascas, y reviso lo que vayas haciendo.

Pedir una clase de prueba gratuita