Módulo de Laboratorio

Sistema operativo,
terminal e IDEs

Profesor
Sandro Hurtado Requena
Hoja de ruta de hoy

Preparar el banco de trabajo

01

Sistema operativo

  • Ficheros y rutas
  • Variables y PATH
  • WSL2
02

La terminal

  • Comandos esenciales
  • Tuberías
  • Práctica: búsqueda del tesoro
03

IDEs y editores

  • Panorama
  • IA y nube
  • Qué usaremos
04

Python + VS Code

  • Instalación
  • Extensiones
  • Práctica: primer script
05

Fundamentos de Python

  • Tipos y cadenas
  • Control de flujo
  • Funciones y katas
Objetivo

Al salir de clase…

  • Te mueves por tu sistema solo con la terminal
  • Entiendes qué es el PATH y por qué a veces "no se encuentra" un comando
  • Sabes qué IDE usar para cada cosa
  • Tienes Python y VS Code funcionando
  • Escribes tus primeros programas en Python: tipos, bucles y funciones
checklist de salida
$ python --version
Python 3.13.x
$ code --version
1.10x.x
$ python comprobar.py
¡Tesoro encontrado!
01

El sistema operativo para quien programa

Conceptos

¿Qué hace un SO?

  • Procesos: reparte la CPU entre los programas que se ejecutan
  • Memoria: da a cada proceso su espacio y lo protege
  • Ficheros: organiza el disco en carpetas y archivos
  • Permisos: decide quién puede leer, escribir o ejecutar
Tus programaspython, VS Code, Docker, navegador…
Shell y aplicaciones del sistemabash, zsh, PowerShell · Explorador, Finder
Núcleo (kernel)Windows NT · XNU (macOS) · Linux
HardwareCPU · RAM · disco · red · GPU
Sistema de ficheros

Un árbol, tres dialectos

Windows

C:\
└── Users\
    └── ana\
        ├── Documents\
        └── proyectos\

Unidades (C:, D:) y separador \

macOS

/
└── Users/
    └── ana/
        ├── Documents/
        └── proyectos/

Una sola raíz / y separador /

Linux / WSL

/
└── home/
    └── ana/
        ├── Documents/
        └── proyectos/

Distingue mayúsculas: Datos.csv ≠ datos.csv

Rutas

Absolutas y relativas

  • Absoluta: desde la raíz. Funciona desde cualquier sitio
  • Relativa: desde la carpeta actual (pwd)
  • . carpeta actual · .. carpeta padre
  • ~ tu carpeta personal (home)
zsh — ~/proyectos
$ pwd
/Users/ana/proyectos
$ cat /Users/ana/proyectos/master/notas.txt  # absoluta
$ cat master/notas.txt                     # relativa
$ cd ..                                   # subo a /Users/ana
$ cd ~/proyectos/master                   # ~ = /Users/ana
Cuidado

Rutas que dan problemas

ruta real de este curso
~/Library/CloudStorage/OneDrive-UniversidaddeMálaga/KHAOS RESEARCH/DOCENCIA/MÁSTER BIG DATA/...

Espacios

Hay que poner comillas: cd "Mis datos". Muchas herramientas fallan con ellos.

Tildes y ñ

Problemas de codificación entre sistemas y en algunas librerías.

Carpetas sincronizadas

OneDrive o iCloud pueden romper entornos virtuales y repos de Git.

Consejo: trabaja en una ruta corta, sin espacios ni tildes y fuera de la nube, por ejemplo ~/proyectos/master.

Variables de entorno

El famoso PATH

  • Variables de entorno: pares NOMBRE=valor que heredan los programas
  • PATH es la lista de carpetas donde el shell busca los comandos
  • El shell recorre el PATH en orden y ejecuta el primero que encuentra
  • "command not found" suele significar que la carpeta no está en el PATH
bash / zsh
$ echo $PATH
/opt/homebrew/bin:/usr/bin:/bin
$ which python3
/opt/homebrew/bin/python3
PowerShell
> $env:PATH -split ";"
> Get-Command python   # o: where.exe python
Si usas Windows

CMD, PowerShell y WSL2

CMD

El intérprete clásico de MS-DOS. Solo por compatibilidad: no lo usaremos.

PowerShell

Shell moderno de Windows. Trabaja con objetos. Suficiente para casi todo el curso.

WSL2

Linux real dentro de Windows. Mismos comandos que en los servidores y lo que usa Docker Desktop por debajo.

wsl --install

Recomendación: Windows Terminal con PowerShell y Ubuntu (WSL2) en pestañas.

02

La terminal

Vocabulario

Terminal, shell y prompt

Emulador de terminal

La ventana donde escribes.

  • Windows Terminal
  • Terminal / iTerm2 (macOS)
  • La terminal integrada de VS Code

Shell

El programa que interpreta lo que escribes.

  • zsh: por defecto en macOS
  • bash: por defecto en Linux
  • pwsh: PowerShell

Prompt

El texto que indica que el shell espera una orden.

ana@portatil:~/proyectos$
PS C:\Users\ana>
Anatomía

Cómo se lee un comando

lsComandoqué programa
-laOpcionescómo se comporta
~/proyectosArgumentossobre qué actúa

-l formato largo · -a muestra también los ocultos · combinadas: -la
¿Dudas? ls --help · man ls · Get-Help Get-ChildItem

Chuleta

Comandos esenciales

Qué hagobash / zshPowerShell
¿Dónde estoy? · listar · movermepwd · ls -la · cd rutapwd · ls -Force · cd ruta
Crear carpeta · crear archivo vacíomkdir -p a/b · touch f.txtmkdir a\b · ni f.txt
Copiar · mover o renombrar · borrarcp · mv · rm -rcp · mv · rm -r
Leer un archivo · principio · finalcat · head -n 5 · tail -n 5cat · gc f -Head 5 · gc f -Tail 5
Buscar archivos por nombrefind . -name "*.csv"ls -Recurse -Filter *.csv
Buscar texto dentro de archivosgrep -r "texto" .Select-String -Pattern "texto" *.txt
Contar líneas · ¿dónde está un comando?wc -l · which python(gc f).Count · where.exe python
Superpoder

Redirecciones y tuberías

grep ERROR app.logfiltra líneas
|la salida de uno es la entrada del siguiente
wc -lcuenta líneas
> errores.txtguarda en archivo

> sobrescribe

echo hola > f.txt

>> añade

echo adiós >> f.txt

| encadena

history | grep git

Productividad

Trucos que ahorran horas

Tab
Autocompleta rutas y comandos
↑ ↓
Recorre el historial
Ctrl+R
Busca en el historial
Ctrl+C
Interrumpe el comando en curso
Ctrl+L
Limpia la pantalla (clear)

La terminal no tiene papelera

rm -r carpeta borra para siempre y sin preguntar.

Antes de borrar: pwd y ls. Nunca copies comandos de internet sin entenderlos.

Instalar software

Gestores de paquetes

winget

Viene con Windows 10/11.

winget search python
winget install Git.Git

Homebrew

El estándar en macOS (instálalo desde brew.sh).

brew search python
brew install git

apt

Ubuntu, Debian y WSL.

sudo apt update
sudo apt install git

Ventajas: una línea para instalar, actualizar todo a la vez y lo puedes automatizar en un script.

Práctica

Búsqueda del tesoro

Reglas: solo la terminal

  1. Descarga tesoro.zip del repositorio del curso
  2. Descomprímelo y entra en la carpeta tesoro
  3. Lee LEEME.txt y sigue las pistas
  4. Reúne 4 fragmentos y un número
  5. Guarda la respuesta en entrega/respuesta.txt
  • Practicarás: cd, ls -a, cat, find, grep, head, tail, |, >, mkdir y rm -r
  • Cada pista incluye la versión para PowerShell
  • La comprobación final se hace con Python al terminar la sesión
03

IDEs y editores

Panorama

Editores e IDEs

VS Code

Editor ligero y extensible: sirve para todo. Lo usaremos en el curso

PyCharm

IDE completo para Python: refactorización y depuración potentes

IntelliJ IDEA

El IDE de referencia para Java

JupyterLab

Notebooks para explorar datos y documentar análisis

Spyder

Estilo MATLAB/RStudio, con explorador de variables

Vim / Neovim

En la terminal. Imprescindible saber salir: Esc :q!

Editor = edita texto y se amplía con extensiones · IDE = viene con todo integrado (depurador, refactor, tests…)

Programar con IA

Asistentes de IA

En el editor

GitHub Copilot (gratis con GitHub Education), Cursor, Windsurf

Agentes

Claude Code, Codex, Gemini CLI: trabajan en la terminal y en el repo

Reglas del laboratorio

  • Úsala para aprender, no para no aprender
  • Si no sabes explicar el código, no es tuyo
  • Nunca pegues contraseñas, claves ni datos personales
  • Verifica: la IA se equivoca con total seguridad
Sin instalar nada

Entornos en la nube y clientes de BD

Google Colab

Notebooks con GPU gratis. Plan B si falla tu instalación

Kaggle

Notebooks, datasets y competiciones

Codespaces

VS Code completo en el navegador, desde un repo

DataGrip

Cliente SQL/NoSQL de JetBrains (licencia educativa)

DBeaver

Cliente universal de bases de datos, gratuito

Anaconda

Distribución de Python científico con cientos de librerías incluidas

En este módulo

Nuestro banco de trabajo

Terminalzsh · bash · PowerShell
VS Codeeditor + terminal integrada
Pythonscripts y notebooks
Gitcontrol de versiones
Dockercontenedores

¿Prefieres otro IDE? Adelante. Pero en clase todos los ejemplos serán con VS Code.

04

Instalar Python y configurar VS Code

Versiones

¿Qué Python instalo?

3.10fin de soporte
oct 2026
3.11solo parches
de seguridad
3.12solo parches
de seguridad
3.13estable y compatible
la del curso
3.14estable
la más reciente
3.15en pruebas
sale en oct 2026
  • Una versión recibe correcciones 2 años y parches de seguridad 3 más (5 años en total)
  • Las librerías de datos y de IA tardan unos meses en soportar cada versión nueva
Instalación guiada

Instalar Python 3.13

Windows

winget install Python.Python.3.13

Con el instalador de python.org, marca Add python.exe to PATH

macOS

brew install python@3.13

Sin Homebrew: instalador oficial de python.org

Linux / WSL

sudo apt install python3 \
  python3-venv python3-pip

La versión depende de tu distribución

Alternativa multiplataforma: uv python install 3.13. Permite tener varias versiones instaladas a la vez.

Comprobación

¿Funciona? Problemas típicos

  • Windows abre la Microsoft Store: desactiva los "Alias de ejecución de aplicaciones" de python
  • python no existe pero python3 sí: es normal en macOS y Linux
  • Windows: el lanzador py elige versión: py -3.13
  • Aparece una versión antigua: revisa el orden del PATH
terminal
$ python --version       # o python3
Python 3.13.x
$ which python           # where.exe python
$ python
>>> print("Hola, máster")
Hola, máster
>>> exit()
VS Code

Extensiones imprescindibles

ExtensiónPara qué
Python + PylanceEjecutar, depurar, autocompletar y comprobar tipos
JupyterNotebooks dentro de VS Code
RuffLinter y formateador rapidísimo
WSL · Remote - SSH · Dev ContainersTrabajar "dentro" de WSL, un servidor o un contenedor
Container Tools (Docker)Ver imágenes y contenedores y editar Dockerfiles
GitLensHistorial y autoría de cada línea
VS Code

Atajos clave

⇧⌘P
Paleta de comandos (¡todo está aquí!)
⌘P
Abrir un archivo por su nombre
⌃`
Mostrar u ocultar la terminal integrada
F5
Ejecutar con el depurador
⌥+clic
Varios cursores a la vez
⌘/
Comentar o descomentar líneas

En Windows y Linux: ⌘ → Ctrl · ⌥ → Alt

settings.json
{
  "editor.formatOnSave": true,
  "files.autoSave": "afterDelay",
  "[python]": {
    "editor.defaultFormatter":
      "charliermarsh.ruff"
  }
}

Abrir una carpeta desde la terminal: code .

Demo

Primer script y depurador

  • Selecciona el intérprete: paleta → Python: Select Interpreter
  • Ejecuta de dos formas: con el botón de ejecutar de VS Code o python hola.py en la terminal
  • Pon un breakpoint (clic a la izquierda del número de línea) y pulsa F5
  • Inspecciona variables y avanza paso a paso (F10/F11)
hola.py
import platform
import sys

nombre = input("¿Cómo te llamas? ")
print(f"Hola, {nombre}")
print(f"Python {sys.version.split()[0]}")
print(f"en {platform.system()}")
Práctica final

Cierra el tesoro con Python

Desde la terminal integrada de VS Code

  1. cd hasta tu carpeta tesoro
  2. code . para abrirla en VS Code
  3. Abre comprobar.py y lee qué hace
  4. Ejecútalo: python comprobar.py
  5. ¿Falla? Pon un breakpoint y depura
terminal
$ python comprobar.py
¡Tesoro encontrado! Respuesta correcta.

¿Has acabado? Ayuda a quien tengas al lado.

05

Fundamentos de Python

El lenguaje

Python en una diapositiva

  • Interpretado: no se compila, se ejecuta directamente
  • Tipado dinámico: el tipo lo tiene el valor, no la variable
  • Sangría obligatoria: los bloques se marcan con 4 espacios, no con llaves
  • Se ejecuta en el REPL, como script o en un notebook
Hola.java
public class Hola {
  public static void main(String[] args) {
    int x = 5;
    System.out.println("Hola");
  }
}
hola.py
x = 5
print("Hola")
Datos

Tipos básicos

TipoEjemploQué es
int42 · 1_000_000Entero, sin límite de tamaño
float3.14 · 1e-3Número con decimales
boolTrue · FalseVerdadero o falso
str"hola" · 'hola'Texto
NoneNone"Sin valor"
REPL
>>> x = 42
>>> type(x)
<class 'int'>
>>> x = "ahora soy texto"
>>> type(x)
<class 'str'>
>>> int("42") + 1     # conversión
43
Operadores

Calcular y comparar

Aritméticos

7 / 2    → 3.5
7 // 2   → 3    entera
7 % 2    → 1    resto
2 ** 10  → 1024

Comparación

x == 7   x != 7
x >= 5   x < 10
0 < x < 10   encadenada

Lógicos

x > 5 and x < 10
x < 0 or x > 100
not activo

Curiosidad: 0.1 + 0.2 da 0.30000000000000004. Los float no son exactos.

Texto

Cadenas e índices

P0 · -6
y1 · -5
t2 · -4
h3 · -3
o4 · -2
n5 · -1

Los índices empiezan en 0. Los negativos cuentan desde el final. En [inicio:fin] el fin no se incluye.

cadenas
s = "Python"
s[0], s[-1]     # 'P', 'n'
s[0:3]           # 'Pyt'
s[::-1]           # 'nohtyP'
len(s)            # 6

"  Hola ".strip().upper()  # 'HOLA'
"a,b,c".split(",")       # ['a', 'b', 'c']
"-".join(["2026", "10"])  # '2026-10'
Texto

f-strings

  • Una f delante de las comillas y las expresiones entre {}
  • Tras los :, el formato: decimales, porcentaje, separador de miles, alineación
  • input() lee del teclado y siempre devuelve texto
f-strings
nombre, saldo = "Ada", 1234.5678

print(f"Hola, {nombre}")
# Hola, Ada
print(f"Saldo: {saldo:.2f} €")
# Saldo: 1234.57 €
print(f"{1234567:,}")
# 1,234,567
print(f"{0.256:.1%}")
# 25.6%
Control de flujo

Tomar decisiones

if · elif · else
if nota >= 9:
    calificacion = "Sobresaliente"
elif nota >= 5:
    calificacion = "Aprobado"
else:
    calificacion = "Suspenso"
match
match comando:
    case "start":
        arrancar()
    case "stop" | "exit":
        parar()
    case _:
        print("Desconocido")

Los : y la sangría marcan dónde empieza y acaba cada bloque.

Control de flujo

Repetir: bucles

  • for recorre cada elemento de una secuencia
  • while repite mientras se cumpla una condición
  • enumerate() da posición y elemento. zip() recorre varias listas a la vez
  • break sale del bucle. continue pasa a la siguiente vuelta
bucles
for i in range(5):        # 0, 1, 2, 3, 4
    print(i)

for i, c in enumerate(ciudades):
    print(i, c)

for c, n in zip(ciudades, habitantes):
    print(f"{c}: {n}")

while cuenta > 0:
    cuenta -= 1
Reutilizar código

Funciones

  • Se definen con def y devuelven con return
  • Parámetros con valor por defecto y llamadas por nombre
  • Pueden devolver varios valores a la vez
  • La docstring explica qué hace: la muestra help()
funciones.py
def saludar(nombre, saludo="Hola"):
    """Devuelve un saludo personalizado."""
    return f"{saludo}, {nombre}"

saludar("Ada")                 # 'Hola, Ada'
saludar("Alan", saludo="Hey")  # 'Hey, Alan'

def min_max(numeros):
    return min(numeros), max(numeros)

minimo, maximo = min_max([4, 9, 1])
Herramienta

Notebooks en VS Code

  • Un notebook (.ipynb) mezcla texto, código y resultados
  • Shift+Intro ejecuta una celda
  • El kernel es el Python que ejecuta las celdas
  • Plan B sin instalar nada: Google Colab

Elegir el kernel

  1. Abre el .ipynb y pulsa Seleccionar kernel
  2. Entornos de Python → Crear entorno de Python
  3. Venv → elige tu Python 3.13
  4. Si lo pide, instala ipykernel

VS Code crea un entorno virtual (.venv): un Python independiente para esta carpeta.

Práctica

Notebook de fundamentos

fundamentos_python.ipynb

  1. Cópialo del repositorio a tu carpeta de trabajo
  2. Ábrelo en VS Code y elige el kernel
  3. Ejecuta las celdas en orden
  4. Sustituye los ... de cada ejercicio
  5. La celda de comprobación debe decir Correcto
  • Katas: FizzBuzz, palíndromos, Fibonacci, conversor de temperaturas y contador de vocales
  • Último apartado: encuentra un error con Depurar celda y F10
  • Los pasos detallados están en la guía, bloque 5
Hasta la próxima

¿Preguntas?

Guía y chuleta de la sesión en el repositorio del curso