Ir al contenido
learn

Python para desarrolladores C#/Java — Misión

Python está por todas partes alrededor del código C# y Java en el que trabajo. Guitar Alchemist ejecuta en Python un agente de gobernanza y un servicio de grafo de conocimiento, y entrena una cabeza de enrutamiento con scikit-learn. IX entrena su autoencoder disperso con PyTorch. TARS tiene un par de docenas de herramientas en Python, y el curso de aprendizaje automático de este sitio contrasta sus resultados en Rust con scikit-learn.

Puedo leer ese código, y parece sencillo, hasta que deja de parecerlo: una lista por defecto que recuerda la llamada anterior, un módulo que falla al importarlo, una anotación de tipo que nada comprueba, una dependencia que no está declarada en ningún sitio. Este curso aprende Python tal como se escribe hoy, con sus tipos, sus herramientas y sus pruebas, en lugar de traducir C# a Python línea por línea.

Te manejas bien con C# o Java: clases e interfaces, genéricos, colecciones y LINQ o streams, excepciones, una herramienta de build y un gestor de paquetes. Lees y escribes Python en scripts, notebooks o servicios, y quieres escribirlo como lo hacen los desarrolladores Python.

No se supone ninguna experiencia en Python. Las lecciones explican cada característica a partir de la característica de C# o Java que ya conoces, y muestran en qué se diferencian con programas que se ejecutan.

C# Java Python
Entorno de ejecución el CLR, a través de dotnet la JVM, a través de java CPython, el intérprete python, que compila a bytecode cuando se carga un archivo
Archivo de proyecto .csproj pom.xml, build.gradle pyproject.toml
Paquetes NuGet Maven Central PyPI, instalados en un entorno virtual por proyecto
Herramientas el SDK de .NET Maven, Gradle uv, o pip y venv
Tipos estáticos, verificados por csc estáticos, verificados por javac dinámicos en tiempo de ejecución; anotaciones opcionales verificadas por mypy o pyright
Valor ausente null, tipos de referencia anulables null, Optional<T> None, un objeto, y X | None en las anotaciones
Parámetros posicionales, con nombre, valores por defecto constantes solo posicionales, sobrecargas posicionales, por palabra clave, valores por defecto evaluados una sola vez, *args y **kwargs
Bloques llaves llaves sangría

Las lecciones usan código real como material, clonado en una carpeta de pruebas y fijado en un commit:

Las lecciones reducen las líneas que citan a archivos que se ejecutan por sí solos, e indican de dónde viene cada una. Lo que encontré en esos repositorios, con una forma de reproducirlo, está en el diario.

  • configurar un proyecto Python con uv, fijar su intérprete y sus dependencias, y ejecutarlo de la misma manera en Windows, Linux y macOS;
  • explicar qué son en Python un nombre, un objeto y un import, y predecir cuándo dos nombres comparten un mismo objeto;
  • elegir entre una lista, una tupla, un dict y un set, y escribir comprensiones donde C# usaría LINQ;
  • diseñar firmas de funciones con parámetros solo por palabra clave y solo posicionales, y escribir decoradores que conservan la firma que envuelven;
  • modelar datos con dataclasses y protocolos, y anotar el código para que mypy detecte lo que habría detectado csc;
  • gestionar errores y recursos con excepciones y with;
  • estructurar un paquete, probarlo con pytest y mantenerlo limpio con Ruff en CI;
  • escribir iteradores, generadores y código asíncrono, y saber cuándo convienen los hilos, los procesos o asyncio;
  • leer código NumPy y pandas, y servir una API con FastAPI.
# Lección Ya conoces
1 Instalar y ejecutar Python dotnet, java, NuGet, Maven y Gradle, global.json, archivos de bloqueo
2 El modelo de ejecución tipos por referencia y por valor, == y Equals, null, ámbito de bloque, constructores estáticos
3 Tipos integrados y colecciones List<T>, Dictionary, HashSet, arrays, LINQ, streams, decimal
4 Funciones argumentos opcionales y con nombre, params, varargs, lambdas y closures, atributos y anotaciones
5 Clases: dataclasses, propiedades, métodos especiales, herencia y protocolos (próximamente) clases, records, IEquatable, ToString, interfaces
6 Anotaciones de tipo: mypy y pyright, genéricos, Protocol, TypedDict, lo que nunca se comprueba en tiempo de ejecución genéricos, tipos de referencia anulables, interfaces
7 Errores y recursos: excepciones, with y gestores de contexto excepciones, using, try-with-resources
8 Módulos y paquetes: imports, __init__.py, estructura del proyecto, publicación ensamblados, espacios de nombres, paquetes NuGet, JAR
9 Pruebas: pytest, fixtures, parametrización, Hypothesis xUnit, JUnit, FsCheck, jqwik
10 Iteradores y generadores: yield, itertools IEnumerable, yield return, streams
11 Concurrencia: el GIL y el free-threading, asyncio, concurrent.futures, multiprocessing Task, async/await, grupos de hilos, CompletableFuture
12 Datos y cálculo: NumPy, pandas o Polars, y una mirada honesta al ecosistema de ML arrays, Span<T>, ML.NET
13 Herramientas de calidad: Ruff, formateo, pre-commit, CI analizadores, dotnet format, Checkstyle, Spotless
14 Servicios: FastAPI, comparado con las minimal APIs de ASP.NET Core y con Spring WebFlux ASP.NET Core, Spring
— Diario

El curso de aprendizaje automático y el curso sobre la IA de GA usan Python como contraste; la lección 12 enlaza a ellos en lugar de repetirlos.