Diseño de Software
Contenidos
Diseño de Software
Introducción: El diseño de software es una disciplina clave en el desarrollo de aplicaciones robustas, escalables y mantenibles. En este curso, aprenderemos los conceptos fundamentales de diseño de software en Python, desde la configuración del entorno hasta la implementación de pruebas, utilizando herramientas y técnicas modernas.
Motivación: ¿Por qué es importante el diseño de software? Un buen diseño de software permite escribir código limpio, fácil de entender y mantener, reduciendo el riesgo de errores y facilitando la colaboración en equipos de desarrollo. Implementar buenas prácticas de diseño es crucial para proyectos a largo plazo y para el éxito de cualquier equipo de desarrollo de software.
Configuración (Setup)
Entorno de Desarrollo: En esta sección, aprenderemos a configurar un entorno de desarrollo eficiente en Python. Veremos cómo instalar y gestionar diferentes versiones de Python con Pyenv, cómo crear y aislar entornos virtuales con Virtualenv, y cómo utilizar Poetry para la gestión de dependencias y la configuración de proyectos.
Control de Versiones: Git y GitHub son herramientas fundamentales para el control de versiones y la colaboración en proyectos de software. Aprenderemos a trabajar con Git para rastrear cambios en el código y colaborar de manera efectiva en proyectos utilizando flujos de trabajo modernos como Gitflow.
Programación
Principios SOLID: El diseño de software se basa en principios sólidos que facilitan la extensibilidad y el mantenimiento del código. Exploraremos los cinco principios SOLID y cómo aplicarlos en Python para escribir código más modular y fácil de probar.
Patrones de Diseño: Aprenderemos patrones de diseño comunes, como el Singleton, el Factory y el Observer, que nos ayudarán a resolver problemas comunes de diseño de software de manera estructurada y reutilizable.
Refactorización: Refactorizar es el proceso de mejorar la estructura de un código sin cambiar su funcionalidad. Veremos técnicas de refactorización que nos ayudarán a mantener nuestro código limpio y libre de deuda técnica, mejorando su calidad a lo largo del tiempo.
Ecosistema
PEP y Mejores Prácticas: Los Python Enhancement Proposals (PEP) son documentos que definen buenas prácticas y estándares en Python. Exploraremos los PEP más importantes, como el PEP 8 (guía de estilo) y el PEP 20 (el Zen de Python), y cómo integrarlos en nuestro flujo de trabajo.
Paradigmas de Programación: Python soporta múltiples paradigmas de programación, como la programación orientada a objetos (OOP), la programación funcional y la programación estructurada. Veremos cómo utilizar estos paradigmas para resolver diferentes tipos de problemas de manera efectiva.
Tipificación y Pydantic: Python admite anotaciones de tipos, lo que mejora la legibilidad y el mantenimiento del código. Aprenderemos a utilizar herramientas como Pydantic para realizar validación de datos y aprovechar los beneficios de la tipificación estática en Python.
Utilidades (Utilities)
Logging y Estilización: El registro de eventos (logging) es esencial para depurar y monitorear aplicaciones. Aprenderemos a configurar y utilizar el módulo logging
de Python para rastrear el comportamiento de nuestras aplicaciones. Además, cubriremos herramientas de estilización de código para mantener la consistencia en proyectos.
Automatización con Pre-commit: Pre-commit es una herramienta que nos permite automatizar tareas antes de realizar un commit. Veremos cómo configurarlo para ejecutar pruebas, verificar el estilo de código, y otras tareas útiles que aseguren la calidad del código en cada commit.
Pruebas (Testing)
Introducción a Pytest: Las pruebas son una parte esencial del ciclo de desarrollo de software. Aprenderemos a escribir pruebas unitarias con Pytest y a medir la cobertura del código para garantizar que todas las partes de nuestra aplicación estén bien probadas.
Mocking y Hypothesis: El mocking nos permite simular dependencias en pruebas, mientras que Hypothesis nos ayuda a generar datos de prueba automáticamente para mejorar la cobertura. Veremos cómo aplicar estas técnicas para escribir pruebas más robustas y confiables.
Documentación
Documentar con Mkdocs: La documentación es clave para que otros desarrolladores puedan entender y contribuir a nuestros proyectos. Aprenderemos a crear documentación estática con Mkdocs y a personalizarla con el tema Mkdocs-Material. También veremos cómo extender la funcionalidad de la documentación utilizando plugins de Mkdocs.
Personalización y Extensiones: Exploraremos opciones avanzadas para personalizar y extender la documentación de nuestros proyectos, agregando funcionalidades como búsqueda, navegación mejorada y soporte para múltiples idiomas.
Extras
Recursos y Herramientas Adicionales: Finalmente, exploraremos algunas herramientas adicionales y recursos útiles para mejorar aún más nuestro flujo de trabajo en el diseño de software, como linters, analizadores estáticos y herramientas de control de calidad del código.