Diseño de los Lenguajes de Programación
Profundizando en gramáticas, parsers y pequeños intérpretes. Aquí iré anotando los experimentos con DSLs y compiladores caseros.
Un registro donde hago una retrospectiva y agrupo lo aprendido en cada materia. Cada bloque es desplegable, dentro veréis un comentario estilo blog de lo que aprendí en cada materia.
Profundizando en gramáticas, parsers y pequeños intérpretes. Aquí iré anotando los experimentos con DSLs y compiladores caseros.
Proyecto centrado en pipelines gráficos y shaders. Añadiré capturas de los renders y notas sobre optimización en GPU.
Tratamiento de texto, modelos lingüísticos y detección de entidades. Reservo este bloque para scripts NLP y resultados de laboratorio.
Desde filtros clásicos hasta CNNs ligeras para reconocimiento. Documentaré datasets usados y métricas obtenidas.
Aterrizamos la parte lógica con ontologías ligeras y motores de inferencia. Me sirvió para describir dominios reales y automatizar conclusiones sin escribir más reglas de la cuenta.
Construimos agentes y pequeños sistemas expertos. Fue donde más practiqué cómo dividir la lógica de decisión y justificar por qué un agente actúa de cierta manera.
Armé pipelines de ML con Python y un poco de Julia. Me quedé sobre todo con la parte de limpieza de datos y cómo documentar experimentos para no perderme entre notebooks.
Volvimos a autómatas, lenguajes formales y complejidad. Dejé anotadas las demostraciones que más repetimos para poder reutilizarlas cuando diseño lenguajes o parsers.
Montamos motores de búsqueda sencillos y aprendí a evaluar ranking con métricas claras. Tengo aquí los benchmarks que hice comparando BM25 con variantes más modernas.
Practiqué planificación, estimaciones y reparto de roles. Apunté qué dinámicas nos ayudaron a llegar a tiempo y qué herramientas realmente usamos en equipo.
Hicimos investigación con usuarios reales, prototipos rápidos y pruebas de UX. Las conclusiones las aplico cada vez que maqueto algo para que se entienda sin manual.
Repasé arquitecturas distribuidas, tolerancia a fallos y patrones de escalado. Aquí guardo los diagramas que uso de base cuando pienso en despliegues repartidos.
Vimos el marco legal y protección de datos. También aprendí buenas prácticas de seguridad en Linux.
Nos centramos en operaciones, despliegues y monitorización. Vimos como gestionar servidores y servicios en de forma eficiente.
Consolidando análisis de complejidad y técnicas de optimización. Vimos diversos algoritmos clásicos y sus implementaciones.
Funcionamiento interno del hardware y pipeline de instrucciones.
Usamos OCaml para explorar programación funcional y lógica. Fué básico para entender diferentes enfoques de resolución de problemas.
Patrones, arquitectura y trabajo colaborativo. Fué la primera vez que usamos Java y programación orientada a objetos en profundidad.
Gestión de recursos, concurrencia y sistemas de archivos. Realizamos prácticas en C.
Modelado relacional, SQL y normalización. Fue esencial para entender cómo gestionar información de forma eficiente.
Protocolos, routing y servicios. Para las prácticas usamos Cisco Packet Tracer.
Vimos hilos, procesos y problemas clásico (Filósofos, Productores-Consumidores...). Aplicamos lo conocido en C y Eerlang.
Metodologías ágiles y documentación. También hicimos mockups y diagramas UML.
IA clásica, heurísticas y agentes simples. Vi conceptos básicos como búsqueda (Dijkstra, A*...), y algoritmos genéticos.
Introducción a C y resolución de problemas básicos. Fué mi primer contacto con un lenguaje de programación.
Aprendí sobre el ecosistema de Linux, comandos y la navegación báscica por terminal. También interioricé mejor conceptos básicos como binario y permisos.
Derivadas, integrales y aplicaciones. Reforcé conceptos matemáticos de bachillerato y aprendí conceptos más avanzados como series de Fourier.
Lógica proposicional, conjuntos y grafos. Fue mi primera toma de contacto con demostraciones formales.
Me sirvió para tener un conocimiento básico sobre cómo funcionan las empresas y conceptos de economía importantes en mi campo.
Repasé conceptos básicos de electrónica como Voltaje, Corriente y Resistencia y también aprendí sobre circuitos digitales simples y componentes electrónicos.
Profundicé en C y estructuras de datos básicas. Aquí empecé a entender mejor la lógica de programación y a resolver problemas más complejos con variadas estructuras.
Arquitectura básica, binario y ensamblador simple, resolví ejercicios que me ayudaron a entender cómo funciona un computador a bajo nivel.
Ya tenía conocimientos previos de estadística, pero aquí los reforcé y aprendí conceptos nuevos.
Profundicé en temas de álgebra lineal como matrices, determinantes y sistemas de ecuaciones. Esto fué básico para entender conceptos futuros en áreas como gráficos por computador y aprendizaje automático.