Con una cuenta desbloqueas el cuestionario, el foro de dudas y el tutor con IA de esta lección, además del registro de progreso y el certificado verificable al terminar «Python para Ingeniería Espacial».
Bienvenida: esto se aprende escribiendo, no leyendo
Si nunca has programado, estás exactamente en el sitio correcto. Este curso no da por sabido nada: ni qué es un archivo de código, ni qué significa "ejecutar", ni por qué a veces la computadora responde con un texto rojo que parece un insulto. Empezamos desde cero y avanzamos con problemas de verdad del segmento terreno — decibelios, elevaciones, catálogos de satélites, telemetría — porque aprender a programar con ejercicios de juguete y luego saltar al mundo real es un salto que muy poca gente da sola.
Una advertencia amable antes de la primera línea de código: vas a equivocarte mucho, y eso no es un síntoma de que no sirvas para esto. Es literalmente el oficio. Un programador profesional pasa buena parte de su jornada leyendo mensajes de error y corrigiendo. La diferencia entre quien empieza y quien lleva años no es que el segundo se equivoque menos, sino que lee el error con calma en lugar de asustarse. Vamos a celebrar cada error como lo que es: información gratuita sobre lo que la máquina entendió y tú creías haber dicho.
Qué significa programar
Una computadora es una máquina obediente y literal. No interpreta intenciones, no rellena huecos, no supone lo que quisiste decir. Programar es escribir una secuencia de instrucciones tan precisas que una máquina literal pueda ejecutarlas sin adivinar nada. Ese conjunto de instrucciones guardado en un archivo es un programa; el idioma en el que se escriben las instrucciones es un lenguaje de programación; y las reglas de escritura de ese idioma —dónde van los paréntesis, cómo se separan las cosas— son su sintaxis.
La comparación con una receta funciona bien, con una salvedad importante. Una receta dice "sofríe hasta que esté dorado" y confía en el juicio del cocinero. Un programa no puede confiar en nada: tiene que decir qué es "dorado", cómo se mide y qué hacer si nunca llega a estarlo. Toda la dificultad inicial de programar viene de ahí — de tener que explicitar cosas que en el lenguaje humano damos por supuestas.
Cuando una instrucción está mal escrita o hace algo distinto de lo que pretendías, tienes un bug (literalmente "bicho", por una polilla real que se coló en un relé del Harvard Mark II en 1947). Encontrarlo y arreglarlo se llama depurar. Vas a depurar más de lo que vas a escribir, y eso está bien.
Por qué Python, y por qué en el espacio
Existen cientos de lenguajes. Python domina el trabajo científico y espacial por una combinación de razones que conviene entender desde el principio, porque explican también por qué este curso empieza aquí y no en C o en Rust:
Se lee casi como inglés estructurado. El código de Python tiene poca ceremonia: menos llaves, menos punto y coma, menos declaraciones de tipo. Eso importa mucho cuando el que escribe es un ingeniero de radiofrecuencia y no un programador de sistemas.
Trae media ingeniería ya escrita. Propagación orbital (sgp4, skyfield), cálculo numérico (numpy, scipy), señales y radio definida por software (gnuradio, pyephem), gráficas (matplotlib). Nadie reimplementa SGP4 desde cero: se instala.
Es el idioma común del ecosistema. Las herramientas de nuestra estación terrena, el planificador de pases de OrbitEye y la telemetría de PiStation están escritas en Python; el análisis de anomalías con z-score que verás al final del curso es el mismo método que corre en producción.
Es gratuito y multiplataforma. Corre igual en tu portátil, en un servidor y en la Raspberry Pi que controla el rotor de la antena.
La contrapartida honesta: Python es lento comparado con C. Para el 95 % del trabajo de segmento terreno eso da igual, porque el cuello de botella es la radio, la red o el disco, no el intérprete. Y cuando importa de verdad, las bibliotecas numéricas hacen el trabajo pesado en C por debajo. La regla profesional es: primero que funcione y se entienda; después, si hace falta, que sea rápido.
El playground: no hay nada que instalar
Cada lección de este curso lleva bloques de código ejecutables dentro de la propia página. Escribes o modificas el código, pulsas Ejecutar y el resultado aparece debajo. No hay que instalar Python, ni configurar un editor, ni pelearse con rutas del sistema — esa batalla la daremos más adelante, cuando ya sepas para qué sirve ganarla.
Lo que ves debajo del editor se llama salida estándar (stdout): es todo lo que tu programa decidió mostrar. Si no imprimes nada, no verás nada, aunque el programa haya calculado maravillas. Esa es la primera lección práctica del curso: la computadora no comparte lo que sabe a menos que se lo pidas explícitamente.
Tu primera instrucción: print()
La instrucción print() muestra en la salida lo que le pongas entre paréntesis. El texto va entre comillas, y ese texto entrecomillado se llama cadena (string). Prueba a ejecutar esto tal cual, y después cámbialo por el nombre de tu propia estación:
Playground · python
Tres detalles de la tercera línea, que ya adelantan mucho:
print() acepta varios valores separados por comas y los imprime en una sola línea, separados por un espacio.
Los números no llevan comillas. 3 es el número tres; "3" es un texto que contiene el carácter tres. Son cosas distintas y en la lección 2 veremos por qué confundirlas duele.
Cada llamada a print() termina su línea. Dos print() producen dos líneas.
Si escribes Print("hola") con mayúscula, Python responderá NameError: name 'Print' is not defined. No es que la máquina sea quisquillosa por gusto: es que print y Print son nombres diferentes, igual que NOAA-19 y noaa-19 son satélites diferentes en un catálogo. Provoca ese error a propósito una vez; leerlo sin miedo te ahorrará horas después.
Comentarios: notas para humanos
Todo lo que sigue a # en una línea lo ignora Python por completo. Sirve para explicarle a otra persona —o a ti dentro de seis meses, que es prácticamente otra persona— por qué hace algo el código. No repitas lo que el código ya dice; escribe lo que el código no puede decir:
# Mal: obvio y redundante.
frecuencia_mhz = 137.10 # asigna 137.10 a frecuencia_mhz
# Bien: explica el porqué, que no se deduce del código.
frecuencia_mhz = 137.10 # Portadora APT de NOAA-19; fijada por el operador, no configurable.
Variables: nombres para valores
Una variable es un nombre que apunta a un valor. Se crea con el signo =, que aquí no significa igualdad matemática sino asignación: "guarda a la derecha, llámalo como dice la izquierda". Se lee de derecha a izquierda.
altitud_km = 817
Esa línea no afirma que la altitud valga 817: ordena que a partir de ahora el nombre altitud_km se refiera al valor 817. Y como el nombre solo apunta, puede reapuntar: asignarle otro valor más adelante es perfectamente legal y frecuente.
Nombres que se leen
Las reglas obligatorias son pocas: el nombre puede llevar letras, números y guion bajo, no puede empezar por número y no puede ser una palabra reservada del lenguaje. Las reglas de buen gusto pesan más:
Nombre
Veredicto
Motivo
f
Malo
No dice nada. En tres semanas no sabrás si era frecuencia o factor.
frec
Regular
Abreviatura ambigua y sin unidad.
frecuencia_mhz
Bueno
Dice qué es y en qué unidad está.
FrecuenciaMHz
Evitable
Válido, pero la convención de Python es minúsculas con guion bajo (snake_case).
La costumbre de meter la unidad en el nombre (altitud_km, potencia_dbm, duracion_s) parece pedantería y es justo lo contrario: es la defensa más barata que existe contra el error de unidades, que en la lección 2 veremos que ha destruido misiones reales.
Ejemplo resuelto: la ficha de un satélite, paso a paso
Vamos a seguir el estado de la memoria instrucción por instrucción. Este seguimiento manual —los profesionales lo llaman trazar el programa— es la técnica número uno para entender código ajeno y depurar el propio:
Instrucción
nombre
frecuencia_mhz
altitud_km
nombre = "NOAA-19"
"NOAA-19"
—
—
frecuencia_mhz = 137.10
"NOAA-19"
137.10
—
altitud_km = 817
"NOAA-19"
137.10
817
altitud_km = altitud_km + 30
"NOAA-19"
137.10
847
nombre = "METEOR-M2-4"
"METEOR-M2-4"
137.10
847
Fíjate en la cuarta fila, que es la que más cuesta al principio: altitud_km = altitud_km + 30. Como ecuación matemática sería falsa (ningún número es igual a sí mismo más treinta). Como asignación es impecable: primero se calcula el lado derecho con el valor actual (817+30=847) y después ese resultado se guarda en el nombre de la izquierda. El valor viejo se pierde en cuanto termina la línea.
Ahora escríbelo tú. Ejecuta el bloque tal cual, y después cámbialo: pon tu satélite favorito, añade una cuarta variable con el operador (operador = "NOAA") e imprímela también.
Playground · python
Los errores, con nombre y apellido
Tres errores te acompañarán toda la vida profesional. Preséntate ya con ellos:
SyntaxError: escribiste algo que Python no puede ni siquiera leer, como un paréntesis sin cerrar. El programa no llega a ejecutarse.
NameError: usaste un nombre que nunca asignaste, o lo escribiste distinto (altitud_km frente a altitud_Km).
TypeError: pediste una operación imposible entre esos tipos de valor, como sumar un texto y un número.
Los tres mensajes incluyen el número de línea donde Python se atascó. Empieza siempre por ahí, y recuerda que a veces el fallo real está una línea antes (un paréntesis que quedó abierto arriba hace que se queje abajo).
1 de 7
Comprueba lo que más se malinterpreta el primer día:
¿Qué hace exactamente la línea altitud_km = 817?
En la próxima lección los valores dejan de ser decorativos y empiezan a operarse: enteros y decimales, potencias, texto con formato y el primer cálculo que un ingeniero de radio hace veinte veces al día — los decibelios.