💾 Elementos de un programa informático¶
Un programa es una secuencia de instrucciones que un ordenador ejecuta para realizar alguna tarea. Parece una idea bastante simple, pero para que el ordenador pueda hacer uso de las instrucciones, deben estar escritas de forma que las pueda usar. Esto significa que los programas deben estar escritos en lenguajes de programación. Los lenguajes de programación se diferencian de los lenguajes humanos ordinarios en que son completamente inequívocos y muy estrictos sobre lo que está y no está permitido en un programa. Las reglas que determinan lo que está permitido se denominan sintaxis del lenguaje. Las reglas de sintaxis especifican el vocabulario básico del lenguaje y cómo se pueden construir los programas.
Lenguajes de programación¶
Se trata de un conjunto de instrucciones que permite la comunicación de los humanos con los ordenadores.

- C → bases de datos, videojuegos, kernel linux, IoT, dispositivos inteligentes, etc.
- Python → inteligencia artificial, big data, Web etc.
- Java → puntos de ventas, aplicaciones de escritorio, cajeros automáticos, dispositivos móviles, aplicaciones de servidor ...

Comparativa: Lenguajes Compilados, Interpretados e Intermedios (Java)¶
La diferencia entre estos tres enfoques radica principalmente en cuándo y quién traduce el código escrito por un desarrollador (legible por humanos) a lenguaje máquina (instrucciones binarias en ceros y unos que entiende directamente el procesador).
Lenguajes Compilados (ej. C, C++, Rust, Go)¶
En un lenguaje compilado, un programa llamado compilador traduce todo el código fuente de una sola vez antes de que la aplicación se pueda ejecutar.
- El proceso:
Código fuente (.c)→ Compilador →Código máquina ejecutable (.exe / binario ELF)

Ventajas:
- Máximo rendimiento: El código resultante corre de forma nativa sobre el procesador.
- Detección temprana de errores: El compilador analiza todo el código en busca de fallos de sintaxis o tipos antes de generar el archivo final.
Inconvenientes:
- Dependencia de la plataforma: El ejecutable generado solo funciona en el sistema operativo y arquitectura de procesador para el que se compiló. Para que funcione en otro sistema, es necesario recompilarlo.
- Tiempo de espera necesario durante la fase de compilación.
Lenguajes Interpretados (ej. Python, JavaScript, PHP, Ruby)¶
En un lenguaje interpretado, no existe un paso de compilación previa. Un programa llamado interpretador lee el código fuente línea por línea y lo traduce e instruye directamente a la CPU en tiempo de ejecución.
- El proceso:
Código fuente (.py)→ Interpretador (ejecuta línea por línea sobre la marcha)

Ventajas:
- Multiplataforma por naturaleza: El mismo archivo fuente se puede ejecutar en cualquier sistema que tenga instalado el interpretador correspondiente.
- Desarrollo rápido y flexible: No hay que esperar a que el código se compile para probar cambios.
Inconvenientes:
- Menor rendimiento: Leer, traducir e interpretar las instrucciones en tiempo real añade una carga de procesamiento adicional.
- Los errores de sintaxis o de ejecución se descubren durante la marcha (al llegar a la línea con el fallo).
Lenguajes con Bytecode o Código Intermedio (ej. Java, C#)¶
Java y otras plataformas como .NET emplean un modelo híbrido que combina ambos enfoques para resolver la dependencia del sistema operativo sin perder rendimiento.
- El proceso:
1. Fase de Compilación: El código fuente (
.java) pasa por un compilador (javac), pero este no genera código máquina nativo para la CPU. En su lugar, genera Bytecode (archivos.class), que es una representación intermedia simplificada. 2. Fase de Ejecución (Interpretación + JIT): La Máquina Virtual de Java (JVM) toma ese Bytecode y lo ejecuta en la plataforma de destino. La JVM combina interpretación rápida con la tecnología JIT (Just-In-Time Compiler), que detecta las partes de Bytecode que más se ejecutan y las traduce sobre la marcha a código máquina nativo.

Ventajas:
- Escribe una vez, ejecútalo en cualquier lugar (Write Once, Run Anywhere): El mismo archivo
.class(Bytecode) funciona exactamente igual en Windows, Linux, macOS o un servidor ARM. Solo se requiere que esa plataforma tenga instalada su versión de la JVM. - Buen equilibrio de rendimiento: Con los optimizadores JIT actuales, la velocidad se acerca bastante a la de los lenguajes compilados puros.
Inconvenientes:
- Consumo de memoria inicial: Cargar la máquina virtual en memoria añade un consumo base (overhead) mayor que el de un binario compilado nativo.
Resumen comparativo¶
| Aspecto | Compilado (ej. C++) | Interpretado (ej. Python) | Código Intermedio / Java |
|---|---|---|---|
| ¿Cuándo se traduce? | Antes de ejecutar (todo a la vez) | Durante la ejecución (línea por línea) | En 2 pasos: primero a Bytecode y luego a código máquina en la JVM |
| Resultado de la traducción | Código máquina nativo | Ejecución directa de comandos | Archivo con Bytecode (.class) |
| Portabilidad del ejecutable | Requiere recompilar por SO/Arquitectura | El archivo fuente .py es portable |
El archivo .class es 100% portable |
| Rendimiento | Máximo | El más lento | Alto (gracias a la JVM y compilación JIT) |
| Requisito para ejecutar | Ninguno (solo el ejecutable) | El interpretador del lenguaje | La Máquina Virtual (JVM) |
¿Con qué lenguaje de programación debo empezar?¶
En un lenguaje compilado, un programa llamado compilador traduce todo el código fuente de una sola vez antes de que la aplicación se pueda ejecutar.
En realidad, no existe el mejor lenguaje de programación para empezar, y el lenguaje que elijas prácticamente no tendrá un efecto duradero en tu carrera. Los lenguajes de programación pueden verse muy diferentes en la superficie, pero la mayoría de los conceptos fundamentales se transferirán de un lenguaje a otro. Aprender un nuevo idioma también será más fácil con el tiempo; un principiante puede tardar meses antes de que se sienta cómodo con su primer lenguaje; un programador experimentado puede familiarizarse con un nuevo idioma en cuestión de días.
Consejos para aprender a programar con éxito¶
No olvides
- Encuentra tu motivación. Interés por la tecnología, mejorar profesionalmente y enfrentar nuevos retos de aprendizaje son los principales estímulos
- Comienza desde la base y usa la lógica. Antes de estudiar cualquier lenguaje de programación, es necesario adquirir las capacidades de razonamiento lógico
- ¡A practicar! La programación es un continuo ensayo y error y el ejercicio práctico es el único camino para mejorar.
- El trabajo en equipo es clave. Si al lado tienes a gente que también quiere aprender, es mucho más ameno y sencillo
- Ordena tu trabajo y tu mente. La capacidad de resolución de problemas, el pensamiento lateral y la autogestión son tres de las competencias transversales más importantes para empezar a programar
- No intentes correr. Esquematiza con diagramas de flujo o pseudocódigo todo aquello que vayas a interpretar
- Aprende a lidiar con la frustración. Nadie dijo que el camino fuera fácil
- ¡No te rindas! La perseverancia es el mejor motor para continuar aprendiendo código. La satisfacción de haber logrado el objetivo compensará con creces esos malos momentos
Fuente: Fundación Telefónica
La IA para aprender a programar: Errores comunes que te llevan al fracaso¶
Guía práctica para alumnos de primer curso sobre el uso inteligente de herramientas de Inteligencia Artificial en el aprendizaje de la programación.

Ver vídeo sobre IA y aprender a programar
1. El error de la "Copia Ciega" (Copiar y pegar sin entender)
- El fallo: Pedirle a la IA el código del ejercicio completo, hacer Ctrl+C / Ctrl+V en el IDE y dar por hecha la tarea si funciona.
- Por qué te lleva al fracaso: Tu cerebro no procesa la sintaxis ni la lógica. Cuando te enfrentes a un examen en papel, a un entorno de evaluación sin conexión o a una prueba técnica, te quedarás completamente bloqueado.
- El consejo: Usa la IA como un tutor privado, no como un generador de deberes. Si le pides ayuda, exige que no te dé la solución directa.
Prompt sugerido: "No me des la solución en código. Explícame la lógica paso a paso o dame una pista para encontrar el error por mí mismo."
2. Confiar ciegamente en la IA (Las "alucinaciones")
- El fallo: Asumir que lo que devuelve el modelo de lenguaje es un estándar de oro o un código libre de errores.
- Por qué te lleva al fracaso: Las IA cometen errores, inventan métodos que no existen en las librerías o usan sintaxis obsoleta/en fase de vista previa sin avisar. Si no sabes depurar (debuggear), perderás horas intentando arreglar un fallo generado por la propia IA.
- El consejo: Comprueba siempre la documentación oficial o la consola de tu entorno de desarrollo. Si el compilador da un error, aprende a leer la traza de la excepción tú mismo antes de pegársela de inmediato a la IA.
3. Saltar el "Músculo de la Frustración"
- El fallo: Acudir a la IA tras llevar solo 30 segundos atascado en un bucle o en un error de compilación.
- Por qué te lleva al fracaso: Programar consiste en aprender a resolver problemas. La satisfacción y el aprendizaje real ocurren durante el proceso de pensar, probar hipótesis y fallar. Si externalizas ese esfuerzo mental, tu "músculo" de resolución de problemas no se desarrollará.
- El consejo: Aplica la Regla de los 15 minutos: si te encallas con un bug, pasa al menos 15 minutos intentando aislar el problema, usando trazas por consola (
print) o el depurador (debugger), y revisando tus apuntes. Solo si sigues bloqueado tras ese tiempo, consulta a la IA.
4. Usar soluciones avanzadas que no corresponden a tu nivel
- El fallo: Pedir un algoritmo simple (como ordenar un array) y entregar código que utiliza características avanzadas que aún no se han visto en clase (por ejemplo, Streams, expresiones Lambda o librerías externas complejas cuando se están estudiando bucles básicos).
- Por qué te lleva al fracaso: El profesor detectará de inmediato que el código no es tuyo y perderás la oportunidad de dominar las estructuras de control fundamentales (if, while, matrices) sobre las que se construye todo el software.
- El consejo: Pide a la IA que adapte sus respuestas a tu nivel de formación.
Prompt sugerido: "Explícame cómo resolver esto usando únicamente estructuras condicionales y bucles básicos, sin usar librerías ni características avanzadas."
5. No ejercitar el "Pensamiento Algorítmico"
- El fallo: Pedirle a la IA directamente: "Escribe un programa que haga X", en lugar de diseñar primero la solución en tu cabeza o en papel.
- Por qué te lleva al fracaso: La programación es 80% pensar la lógica y 20% escribir código. La IA se encarga de la sintaxis, pero tú debes ser el arquitecto. Si no sabes descomponer un problema grande en pasos pequeños (pseudocódigo), nunca sabrás qué pedirle a la IA ni cómo integrar diferentes partes.
- El consejo: Escribe siempre el pseudocódigo o diagrama en papel antes de tocar el teclado. Usa la IA al final únicamente para verificar tu planteamiento o para ayudarte a traducir tu idea a la sintaxis del lenguaje.
Resumen de buenas prácticas
| Mala práctica (Camino al fracaso) | Buena práctica (Uso inteligente) |
|---|---|
| Pedir el código directamente para resolver el ejercicio. | Pedir la explicación de un concepto o de un mensaje de error. |
| Copiar y pegar el código directamente al IDE. | Leer la sugerencia de la IA, cerrarla y escribir el código tú mismo. |
| Consultar a la IA a los 10 segundos de ver un error. | Intentar depurar con el debugger durante 15 minutos antes de preguntar. |
| Aceptar el código generado sin probarlo ni entenderlo. | Comentar línea por línea el código para demostrar su comprensión. |